本章目录 25 节

← 返回课程首页

第 12 章 触发器与寄存器

1. 本章要解决的问题

第 11 章的 D 锁存器在整个透明期都允许数据穿过。这个特性适合锁存器流水线,却也要求设计者持续考虑透明窗口和穿透路径。许多同步系统更希望所有状态只在少数明确时刻更新。

本章要解决六个问题:

  1. 怎样让存储元件只在时钟边沿附近接收一次数据?
  2. 正边沿和负边沿触发分别是什么意思?
  3. 时钟到 Q 延迟、建立时间和保持时间描述什么?
  4. 使能怎样决定“写入新值”还是“保持旧值”?
  5. 同步复位和异步复位的行为有什么区别?
  6. 怎样把多个触发器组成并行寄存器和移位寄存器?

2. 与第 11 章的联系

高电平有效 D 锁存器在 \(EN=1\) 的整个区间透明。如果两个同相锁存器串联,数据可能在一个透明窗口内穿过多级。

边沿触发 D 触发器(edge-triggered D flip-flop)把状态更新集中到时钟边沿附近。它在有效边沿读取 \(D\),然后在两个有效边沿之间保持 \(Q\)。因此,分析重点从“当前是否处于透明期”变为“有效边沿到来前的 \(D\) 是多少”。

图 12-1 对比相同 \(D\) 和时钟下的锁存器与正边沿 D 触发器。锁存器在时钟高电平期间跟随数据;触发器只在上升沿采样。

D锁存器与边沿触发器行为对比

图 12-1 电平敏感锁存器在有效电平期间透明,边沿触发器只在有效边沿更新一次

3. 前置知识快速检查

  1. 高电平有效 D 锁存器在 \(EN=1\)\(EN=0\) 时分别怎样工作?
  2. 为什么“透明”不等于零传播延迟?
  3. 若两个同相 D 锁存器串联并同时透明,数据可能发生什么?
  4. 一位状态变量 \(Q\) 能表示多少种状态?

参考答案:

  1. \(EN=1\)\(Q\) 跟随 \(D\)\(EN=0\) 时保持旧状态。
  2. 数据仍要经过门或传输结构,并给内部与输出节点电容充放电。
  3. 数据可能在同一个透明窗口内连续穿过两级。
  4. 两种,分别用逻辑 0 和逻辑 1 表示。

若这些问题不熟悉,先回看第 11 章的第 11~13 节。

4. 学习目标

学完本章后,你应能:

5. 时钟提供统一的状态更新时间

时钟(clock,\(CLK\))是周期性变化的控制信号。一个完整重复区间称为时钟周期(clock period),记作 \(T_{clk}\);每秒重复次数称为时钟频率(clock frequency),记作 \(f_{clk}\)

\[ f_{clk}=\frac{1}{T_{clk}}. \]

\(T_{clk}=2\) ns,则

\[ f_{clk}=\frac{1}{2\times10^{-9}}=500\ \text{MHz}. \]

时钟从 0 变为 1 称为上升沿(rising edge),从 1 变为 0 称为下降沿(falling edge)。被触发器用来采样数据的边沿称为有效边沿(active edge)。

同步系统让大量状态元件使用同一组时钟边沿更新。组合逻辑在边沿之间计算,触发器在下一个有效边沿接收结果,系统因而形成“采样—计算—再采样”的节奏。

6. 正边沿 D 触发器

正边沿 D 触发器(positive-edge-triggered D flip-flop)在每个时钟上升沿采样 \(D\)。理想功能写作

\[ Q^{+}=D(t_{\uparrow}^{-}). \]

\(t_{\uparrow}\) 表示上升沿时刻,上标 \(-\) 表示读取边沿到来前已经稳定的值。边沿之间的 \(D\) 变化不会立即改变 \(Q\)

电路符号的时钟端带有小三角形,表示边沿触发。没有反相小圆圈时通常表示正边沿触发;时钟端同时带三角形和小圆圈时表示负边沿触发。

立即检查

正边沿触发器的两个相邻上升沿之间,\(D\) 从 0 变为 1 又变回 0,但下一个上升沿前稳定为 0。触发器采到什么?

