5数字逻辑设计基础(第3版)

锁存器和触发器

存储的基础

SR 锁存器D 触发器JK 触发器边沿触发

🎯 AI 时代的学习建议:不要只读理论。理解这一章的设计动机(为什么需要这个概念?)和边界条件(什么情况下会失效?)。当 AI 生成的代码涉及这些概念时,你能判断它是否用对了场景。AI 能帮你总结内容,但无法替代你亲手阅读、思考、建立直觉的过程。

第5章 锁存器和触发器(存储的基础)

一、导读

1.1 本章学习目标

理解锁存器(Latch)和触发器(Flip-Flop)的本质区别及其在时序电路中的角色

掌握SR锁存器、 gated SR锁存器、D锁存器的工作原理和特性表

深入理解D触发器(D Flip-Flop)的边沿触发机制和时序参数

掌握JK触发器的功能特性及其相对于D触发器的优势与劣势

理解建立时间(Setup Time)、保持时间(Hold Time)等关键时序参数的物理含义

了解亚稳态(Metastability)现象的成因及其对系统可靠性的影响

掌握各种触发器之间的相互转换方法

认识触发器在寄存器、计数器等实际电路中的应用

1.2 为什么本章如此重要

如果说组合逻辑电路是数字系统的"肌肉"——负责数据的变换和处理,那么时序逻辑电路就是数字系统的"大脑"——负责状态的记忆和决策。而锁存器和触发器正是赋予数字电路记忆能力的核心元件。没有存储元件,数字系统就无法记住过去的输入,无法实现计数器、状态机等需要记忆功能的复杂电路。

触发器的发展历史反映了数字设计对可靠性和可控性的不断追求。从最早的SR锁存器到D触发器再到JK触发器,每一代改进都在解决前代的问题:SR锁存器的禁止状态、电平触发的透明性问题、时序参数的可控性等。现代数字系统中,边沿触发的D触发器是最常用的存储元件,它的时序行为清晰可预测,使得大规模同步时序电路的设计成为可能。

理解触发器的工作原理和时序参数,是进行时序电路分析和设计的前提。建立时间和保持时间的约束决定了电路的最大工作频率;亚稳态问题关系到跨时钟域数据传输的可靠性;传播延迟影响着关键路径的计算。这些概念不仅是理论知识,更是实际工程中必须严格遵守的设计规则。

1.3 核心问题引导

锁存器和触发器有什么本质区别?为什么现代同步设计主要使用触发器而非锁存器?

SR锁存器为什么存在"禁止状态"?这个问题是如何在后续设计中被解决的?

电平触发和边沿触发各有什么优缺点?为什么边沿触发更适合大规模同步设计?

D触发器内部的 master-slave 结构是如何实现边沿触发的?

什么是建立时间和保持时间?违反这些时序约束会导致什么后果?

亚稳态是什么?它在什么情况下发生?如何减轻亚稳态对系统的影响?

JK触发器相比D触发器有什么优势?为什么现代设计中D触发器更为普遍?


二、核心概念详解

2.1 SR锁存器与门控SR锁存器

SR锁存器(SR Latch)是最基本的存储元件,由两个交叉耦合的逻辑门构成。使用NOR门实现时,两个NOR门的输出分别反馈到对方的输入端,形成正反馈环路。S(Set)输入将输出Q置为1,R(Reset)输入将输出Q置为0,当S和R都为0时,锁存器保持之前的状态。

