bitGateLab Digital · 学习
中文(简体)
打开模拟器

学习 › 第 9 讲

锁存器与触发器:SR、D、JK 和 T 分步详解

阅读约 7 分钟 · bitGateLab 团队

到目前为止,你的电路的输出只取决于当时的输入。要计数、保存数据或记住一个过程进行到了哪一步,就需要存储功能,而最小的存储单元就是锁存器。本文将带你用两个门搭出锁存器,把它改造成边沿触发的触发器,并学会使用设计计数器和状态机时要用到的各种表。

SR 锁存器

两个 NOR 门,各自的输出交叉接到对方的输入,就构成了 SR 锁存器。正是反馈产生了记忆:输出一旦取得某个值,就会自己保持下去。

≥1 ≥1 R S Q Q̄
用 NOR 门构成的 SR 锁存器:Q = NOR(R, Q),Q = NOR(S, Q)。没有圆点的交叉处不相连。
SRQ 的次态功能
00Q保持
010复位
101置位
11—禁止

当 S = R = 1 时,两个 NOR 门都输出 0,于是 Q 和 Q 不再互补。更糟的是:如果随后两个输入同时回到 0,最终状态取决于哪个门更快。所以这种组合是禁止的。在满足约束条件 S·R = 0 的前提下,它的特性方程是 Q+ = S + R·Q。

用 NAND 门则得到 SR 锁存器,其输入为低电平有效:11 保持,01 使 Q = 1,10 使 Q = 0,而 00 是禁止的组合(两个输出都为 1)。

D 锁存器:使能期间是透明的

为了消除禁止的组合,增加一个使能输入 EN,并产生 S = D·EN 和 R = D·EN。由于 S 和 R 永远不会同时为 1,问题就消失了。它的行为很简单:

透明性正是锁存器的弱点。如果把锁存器的输出经过逻辑电路接回它自己的输入,那么在 EN = 1 期间信号可能绕上好几圈,结果无法预料。同步时序电路需要的是一种只在某一瞬间采集数据的器件。

边沿触发的触发器

上升沿触发的 D 触发器只在时钟从 0 变到 1 的那一瞬间把 D 复制到 Q,其余时间不理会 D。它由两个级联的 D 锁存器(主锁存器和从锁存器)构成,两者的使能信号相反:时钟为 0 时,主锁存器跟随 D,从锁存器关闭;时钟上升时,主锁存器关闭,从锁存器把采集到的值送到输出。它的方程最简单:Q+ = D。

在基本触发器的基础上,还定义了另外两种在设计中很常用的类型:

JKQ+功能
00Q保持
010复位
101置位
11Q翻转

例:一个 JK 触发器从 Q = 0 开始,依次经历五个时钟沿,(J, K) = (1,0)、(0,0)、(1,1)、(0,1)、(1,1)。对每个时钟沿应用 Q+ = J·Q + K·Q:

  1. (1,0),Q = 0:1·1 + 1·0 = 1。
  2. (0,0),Q = 1:0·0 + 1·1 = 1(保持)。
  3. (1,1),Q = 1:1·0 + 0·1 = 0(翻转)。
  4. (0,1),Q = 0:0·1 + 0·0 = 0。
  5. (1,1),Q = 0:1·1 + 0·0 = 1(翻转)。

每个时钟沿之后 Q 的序列:1、1、0、0、1。

激励表

特性表回答的是:“给定输入,Q 会变成什么?”设计时需要回答相反的问题:“我想让 Q 从这个值变成那个值,应该加什么输入?”这就是激励表,每设计一个计数器或状态机你都要用到它。

Q → Q+DTJ KS R
0 → 0000 X0 X
0 → 1111 X1 0
1 → 001X 10 1
1 → 110X 0X 0

JK 触发器的那些 X 正是它往往能得到更短表达式的原因:要从 0 变到 1,K 取 0(置位)还是 1(翻转)都无所谓,这种自由度可以在卡诺图中加以利用。

建立时间、保持时间与最高频率

实际的触发器要求 D 在时钟沿之前保持稳定一段时间,即建立时间(setup,tsu),并在时钟沿之后继续保持稳定一段时间,即保持时间(hold,th)。如果 D 在这个窗口内发生变化,输出可能会在一个中间电平上停留一会儿才确定下来:这就是亚稳态。此外,时钟沿之后输出要经过延迟 tCQ 才会改变。

在同步电路中,信号从一个触发器出发,穿过组合逻辑,到达下一个触发器。时钟的最小周期为:

Tmin = tCQ + t逻辑 + tsu

例:tCQ = 15 ns,最长的组合路径延迟为 20 ns,tsu = 5 ns。

Tmin = 15 + 20 + 5 = 40 ns,所以 fmax = 1 / 40 ns = 25 MHz。

检查保持时间要用最短路径:如果 tCQ 的最小值为 5 ns,且两个触发器之间没有逻辑电路,新数据就在时钟沿之后 5 ns 到达。当 th = 3 ns 时满足要求,因为 5 ns ≥ 3 ns。

建立时间限制了工作频率,降低时钟频率就能解决。保持时间与频率无关:如果不满足,即使在很低的速度下电路也会出错。

常见错误

在模拟器中试一试

锁存器和触发器的区别在时序图上一目了然。把两者都搭出来,并给它们加上同一个信号。

  1. 放置两个 NOR 门,把每个门的输出接到另一个门的一个输入;再添加输入 S 和 R 以及两个指示灯。
  2. 改变 S 和 R,验证表中的四行,包括禁止的那一行,并观察到 Q 和 Q 同时为 0。
  3. 放置一个 D 锁存器和一个 D 触发器,给两者接上同一个数据输入和同一个时钟或使能信号。
  4. 打开时序图,在时钟为 1 期间多次改变 D:锁存器跟随这些变化,而触发器只取上升沿时的值。
  5. 换成 J = K = 1 的 JK 触发器再做一遍,观察它的输出频率是时钟频率的一半。

练习

  1. 一个 T 触发器从 Q = 1 开始,在四个时钟沿上依次收到 T = 1、1、0、1。Q 依次取哪些值?
    答案

    Q+ = T ⊕ Q:1⊕1 = 0,1⊕0 = 1,0⊕1 = 1,1⊕1 = 0。序列:0、1、1、0。

  2. 要让触发器从 Q = 1 变到 Q = 0,J 和 K 应取什么值?
    答案

    J = X,K = 1。K = 1 且 J = 0 时为复位;J = K = 1 时为翻转。两种选择都使 Q 变为 0。

  3. 已知 tCQ = 12 ns,tsu = 4 ns,期望的工作频率为 40 MHz,触发器之间的逻辑电路最多可以有多大的延迟?
    答案

    T = 1 / 40 MHz = 25 ns。t逻辑 ≤ 25 − 12 − 4 = 9 ns。

  4. 写出 D 的表达式,使 D 触发器的行为与 JK 触发器相同。
    答案

    D = J·Q + K·Q,这正是 JK 触发器的特性方程。

有了这些基本部件,你就可以继续学习计数器与寄存器,然后是状态机。