答案是 0。边沿之间的暂态不会单独更新状态,触发器读取的是有效边沿附近满足时序要求的 \(D\)

7. 两个相反相位的锁存器怎样形成边沿触发

正边沿 D 触发器可以用两个相反相位工作的 D 锁存器建立直觉:

\(CLK=0\) 时,主锁存器跟随 \(D\),从锁存器保持旧 \(Q\)。上升沿到来时,主锁存器关闭并保存边沿前的数据,从锁存器打开,把主锁存器保存的值传到输出。时钟高电平期间,后续 \(D\) 变化不能穿过已经关闭的主锁存器。

主从锁存结构形成正边沿触发

图 12-2 主锁存器低电平透明、从锁存器高电平透明,组合后把外部状态更新限制在上升沿附近

“边沿触发”是外部观察到的功能抽象。内部仍包含有延迟的门、传输门、反馈节点和互补时钟。标准单元可能采用脉冲触发或其他晶体管结构,但对使用者提供相同的边沿采样接口。

8. 时钟到 Q 延迟与采样窗口

触发器不会在时钟边沿的同一瞬间改变输出。有效边沿越过参考电平后,输出 \(Q\) 经过一段时间才越过相应参考电平,这段时间称为时钟到 Q 延迟(clock-to-Q delay):

\[ t_{cq}=t(Q\text{ 越过参考点})-t(CLK\text{ 有效边沿越过参考点}). \]

与普通门一样,实际库通常分别给出 \(t_{cq,LH}\)\(t_{cq,HL}\),并随负载、输入边沿和 PVT 条件变化。基础分析可使用题目给出的单一最大值。

为了可靠采样,\(D\) 需要在有效边沿前稳定至少建立时间 \(t_{setup}\),并在边沿后继续稳定至少保持时间 \(t_{hold}\)。图 12-3 把三个时间量放在同一张波形图中。

D触发器采样窗口与时钟到Q延迟

图 12-3 数据在有效边沿前后保持稳定,输出在时钟到 Q 延迟后更新

本章用这些时间量读波形。第 14 章会把它们放入完整的寄存器到寄存器路径,计算时钟周期与时序裕量;第 15 章会说明时序违例怎样引发亚稳态风险。

9. 负边沿 D 触发器

负边沿 D 触发器在每个下降沿采样:

\[ Q^{+}=D(t_{\downarrow}^{-}). \]

分析方法与正边沿触发器相同,只是有效边沿改为下降沿。画波形时先在所有有效下降沿画竖线,再读取每条竖线前的数据值。

正边沿与负边沿触发器可以存在于同一系统,但跨越半个周期的路径会带来不同的时序预算。基础设计通常先统一使用一种边沿,减少不必要的时序复杂度。

10. 读触发器波形的固定步骤

处理波形题时按以下顺序:

  1. 先检查是否存在有效的异步控制;
  2. 标出全部有效时钟边沿;
  3. 在每个边沿读取边沿前的 \(D\)、使能和同步控制;
  4. 按控制优先级决定下一状态;
  5. \(Q\) 的变化画在边沿之后 \(t_{cq}\) 的位置;
  6. 两个有效边沿之间保持 \(Q\),除非异步控制改变它。

这套方法避免了两个常见错误:把 \(D\) 的每次变化都画到 \(Q\),以及忽略异步复位可以在边沿之间生效。

11. 带使能的 D 触发器

使能触发器需要在有效边沿做一个选择:

可以在 D 触发器前放一个 2 选 1 MUX:

\[ D_{in}=EN\cdot D+\overline{EN}\cdot Q. \]

在有效边沿,触发器采样 \(D_{in}\)

\[ Q^{+}=\begin{cases} D, & EN=1,\\ Q, & EN=0. \end{cases} \]

带使能D触发器的MUX反馈结构

图 12-4 MUX 在新数据与反馈状态之间选择,触发器仍只在有效边沿更新

这个方程与 D 锁存器方程外形相同,时间语义却不同。D 锁存器在 \(EN=1\) 的整个电平区间透明;使能触发器只在有效时钟边沿读取 \(EN\)\(D\)

