第5章
CHAPTER 5


锁存器、触发器和寄存器








组合逻辑电路的输出仅和输入有关,当输入发生变化时,输出随之发生变化,不能够保存信号。实际上大多数数字系统还需要存储元件,需要把电路的状态或某时刻的信息保存下来。数字电路中最基本的存储元件是锁存器,触发器由锁存器构成。数字系统通常直接使用触发器构成的寄存器作为存储单元。

本章主要介绍基本的存储单元: 锁存器、触发器和寄存器,主要包括下列知识点。

1) SR和锁存器

理解SR和锁存器的结构和工作原理,理解锁存器中数据存储的特点。

2) 门控SR锁存器

理解门控SR锁存器对SR锁存器的改进,理解门控SR锁存器的结构和工作原理。

3) D锁存器

理解D锁存器的电路结构和工作原理,掌握D锁存器的存储特点

4) 主从边沿触发器

理解主从边沿D触发器的电路结构和工作原理,掌握D触发器的存储特点,掌握D触发器输入和输出之间的时序关系。

5) 寄存器

掌握用D触发器构成通用寄存器的方法,掌握带控制寄存器的设计方法。

6) 移位寄存器

掌握基本移位寄存器的电路结构和工作原理,掌握移位寄存器的各触发器输入输出之间的时序关系,掌握带控制移位寄存器的设计方法。



视频讲解

5.1SR和锁存器
5.1.1SR锁存器
图51(a)所示是由两个交叉耦合的或非门组成的SR锁存器。锁存器有两个输入S(Set)和R(Reset),有两个输出Q和(或Q′)。其中S用于置位,R用于复位,Q和(或Q′)称为锁存器的状态。SR锁存器的功能表如图51(b)所示,Q*和*分别表示Q和的新状态或次态。SR锁存器的逻辑符号如图51(c)所示。



图51或非门构成的SR锁存器


SR锁存器的工作原理如下: 

(1) 当S=1,R=0时,Q=1,=0,这种状态称为锁存器被置位为1; 

(2) 当S=0,R=1时,Q=0,=1,这种状态称为锁存器被复位为0; 

(3) 当S=0,R=0时,Q和保持原来的状态不变,原来是1状态就还是1状态,原来是0状态就还是0状态; 

(4) 当S=1,R=1时,Q和都为0。但在这种情况下,如果下一时刻输入同时变为0,即S=0,R=0,因为原来的Q和都为0,Q和就会变为1,然后再反馈回或非门的输入端,使得输出Q和又变回0。如果通过两个或非门的延时完全相等,则这样的振荡会无限重复,无法达到一个稳定的状态,如图52所示。在实际电路中,这些门的延时总是会有不同,锁存器最终会停留在0稳定状态或1稳定状态,但无法确定究竟是哪个稳定状态。

因此,要使SR锁存器正常工作,应避免输入S和R同时为1,即SR锁存器正常工作的约束条件为S·R=0。



图52S和R同是1时引发不确定状态


5.1.2锁存器

图53(a)所示是由两个与非门构成的锁存器,它的功能表和逻辑符号分别如图53(b)和图53(c)所示。和SR锁存器类似,它也有一个置位端和一个复位端,有两个输出Q和(或Q′)。



图53与非门构成的锁存器


锁存器工作原理如下: 

(1) 当=0,=1时,Q=1,=0,锁存器被置位为1; 

(2) 当=1,=0时,Q=0,=1,锁存器被复位为0; 

(3) 当=1,=1时,Q和保持原来的状态不变,原来是1状态就还是1状态,原来是0状态就还是0状态; 

(4) 和或非门构成的SR锁存器类似,当=0,=0时,Q和都被置为1。但如果下一时刻和同时变为1,即=1,=1,因为原来Q和都是1,经与非门使得Q和变为0,再反馈回与非门的输入端,使得Q和又变为1。如果通过两个与非门的延时完全相等,则这样的振荡会无限重复,无法达到一个稳定的状态,如图54所示。和SR锁存器类似,由于延时总会有不同,锁存器最终会停留在某一个稳定状态,但无法确定究竟是哪个稳定状态。

