关于时序逻辑的一些思考记录

SR锁存器

之前一直都没怎么理解SR触发器的锁存和不稳定原理,但是在仔细思考研究其电路实现和真值表之后,发现遇事不决果然还是得研究真值表。

其实SR触发器实现Set,Reset和锁存的本质就是利用真值表里的0 0项,因为只有0 0才能设置为1,因此,如果一端是0 0, 那么另一端根据内反馈电路,必定有一个输入是1,而只要有一个输入为1,那这一端的输出就必定是0。形成完美闭环。

Set和Reset其实就是看哪一端的输入不是1,如果两端都不是1,则结果不变,形成锁存的效果。

而至于为什么两个输入都是1会不稳定,指得其实是当两个输入全为1时,两个输出的值会一直变化,没有一个确定的值。

试想一下

  • 如果两个输入都是1,然后变为两个输入都是0,此时两个或非门都会变为1,但是谁先变取决于门延迟,电路延迟等其他因素。因此,如果重复运行电路很多次,就会发现每一次的结果都不一样,有时是门1的值是1,有时是门2。
  • 如果两个输入是正常的值,无论哪一个逻辑门先变,结果将会是一样的。比如门1输入是1,门2输入是0,如果门1先变,根据之前的结论,门1的输出绝不可能是1。所以门2的输入只能是0 0,这也就说明门1的输入是1 1。如果门2先变,还是根据之前结论,门2的其中一个输入是门1的输出,而门1的输出不可能是1。所以门2的输入只能是0 0,输出1。完美闭环。

情况1 - 亚稳态

Nor gate 1 Nor gate 1
输入1 1(外部输入) 1(外部输入)
输入2 0(内部反馈) 0(内部反馈)
输出 0 0
输入1 - 第二轮 0(外部输入) 0(外部输入)
输入2 - 第二轮 0 0
输出 - 第二轮 0 or 1(谁先)? 0 or 1(谁先)?

情况1 - 亚稳态

Nor gate 1 Nor gate 1
输入1 1(外部输入) 1(外部输入)
输入2 0(内部反馈) 0(内部反馈)
输出 0 0
输入1 - 第二轮 0(外部输入) 0(外部输入)
输入2 - 第二轮 0 0
输出 - 第二轮 0 or 1(谁先)? 0 or 1(谁先)?

情况1 - 稳态 - 门1先变

Nor gate 1 Nor gate 1
输入1 1(外部输入) 0(外部输入)
输入2 0 / 1(内部反馈,无论是0还是1都不影响输出) 0(内部反馈,来自门1输出)
输出 0(只可能是0) 1

D锁存器

D锁存器相比SR锁存器,改良了输入有可能都为1的亚稳态问题。具体实现方法是在SR锁存器的SR输出外接一些逻辑门并使用新的两个输入D和WE,D是输入,并联两个与门,其中一个串联一个非门。WE是使能,并联两个与门。使能用于实现锁存,D用于Set和Reset。非常巧妙

  • 带复位和使能功能的D锁存器

D触发器

D触发器其实就是两个D锁存器串联,并搭配一个互反的使能型号。当上升沿的低电平到来时,第一个锁存器保存数据,第二个不变。高电平到来时,第一个锁存器传输数据给第二个锁存器,然后第二个锁存器保存数据。

  • 带复位和使能功能的D触发器

寄存器

寄存器其实就是很多个触发器组合在一起,这些触发器共享同一个复位和时钟信号。

PS
之后为了演示方便,已经实现的结构将直接使用现成的器件。
  • 带复位的4位寄存器

计数器

我们已经实现了一个非常简单的4位寄存器,有了寄存器和加法器,便能实现计数器,原理很简单。就是将每一次的加法器结果保存在寄存器里,然后下一次加法调用之前的结果。这里我直接用了一个现成的7段LED译码器,不然空间放不下。具体实现如下:

数列求和电路

有了寄存器和加法器,也能实现其他一些比较高级的数学操作,比如数列求和。这里直接使用之前的计数器和一个加法器即可。实现如下:

电子时钟

费大力气硬是又用寄存器,又用很复杂的逻辑门,回过头来发现为什么直接使用计数器和比较器呢?发现小丑竟是我自己。原理实现非常简单,就是计数器计数到59之后,比较器输出到下一个计数器,然后下一个计数器加1实现分钟计时。Falstad没有比较器,因此直接使用logism设计。完美运行。

enter image description here

✍️ 作者:𝓜.𝓦𝓱𝓲𝓽𝓮

📄 共享协议: CC 4.0协议

🔗 原文链接: https://allomaker.com/archives/guan-yu-shi-xu-luo-ji-de-yi-xie-si-kao-ji-lu

评论