12. 同步复位

同步复位(synchronous reset)只有在有效时钟边沿到来时才改变状态。以高有效同步复位 \(RST\)、使能 \(EN\) 为例,常见优先级是“复位高于使能”:

\[ Q^{+}=\begin{cases} 0, & RST=1,\\ D, & RST=0,\ EN=1,\\ Q, & RST=0,\ EN=0. \end{cases} \]

\(RST\) 在两个上升沿之间变为 1,\(Q\) 不会立刻清零;它等到下一个上升沿才执行复位。同步复位进入普通数据和时钟时序分析,行为容易与系统边沿对齐。

13. 异步复位

异步复位(asynchronous reset)不等待时钟边沿。若低有效异步复位 reset_n 变为 0,触发器经过复位到 Q 的传播延迟后把 \(Q\) 清零。

reset_n=1 时,触发器恢复正常边沿采样。复位解除也需要满足器件规定的恢复时间与移除时间:前者限制解除复位到下一有效边沿前的最小间隔,后者限制有效边沿后复位仍需保持的最小间隔。工程中常采用“异步复位、同步释放”的策略。本章先掌握功能波形,第 15 章再讨论释放靠近时钟边沿的风险。

图 12-5 使用相同的复位脉冲比较两种行为。同步复位等到边沿;异步复位在脉冲到来后立即控制输出。

同步复位与异步复位波形对比

图 12-5 同步复位由有效时钟边沿执行,异步复位可以在边沿之间直接清零状态

14. 异步置位与控制优先级

有些触发器还提供异步置位端,常命名为 preset_nset_n。它在有效时把 \(Q\) 置为 1。异步置位和异步复位同时有效通常属于禁止条件,具体行为必须按单元规格使用。

判断带多个控制端的触发器时,先写优先级。例如:

  1. reset_n=0:立即复位,其他输入暂不参与;
  2. reset_n=1 且出现上升沿:若 \(EN=1\) 则装入 \(D\),否则保持;
  3. 无上升沿且复位无效:保持。

信号名称只能说明有效电平,不能自动说明同步/异步属性。电路符号、模块接口说明或单元数据手册必须明确这一点。

15. 从一位触发器到 N bit 寄存器

寄存器(register)是一组共享时钟和控制信号的触发器,用来同时保存多 bit 数据。一个 \(N\) bit 寄存器通常由 \(N\) 个 D 触发器并联组成:

\[ Q_i^{+}=D_i,\qquad i=0,1,\ldots,N-1, \]

所有位在同一个有效边沿采样各自的输入。并行装载(parallel load)表示一个边沿同时写入整条数据总线,而不是逐位串行写入。

带使能和同步复位的 \(N\) bit 寄存器可逐位写成

\[ Q_i^{+}=\begin{cases} 0, & RST=1,\\ D_i, & RST=0,\ EN=1,\\ Q_i, & RST=0,\ EN=0. \end{cases} \]

位宽变大不会改变基本控制关系,但会增加时钟负载、数据通路负载和布线规模。

16. 移位寄存器

移位寄存器(shift register)把一个触发器的输出连接到相邻触发器的数据输入。每个有效边沿到来时,所有触发器同时采样,因此整组位模式移动一位。

以 4 bit 右移寄存器 \([Q_3,Q_2,Q_1,Q_0]\) 为例,串行输入记作 \(SI\)

\[ Q_3^{+}=SI, \]

\[ Q_2^{+}=Q_3,\qquad Q_1^{+}=Q_2,\qquad Q_0^{+}=Q_1. \]

\(Q_0\) 是串行输出端。右移后的每一位必须取“边沿前”的相邻旧值,不能在纸面上从左到右依次覆盖,否则会错误地让一个新位在同一边沿穿过多级。

并行寄存器与4bit右移寄存器

图 12-6 并行寄存器在一个边沿同时装载多位,移位寄存器在一个边沿把旧状态整体移动一位

移位寄存器可以实现串并转换、延迟若干拍、序列产生和简单数据排队。第 13 章会把反馈与移位结构用于环形计数器和序列模块。