因此,要使锁存器正常工作,应避免输入和同时为0,和至少有一个为1,即锁存器正常工作的约束条件为+=1。



图54和同为0引发不确定状态


比较上面或非门构成的SR锁存器和与非门构成的锁存器,可以看出SR锁存器和锁存器的输入信号互补。SR锁存器的输入信号S和R是1有效,锁存器的输入信号和是0有效。字母上的横线表示要得到期望的状态,相应的输入信号必须为低(0)。

通过上面的分析可以看出,基本的SR和锁存器可以用作存储单元。对于SR锁存器,当S和R同时为0时,锁存器可以保持它原来的状态; 当输入改变时才会相应地改变状态。锁存器的行为类似。



视频讲解

5.2门控SR锁存器

基本的锁存器的输入信号直接加在或非门或与非门的输入端,只要输入信号发生改变,输出状态就会改变。如果不能确切知道或控制输入信号的变化,就无法确切知道锁存器的状态什么时刻发生了变化。因此锁存器的一个问题就是输出状态对输入很敏感,另一个问题是输入信号必须满足约束条件,否则可能引发不定状态。

在实际应用中往往不希望锁存器的状态随输入信号的变化立即发生变化,而是希望锁存器的状态在控制信号的控制下发生变化,由控制信号来控制状态发生变化的时刻。

图55所示是一个门控的与非门构成的SR锁存器,它由基本的与非门构成的锁存器和两个额外的与非门构成,输入信号C作为控制使能连接到两个与非门的输入。



图55门控的SR锁存器


门控的SR锁存器工作原理如下: 

(1) 当C为0时,两个与非门的输出被置为1,锁存器的和都为1,这时锁存器的状态保持不变; 

(2) 当C为1时,两个与非门打开,C对输入信号S和R没有影响,S和R才能影响到锁存器的状态。

用控制信号C来控制锁存器时,控制信号有效时锁存器能够正常工作,对输入信号敏感; 控制信号C无效时,即使输入信号变化,锁存器也不改变原来的状态。

门控SR锁存器解决了基本锁存器对输入信号敏感的问题。但是当C为1时,如果输入S=1,R=1,仍然可能会引发不确定状态。锁存器要正常工作,输入信号S和R必须要满足约束条件S·R=0。

5.3D锁存器

消除锁存器不定状态的一种方法就是确保置位信号和复位信号永远不会同时有效,D锁存器就是按照这种方法构造的,D锁存器的逻辑电路如图56(a)所示,它的功能表和逻辑符号分别如图56(b)和图56(c)所示。D锁存器只有两个输入信号,数据输入信号D和控制信号C。和图55所示的门控SR锁存器相比,D锁存器的D信号直接加在了门控SR锁存器的S端,D′加在了R端,这样门控SR锁存器的S端和R端的信号总是10或01,不会出现S和R同时为1的情况,因此不会引发不确定状态。



图56D锁存器


当C=1时,如果D=1,就相当于门控SR锁存器的S端和R端的输入为10,输出Q=1,锁存器处于置位状态; 如果D=0,就相当于门控SR锁存器的S端和R端的输入为01,输出Q=0,锁存器处于复位状态。当C=0时,锁存器保持原来的状态不变。

D锁存器可以把数据输入信号D保存起来。当控制信号C有效(为1)时,数据输入信号D被传送到输出端Q,Q值随输入信号D的变化而变化。当控制信号C无效(为0)时,Q保持原来的状态不变,即数据输入在C发生变化时(前一时刻)的信息会一直保持在输出端Q不变。

