原创 【转】寄存器_触发器_锁存器区别与联系

2013-7-15 11:09 1793 11 11 分类: FPGA/CPLD

1.1 寄存器

  在实际的数字系统中,通常把能够用来存储一组二进制代码的同步时序逻辑电路称为寄存器.由于触发器内有记忆功能,因此利用触发器可以方便地构成寄存器。由于一个触发器能够存储一位二进制码,所以把n个触发器的时钟端口连接起来就能构成一个存储n位二进制码的寄存器。

1.2 锁存器

由若干个钟控D触发器构成的一次能存储多位二进制代码的时序逻辑电路。数据有效迟后于时钟信号有效。这意味着时钟信号先到,数据信号后到。在某些运算器电路中有时采用锁存器作为数据暂存器。

1.3 缓冲器

缓冲器相当于一个寄存器,暂时保存数据.缓冲是用来在两种不同速度的设备之间传输信息时平滑传输过程的常用手段。除了在关键的地方采用少量硬件缓冲器之外,大都采用软件缓冲。软件缓冲区是指在I/O操作期间用来临时存放输入/输出数据的一块存储区域。在操作系统中,引入缓冲的主要原因如:
   缓和CPU与l/0设备间速度不匹配的矛盾。一般情况下,程序的运行过程是时而进行计算,时而进行输入或输出。以输出为例,如果没有缓冲,则程序在输出时,必然由于打印机的速度跟不上而使CPU停下来等待;然而在计算阶段,打印机又无事可做。如果设置一个缓冲区,程序可以将待输出的数据先输出到缓冲区中,然后继续执行;而打印机则可以从缓冲区取出数据慢慢打印。
1.4 寄存器和锁存器的区别

(1)寄存器是同步时钟控制,而锁存器是电位信号控制。

(2)寄存器的输出端平时不随输入端的变化而变化,只有在时钟有效时才将输入端的数据送输出端(打入寄存器),而锁存器的输出端平时总随输入端变化而变化,只有当锁存器信号到达时,才将输出端的状态锁存起来,使其不再随输入端的变化而变化

可见,寄存器和锁存器具有不同的应用场合,取决于控制方式以及控制信号和数据之间的时间关系:若数据有效一定滞后于控制信号有效,则只能使用锁;数据提前于控制信号而到达并且要求同步操作,则可用寄存器来存放数据。

一、锁存器

1. 锁存器的工作原理

锁存器不同于触发器,它不在锁存数据时,输出端的信号随输入信号变化,就像信号通过一个缓冲器一样;一旦锁存信号起锁存作用,则数据被锁住,输入信号不起作用。锁存器也称为透明锁存器,指的是不锁存时输出对于输入是透明的 。

锁存器原理见图

20130715110628907001.jpg

锁存器

20130715110631857002.gif 是锁存控制信号输入端,D数据输入端,Q和 20130715110634308003.gif 是数据互补输出端。

Ⅰ: 20130715110631857002.gif =0, 20130715110638702004.gif 左与门被封锁, 20130715110643299005.gif 被封锁

20130715110638702004.gif 输出 20130715110646803006.gif ∴ 20130715110649400007.gif

Ⅱ: 20130715110631857002.gif20130715110652167008.gif时,分两种情况

(a) 20130715110656967009.gif   20130715110638702004.gif 输出 20130715110659262010.gif ,所以D不影响 20130715110702210011.gif

(b) 20130715110706695012.gif   20130715110638702004.gif 输出 20130715110709316013.gif ,所以D也不影响 20130715110702210011.gif

∴结论:原来状态不被改变,D不影响 20130715110702210011.gif .

由上述分析看出:

20130715110712997014.gif

也就是说, 20130715110631857002.gif 由0 20130715110715588015.gif 1时刻将数据D锁定并保持,直到 20130715110631857002.gif 由1 20130715110715588015.gif 0.

本例锁存器是控制信号 20130715110718367016.gif 上升沿锁存数据,高电平保持,非号的意义是低电平时输入数据可以直达输出端。有的锁存器是控制信号C下降沿锁存低电平保持,即加一个非门将控制信号C反相;有的锁存器在输出端加一个三态门,由另一个控制信号OC控制;另外还有的锁存器带有直接置0(清除)、置1(预置)输入端,等同于触发器的RD,SD端。

集成锁存器有多种型号,如 TTL的74LS77,74LS363等,也有CMOS的如4508,4042,74HL373等,需要使用时可以查阅手册。

二、数据寄存器

寄存器用于寄存一组二值代码,它被广泛的用于各类数字系统和计算机中。因为一个触发器能储存1位二值代码,所以N个触发器组成的寄存器能储存一组N位二值代码。

对寄存器中的触发器只要求它们具有置1,置0的功能即可,因而无论是用同步RS结构触发器,还是用主从结构或边沿触发结构的触发器,都可以组成寄存器,一般由D触发器组成。

下图给出一个4位数码寄存器,时钟CP被称为存数指令或存数命令,在CP脉冲的上升沿时刻,各触发器将各自数据输入端D的数据存入,除此时刻,无论CP是低电平、高电平、还是下降沿,各触发器保持各自的数据不变。