17. 完整例题

例题 1:读取正边沿 D 触发器

一个正边沿 D 触发器初始 \(Q=0\)。三个上升沿到来前,\(D\) 分别稳定为 1、0、1。忽略复位和使能。

每个上升沿采样一次,因此三个边沿后的 \(Q\) 依次为 1、0、1\(Q\) 的实际边沿比时钟边沿晚一个 \(t_{cq}\)

变式: 若第二、第三个上升沿之间 \(D\) 多次翻转,但第三个边沿前稳定为 1,第三次仍采到 1。

例题 2:读取负边沿 D 触发器

一个负边沿 D 触发器初始 \(Q=1\)。三个下降沿前的 \(D\) 分别为 1、1、0

只读取下降沿,输出依次为 1、1、0。期间所有上升沿都不是有效采样时刻。

变式: 若把同一器件换成正边沿触发器,必须重新读取每个上升沿前的 \(D\),不能沿用原答案。

例题 3:带使能寄存器

一个 4 bit 正边沿寄存器初始为 0011。连续三个上升沿的 \((EN,D)\) 分别为:

  1. \((0,1010)\)
  2. \((1,1010)\)
  3. \((0,0101)\)

第一个边沿 \(EN=0\),保持 0011;第二个边沿装入 1010;第三个边沿再次保持。因此三个边沿后的状态为 0011、1010、1010

变式: 使能无效时输入总线仍可以变化,只要这些变化不通过其他路径产生不希望的功耗或影响。

例题 4:比较同步与异步复位

一个触发器当前 \(Q=1\),下一个上升沿在 100 ps。复位信号在 60 ps 变为有效,题目给定控制到输出延迟为 15 ps。

变式: 异步复位解除时不能只看功能值,还要检查它与时钟边沿的距离。

例题 5:逐拍分析 4 bit 右移寄存器

初始状态为 \([Q_3Q_2Q_1Q_0]=1010\)。第一个边沿 \(SI=1\),第二个边沿 \(SI=0\)

第一个边沿使用旧状态:

\[ [Q_3^{+}Q_2^{+}Q_1^{+}Q_0^{+}]=[1,Q_3,Q_2,Q_1]=1101. \]

第二个边沿再使用 1101

\[ [Q_3^{+}Q_2^{+}Q_1^{+}Q_0^{+}]=[0,1,1,0]=0110. \]

变式: 若第三个边沿 \(SI=1\),下一状态为 1011

18. 常见误区与反例

误区 1:三角形表示高电平有效

时钟端三角形表示边沿触发。三角形旁没有小圆圈通常是正边沿,有小圆圈通常是负边沿。

误区 2:触发器在边沿处零延迟更新

\(Q\) 在有效边沿后经过 \(t_{cq}\) 才变化。画波形时应把输出边沿画在时钟边沿右侧。

误区 3:使能为 1 时触发器持续透明

使能只决定有效边沿到来时装入还是保持。边沿之间,\(EN=1\) 也不会让 \(Q\) 持续跟随 \(D\)

误区 4:同步复位一有效就立即清零

同步复位要等有效时钟边沿。需要立即控制输出的是异步复位。

误区 5:异步复位解除也完全不受时钟约束

异步复位的置位可以不等待时钟,解除靠近边沿时仍可能破坏内部采样。工程实现需要检查恢复/移除要求。

误区 6:移位寄存器按连线顺序逐个更新

同一时钟边沿触发的各位同时读取旧状态。计算时应先保存整行旧值,再一次性写出新值。

误区 7:寄存器保存的是十进制数

寄存器保存位模式。无符号、二补码、定点数或控制字段是系统赋予同一位模式的解释。

19. 工程中的实际意义

触发器把连续时间中的电路变化切分成离散的状态更新事件。寄存器则把这种一位采样扩展到数据总线,是同步数字系统最常见的状态边界。

它们用于:

触发器数量增加会带来面积、漏电和时钟功耗。时钟需要驱动大量单元,因此后续物理实现必须处理时钟树、偏斜和负载。

20. 本章知识链

D 锁存器:有效电平期间透明
        ↓ 两个相反相位锁存阶段