图57所示是D锁存器的时序图。在t1时刻之前,C=0,Q的初始值为0,虽然这一时间段内输入数据D发生变化,但输出Q不随D发生变化,保持为0。在t1和t2之间,C=1,D=1,输出Q从0变为1。在t2和t3之间,C=0,虽然D发生变化,从1变为0,但输出Q一直保持C变为0之前那一时刻的值1,直到t3时刻。在t3和t4之间,C=1,D=0,输出Q从1变为0。在t4和t5之间,C=0,在这段时间内虽然D发生变化,从0变为1,但输出Q一直保持C变为0之前一刻的值0,直到t5时刻。在t5和t6之间,C=1,D开始一段时间为1,然后变为0,输出Q随着D的变化而变化,也是先变为1,然后变为0。在t6和t7之间,C=0,输入先是0,然后从0变为1,再从1变为0,但Q一直保持C变为0之前一刻的值0。在t7和t8之间,输入D从0变为1,输出Q随着D的变化而变化,也是先为0,然后变为1。在t8时刻之后,C变为0,输入D先是1,然后变为0,输出Q保持C变为0前一刻的值1。



图57D锁存器时序图


由图57可知,D锁存器的输出Q由控制信号C的电平控制,C为高电平时,输出Q随输入D的变化而变化; C为低电平时,输出Q保持C从高变为低时的数据输入D的值。因此D锁存器被称为是电平敏感的或电平触发的。

D锁存器的一个问题是它的透明性。从图57所示的时序图可以看出,当控制信号为高电平时,如果数据输入D发生变化,输出就会立即做出响应,随之改变,进入新的状态。使用这样的锁存器作为存储元件,当锁存器的输入受其他锁存器的输出或自身输出的控制时,将会使得锁存器的状态不可预测。



视频讲解

5.4主从边沿触发器
5.4.1主从边沿D触发器
要消除D锁存器的透明性,一种方法是在输出信号改变之前,把输入信号和输出信号之间的通路断开,使得新状态只取决于前面某个瞬间的状态,从而不会发生状态多次改变的情况。

一种常用的构造方法是把两个锁存器连接在一起,形成主从式边沿D触发器。主从式边沿D触发器的电路结构和时序图如图58所示。



图58主从式边沿D触发器的电路结构和时序图


图58(a)中左边的D锁存器称为主锁存器,右边的称为从锁存器,主从锁存器的控制输入前都加了反相器。当时钟信号CLK=0时,主锁存器C=1,主锁存器透明,Qm跟随输入D的变化而变化; 从锁存器C=0,锁存器关闭,状态Qs不变。当时钟信号CLK从0变为1时,主锁存器C=0,主锁存器关闭,状态Qm被锁定,不再跟随输入D的变化而变化; 从锁存器C=1,锁存器打开,复制主锁存器的状态,把Qm传送到Qs。所复制的主锁存器的状态是在时钟脉冲从0到1这一瞬间(前一时刻)主锁存器的状态,所以看起来是一种边沿触发行为。当时钟信号CLK=1时,主锁存器关闭不再变化,这时主锁存器和从锁存器的状态都不发生变化。当时钟信号CLK从1变为0时,主锁存器打开,Qm随输入D的变化而变化,但这时从锁存器关闭,因此从锁存器的状态Qs保持不变。

时钟信号从0变到1的瞬间称为时钟的上升沿,从1变为0的瞬间称为时钟的下降沿。从电路的输入和输出端来看,在一个时钟周期内不管输入信号D发生了多少次变化,输出Q只会保存时钟上升沿到来时的输入信号D,即触发器只在时钟沿到来时改变状态,因此这个电路被称为边沿触发的D触发器,边沿触发的D触发器是目前使用最广泛的触发器。图58所示的主从式边沿D触发器在上升沿触发,触发器也可以在下降沿触发,即输出Q只保存下降沿到来时的输入信号D,在下降沿到来时改变状态。