20130715110721923017.gif

四位数码寄存器

三、移位寄存器

寄存器只有寄存数据或代码的功能。有时为了处理数据,需要将寄存器中的各位数据在移位控制信号作用下,依次向高位或向低位移动1位。具有移位功能的寄存器称为移位寄存器。移位寄存器按数码移动方向分类有左移,右移,可控制双向(可逆)移位寄存器;按数据输入端、输出方式分类有串行和并行之分。

1. 串行码与通信

数据通信几乎都用串行方式将传送的数据按时间顺序一位一位地传送,以节省电缆芯线条数,但是在终端的数据处理是并行的,这就需要在发送端将要发送的并行数据变成串行数据才能发送,而在接收端需要将接收到的串行数据再转换成并行数据进行处理,这些转换工作是由移位寄存器完成的。

2. 串入并出移位寄存器

20130715110725298018.gif

4位串入并出右移寄存器

上图是一个简单的4位右移寄存器,在移位指令(CP脉冲)作用下输入数据D存入FF3,Q3的状态移存到FF2,由此得到逻辑式:

20130715110728356019.gif

在四个CP脉冲之后,将四个串行码移位存入4个触发器,取出数据方式是在所有的触发器地Q端同时取出,称为并行输出,移位寄存器即完成了串行码到并行码的转换功能。

假设输入串行码为4位二进制数1011,输入方式为低位在先,也就是按1101地顺序依次输入,可以分析动作特点:

20130715110732446020.gif

20130715110735709021.gif

经过4个时钟脉冲后,1011出现在寄存器输出端 20130715110739856022.gif ,这样就将串行输入D的数据转换为并行输出。同时在第八个时钟脉冲作用后,数码从 20130715110742676023.gif 端全部移出寄存器,这说明存入该寄存器中的数码也可以从 20130715110742676023.gif 端串行输出。

既可以右移,又可以左移,而且除了D边沿触发器构成移位寄存器外,还可以用诸如JK等触发器构成移位寄存器。

3. 并入串出移位寄存器。

20130715110745723024.jpg

4位并入串出右移寄存器

上图是一个简单的4位右移寄存器

u       取样方式M=1时,CP的作用是取样指令。在CP的作用下,输入数据 20130715110748765025.gif ~ 20130715110751181026.gif 通过与非门存入 20130715110754644027.gif ~ 20130715110757662028.gif , 20130715110751181026.gif 即出现在 20130715110742676023.gif 输出第一个数据。

u       M=0时,封锁数据输入的与门,CP脉冲的作用也相应的转变为移位指令用逻辑式表示:

20130715110800558029.gif

假设输入并形码为1011输出方式位低位在先,也就是按1、1、0、1顺序输出,我们可以画出状态表和波形图。

20130715110804710030.jpg

4位串入并出右移寄存器状态表和状态图

4. 双向移位寄存器

前面讲的右向移位寄存器:左边触发器的输出作为右邻触发器的数据的数据输入。如果让右边触发器的输出作为左邻触发器的输入,则可构成左向移位寄存器。当然如果增加一些控制门后,则可以实现双向移位寄存器。在二进制数之计算中,左移相当于对数值乘2,右移相当于对数值除2,因而在计算机中常使用的既能左移又能右移的双向寄存器。在移存型计数器中介绍集成双向移位寄存器74194。

四、寄存器的应用

1. 可以完成数据的并串、串并转换

2.       可以用做显示数据锁存器

许多设备需要显示计数器的记数值,以8421BCD码记数,以七段显示器显示,如果记数速度较高,人眼则无法辨认迅速变化的显示字符。在计数器和译码器之间加入一个锁存器,控制数据的显示时间是常用的方法。

3.       用作缓冲器

缓冲器在数字系统中用途很多:(1)如果器件带负载能力有限,可加一级带驱动器的缓冲器;(2)前后级间逻辑电平不同,可用电平转换器加以匹配;(3)逻辑极性不同或需要将单性变量转换为互补变量时,加带反相缓冲器;(4)需要将缓变信号变为边沿陡峭信号时,加带施密特电路的缓冲器(5)数据传输和处理中不同装置间温度和时间不同时,加一级缓冲器进行弥补等等。74LS373、74LS374即为带动驱动器的组件,可以用作缓冲器,能够完成上述(1)、(5)两个任务。

4. 组成计数器

移位寄存器可以组成移位型计数器,如环形或扭环形计数器。

寄存器一般是边沿触发的触发器,电路里叫register,而触发器就是楼上所说的各种逻辑门构成的包含电平触发和边沿触发的两种,而锁存器则是电平触发的。所以一般说来,我们只叫寄存器和锁存器两种,在时序电路中寄存器的作用就是只在时钟的边沿有效传输data(setup time和hold time满足),而锁存器则在有效电平器件都可以传输data

寄存器:register,由时钟沿触发的,一般是主从的,我们这数字电路里也学过主要是由传输门和反向器构成,应用很广!
锁存器:latch,由电平触发,有很很多种,有我们数字电路里学的JK,RS等,一般是用传输门和反向器构成构成在较多,其优点是面积小,但时序分析较困难!
触发器一般是指寄存器:flip-flop