D 触发器:只在有效边沿采样
        ↓ 加入 MUX 反馈
带使能触发器:边沿时装入或保持
        ↓ 加入复位控制
同步复位等待边沿,异步复位立即控制
        ↓ 多位并联
并行寄存器
        ↓ 相邻位串接
移位寄存器
        ↓
下一章:计数器与简单时序模块

21. 本章小结

  1. 时钟周期与频率满足 \(f_{clk}=1/T_{clk}\)
  2. 正边沿 D 触发器在上升沿采样,负边沿 D 触发器在下降沿采样。
  3. 边沿触发器在两个有效边沿之间保持状态,不像锁存器那样在整个有效电平期间透明。
  4. \(t_{cq}\) 描述有效边沿到输出变化的传播延迟。
  5. 数据需要满足边沿前的建立时间和边沿后的保持时间。
  6. 使能触发器在边沿处根据 \(EN\) 选择新数据或旧状态。
  7. 同步复位等待有效边沿,异步复位不等待时钟。
  8. 控制优先级通常先处理异步复位,再处理边沿上的同步复位、使能和数据。
  9. \(N\) bit 寄存器由 \(N\) 个共享时钟的触发器并联组成。
  10. 移位寄存器的所有位在同一边沿同时读取旧状态并移动一位。

22. 练习

基础题

  1. 用一句话区分 D 锁存器和边沿 D 触发器。
  2. 什么是上升沿、下降沿和有效边沿?
  3. 正边沿与负边沿 D 触发器的时钟符号有何区别?
  4. 什么是时钟到 Q 延迟?它与组合门传播延迟的起点有何不同?
  5. 什么是寄存器?一个 8 bit 寄存器至少需要多少个一位状态元件?
  6. 用一句话区分同步复位和异步复位。

分析与计算题

  1. 正边沿 D 触发器初始 \(Q=0\)。四个上升沿前的 \(D\) 依次为 1、1、0、1。写出各边沿后的 \(Q\)
  2. 负边沿 D 触发器初始 \(Q=1\)。三个下降沿前的 \(D\) 依次为 0、1、0。写出各边沿后的 \(Q\)
  3. 带使能正边沿 D 触发器初始 \(Q=0\)。三个上升沿的 \((EN,D)\) 依次为 \((0,1)\)\((1,1)\)\((0,0)\)。写出状态序列。
  4. 一个带高有效同步复位和使能的触发器当前 \(Q=1\)。某上升沿处 \(RST=1,EN=1,D=1\)。若复位优先,边沿后 \(Q\) 是多少?
  5. 一个低有效异步复位触发器当前 \(Q=1\)reset_n 在两个时钟边沿之间变为 0。输出是否需要等待下一个边沿?
  6. 某正边沿触发器要求 \(t_{setup}=30\) ps、\(t_{hold}=10\) ps。上升沿在 200 ps。写出 \(D\) 必须保持稳定的最小时间区间。
  7. 一个 4 bit 带使能寄存器初始为 1100。两个上升沿的 \((EN,D)\) 分别为 \((0,0011)\)\((1,0101)\)。写出两个边沿后的状态。
  8. 4 bit 右移寄存器初始为 0110,连续三个边沿的 \(SI\)1、0、1。写出每拍后的状态。
  9. 为什么第 14 题不能从 \(Q_3\) 开始改写后,立刻用新 \(Q_3\) 计算 \(Q_2\)

综合题

  1. 画出一个带使能 D 触发器的 MUX 反馈结构,并说明它与高电平有效 D 锁存器方程相似但时序语义不同。
  2. 某系统要求复位信号一到来就清零状态,但解除复位必须与时钟对齐。应采用怎样的复位策略?说明原因。
  3. 为 4 bit 寄存器写出“高有效同步复位优先,其次使能并行装载,否则保持”的逐位下一状态关系。
  4. 比较 D 锁存器、D 触发器、并行寄存器和移位寄存器的采样条件、保存位数和数据移动方式。

23. 练习答案

展开第 12 章练习答案

题 1

D 锁存器在使能有效的整个电平区间透明;边沿 D 触发器只在规定的时钟边沿采样一次。

