在数字电路中,时序逻辑电路是指电路当前时刻的稳态输出不仅取决于当前的输入,还与前一时刻输出的状态有关。这跟组合逻辑电路不同,组合逻辑电路当前的输出只与当前输入所构成的逻辑函数关系有关。换句话说,时序逻辑电路包含用于存储信息的存储元件,而组合逻辑电路没有,这就是两者本质的区别。但是,需要注意的是,构成时序逻辑电路的基本存储元件也都是由组合逻辑电路实现的,只不过这些组合逻辑电路存在“反馈”,所以就成为具有存储信息的特殊功能部件。
时序逻辑电路中存在两种重要的电路类型,即同步时序逻辑电路和异步时序逻辑电路。
在同步时序逻辑电路中,由一个时钟统一控制所有的存储元件,存储元件由触发器构成。绝大多数的时序逻辑电路都是同步逻辑电路。由于系统内只有一个时钟信号,因此所有的内部状态只会在时钟的边沿发生变化。在时序逻辑电路中,最基本的存储元件是触发器。
同步逻辑电路最主要的优点是控制机制简单。每一个电路里的运算必须在时钟两个脉冲之间固定的间隔内完成,称为一个时钟周期,只有满足这个条件才能够保证电路是可靠的。
同步逻辑电路也有两个主要的缺点:
(1)时钟信号必须要分配到电路中的每一个触发器,而时钟通常频率较高,因此会产生功耗,也就是产生热量。即使每个触发器没有做任何事情,也会有功耗存在。
(2)最大可能的时钟频率由电路中最慢的逻辑路径(关键路径)决定。也就是说,从最简单到最复杂的逻辑运算都必须在一个时钟周期内完成。一种用来消除这种限制的方法,是将复杂的运算分成若干简单的运算,这种方法称为流水线。在微处理器中使用这种方法,可以显著提高处理器的时钟频率。
异步时序逻辑电路循序逻辑的普遍本质。由于它的不同步关系,所以它也是设计上困难度最高的。最基本的存储元件是锁存器,锁存器可以在任何时间改变它的状态。根据其他锁存器信号的变化,产生新的状态。随着逻辑门的增加,异步时序逻辑电路的复杂性也迅速增加。因此,大部分异步时序逻辑电路仅仅用于小规模的电路中。然而,电子设计自动化工具可以简化这些工作,从而允许更复杂的设计。
在实际中,可以构建包含同步触发器和异步锁存器(它们都是双稳态元件)的混合电路。
对于构成时序逻辑电路的那些基本存储元件来说,至少需要两个输入信号,一个是需要保存的数据;另一个是时序控制信号,该信号用于准确指示将要保存数据的时间。在操作过程中,当控制信号有效时,数据输入信号驱动存储电路保存节点为逻辑“1”或者逻辑“0”。一旦存储电路翻转到新的状态,重新保存这个状态。
由于时序逻辑电路有“记忆”信息的能力,因此它可以用来保存数字系统的工作状态。大量的电子设备包含数字系统,数字系统使用存储电路来定义它们的工作状态。事实上,任何能够创建或者响应事件序列的电子设备必须包含存储电路。例如,手表和定时器、家电控制器、游戏设备和计算设备。如果一个数字系统包含N个存储器件,并且每个存储器件存储一个逻辑“1”或者逻辑“0”,则可以使用N位的二进制数来定义系统的工作状态。包含N个存储器件的数字系统最多有2 N 个状态,每个状态由系统中所有存储器件所创建的二进制数来定义。
在任何一个时刻,保存在内部存储器件的二进制数定义了一个数字系统的当前状态。输入到数字系统的逻辑信号可能引起一个或者多个存储器件的状态发生改变(从逻辑“1”变化到逻辑“0”,或者从逻辑“0”变化到逻辑“1”),从而改变数字系统的状态。这样,当保存在内部存储器的二进制数发生变化时,就会改变数字系统的状态。通过状态的变化,数字系统就可以创建或者响应事件序列。
在数字系统中,主要关心两状态或者双稳态电路。双稳态电路有两个稳定的工作状态,一个状态是输出逻辑“1”(VDD),另一个是输出逻辑“0”(GND)。当双稳态存储电路处于其中一个状态时,需要外界施加能量,使其从一种状态变化到另一种状态。在两个状态的跳变期间,输出信号必须跨越不稳定状态区域。因此,在设计存储电路时不允许无限停留在不稳定区域内。一旦它们进入不稳定状态,则立即尝试重新进入两个稳定状态中的一个。
如图2.37所示,给出了状态变迁的过程。图中的小球表示保存在存储电路中的值,山表示不稳定区域,即存储电路从保存的一个值跳变到另一个值所穿越的区域。在这个图中,有第3个潜在的稳定状态,有可能在山顶上球处于平衡状态。同样地,存储电路也有第3个潜在的不稳定状态。当存储电路在两个稳定状态之间进行跳变时,确保为电路施加足够的能量,使其可以穿越不稳定区域。
图2.37 状态变迁的过程
在双稳态电路中,一旦处于逻辑“0”或者逻辑“1”的状态,则很容易维持这个状态。用于改变电路状态的控制信号必须满足最小的能量,用于穿越不稳定区域。如果所提供的能量大于所需的最小能量,则跳变过程很快;如果所提供的能量小于所需的最小能量,则重新返回到初始状态。如果输入信号提供了错误的能量,即足以引起跳变,但不足以使它快速通过不稳定区域,则电路将处于不稳定区域。所以,存储电路的设计要尽量避免这种情况的发生。如果存储器件长时间处于不稳定区域,则输出可能产生振荡,或者处于逻辑“0”和逻辑“1”的中间,使得数字系统产生不期望的行为。当存储器件处于不稳定区域时,称为亚稳定状态。一旦进入亚稳定状态,存储器件将出现时序问题。
一个静态存储电路要求反馈,任何包含反馈的电路都是存储器。如果输出信号简单地反馈到输入,则称为包含反馈的逻辑电路。大多数的反馈电路,输出不是逻辑“1”或者逻辑“0”,就是永无休止地振荡。一些反馈电路是双稳态的和可控的,这些电路可作为存储电路的备选方案。图2.38给出了不同的反馈电路,它们标记为可控的/不可控的和双稳态的/非双稳态的。
图2.38 不同的反馈电路
图2.39给出了基本SR锁存器的结构,其中 和Q呈现互补的逻辑关系。表2.20给出了基本SR锁存器的逻辑关系。
图2.39 基本SR锁存器的结构
表2.20 基本SR锁存器的逻辑关系
注 :表2.20中的Q 0 表示前一个时刻Q的输出, 表示前一个时刻 的输出。
仔细观察图2.39,虽然基本SR锁存器还是由基本逻辑门组成的,但是和前面组合逻辑电路最大的不同点是,锁存器增加了输出到基本逻辑门的“反馈”路径,而前面的组合逻辑电路并不存在输出到输入的“反馈”路径。这个反馈路径的重要作用表明在有反馈路径的逻辑电路中,当前时刻逻辑电路的状态由当前时刻逻辑电路的输入和前一时刻逻辑电路的输出状态共同确定。
74LS279是一个专用的SR锁存器芯片,内部集成了4个SR锁存器。图2.40给出了使用该芯片构建的一个SR锁存器电路。图2.41给出了对该电路执行SPICE瞬态分析的结果。
注 :读者进入本书配套提供例子的\eda_verilog\RS_latch.ms14路径下,用Multisim 14工具打开该设计,执行SPICE瞬态仿真,观察仿真结果。
下面对SPICE瞬态分析结果进行说明,帮助读者理解基本SR锁存器的工作原理。
① R=0并且S=0时,很明显Q输出均为1。注意,这是不期望的状态。
② R=0并且S=1时,很明显Q=0,称为基本SR锁存器的复位状态。
图2.40 由74279构建的一个SR锁存器电路
图2.41 对图2.40所示的电路执行SPICE瞬态分析的结果
③ 和①的条件相同。
④ R=1并且S=0时,很明显Q=1,称为基本SR锁存器的置位状态。
⑤ 和②的条件相同。
⑥ 和④的条件相同。
⑦ 和②的条件相同。
⑧ 和④的条件相同。
⑨ 由于⑧的Q输出为高,对应于当前输入R=1和S=1,当前Q=1。这个和⑧的输出相同,称为基本SR锁存器的保持状态,即当前输出状态和前一个输出状态保持一致。
图2.42给出了同步SR锁存器的内部结构,这个锁存器增加了两个与非门。表2.21给出了同步SR锁存器的逻辑关系。同步SR锁存器是在基本SR锁存器的前面增加了CLK控制的与非门电路。
图2.42 同步SR锁存器的内部结构
表2.21 同步SR锁存器的逻辑关系
从图2.42中可以得到下面的分析结果:
(1)当CLK为逻辑低时,R和S连接到前端与非门的输入不会送到基本RS锁存器中,此时后面基本RS锁存器的输入为高。所以,同步SR锁存器处于保持状态。
(2)当CLK为逻辑高时,R和S的输入端通过前面的与非门逻辑送入到后面的基本SR锁存器中,其分析方法与前面基本SR锁存器相同。
(3)根据前面的分析,CLK控制逻辑拥有最高优先级,即当CLK为逻辑低的时候,不管R和S的输入逻辑处于何种状态,同步SR锁存器都将处于保持状态。
为了避免在SR锁存器中出现不允许的状态,应确保S和R总是处于相反的逻辑状态。如图2.43所示,在同步SR锁存器前面添加反相器,这样的结构叫作D锁存器。表2.22给出了D锁存器的逻辑关系。
图2.43 D锁存器的内部结构
表2.22 D锁存器逻辑关系
图2.44给出了使用图2.43给出的电路结构所构建的D锁存器,图2.45给出了对该电路执行SPICE瞬态分析的结果。下面通过该仿真结果的分析,帮助读者理解D锁存器的工作原理。
图2.44 使用图2.43给出的电路结构所构建的D锁存器
图2.45 对图2.44所示的电路执行SPICE瞬态分析的结果
注 :读者进入本书配套提供例子的\eda_verilog\D_latch.ms14路径下,用Multisim 14工具打开该设计,执行SPICE瞬态分析仿真,观察仿真结果。
①当CLK=0且D=0时,D锁存器前端的两个与非门输出均为1。这样,D锁存器后端的基本SR锁存器保持前面的状态不变。
② 和①的结果相同,由于②前面的Q输出为低,所以在②时,Q的输出仍然保持为低。
③当CLK=1且D=1时,D锁存器前端与非门的输出分别为0和1,参考基本RS锁存器的结构,Q输出为1, 输出为0。此时,D锁存器工作在置位状态,Q的输出为1。
④ 当CLK=0时,D锁存器处于保持第③输出的状态。
⑤ 当CLK=0时,D锁存器处于保持第④输出的状态。
⑥ 当CLK=1且D=0时,D锁存器前端与非门的输出分别为1和0,参考基本RS锁存器的结构,Q输出为0, 输出为1。此时,D锁存器工作在复位状态,Q的输出为0。
⑦ 和③的条件相同。此时,D锁存器工作在置位状态,Q输出为1。
如图2.46所示,SN74LS373是包含8个D锁存器的专用芯片。表2.23给出了该芯片的逻辑关系。
图2.46 SN74LS373的引脚图
表2.23 SN74LS373的逻辑关系
本节将介绍基本D触发器和带置位/复位D触发器。
图2.47给出了基本边沿触发的D触发器结构,该触发器在时钟CLK的上升沿将D的值保存到Q。
注: ①触发器和锁存器不同的是,锁存器是靠控制信号的“电平”高低实现数据的保存的,而触发器是靠控制信号的“边沿”变化实现数据的保存的。触发器只对“边沿”敏感,而锁存器只对“电平”敏感。
② 与非门1和2构成基本RS触发器。
③ 当 和 均为逻辑1时(反馈线 F4和 F5连在这两个输入端),处于保存数据状态。
图2.47 基本边沿触发的D触发器结构
图2.48给出了使用图2.47给出的电路结构所构建的D触发器,图2.49给出了对该电路执行SPICE瞬态分析的结果。下面通过该仿真结果的分析,帮助读者理解D触发器的工作原理。
图2.48 使用图2.47给出的电路结构所构建的D触发器
图2.49 对图2.48所示的电路执行SPICE瞬态分析的结果
注: 读者进入本书配套提供例子的\eda_verilog\D_FF.ms14路径下,用Multisim 14工具打开该设计,执行SPICE瞬态分析仿真,观察仿真结果。
① CLK=0且D=0,则F4=1, F5=1,F6=1, F3=0。此时,D触发器处于保持状态。
② CLK变成1, F5变成0, F4保持不变,其仍然为1,复位SR触发器。此时,Q=0。
③CLK=1且D=1,则F6=1, F5=0, F4保持不变,其仍然为1,复位SR触发器。此时,Q=0。
④ CLK=0且 D=1,则 F4=1, F5=1, F6=1, F3=0。此时,D 触发器处于保持状态。
⑤ CLK变成1, F4变成0, F5=1,置位SR触发器。此时,Q=1。
综合上述分析,可以得出下面重要的结论:
对于该D触发器来说,总是在时钟的上升沿(有些设计可以是在时钟的下降沿)时保存当前D输入的状态并且反映到输出端Q。如果不满足上升沿的条件,则输出端Q保持其原来的状态。
图2.50给出了带置位/复位D触发器的结构。图2.50中,在基本D触发器的结构中添加了异步置位/复位信号。表2.24给出了带置位/复位D触发器的逻辑关系。
图2.50 带置位/复位D触发器的结构
表2.24 带置位/复位D触发器的逻辑关系
(1)当S=1, R=0时,将输出Q立即置位为逻辑1,并不需要等待下一个时钟的上升沿。
(2)当S=0, R=1时,将输出Q立即复位为逻辑0,并不需要等待下一个时钟的上升沿。
图2.51给出了带置位/复位D触发器的符号描述。
图2.51 带置位/复位D触发器的符号描述
表2.25给出了74LS系列中用于D触发器的专用芯片。
表2.25 74LS系列中用于D触发器的专用芯片
D触发器是最简单且最有用的边沿触发存储器件,它的输出取于输入数据和输入时钟。在时钟的边沿(上升沿/下降沿),将输入数据的当前逻辑状态保存到触发器的数据输出端。D触发器可以用于任何需要触发器的场合。很多年前,出现了逻辑行为类似于D触发器的其他类型的触发器。本节将主要介绍JK触发器和T触发器。
JK触发器使用两个输入控制状态的变化,即输入端J用于置位输出,输入端K用于复位输出。当J和K处于有效输入时,输出将在逻辑“0”和逻辑“1”之间进行切换。图2.52给出了JK触发器的符号。表2.26给出了JK触发器的逻辑关系。
图2.52 JK触发器的符号
表2.26 JK触发器的逻辑关系
注: 当输出端都为H时,表示不期望的状态。
图2.53给出了使用专用JK触发器芯片74LS112所构建的触发器电路,图2.54给出了对该电路执行SPICE瞬态分析的结果。下面通过对该仿真结果的分析,帮助读者理解JK触发器的工作原理。
图2.53 使用专用JK触发器芯片74LS112所构建的触发器电路
图2.54 对图2.53所示的电路执行SPICE瞬态分析的结果
注: 读者进入本书配套提供例子的\eda_verilog\JK_FF.ms14路径下,用Multisim 14工具打开该设计,执行SPICE瞬态仿真,观察仿真结果。
① PRE=1, CLR=0, JK触发器处于复位状态,Q=0。
② PRE=0, CLR=1, JK触发器处于置位状态,Q=1。
③ J=0, K=0,在CLK下降沿处Q输出为保持状态,即Q的输出保持和下降沿前的输出状态一样,Q=1。
④ J=1, K=0,在CLK下降沿处Q输出为高,Q=1。
⑤ J=0, K=1,在CLK下降沿处Q输出为低,Q=0。
⑥和③的条件一样,Q=0。
⑦ J=1, K=1,在CLK下降沿处Q状态发生翻转,即Q的输出是对下降沿前的输出状态进行取反,Q=1。
当T输入有效时,在每个时钟沿到来时,输出将在逻辑“0”和逻辑“1”之间切换。图2.55给出了T触发器的符号。表2.27给出了T触发器的逻辑关系,表中的Q P 表示CLK上升沿到来之前Q的输出状态;Q N 表示CLK上升沿到来之后Q的输出状态。
图2.55 T触发器的符号
表2.27 T触发器的逻辑关系
图2.56给出了使用T触发器所构建的触发器电路,图2.57给出了对该电路执行SPICE瞬态分析的结果。下面通过对该仿真结果的分析,帮助读者理解T触发器的工作原理。
图2.56 使用T触发器所构建的触发器电路
图2.57 对图2.56所示的电路执行SPICE瞬态分析的结果
注: 读者进入本书配套提供例子的\eda_verilog\T_FF.ms14路径下,用Multisim 14工具打开该设计,执行SPICE瞬态仿真,观察仿真结果。
① T=0且Q P =0,所以Q N =0。
② T=1且Q P =0,所以Q N =1。
③ T=1且Q P =1,所以Q N =0。
④ T=0且Q P =0,所以Q N =0。
⑤ T=1且Q P =0,所以Q N =1。
⑥ T=0且Q P =1,所以Q N =1。
前面介绍了D触发器的结构和工作原理,从中可以知道一个D触发器可以保存一个比特位。
(1)时钟上升沿到来的时候,D=1,则Q=1。
(2)时钟上升沿到来的时候,D=0,则Q=0。
在真正的数字系统中,输入到D触发器的时钟信号是连续的,这就是说,每当一个时钟上升沿到来的时候,D的值就被保存到Q。在前面D触发器的基础上,添加另一个称为load的输入线,如图2.58所示。当load信号线为高时,inp0的信号就在下一个时钟上升沿到来的时候保存到Q 0 ;当load信号为低时,接入反馈通道。
假设时钟信号连续运行,为了保证每个周期中Q的值不变,则Q的值反馈到逻辑与门,最后通过 信号进行逻辑与运算和逻辑或运算后送到D触发器的输入端。
当load信号为高时,inp0和load信号进行逻辑与运算后,经过逻辑或运算,送到D触发器的输入端,在下一个时钟上升沿到来的时候保存到Q 0 端。
图2.58 一位寄存器的结构
将N个D触发器级联,可以构成N位移位寄存器。图2.59给出了4位移位寄存器的结构。当每个时钟的上升沿到来时,数据向右移动一位。在每个时钟的上升沿到来时,当前的data in数据移动到Q 3 ,前一时刻Q 3 的值移动到Q 2 ,前两个时刻Q 2 的值移动到Q 1 ,前3个时刻Q 1 的值移动到Q 0 。
图2.59 4位移位寄存器的结构
图2.60给出了使用74LS273专用D触发器芯片所构建的4位移位寄存器电路,图2.61给出了对该电路执行SPICE瞬态分析的结果。
图2.60 使用74LS273专用D触发器芯片所构建的4位移位寄存器电路
图2.61 对图2.60所示的电路执行SPICE瞬态分析的结果
注: 读者进入本书配套提供例子的\eda_verilog\shifter.ms14路径下,用Multisim 14工具打开该设计,执行SPICE瞬态仿真,观察仿真结果。
思考与练习2-7: 请说明组合逻辑电路和时序逻辑电路的区别。
思考与练习2-8: 请说明同步时序逻辑电路和异步时序逻辑电路的区别。
思考与练习2-9: 使用D/JK触发器设计一个6分频的分频电路。
思考与练习2-10: 使用D/JK触发器设计一个实现8位循环左移的移位寄存器电路。