图59所示是两种边沿触发的D触发器符号,符号中时钟信号输入端的“>”标识表示是边沿触发的,有一个小圆圈表示是下降沿,没有小圆圈则表示是上升沿。



图59边沿D触发器符号


通常一个电路中使用的所有触发器都是同一类型的,如都是上升沿触发或都是下降沿触发,这样在时钟沿到来时所有触发器的状态在同一时刻改变,使得电路的各部分同步工作。

在同样时钟和数据驱动下,电平触发的D锁存器和边沿触发的D触发器的电路和时序如图510所示。



图510D锁存器和D触发器时序比较


可以看出,只要时钟信号CLK为高电平,D锁存器的输出Qa就跟随输入D的变化而变化; 而D触发器的输出Qb只在时钟上升沿到来时保存输入D的值,直到下一个时钟上升沿才会改变状态。即D触发器能够保存时钟上升沿时刻的数据输入D的值,且能够保存一个时钟周期。

5.4.2带异步复位和置位的D触发器

D触发器通常用来保存电路的状态和数据,在很多情况下需要能够强制触发器的输出为0(清零)或为1(置位)。要给D触发器增加清零和置位功能,一个简单方法是在构成触发器的锁存器交叉耦合的两个与非门上分别加一个输入RST(复位)和SET(置位),如图511所示。RST为1时,对与非门的输出没有影响; RST为0时,就会强制D触发器的输出Q为0。SET为1时,对与非门的输出没有影响; SET为0时,则会强制D触发器的输出Q为1。需要注意的是,RST和SET不能同时有效。



图511带异步复位和置位的D触发器


在这种电路中,只要RST或SET有效,不管时钟信号是怎样的,输出Q立即被复位为0或被置位为1,这种复位和置位信号被称为异步复位和异步置位信号。

另一种情况是当时钟沿到来时,复位或置位信号有效才能使输出Q复位或置位,这种复位和置位信号被称为同步复位和同步置位信号。



视频讲解

5.5寄存器

从上文对触发器的分析可以知道,一个触发器可以存储1位信息。如果用一组n个触发器就可以保存n位数据,这就是最基本的寄存器。

图512(a)所示是一个由4个D触发器组成的4位寄存器。4个触发器共用一个时钟信号,所有的触发器在时钟上升沿到来时保存各自输入端D的数据到触发器的Q端。4个触发器的复位端也共用一个清零CLR信号,当CLR信号有效时,寄存器清零。在实际电路中,是否提供清零功能由系统需求决定。寄存器的符号如图512(b)所示。



图5124位寄存器


同步电路由一个时钟来驱动,这个时钟连接到所有的寄存器和触发器,像心脏跳动一样为所有的电路提供稳定的时钟脉冲,使得电路各个部分以时钟脉冲为基准来实现同步。

数据存入寄存器称为寄存器的加载(loading)操作,当时钟沿到来时把数据加载进寄存器。在数字系统中,很多时候希望能够控制寄存器数据的加载,在控制信号有效时数据能够加载入寄存器,控制信号无效时保持寄存器保存的内容不变。实现寄存器加载控制的一种方法是屏蔽时钟信号,只需要把加载控制信号load和时钟信号Clock做一个逻辑运算就可以。例如使寄存器时钟输入C=Clock·load,当load为1时,寄存器的时钟输入C就是Clock; 当load为0时,C就为0,即寄存器的时钟输入被屏蔽,不会有时钟沿,因此寄存器的状态(保存的内容)不会发生变化。

这种方法在时钟路径上插入了额外的逻辑门,会使有门控的时钟信号和没有门控的时钟信号的延时不同,使得时钟信号到达不同触发器的时间不同,产生时钟扭曲(clock skew)。真正的同步系统必须保证时钟信号能够同时到达所有的触发器,时钟沿到来时所有的触发器同时改变状态。因此通常不使用这种门控时钟的方法来控制寄存器的数据加载。

