Skip to content

Chapter 3 Part 1: 触发器 flip flop ​

(共 46 页)

时序逻辑设计(引言) ​

众所周知,数字逻辑主要分为两大类,一个是 组合逻辑(Combinational Logic),另一个是 时序逻辑(Sequential Logic)。

组合逻辑电路就像是实现了一个简单的布尔函数。组合逻辑电路的输出值,完全取决于输入的值。当输入值发生改变,输出值也会立刻改变(如果忽略掉延迟的话)。

时序逻辑电路就不一样了。通常时序逻辑电路会包含 触发器(flip flop)。时序逻辑电路的输出与时间有关,是由输入值和当前状态共同决定的。

时序逻辑电路由时钟信号触发。若没有时钟信号,那么无论输入值如何变化,电路中的触发器都会保持当前的状态。

触发器是时序逻辑电路的基本组成部分。不同类型的触发器也具有不同的触发行为和输入组合。

SR 锁存器(Set Reset Latch)(NAND 实现) ​

SR 锁存器,是基本 RS 触发器的别称。

原理 ​

接下来假设每一个门的延迟都是 。

首先考虑这样的一个电路图

image-20221006152726511

假如初始状态下,全都是零;先后把 的两个输入值都拨到 且 的状态,那么输出就会是:,。不难发现,只要输入的值不再改变,那么两个输出的值就永远也不会变化。

但是假如更改一下输入的值(此处拨动 A 开关),那么这个电路的输出就会发生一点变化。一个单位时间的延迟后 的输出改变,两个单位延迟后 的输出也改变,然后达到稳定状态(stable)。

然而就算这时候再把 A 重新拨为 1,输出的值依然是不会改变的,依然处于稳定状态(模拟一下这个电路的过程就明白了)。

换句话说, 在计时器开始之前,以及 时刻,输入的值都是一样的(),然而这两个时刻的输出不同。所以称这个电路是 双稳态(bistable) 的。

image-20221006153132330

总结的讲,如果此时此刻,,那么这个电路其实是能「回忆起」上一个为零的输入是哪一个。假如 ,就说明刚才 是 0;反过来,假如 ,那么上一个是 0 的输入就是 。当然,如果此时此刻 ,输出就直接表示当前那个输入为零:状态表如下

image-20221006153935292

那么假如 会怎么样?

的时候,会输出 。此时如果再同时把 和 改成 1,那么两个 NAND 门的四个输入就都是 1,从而 和 同时变为 0。接下来有趣的事情发生了:NAND 门不断地循环输出 0 和 1,即这一时刻输出俩 0,下一时刻输出俩 1,再下一时刻又变成了俩 0,如此往复…

为了方便起见,不如干脆定义:这个电路不允许 的输入。于是状态表变成了这个样子:

image-20221006160110671

改造 ​

观察发现, 和 的值永远是互补的。因此不妨用字母 代替 ,那么 就表示 。

观察还发现,当 的取值变成 的时候,电路的输出不会发生变化;然而直觉上好像 的时候电路不变更正常一些。因此以可以在输入端给 和 分别接上俩 NOT 门(不过这样就增加了一个单位延迟)。同时, 改名 ,表示 set; 改名 ,表示 reset。

image-20221011143512127

那么:

  • 的时候,经过 NOT 门之后对应刚才真值表的 ,此时结果是 ,即设一(set)。
  • 的时候,结果是 ,即清零(reset)
  • ,电路输出没有变化,即保持上一个输入的输出值
  • ,不允许这样的输入

同时可以推导出 的方程:。(此处方程与 EE103 数字系统有差异,但与维基百科一致,应该是 EE103 错了)

image-20221006161517907

延迟与时钟信号 ​

另外,根据上面的电路图和时间轴,可以得知:

  • 如果要设一,需要保持 至少 两个 单位延迟时间
  • 如果要清零,需要保持 至少 两个 单位延迟时间

也就是说设一和清零的操作,都需要保持相应的输入状态(激活)至少两个单位时间,才能让 获得期望的输出。 获得期望输出之后, 和 就可以都灭活了。

然而,虽然 仅需两个单位延迟时间,但是 需要三个单位延迟时间才能得到。尽管如此,灭活还是仅需等待两个单位时间,因为灭活后不会影响到 的值。

SR 锁存器可以在输入端加上一个时钟信号 , 与 , 分别 NAND 起来之后再传给后面(省略了 NOT 门)。

需要注意,时钟信号 的一个取值,必须持续至少 的时间;同时, 的时候, 两个输入不应发生改变。这样才能保证电路的正常运行。

image-20221006192711808

加入时钟信号后,特征方程就可以改为 了。

JK 触发器 ​

JK 触发器和触发器中最基本的 RS 触发器结构相似,其区别在于,RS 触发器不允许 与 同时为 ,而 JK 触发器允许 与 同时为 。当 与 同时变为 的同时,输出的值状态会反转。也就是说,原来是 的话,变成 ;原来是 的话,变成 。

