设计一个系统定时器(可编程逻辑定时器)

Designing a System Timer(Porgrammable Logic Timer)

系统定时器

计算机包含一个包含可编程通道的定时器。可编程的 通道意味着不同持续时间的计时器。如何设计这样的电路有四个 可编程通道,每个最初禁用。一个使能输入,两个通道select 输入和 4 条持续时间输入线可以将任何通道设置为从 1 到给定的持续时间 15. 零表示禁用通道。四个输出线对应通道和 一旦相应的定时器到期,就会被设置为高电平。

输入 时钟脉冲 CP

输入可用 IA

频道SelectCS0、CS1

持续时间 D0…D3

输出

计时器到期:TA、TB、TC、TD

我想使用分立逻辑 IC,如触发器、逻辑门、解码器、多路复用器、编码器,etc.Data 输入将使用按钮(按钮)完成,输出应显示在 LED 上.时钟应该是通用的。

单次定时器包括:

  1. n-bit二进制计数器

    由输入时钟源驱动 CP 并由启动输入复位。随着每个时钟脉冲递增其值。复位输入应连接到定时器启动信号。

  2. n-bit LATCH 寄存器

    存储计时器间隔值(您的每个通道持续时间 D0..D3

  3. n-bit比较器

    比较计数值和区间值。等位的 XOR 为零,因此如果 LATCH 寄存器值和计数器都在一起,则结果为 0值相同。

  4. 输出触发器

    记住计时器到期(对于非脉冲模式操作)输出是你的 TA.TB,TC,TD 启动脉冲也应该重置电路上的 RS 我通过WR 但我怀疑您将单独使用 Start 信号...

像这样:

您需要考虑使用过的 IC 的否定和辅助输入,以使其正常工作(有些否定了 WR,有些则没有……所有引脚都一样,所以请务必检查数据表)。所以不要忘记添加芯片selects和输出使能信号到它们的工作状态。

多通道定时器

好吧,您只需为每个连接到同一个计数器的每个通道添加 LATCH 和比较器。棘手的部分是通道 selection 和起始部分。您需要在设置 D0..D3 时将解码器 1 from 4 添加到 select 正确的 LATCH。要为那部分画一个电路,我需要更多地了解这个的目的......另外,如果你只手动设置间隔,那么你可以使用 DIP 开关而不是 LATCH 和select离子电路使一切变得更加简单。

以上所有内容都可以仅由 NANDNAND 门而不是具体的 IC 执行。为此,您需要使用 Karnaugh Maps 和布尔代数。

我用原始门做了一段时间,因为现在使用起来更容易更便宜更快 MCU/FPGA 所有这些所以当心我可能会错过一些东西微不足道的(比如某处的否定门)......无论如何,这应该是定时器背后的想法

顺便说一句,C++ 表示是:

int cnt=0,D=?;
bool TA=0;
for (;;)
 {
 if (cnt==D) TA=1;
 cnt=(cnt+1)&15;
 }

[Edit1] 4通道版本

这是基于上面的文字。还有另一种组件较少的选项,它使用 4 个半字节 RAM 模块而不是 LATCH 寄存器,解码器由单个定时器组成,通过 4 倍 CP 倍频时钟连续循环遍历所有通道(例如通过 XORing 延迟 CP 信号)。