控制寄存器数据加载的另一种方法是采用同步使能的方式。图513(a)所示是带使能EN的D触发器逻辑电路图,由基本D触发器和一个MUX21选择器组成,当EN=1时,在时钟沿到来时选择数据输入D加载到触发器; 当EN=0时,在时钟沿到来时选择输出信号Q反馈加载到触发器,就可以使输出保持不变。带使能端EN的D触发器符号如图513(b)所示。



图513带使能的D触发器


图514(a)所示是一个由4个带使能的D触发器构成的带加载控制的4位寄存器逻辑电路图。所有的触发器共用一个时钟,所有触发器的EN端和load相连接,带使能的寄存器符号如图514(b)所示。



图514带加载控制的4位寄存器


当load=1时,4位输入数据在时钟沿到来时加载到寄存器中; 当load=0时,寄存器中的数据在时钟沿到来时保持不变。load信号决定了在时钟沿到来时是接收外部输入数据还是触发器的输出反馈来的数据,所有的触发器都在同一时钟沿到来时实现数据从输入到寄存器输出的传输。这种方法避免了时钟扭曲和电路中的潜在错误,优于门控时钟的方法,因此在实际中得到了广泛的应用。



视频讲解

5.6移位寄存器
5.6.1基本移位寄存器
具有单向或双向移位存储数据功能的寄存器称为移位寄存器。移位寄存器由多个D触发器构成,每个D触发器的输出连接下一个D触发器的输入,所有的D触发器使用同一个时钟来触发移位操作。

图515所示是由D触发器构成的基本的4位移位寄存器,每个触发器的输出Q都直接连接到下一个触发器的输入D,串行输入SI连接到最左端触发器的输入D上,串行输出SO从最右端触发器的输出端Q引出。



图5154位移位寄存器


4位移位寄存器的时序图如图516所示。



图5164位移位寄存器的时序图


假设触发器的初始状态均为0,数据以串行的方式输入到移位寄存器的输入SI,前一个触发器中保存的数据是下一个触发器的输入。当时钟沿到来时,前一个触发器保存的数据就传送到下一个触发器。可以看出,数据每经过一个触发器向后延时一个时钟周期,串行输入数据SI经过4个时钟周期传送到输出SO。



视频讲解

5.6.2具有并行访问功能的移位寄存器

在数字系统中传送n位数据可以用n条线一次传送过去,这种方式称为并行传送。n位数据也可以用一条线传送,一次传送1位,这种方式称为串行传送。串行传送时,可以把n位数据并行加载到移位寄存器中,然后在n个时钟周期逐位移出,从而实现串行传送,这个过程称为并—串转换。同样,在数字系统中也需要把串行数据转换为并行数据,这也可以用移位寄存器实现。用n个时钟周期把n位数据移入移位寄存器中,然后把n个寄存器中的数据并行输出,这个过程称为串—并转换。

例如设计一个具有并行访问功能的4位移位寄存器,输入为时钟信号CLK、模式控制信号shift/load、串行输入数据SI、并行输入数据D4D3D2D1,输出为串行输出SO、并行触发器输出Q4Q3Q2Q1,它的功能表如表51所示。


表51具有并行访问功能的4位移位寄存器功能表




控制信号

shift/load工作模式
触发器输出

Q*1Q*2Q*3Q*4


0向右移位SIQ1Q2Q3

1并行加载D1D2D3D4


图517所示是具有并行访问功能的4位移位寄存器的逻辑电路图。和基本移位寄存器不同,移位寄存器每个触发器的输入都有两个不同的数据源,一个是前一个触发器的输出,另一个是并行加载的外部输入。控制信号shift/load控制工作模式,控制二选一选择器选择送给触发器的输入信号,当shift/load=0时,各触发器的输入选择前一个触发器的输出和外部串行输入,当时钟沿到来时,进行移位操作; 当shift/load=1时,各触发器的输入选择并行的输入数据,时钟沿到来时,并行输入的数据加载入各触发器。各触发器保存的数据Q4Q3Q2Q1也可以并行输出。