SR锁存器的特性表如下:S=0, R=0时保持(Q_next = Q);S=1, R=0时置位(Q_next = 1);S=0, R=1时复位(Q_next = 0);S=1, R=1时为禁止状态(Q和Q'都为0,破坏了互补输出的约定)。

禁止状态是SR锁存器的根本缺陷。当S和R同时为1时,两个输出都被强制为0,不再保持互补关系。更严重的是,当S和R同时从1变为0时,锁存器最终进入哪个状态取决于两个NOR门的传播延迟差异——这是不可预测的。这种不确定性在数字系统中是不可接受的。

门控SR锁存器(Gated SR Latch)在SR锁存器的基础上增加了使能控制端(Enable或Gate)。只有当使能信号为有效电平时,S和R输入才能影响锁存器的状态;当使能信号无效时,锁存器保持当前状态。门控锁存器引入了"电平触发"的概念,但并未解决禁止状态的问题,且在使能有效期间输出会随输入变化而透明传输(Transparent),这限制了其在同步设计中的应用。

2.2 D锁存器与D触发器

D锁存器(D Latch)通过结构改进彻底消除了SR锁存器的禁止状态。它在S和R输入之间插入一个反相器,使得S和R始终互补,从而永远不可能出现S=R=1的情况。D锁存器只有一个数据输入D:当使能信号有效时,输出Q跟随输入D变化(Q_next = D);当使能信号无效时,输出保持。

D触发器(D Flip-Flop)在D锁存器的基础上引入了边沿触发机制。最经典的实现是主从(Master-Slave)结构:两个D锁存器串联,主锁存器在时钟低电平期间透明(捕获输入),从锁存器在时钟高电平期间透明(传递输出)。整体效果是:数据在时钟上升沿被捕获,在其余时间保持不变。

边沿触发D触发器的时序行为由几个关键参数描述。建立时间(Setup Time, tsu):数据必须在时钟边沿到来之前至少tsu时间就保持稳定。保持时间(Hold Time, th):数据在时钟边沿之后必须继续保持至少th时间。传播延迟(Clock-to-Q Delay, tcq):从时钟边沿到输出稳定更新的时间。这些参数由器件的物理结构决定,是时序分析的基础数据。

D触发器是现代数字设计中使用最广泛的存储元件。在FPGA中,每个可配置逻辑块(CLB)都包含若干D触发器;在ASIC标准单元库中,D触发器有多种变体(带异步复位、带同步使能、不同驱动强度等),供综合工具选用。

2.3 JK触发器

JK触发器是功能最完善的触发器类型,具有四种操作模式:J=0, K=0时保持;J=1, K=0时置位;J=0, K=1时复位;J=1, K=1时翻转(Toggle,即Q_next = Q')。翻转功能是JK触发器相对于D触发器的独特之处,当J=K=1时,触发器在每个时钟边沿自动翻转状态。

JK触发器的翻转功能使其在计数器设计中特别方便。例如,设计一个二进制计数器时,每一位的触发器需要在所有低位都为1时翻转,这可以直接用JK触发器的J=K输入来实现。如果用D触发器实现同样的功能,则需要额外的组合逻辑来计算D输入。

然而,JK触发器在理论上存在"空翻"(Race Condition)问题:如果在时钟有效期间J=K=1,主从JK触发器可能在时钟高电平期间发生多次翻转。实际的主从JK触发器通过"主从结构的一次变化特性"(Master's One-Time Change Property)来解决这个问题:主锁存器在时钟高电平期间只响应第一次状态变化,忽略后续的输入变化。

尽管JK触发器功能丰富,但在现代设计中已逐渐被D触发器取代。原因在于:D触发器的时序行为更简单、更可预测,有利于静态时序分析(Static Timing Analysis, STA);而且JK触发器的任何功能都可以用D触发器加组合逻辑来实现,综合工具可以自动完成这种转换。

2.4 边沿触发与时序参数

边沿触发(Edge Triggering)是现代同步数字设计的基石。与电平触发不同,边沿触发器只在时钟信号的特定跳变时刻(上升沿或下降沿)采样输入并更新输出。在时钟边沿之外的时间,触发器对输入变化完全免疫。

这种"瞬时采样"的特性带来了巨大的系统级优势。设计者可以精确地知道数据何时被捕获、何时有效,从而在多个触发器之间建立确定的时序关系。整个系统的所有状态变化都发生在时钟边沿,使得复杂系统的时序分析变得可行。

建立时间和保持时间是边沿触发器的两个核心时序约束。建立时间反映了触发器内部电路在时钟边沿到来之前需要多长时间来"准备"数据采样。如果数据变化太晚(违反建立时间),触发器可能采样到错误的数据。保持时间反映了时钟边沿之后触发器内部电路需要多长时间来"锁定"已采样的数据。如果数据变化太早(违反保持时间),新数据可能覆盖正在被锁定的旧数据。

违反建立时间或保持时间都可能导致亚稳态。在时序分析中,建立时间约束决定了系统的最大时钟频率:fmax = 1/(tcq + tcomb + tsu),其中tcomb是触发器之间的组合逻辑延迟。保持时间约束则决定了最小延迟:如果组合逻辑延迟太小(例如两个触发器直接相连),可能需要插入缓冲器来满足保持时间要求。

2.5 触发器类型转换

不同触发器之间可以相互转换,这一性质在设计中提供了灵活性。D触发器转换为T触发器:将D输入连接到T XOR Q,当T=1时每个时钟边沿翻转,T=0时保持。D触发器转换为JK触发器:将D输入连接到 JQ' + K'Q,综合了JK触发器的四种操作模式。

JK触发器转换为D触发器:设置J=D, K=D'。当D=1时J=1,K=0,触发器置位;当D=0时J=0,K=1,触发器复位。

这些转换在理论上是完美的,但在实际电路中需要考虑额外的组合逻辑引入的传播延迟。当使用JK触发器实现D触发器功能时,J和K输入端的组合逻辑增加了数据路径的延迟,可能影响系统的最大工作频率。


三、深入分析与讨论

3.1 亚稳态的深入分析

亚稳态(Metastability)是触发器在违反建立时间或保持时间约束时可能出现的一种异常状态。在亚稳态下,触发器的输出既不稳定的为0也不稳定的为1,而是在中间电压值附近振荡,经过一段不确定的时间后才最终稳定到某个合法电平。

从物理角度理解,触发器的状态转换可以类比为一个小球从一个山谷翻越山脊到达另一个山谷的过程。正常情况下(满足时序约束),小球有足够的"推力"翻越山脊到达目标山谷。但在临界条件下(违反时序约束),小球可能恰好停在山脊顶部——这就是亚稳态。由于热噪声等随机扰动,小球最终会滚入其中一个山谷,但具体是哪一个以及需要多长时间是不可预测的。

亚稳态的平均解析时间(Resolution Time)与触发器的内部时间常数有关。现代CMOS触发器的亚稳态解析时间通常在几百皮秒到几纳秒之间。在跨时钟域(Clock Domain Crossing, CDC)设计中,亚稳态是无法完全避免的,但可以通过使用双触发器同步器(Two-Flip-Flop Synchronizer)来将亚稳态导致的错误概率降低到可接受的水平。

同步器的工作原理:第一个触发器可能进入亚稳态,但在下一个时钟边沿到来之前,它有整整一个时钟周期的时间来解析。如果解析成功(概率很高),第二个触发器将采样到正确的值。如果第一个触发器仍在亚稳态,第二个触发器也可能进入亚稳态,但概率已经大大降低。两级同步器可以将MTBF(Mean Time Between Failures)提高到数年甚至数百年。

3.2 锁存器 vs 触发器:设计选择

在现代数字设计中,锁存器和触发器的选择是一个重要的架构决策。锁存器(电平敏感)比触发器(边沿敏感)使用更少的晶体管(约少30-50%),因此面积更小、功耗更低。在某些对面积和功耗极为敏感的应用中(如RFID标签、植入式医疗设备),锁存器时序设计(Latch-based Timing)可能比触发器时序设计更有优势。

然而,锁存器时序设计也带来了显著的挑战。首先,锁存器的透明性使得时序分析更加复杂:数据可以在使能有效的整个时间窗口内穿透锁存器,这引入了"时间借用"(Time Borrowing)现象——前一个阶段如果提前完成,多余的时间可以被后一个阶段借用。虽然时间借用在某些情况下可以提高性能,但它使得静态时序分析的实现更加复杂。

其次,锁存器对时钟偏差(Clock Skew)更敏感。在触发器设计中,时钟偏差直接影响的是建立/保持时间的裕量;而在锁存器设计中,时钟偏差可能导致数据在使能窗口内被多次捕获,产生难以预测的行为。

因此,大多数商业EDA工具和IP库都以触发器为默认存储元件。锁存器设计通常只在特殊应用场景下由经验丰富的设计团队使用。


四、实践案例

4.1 同步FIFO的存储阵列设计

设计一个4位宽、4位深的同步FIFO(First In First Out)缓冲器,用于两个时钟域之间的数据传递。FIFO的核心存储阵列可以使用4个D触发器组成的寄存器文件来实现。

存储阵列由4行4列共16个D触发器组成。每行存储一个4位数据字。写指针(Write Pointer)和读指针(Read Pointer)分别指示当前写入和读取的位置。写操作时,数据在时钟上升沿写入写指针指向的行,然后写指针加1。读操作时,读指针指向的行的数据被输出,然后读指针加1。

空/满标志的生成是FIFO设计的关键。当读指针等于写指针时FIFO为空;当写指针的下一个位置等于读指针时FIFO为满(牺牲一个存储位置以区分空和满状态)。这些比较操作使用比较器实现。

在这个设计中,D触发器承担了数据存储的核心角色。每个时钟边沿,写操作将新数据锁存到指定的触发器组中,读操作从触发器的Q端获取已存储的数据。触发器的建立时间和保持时间约束决定了FIFO的最大工作频率。

4.2 按键消抖电路

机械按键在按下和释放的瞬间会产生多次弹跳(Bounce),导致电平在短时间内反复跳变。这种弹跳持续数毫秒到数十毫秒不等。如果直接将按键信号连接到数字电路,会被误识别为多次按下。

设计一个基于D触发器的按键消抖电路。使用一个自由运行的计数器(如16位计数器),当检测到按键电平变化时启动计数器。计数器计数到预设值(对应约20ms的时间)后,如果按键电平保持稳定,则认为按键状态确实发生了改变,更新输出。

具体实现:使用D触发器构建计数器,每个时钟边沿计数器加1。按键信号经过两级D触发器同步(消除亚稳态)后,与计数器输出一起驱动状态机。状态机在"等待按键变化"和"等待稳定"两个状态之间切换。在"等待稳定"状态下,计数器从0开始计数,如果计数到20ms对应的值时按键电平仍然一致,则更新去抖后的输出。

这个设计展示了D触发器在时序控制中的基本应用:计数器用触发器存储当前计数值,同步器用触发器消除异步输入的亚稳态风险,状态机用触发器记忆当前状态。


五、常见误区与注意事项

混淆锁存器和触发器的触发方式:锁存器是电平触发的(在使能有效期间输出透明跟随输入),触发器是边沿触发的(只在时钟边沿采样输入)。在同步设计中混用两者可能导致时序分析错误和功能异常。

忽视建立时间和保持时间约束:这两个参数不是可选的设计建议,而是必须严格遵守的物理约束。违反建立时间可能导致采样错误数据;违反保持时间可能导致数据被意外覆盖。在FPGA设计中,布局布线工具会自动检查这些约束,但在手工设计电路时必须自行计算。

认为亚稳态可以被完全消除:亚稳态是物理现象,无法从理论上完全消除。在跨时钟域设计中,只能通过同步器将亚稳态导致的错误概率降低到可接受的水平。期望"完全消除亚稳态"是不现实的。

JK触发器的空翻问题:在主从JK触发器中,如果时钟高电平期间J和K发生多次变化,主锁存器只响应第一次变化。这一"一次变化特性"是主从JK触发器的重要特征,在时序设计中必须考虑。

触发器转换时忽略额外延迟:将JK触发器转换为D触发器(或反之)需要在输入端添加组合逻辑。这些额外的逻辑门会增加数据路径的传播延迟,可能影响系统的最大工作频率。在高速设计中,应优先直接使用目标类型的触发器。


六、本章小结

本章深入讲解了数字系统中各种存储元件的工作原理和特性。SR锁存器作为最基本的存储结构,展示了正反馈环路实现双稳态存储的原理,但也暴露了禁止状态的固有缺陷。D锁存器通过消除禁止状态改进了可靠性,而D触发器进一步通过边沿触发机制实现了精确的时序控制。JK触发器虽然功能最为完善,但在现代设计中已被更简单、更可预测的D触发器所取代。建立时间和保持时间是触发器的核心时序参数,决定了系统的最大工作频率和最小延迟约束。亚稳态是触发器在临界条件下的物理现象,在跨时钟域设计中必须通过同步器来管理。这些存储元件是构建计数器、寄存器、状态机等时序电路的基础,其时序特性直接影响整个数字系统的性能和可靠性。


七、思考题与练习

画出由4个NAND门构成的SR锁存器电路图,推导其特性表,并解释为什么S=R=1是禁止状态。

设计一个门控D锁存器,使用NAND门实现。画出电路图并说明其工作原理。与D触发器相比,门控D锁存器有什么优缺点?

一个D触发器的时序参数如下:tsu=2ns, th=1ns, tcq=3ns。触发器之间的组合逻辑延迟为5ns(最小)到12ns(最大)。计算系统可以工作的最高时钟频率,并验证保持时间约束是否满足。

解释为什么两级D触发器同步器可以将跨时钟域传输的亚稳态概率降低到可接受的水平。如果时钟频率为100MHz,估算两级同步器的MTBF。

使用D触发器设计一个3位二进制计数器(0到7循环计数)。画出状态图和逻辑电路图。如果需要使用JK触发器实现相同的功能,电路有什么不同?

将JK触发器转换为T触发器(Toggle Flip-Flop),给出转换电路的逻辑图。使用T触发器设计一个4位二进制计数器,并与使用D触发器的方案进行比较。

分析以下情况中触发器的行为:一个D触发器的时钟频率为1GHz(周期1ns),数据输入是一个异步信号,与时钟没有固定的相位关系。讨论可能出现的时序问题和解决方案。

比较锁存器时序设计和触发器时序设计在以下方面的差异:(a) 面积和功耗 (b) 时序分析的复杂度 (c) 对时钟偏差的敏感度 (d) 测试和调试的难易程度。

5/8锁存器和
0%