设计一个系统定时器(可编程逻辑定时器)
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 上.时钟应该是通用的。
单次定时器包括:
n-bit二进制计数器
由输入时钟源驱动 CP
并由启动输入复位。随着每个时钟脉冲递增其值。复位输入应连接到定时器启动信号。
n-bit LATCH 寄存器
存储计时器间隔值(您的每个通道持续时间 D0..D3
)
n-bit比较器
比较计数值和区间值。等位的 XOR 为零,因此如果 LATCH 寄存器值和计数器都在一起,则结果为 0
值相同。
输出触发器
记住计时器到期(对于非脉冲模式操作)输出是你的 TA.TB,TC,TD
启动脉冲也应该重置电路上的 RS 我通过WR 但我怀疑您将单独使用 Start 信号...
像这样:
您需要考虑使用过的 IC 的否定和辅助输入,以使其正常工作(有些否定了 WR,有些则没有……所有引脚都一样,所以请务必检查数据表)。所以不要忘记添加芯片selects和输出使能信号到它们的工作状态。
多通道定时器
好吧,您只需为每个连接到同一个计数器的每个通道添加 LATCH 和比较器。棘手的部分是通道 selection 和起始部分。您需要在设置 D0..D3
时将解码器 1 from 4
添加到 select 正确的 LATCH。要为那部分画一个电路,我需要更多地了解这个的目的......另外,如果你只手动设置间隔,那么你可以使用 DIP 开关而不是 LATCH 和select离子电路使一切变得更加简单。
以上所有内容都可以仅由 NAND 或 NAND 门而不是具体的 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 信号)。
系统定时器
计算机包含一个包含可编程通道的定时器。可编程的 通道意味着不同持续时间的计时器。如何设计这样的电路有四个 可编程通道,每个最初禁用。一个使能输入,两个通道select 输入和 4 条持续时间输入线可以将任何通道设置为从 1 到给定的持续时间 15. 零表示禁用通道。四个输出线对应通道和 一旦相应的定时器到期,就会被设置为高电平。
输入 时钟脉冲 CP
输入可用 IA
频道SelectCS0、CS1
持续时间 D0…D3
输出
计时器到期:TA、TB、TC、TD
我想使用分立逻辑 IC,如触发器、逻辑门、解码器、多路复用器、编码器,etc.Data 输入将使用按钮(按钮)完成,输出应显示在 LED 上.时钟应该是通用的。
单次定时器包括:
n-bit二进制计数器
由输入时钟源驱动
CP
并由启动输入复位。随着每个时钟脉冲递增其值。复位输入应连接到定时器启动信号。n-bit LATCH 寄存器
存储计时器间隔值(您的每个通道持续时间
D0..D3
)n-bit比较器
比较计数值和区间值。等位的 XOR 为零,因此如果 LATCH 寄存器值和计数器都在一起,则结果为
0
值相同。输出触发器
记住计时器到期(对于非脉冲模式操作)输出是你的
TA.TB,TC,TD
启动脉冲也应该重置电路上的 RS 我通过WR 但我怀疑您将单独使用 Start 信号...
像这样:
您需要考虑使用过的 IC 的否定和辅助输入,以使其正常工作(有些否定了 WR,有些则没有……所有引脚都一样,所以请务必检查数据表)。所以不要忘记添加芯片selects和输出使能信号到它们的工作状态。
多通道定时器
好吧,您只需为每个连接到同一个计数器的每个通道添加 LATCH 和比较器。棘手的部分是通道 selection 和起始部分。您需要在设置 D0..D3
时将解码器 1 from 4
添加到 select 正确的 LATCH。要为那部分画一个电路,我需要更多地了解这个的目的......另外,如果你只手动设置间隔,那么你可以使用 DIP 开关而不是 LATCH 和select离子电路使一切变得更加简单。
以上所有内容都可以仅由 NAND 或 NAND 门而不是具体的 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 信号)。