图517具有并行访问功能的4位移位寄存器逻辑电路图


5.6.3双向移位寄存器

移位寄存器也可以双向移位。例如设计一个4位双向移位寄存器,用模式控制信号S1S0控制移位寄存器的工作模式,向右的串行输入为SR,向左的串行输入为SL,并行输入数据为D4D3D2D1。表52所示是4位双向移位寄存器的功能表。


表524位双向移位寄存器功能表




控制信号

S1S0工作模式
触发器输出

Q*1Q*2Q*3Q*4


00保持不变Q1Q2Q3Q4

01向右移动SRQ1Q2Q3

10向左移动Q2Q3Q4SL

11并行加载D1D2D3D4




图5184位双向移位寄存器逻辑电路图

在基本4位移位寄存器每个触发器的输入端前加入多路选择器,用模式控制信号S1S0控制触发器输入的信号,就可以控制移位寄存器的工作模式,4位双向移位寄存器的逻辑电路图如图518所示。对于每个D触发器,模式控制信号S1S0控制从多路选择器的输入中选择一个作为D触发器的输入。当S1S0=00时,多路选择器选择加在00端的输入,把D触发器的输出反馈回来作为D触发器的输入,当时钟沿到来时,触发器加载当前保存的值,寄存器的状态保持不变; 当S1S0=01时,多路选择器选择加在01端的输入,其中触发器FF1把向右串行输入SR作为输入,触发器FF2把触发器FF1的输出Q1作为输入,触发器FF3把触发器FF2的输出Q2作为输入,触发器FF4把触发器FF3的输出Q3作为输入,在时钟沿到来时,形成从Q1到Q4的向右移位; 类似地,当S1S0=10时,多路选择器选择加在10端的输入,触发器FF4把向左串行输入SL作为输入,形成从Q4到Q1的向左移位; 当S1S0=11时,多路选择器选择11端的输入,把并行输入的数据D4D3D2D1作为各触发器的输入,当时钟沿到来时,数据并行加载到各触发器。

习题

51锁存器如图519(a)所示,输入信号和的波形如图题519(b)所示,试画出输出Q的波形(Q的初始状态为1)。



图519题51图


52D锁存器(DLATCH)和D触发器(DFF)电路如图520(a)所示,时钟信号CLK和数据输入信号D的波形如图520(b)所示,假设D锁存器和D触发器的初始状态都为0,试画出D锁存器的输出Q1和D触发器的输出Q2的波形。



图520题52图


53DFF构成的移位寄存器如图521(a)所示,时钟CLK和输入信号D的波形如图521(b)所示,试画出Q0、Q1、Q2、Q3的波形。



图521题53图




图521(续)



54用4个DFF和4个MUX41选择器设计一个4位可控双向移位寄存器, CLK是时钟输入信号,A0A1A2A3是外部数据输入信号,S1和S0是功能控制信号,Da是左串行输入信号,Db是右串行输入信号,功能如表53所示。要求画出用DFF和MUX41构成的4位可控双向移位寄存器电路结构图,根据图522中给出的S1S0、A0A1A2A3、Da和Db的波形,填写图521(b)中双向移位器的输出Q0Q1Q2Q3的波形(4位二进制数)。


表53可控双向移位寄存器功能



输入输出功 能 说 明


S1S0Q*0Q*1Q*2Q*3

00Q0Q1Q2Q3保持: Q*0Q*1Q*2Q*3=Q0Q1Q2Q3

01Q1Q2Q3Db左移: Q0←Q1←Q2←Q3←Db

10DaQ0Q1Q2右移: Da→Q0→Q1→Q2→Q3

11A0A1A2A3置位: Q*0Q*1Q*2Q*3=A0A1A2A3





图522题54图