D触发器上电时Q和Q非的电平是怎样的?

D触发器刚上不定的。只有当有反馈后才知道。可以在R、S端加RC延时电路来预制初态

锁存器

在实际的数字系统中,通常把能够用来存储一组二进制代码的同步时序逻辑电路称为寄存器.由于触发器内有记忆功能,因此利用触发器可以方便地构成寄存器。由于一个触发器能够存储一位二进制码,所以把n个触发器的时钟端口连接起来就能构成一个存储n位二进制码的寄存器。锁存器是电平触发的存储单元,数据存储的动作取决于输入时钟(或者使能)信号的电平值,尽当锁存器处于使能状态时,输出才会随着数据输入发生变化。


触发器

触发器是边沿敏感的存储单元,数据存储的动作有某一信号的上升或者下降沿进行同步的。在实际的数字系统中,通常把能够用来存储一组二进制代码的同步时序逻辑电路称为寄存器.由于触发器内有记忆功能,因此利用触发器可以方便地构成寄存器。由于一个触发器能够存储一位二进制码,所以把n个触发器的时钟端口连接起来就能构成一个存储n位二进制码的寄存器。寄存器用来存放数据的一些小型存储区域,用来暂时存放参与运算的数据和运算结果。其实寄存器就是一种常用的时序逻辑电路,但这种时序逻辑电路只包含存储电路。寄存器的存储电路是由锁存器或触发器构成的,因为一个锁存器或触发器能存储1位二进制数,所以由N个锁存器或触发器可以构成N位寄存器。 触发器是在时钟的沿进行数据的锁存的,而锁存器是用电平使能来锁存数据的。所以触发器的Q输出端在每一个时钟沿都会被更新,而锁存器只能在使能电平有效器件才会被更新。 有一些教科书里的触发器实际是锁存器。在FPGA设计中建议如果不是必须那么应该尽量使用触发器而不是锁存器。

钟控D触发器其实就是D锁存器,边沿D触发器才是真正的D触发器,钟控D触发器在使能情况下输出随输入变化,边沿触发器只有在边沿跳变的情况下输出才变化。两个D锁存器可以构成一个D触发器,归根到底还是dff是边沿触发的,而latch是电平触发的。锁存器的输出对输入透明的,输入是什么,输出就是什么,这就是锁存器不稳定的原因,而触发器是由两个锁存器构成的一个主从触发器,输出对输入是不透明的,必须在时钟的上升/下降沿才会将输入体现到输出,所以能够消除输入的毛刺信号。

触发器与锁存器的比较:
1、latch由电平触发,非同步控制。在使能信号有效时latch相当于通路,在使能信号无效时latch保持输出状态。DFF由时钟沿触发,同步控制。
2、latch对输入电平敏感,受布线延迟影响较大,很难保证输出没有毛刺产生;DFF则不易产生毛刺。
3、如果使用门电路来搭建latch和DFF,则latch消耗的门资源比DFF要少,这是latch比DFF优越的地方。所以,在ASIC中使用 latch的集成度比DFF高,但在FPGA中正好相反,因为FPGA中没有标准的latch单元,但有DFF单元,一个LATCH需要多个LE才能实现。latch是电平触发,相当于有一个使能端,且在激活之后(在使能电平的时候)相当于导线了,随输出而变化。在非使能状态下是保持原来的信号,这就可以看出和flip-flop的差别,其实很多时候latch是不能代替ff的。
4、latch将静态时序分析变得极为复杂。

5、目前latch只在极高端电的路中使用,如intel 的P4等CPU。 FPGA中有latch单元,寄存器单元就可以配置成latch单元,在xilinx v2p的手册将该单元成为register/latch单元,附件是xilinx半个slice的结构图。

一般的设计规则是:在绝大多数设计中避免产生latch。它会让您设计的时序完蛋,并且它的隐蔽性很强,非老手不能查出。latch最大的危害在于不能过滤毛刺。这对于下一级电路是极其危险的。所以,只要能用D触发器的地方,就不用latch。
       有些地方没有时钟,也只能用latch了。比如现在用一个clk接到latch的使能端(假设是高电平使能),这样需要的setup时间,就是数据在时钟的下降沿之前需要的时间,但是如果是一个DFF,那么setup时间就是在时钟的上升沿需要的时间。这就说明如果数据晚于控制信号的情况下,只能用latch,这种情况就是,前面所提到的latch timing borrow。基本上相当于借了一个高电平时间。也就是说,latch借的时间也是有限的。

对latch进行STA的分析其实也是可以,但是要对工具相当熟悉才行.不过很容易出错.当前PrimeTime,是支持进行latch分析的.现在一些综合工具内置的STA分析功能也支持,比如RTL compiler, Design Compiler.除了ASIC里可以节省资源以外。latch在同步设计里出现的可能还是挺小的,现在处理过程中大都放在ff里打一下。

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
11
关闭 站长推荐上一条 /3 下一条