第七章:时序逻辑设计
第一部分:课程回顾与引入
上周内容回顾(组合逻辑)
在进入本章的学习之前,我们首先快速回顾一下上周关于组合逻辑电路的核心内容。组合逻辑电路的特点是,其任意时刻的输出仅仅取决于该时刻的输入信号,而与电路之前的状态无关。
我们上周学习了以下几种重要的组合逻辑电路:
- 半加器 (Half Adders) 和全加器 (Full Adders):实现二进制数位相加的基本单元。
- 并行二进制加法器 (Parallel Binary Adders):将多个全加器连接起来,实现多位二进制数的加法。
- 行波进位 (Ripple Carry) 和超前进位 (Look-Ahead Carry) 加法器:两种处理多位加法中进位问题的电路设计,后者通过并行计算进位来提高运算速度。
- 比较器 (Comparators):用于比较两个二进制数的大小。
- 译码器 (Decoders):将n个输入信号转换为最多2^n个输出信号,每个输出对应一种输入组合。
- 编码器 (Encoders):实现与译码器相反的功能,例如将十进制输入转换为BCD码(二进制编码的十进制数)。
- 代码转换器 (Code Converters):用于不同编码系统之间的转换,如BCD码到二进制码的转换。
- 多路复用器 (Multiplexers):也叫数据选择器,作用是从多个输入信号中选择一个作为输出。
- 多路分用器 (Demultiplexers):将单个输入信号根据选择信号分配到多个输出线路之一。
- 时序 (Timing):分析电路中信号传输的延迟问题。
本章引入:时序逻辑
与组合逻辑不同,时序逻辑电路 (Sequential Logic) 的输出不仅取决于当前的输入,还与电路过去的状态有关。简单来说,时序逻辑电路具有记忆 (Memory) 功能。
核心定义:
- 状态 (State):是指描述一个电路未来行为所需的所有必要信息。它记录了电路“过去”的经历。
- 锁存器 (Latches) 和触发器 (Flip-flops):是存储一位(1 bit)状态信息的基本记忆元件。
- 同步时序电路 (Synchronous sequential circuits):指电路中所有的触发器共享一个共同的时钟信号 (Clock),使得电路状态的改变在时钟信号的特定时刻同步发生。
时序电路的特点:
- 为事件赋予顺序:通过时钟信号控制,确保操作按预定的顺序发生。
- 拥有记忆功能:能够存储信息(状态)。
- 使用反馈 (Feedback):将输出信号的一部分重新引回输入端,这是实现记忆功能的关键。
第二部分:状态元件 (State Elements)
状态元件是时序逻辑的核心,用于存储电路的状态。
- 状态的定义:关于电路过去输入的所有信息,这些信息对于预测其未来行为是必需的。通常,一个基本状态元件只存储1比特的信息,即最后被“捕获”的值。
我们将依次学习以下几种基本的状态元件:
- 双稳态电路 (Bistable circuit)
- SR锁存器 (SR Latch)
- D锁存器 (D Latch)
- D触发器 (D Flip-flop)
1. 双稳态电路 (Bistable Circuit)
双稳态电路是所有其他状态元件的基础构建模块。
- 特点:
- 它是最基本的记忆单元。
- 它有两个互补的输出:Q 和 Q’ (Q的反)。
- 它没有输入。
这个电路由两个反相器(Inverter)首尾相连构成,形成一个反馈回路。这种结构被称为交叉耦合反相器 (Cross-coupled inverters)。
-
工作原理分析: 这个电路之所以能“记忆”,是因为它存在两个稳定状态。
- 状态一:Q = 0
- 如果 Q = 0,那么这个信号进入第二个反相器(I2),使其输出 Q’ = 1。
- Q’ = 1 的信号反馈给第一个反相器(I1),使其输出 Q = 0。
- 这个状态是自洽和稳定的。
- 状态二:Q = 1
- 如果 Q = 1,那么这个信号进入第二个反相器(I2),使其输出 Q’ = 0。
- Q’ = 0 的信号反馈给第一个反相器(I1),使其输出 Q = 1。
- 这个状态同样是自洽和稳定的。
- 状态一:Q = 0
-
结论:
- 双稳态电路可以稳定地存储1比特的状态信息(0或1)。
- 但它有一个致命的缺点:没有输入端口来控制或改变它所存储的状态。 我们无法从外部写入新的数据。
2. SR锁存器 (Set/Reset Latch)
为了解决双稳态电路无法控制的问题,我们引入了SR锁存器。它通过增加两个输入(S和R)来控制电路的状态。通常由两个交叉耦合的或非门 (NOR gate) 或 与非门 (NAND gate) 构成。这里我们以与非门为例。
- 输入:S (Set, 置位) 和 R (Reset, 复位)。
- 输出:Q 和 Q’。
工作模式分析 (基于与非门的SR锁存器,其输入为低电平有效,但PPT中展示的是或非门的逻辑符号和与非门的输入行为,我们按PPT的分析逻辑来):
-
置位 (Set) 状态: S = 1, R = 0
- 当S=1时,无论另一个输入是什么,下面的与非门输出都将依赖于Q。
- 当R=0时,上面的与非门输出Q必定为1。
- 这个Q=1反馈到下面的与非门,S=1和Q=1输入,使得Q’=0。
- 最终结果:Q = 1, Q’ = 0。电路被设置为1。
-
复位 (Reset) 状态: S = 0, R = 1
- 当S=0时,下面的与非门输出Q’必定为1。
- 这个Q’=1反馈到上面的与非门,R=1和Q’=1输入,使得Q=0。
- 最终结果:Q = 0, Q’ = 1。电路被复位为0。
-
记忆 (Memory) 状态: S = 0, R = 0 (PPT中此状态为 S=0, R=0, 但基于或非门的分析,此为记忆状态)
- 当S=0, R=0时,两个与非门的输出都依赖于另一个输入。
- 此时,电路的输出将保持上一次的状态不变。
- 如果之前是Q=1,它将继续保持Q=1。如果之前是Q=0,它将继续保持Q=0。这就是记忆功能。
-
无效 (Invalid) 状态: S = 1, R = 1
- 当S=1, R=1时,上面的与非门(输入R=1, Q’=?)和下面的与非门(输入S=1, Q=?)的输出都为0。
- 即 Q = 0, Q’ = 0。
- 这个状态是无效的,因为它违背了Q和Q’必须互补的基本原则。更糟糕的是,如果S和R同时从1变回0,电路的状态将变得不确定,可能进入Q=1也可能进入Q=0,产生竞争冒险。因此,在实际应用中必须避免这种情况。
3. D锁存器 (D Latch)
为了解决SR锁存器的无效状态问题,我们设计了D锁存器。它只有一个数据输入D (Data) 和一个控制输入 CLK (Clock),也常被称为使能端 (Enable)。
-
功能:
- 当 CLK = 1 时 (透明状态):锁存器是“透明的”(transparent),输入D的值会直接传递给输出Q。即 Q = D。
- 当 CLK = 0 时 (不透明状态):锁存器是“不透明的”(opaque),它会锁住并保持CLK从1变为0那一瞬间Q的值,无论之后D如何变化,Q都保持不变。
-
内部电路: D锁存器可以在SR锁存器的基础上构建。通过在S和R输入前增加一些门电路,确保S和R永远不会同时为1。
- S = CLK AND D
- R = CLK AND (NOT D) 这样,只要CLK=1,S和R的值就由D决定,且永远互补,从而避免了无效状态。
4. D触发器 (D Flip-Flop)
锁存器是电平敏感 (level-sensitive) 的,即只要CLK为高电平,输出就可能随输入变化。在复杂的电路中,这可能导致时序问题。为了更精确地控制状态改变的时刻,我们使用触发器 (Flip-Flop)。
D触发器是边沿触发 (edge-triggered) 的,意味着它只在时钟信号的上升沿 (positive/rising edge) 或下降沿 (negative/falling edge) 的瞬间才“捕获”输入D的值,并更新输出Q。在时钟信号的其他时间里(高电平或低电平期间),即使D发生变化,Q也保持不变。
-
输入:CLK (时钟), D (数据)。
-
真值表 (以正边沿触发为例):
- 当CLK出现从低到高的跳变(↑)时,Q的值更新为当前D的值。
- 在任何其他时间,Q保持不变。
-
内部电路 (主从结构): 一种常见的实现方式是使用两个背靠背的D锁存器(一个主L1,一个从L2)。
- 时钟信号CLK直接控制从锁存器L2,而其反向信号控制主锁存器L1。
- 当CLK=0时:L1透明,接收输入D;L2不透明,保持旧的输出Q。
- 当CLK=1时:L1不透明,锁住D的值;L2透明,将L1锁住的值传递给最终输出Q。
- 整个过程的效果是:只有在CLK从0变为1的上升沿那一瞬间,数据才从D被“采样”并最终传递到输出Q。
-
锁存器 vs. 触发器 (重要区别)
- D锁存器:在整个CLK高电平期间,Q都跟随D变化(像一扇打开的窗户)。
- D触发器:仅在CLK的边沿(例如上升沿)瞬间,Q才更新为D的值(像相机快门按下的瞬间)。
5. J-K 触发器 (J-K Flip-Flop)
J-K触发器是功能最全的触发器,可以看作是SR触发器的增强版,它解决了SR的无效状态问题,并增加了一个有用的新功能。
- 输入:CLK (时钟), J, K。
- 功能:
- J=0, K=0: 记忆状态。时钟边沿到来时,Q保持不变。
- J=0, K=1: 复位状态。时钟边沿到来时,Q被置为0。
- J=1, K=0: 置位状态。时钟边沿到来时,Q被置为1。
- J=1, K=1: 翻转 (Toggle) 状态。时钟边沿到来时,Q的值会翻转(0变1,1变0)。这是J-K触发器最有用的特性,常用于构建计数器。
第三部分:触发器的变种与应用
1. 寄存器 (Registers)
单个触发器只能存储1比特信息。当我们需要存储多比特数据时,就可以将多个触发器并联起来,构成一个寄存器。
一个 N-bit 寄存器由 N 个触发器组成,它们共享同一个时钟信号CLK。在每个时钟有效边沿,N比特的数据会同时被锁存到这N个触发器中。
2. 带使能端的触发器 (Enabled Flip-Flops)
有时我们不希望触发器在每个时钟周期都更新数据。通过增加一个使能输入 (EN),我们可以控制数据是否被加载。
- 功能:
- EN = 1: 触发器正常工作,在时钟边沿到来时,Q会更新为D的值。
- EN = 0: 触发器被禁用,无论D和CLK如何变化,Q都保持其先前的值不变。
3. 带复位端的触发器 (Resettable Flip-Flops)
在系统启动或需要恢复到初始状态时,复位功能非常重要。
-
输入:CLK, D, Reset。
-
功能:
- Reset = 1: 输出Q被强制为0。
- Reset = 0: 触发器作为普通的D触发器工作。
-
复位的两种类型:
- 同步复位 (Synchronous Reset):只有在时钟的有效边沿到来时,复位信号才起作用。复位操作与其他数据操作同步。
- 异步复位 (Asynchronous Reset):复位信号立即生效,无需等待时钟边沿。它通常具有比时钟更高的优先级。
4. 带置位端的触发器 (Settable Flip-Flops)
与复位类似,置位功能可以将触发器强制设置为初始的1状态。
- 输入:CLK, D, Set。
- 功能:
- Set = 1: 输出Q被强制为1。
- Set = 0: 触发器作为普通的D触发器工作。 置位功能同样可以分为同步和异步两种。
第四部分:章节回顾与自测
本章内容总结
- 状态元件:时序电路中用于存储信息的基本单元。
- 双稳态电路:最基本的存储单元,但无法外部控制。
- D锁存器:电平敏感,CLK=1时输出跟随输入。
- D触发器:边沿触发,仅在时钟边沿更新状态。
- J-K触发器:功能强大的触发器,具有保持、置位、复位和翻转功能。
- 触发器的变种:
- 寄存器:存储多位数据。
- 带使能端:控制数据是否更新。
- 带复位/置位端:强制电路进入初始状态。
自测 quiz (判断对错)
-
一个锁存器只有一个稳定状态。
- 错误 (False)。锁存器是双稳态器件,有两个稳定状态(0和1)。
-
当Q输出为低电平时,锁存器被认为是处于复位(RESET)状态。
- 正确 (True)。复位通常指将输出Q清零。
-
一个门控D锁存器不能被用来改变状态。
- 错误 (False)。当门控(CLK/EN)信号有效时,可以通过改变D输入来改变其状态。
-
触发器和锁存器都是双稳态设备。
- 正确 (True)。它们都是基本的1比特存储单元,都有两个稳定状态。
-
一个边沿触发的D触发器在其D输入变化时就会改变状态。
- 错误 (False)。它仅在时钟的有效边沿到来时,才会根据当时的D输入改变状态,而不是D一变它就变。
-
对于边沿触发的触发器,时钟输入是必需的。
- 正确 (True)。正是时钟的“边沿”定义了状态改变的精确时刻。
-
当J和K输入都为高电平时,一个边沿触发的J-K触发器会在每个时钟脉冲到来时改变状态。
- 正确 (True)。这就是J-K触发器的“翻转”(Toggle)模式。