观察 JK 触发器的结构会发现,其实就是在输出端的交叉回授(feedback),也就是把 的值回授给 , 回授给 。当然了,从计算出 和 再到回授的过程,是有一定延迟的。

为了与 RS 触发器进行区分,以后将 改名 , 改名 。

image-20221006193325877

变化示意图:

image-20221011150231550

由上图可知,必须保证时钟信号的时间范围在 之间,否则输出值会回过头过来影响输入的值。即, 的时候可以撤走时钟信号, 的时候时钟信号必须撤走,否则就坏大事儿了!

若能保证时钟信号的持续时间在此范围内,则 JK 触发器的状态表如下

image-20221011150304262

那么,就需要设计一种电路,能提供精准时间范围的时钟信号。

(边沿触发)脉冲整形电路 Pulse Shaper Circuit ​

image-20221011151517937

像这样。时钟信号未被激活的时候,即 的时候,上路值是 ,下路值是 ,这时候最后的 AND 门输出的 。

一旦 变成了 ,下路立即变成 ,而上路要等 的时间,所以这时候 会有 的激活时间(前提是 也要保持至少 激活状态)。 时间过后, 变成 。

也就是说,上路的值的变化,总是比下路要慢 的时间。

于是,这就构造出来了一个,最长维持 的时钟信号。

image-20221011154006564

如果把这种东西当作时钟信号输入给 JK 触发器,那么这就是一个 边沿触发(edge-triggered) 的 JK 触发器,即仅在时钟的有效边沿期间接受 和 输入。

上面这个图太理想化了。实际上, 和 之间不是瞬间变化的,而是逐渐的。比如,实际情况很可能是这个样子,于是实际的时钟信号时间会很有可能不在 范围内。

image-20221011154052311

(脉冲触发)主从 JK 触发器(Pulse Triggered Master Slave JK Flip Flop) ​

上述问题,可以用主从触发器来解决。主从触发器,顾名思义,是由两个触发器构成的,一个是 主触发器(master),另一个是 从触发器(slave)。它们之间用一个反相器(或同输入的 NAND 门)来连接时钟信号:

image-20221011162042814

这种结构非常巧妙。最开始,认为时钟信号 是 。当时钟信号 激活的时候,从触发器接受到的时钟信号就会被置零,于是从触发器就处于未激活的状态。即:此时仅有主触发器会做出响应,从触发器会保持之前的状态不变。(时钟信号需要保持激活状态至少 的时间)

image-20221011162728809

当时钟信号从高电平恢复到低电平的时候,主触发器被禁用,从触发器激活,并且从触发器的输出会被置成主触发器输出,也就是保持一致。最后,我们选取从触发器的输出作为最终输出。(时钟信号需要保持未激活状态至少 的时间)

image-20221011162742677

由此可见,在一个时钟周期里,输出端的状态只可能改变一次,而且发生在时钟信号 的下降沿,因为只有在这个时候从触发器才会被激活。

知乎上说,边沿触发的输出,取决于边沿时刻的输入信号;而脉冲触发的输出,取决于整个高电平时间内,主触发器的状态。

(电平触发)D 锁存器(D Latch) ​

D 锁存器是双稳态(bistable)的,类似于 SR 锁存器,只不过是永远维持 ();此外,加入了一条激活线(enable line) ,类似于时钟信号的作用。

当激活线 时,输出 取决于 的值。反之,若 ,则输出 维持不变。

image-20221011174023977

状态表如下:

image-20221011174325243

(边沿触发)T 触发器 ​

就是 永远相等的 JK 触发器。

T 触发器的逻辑功能是:当 时,每来一个时钟信号,状态就翻转一次; 则维持不变。

电平触发、边沿触发、脉冲触发的区别 ​

个人理解:

  • 电平触发,就是当时钟信号激活的时候,输出随时跟随输入改变。
  • 边沿触发,就是仅时钟信号上升沿到达的时候,输出才会改变,且仅取决于当前的输入。图示上,在时钟信号的位置用小三角标记表示边沿触发。
  • 脉冲触发,就是仅时钟信号下降沿到达的时候,输出才会改变,但这个输出取决于整个时钟信号激活周期中,主触发器的最终状态,而不是下降沿到达的输入的瞬间状态。图示上,在输出信号的位置用直角符号表示脉冲(也叫延迟)触发。

RS,JK,T,D 触发器的特性方程 ​

  • SR:
  • JK:
  • T:
  • D:

状态表和激励表(state table,excitation table) ​

两者差不多就是一正一反的关系。

状态表,用于描述触发器在当前输入组合下的响应。比如前面那些,左边是输入,最右边是输出的,都叫状态表。

image-20221011174822898

激励表则相反。激励表通常左边是输出,右边是输入,也就是:我想要达到目标的输出值,需要什么样的输入值。

image-20221011174825919