学习 › 第 9 讲
锁存器与触发器:SR、D、JK 和 T 分步详解
阅读约 7 分钟 · bitGateLab 团队
到目前为止,你的电路的输出只取决于当时的输入。要计数、保存数据或记住一个过程进行到了哪一步,就需要存储功能,而最小的存储单元就是锁存器。本文将带你用两个门搭出锁存器,把它改造成边沿触发的触发器,并学会使用设计计数器和状态机时要用到的各种表。
SR 锁存器
两个 NOR 门,各自的输出交叉接到对方的输入,就构成了 SR 锁存器。正是反馈产生了记忆:输出一旦取得某个值,就会自己保持下去。
| S | R | Q 的次态 | 功能 |
|---|---|---|---|
| 0 | 0 | Q | 保持 |
| 0 | 1 | 0 | 复位 |
| 1 | 0 | 1 | 置位 |
| 1 | 1 | — | 禁止 |
当 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:锁存器是透明的,Q 时刻跟随 D。
- EN = 0:Q 冻结在 D 最后的那个值上。
透明性正是锁存器的弱点。如果把锁存器的输出经过逻辑电路接回它自己的输入,那么在 EN = 1 期间信号可能绕上好几圈,结果无法预料。同步时序电路需要的是一种只在某一瞬间采集数据的器件。
边沿触发的触发器
上升沿触发的 D 触发器只在时钟从 0 变到 1 的那一瞬间把 D 复制到 Q,其余时间不理会 D。它由两个级联的 D 锁存器(主锁存器和从锁存器)构成,两者的使能信号相反:时钟为 0 时,主锁存器跟随 D,从锁存器关闭;时钟上升时,主锁存器关闭,从锁存器把采集到的值送到输出。它的方程最简单:Q+ = D。
在基本触发器的基础上,还定义了另外两种在设计中很常用的类型:
- JK:与 SR 类似,但没有禁止的组合。J = K = 1 使 Q 在每个时钟沿都改变(翻转)。方程:
Q+ = J·Q + K·Q。 - T(toggle,即翻转):T = 0 时保持,T = 1 时翻转。方程:
Q+ = T ⊕ Q。它可以由 J = K = T 的 JK 触发器得到,也可以由 D = T ⊕ Q 的 D 触发器得到。
| J | K | Q+ | 功能 |
|---|---|---|---|
| 0 | 0 | Q | 保持 |
| 0 | 1 | 0 | 复位 |
| 1 | 0 | 1 | 置位 |
| 1 | 1 | Q | 翻转 |
例:一个 JK 触发器从 Q = 0 开始,依次经历五个时钟沿,(J, K) = (1,0)、(0,0)、(1,1)、(0,1)、(1,1)。对每个时钟沿应用 Q+ = J·Q + K·Q:
- (1,0),Q = 0:1·1 + 1·0 = 1。
- (0,0),Q = 1:0·0 + 1·1 = 1(保持)。
- (1,1),Q = 1:1·0 + 0·1 = 0(翻转)。
- (0,1),Q = 0:0·1 + 0·0 = 0。
- (1,1),Q = 0:1·1 + 0·0 = 1(翻转)。
每个时钟沿之后 Q 的序列:1、1、0、0、1。
激励表
特性表回答的是:“给定输入,Q 会变成什么?”设计时需要回答相反的问题:“我想让 Q 从这个值变成那个值,应该加什么输入?”这就是激励表,每设计一个计数器或状态机你都要用到它。
| Q → Q+ | D | T | J K | S R |
|---|---|---|---|---|
| 0 → 0 | 0 | 0 | 0 X | 0 X |
| 0 → 1 | 1 | 1 | 1 X | 1 0 |
| 1 → 0 | 0 | 1 | X 1 | 0 1 |
| 1 → 1 | 1 | 0 | X 0 | X 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。
常见错误
- 把锁存器叫作触发器:锁存器响应的是使能信号的电平,触发器响应的是时钟的边沿。
- 设计需要用激励表时却用了特性表。
- 忘了 NAND 锁存器的输入是低电平有效的,禁止的组合是 00 而不是 11。
- 恰好在时钟沿上改变 D,却指望得到确定的结果。
- 让实际触发器的异步置位(preset)和清零(clear)输入悬空:它们应接到各自的无效电平。
在模拟器中试一试
锁存器和触发器的区别在时序图上一目了然。把两者都搭出来,并给它们加上同一个信号。
- 放置两个 NOR 门,把每个门的输出接到另一个门的一个输入;再添加输入 S 和 R 以及两个指示灯。
- 改变 S 和 R,验证表中的四行,包括禁止的那一行,并观察到 Q 和 Q 同时为 0。
- 放置一个 D 锁存器和一个 D 触发器,给两者接上同一个数据输入和同一个时钟或使能信号。
- 打开时序图,在时钟为 1 期间多次改变 D:锁存器跟随这些变化,而触发器只取上升沿时的值。
- 换成 J = K = 1 的 JK 触发器再做一遍,观察它的输出频率是时钟频率的一半。
练习
- 一个 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。
- 要让触发器从 Q = 1 变到 Q = 0,J 和 K 应取什么值?
答案
J = X,K = 1。K = 1 且 J = 0 时为复位;J = K = 1 时为翻转。两种选择都使 Q 变为 0。
- 已知 tCQ = 12 ns,tsu = 4 ns,期望的工作频率为 40 MHz,触发器之间的逻辑电路最多可以有多大的延迟?
答案
T = 1 / 40 MHz = 25 ns。t逻辑 ≤ 25 − 12 − 4 = 9 ns。
- 写出 D 的表达式,使 D 触发器的行为与 JK 触发器相同。
答案
D = J·Q + K·Q,这正是 JK 触发器的特性方程。