题 2

上升沿是 \(CLK:0\rightarrow1\),下降沿是 \(CLK:1\rightarrow0\);有效边沿是当前触发器实际用来采样输入并更新状态的那一种边沿。

题 3

两者时钟端都有表示边沿触发的三角形。正边沿触发通常没有反相小圆圈,负边沿触发通常在三角形外再带一个小圆圈。

题 4

时钟到 Q 延迟从有效时钟边沿越过参考点开始,到 \(Q\) 越过相应参考点结束。组合门传播延迟通常从数据输入边沿越过参考点开始。

题 5

寄存器是一组共享时钟和控制信号、并行保存多 bit 数据的触发器。8 bit 寄存器至少需要 8 个一位触发器。

题 6

同步复位只在有效时钟边沿执行;异步复位在有效时无需等待时钟边沿即可控制状态。

题 7

每个上升沿采样对应 \(D\),状态依次为 1、1、0、1

题 8

只在下降沿采样,状态依次为 0、1、0

题 9

第一个边沿 \(EN=0\),保持 0;第二个边沿 \(EN=1\),装入 1;第三个边沿 \(EN=0\),保持 1。状态序列为 0、1、1

题 10

复位优先,因此不读取使能和数据,边沿后 \(Q=0\)

题 11

不需要。reset_n=0 是异步复位有效,输出经过复位控制到 Q 的传播延迟后清零。

题 12

上升沿前 30 ps 到边沿后 10 ps 内必须稳定,因此最小稳定区间为

\[ [200-30,\ 200+10]=[170,210]\ \text{ps}. \]

题 13

第一个边沿使能无效,保持 1100;第二个边沿使能有效,装入 0101。状态依次为 1100、0101

题 14

采用 \([Q_3Q_2Q_1Q_0]\)、串行输入进入 \(Q_3\)

边沿 \(SI\) 新状态
1 1 1011
2 0 0101
3 1 1010

题 15

同一边沿上的所有触发器同时读取边沿前的旧状态。若边计算边覆盖,就会把本应下一拍才传播的值在同一拍传过多级。

题 16

MUX 的一个数据端接新数据 \(D\),另一个接反馈 \(Q\),选择端接 \(EN\),输出接触发器的 \(D_{in}\)

\[ D_{in}=EN\cdot D+\overline{EN}\cdot Q. \]

外形与 D 锁存器特征方程相同。D 锁存器在 \(EN=1\) 的整个区间透明;使能触发器只在有效时钟边沿采样 MUX 输出。

题 17

采用“异步复位、同步释放”的复位策略。复位有效时直接异步清零,不等待时钟;解除复位经过同步结构,使各状态元件在安全的时钟关系下恢复工作,降低靠近边沿释放造成的风险。

题 18

\(i=0,1,2,3\)

\[ Q_i^{+}=\begin{cases} 0, & RST=1,\\ D_i, & RST=0,\ EN=1,\\ Q_i, & RST=0,\ EN=0. \end{cases} \]

该关系只在有效时钟边沿求值。

题 19

结构 采样条件 保存位数 数据行为
D 锁存器 使能有效电平期间透明 1 透明时跟随,关闭时保持
D 触发器 一个有效时钟边沿 1 边沿采样,边沿之间保持
并行寄存器 共享有效时钟边沿 \(N\) 同时装载或保持 \(N\) bit
移位寄存器 共享有效时钟边沿 \(N\) 每拍把旧状态整体移动一位

24. 自测清单

若第 3~5 项不稳定,遮住图 12-3 的 \(Q\) 波形,只标出有效边沿和采样窗口后重新绘制。若第 7~8 项不稳定,使用“异步控制—有效边沿—同步复位—使能—数据”的顺序逐项判断。

25. 下一章衔接

本章已经能在每个时钟边沿保存或移动数据。下一章《计数器与简单时序模块》会在寄存器输入前加入组合逻辑,使状态按照规定序列自动变化。我们将从最简单的二进制加一开始,构造同步计数器、模 \(N\) 计数器、分频器、环形计数器和序列发生器。