2012年(29)
分类: LINUX
2012-12-12 13:10:30
触发器、寄存器、锁存器
触发器(trigger)是个特殊的,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,当对一个表进行操作( insert,delete, update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。
触发器具有记忆功能的基本逻辑单元,能够存贮一位二进制信息。
基本特点:
1)有两种能够自行保持的稳定状态:0、1;
2)有一对互补输出Q和/Q。
3)不同触发信号可以将触发器设置成“0”或“1” 状态;
4)触发信号撤除后,输出状态维持不变;
5)可能有时钟输入端CP;
6)输出状态不仅与现时的输入有关,还与原来的输出状态有关。
RS触发器:
与非门RS触发器(/R、/S):输出跟随/R(S)的变化,当/R/S=11时输出Q保持不变,当/R/S=00时禁用。约束条件:/R+/S=1
或非门RS触发器:输出跟随S的变化,当RS=00时输出Q保持不变,当RS=11时禁用。
约束条件:R*S=0
RS触发器为电平触发方式:输入信号直接加在输出门上,输入信号全部作用时间内,都能直接改变输出端的状态。
缺点:输出受电平直接控制,电路抗干扰能力下降;约束条件的限制,使用不便;不受统一时钟控制,使得多个触发器无法统一工作。
钟控触发器:受时钟信号控制的触发器
触发器只有在同步信号到达时才按输入信号改变状态。该同步信号叫做时钟脉冲(或时钟信号),简称时钟,用cp表示。
钟控RS触发器(同步RS触发器):cp控制翻转时间,R、S决定翻转状态。
CP=0时:R、S不影响输出状,触发器维持原状态不变。
CP=1时:触发器状态跟随输入信号状态的变化而改变。
输出同或非RS触发器。约束条件: R•S=0
cp=1的全部时间内,R、S变化都将引起触发器状态变化。为电平触发方式。
D触发器:钟控RS触发器,使S=D、R=/D
原理:
CP=1期间,输出状态跟随D变化,CP↓时,输出状态被锁存。锁存的内容是CP下降沿瞬间D的值。 不足:存在空翻现象。
广泛使用的D触发器是一种可防止空翻的集成D触发器,即:维持阻塞D触发器。
维持阻塞边沿D触发器与普通触发器的区别:
电平触发的主从触发器工作时,必须在正跳沿前加入输入信号。如果在CP 高电平期间输入端出现干扰信号,那么就有可能使触发器的状态出错。而边沿触发器允许在CP触发沿来到前一瞬间加入输入信号。这样,输入端受干扰的时间大大缩短,受干扰的可能性就降低了。
主从触发器特点:
1)完成RS触发功能,但仍有约束: R·S=0;
2)动作特点: CP↑开始准备;CP↓翻转;
3)当CP↓到来时,主触发器状态根据CP=1期间R、S变化的情况而定。
4)若CP=1期间输入违反了约束条件,将导致触发器输出不确定。因此电路的结构还需要改进。
主从JK触发器:
目的:改进电路,克服CP =1时输入约束条件。
原理:CP↑,接收输入信号并暂存到主触发器,此时从触发器被封锁,保持原状态不变。CP↓,主触发器状态传送到从触发器,是从触发器输出变到新的状态。
JK=00,Q保持; JK=01,Q=0; JK=10,Q=1; JK=11,Q翻转。
CP=1期间,输入信号J、K不能变化,否则可能产生误动作。
主从J-K触发器的特点:
1)后沿型触发器,无空翻现象发生
2)存在一次变化问题。故要求CP=1期间输入信号保持不变。
3)CP上升沿采样J-K值,CP下降沿新状态被输出
边沿触发器:维持阻塞边沿D 触发器、
目的:解决空翻和一次变化问题
边沿触发方式:仅在时钟边沿瞬间起触发作用,抗干扰能力强。
1)维持阻塞D 触发器:上升沿采样并将新状态输出,仅当CP的上升沿出现的一瞬间,D端的数据才能置入触发器。
2)边沿JK触发器(74LS112):下降沿采样并将新状态输出,在CP=1和CP=0期间保持原状态不变,只有在CP↓到来时,根据上特征方程改变输出状态
应用:用触发器组成寄存器
寄存器是微处理器中的重要部件,用于存放数据处理的中间结果。具有数据“写”入、“读”出、初始化“清零”功能 。
建立时间:是指在时钟沿到来之前数据从不稳定到稳定所需的时间,如果建立的时间不满足要求那么数据将不能在这个时钟上升沿被稳定的打入触发器。
保持时间:是指数据稳定后保持的时间,如果保持时间不满足要求那么数据同样也不能被稳定的打入触发器。
触发器、寄存器、锁存器:
触发器:
边沿敏感的存储单元,数据存储的动作与某一信号的上升或者下降沿进行同步的。
最基本的就是边沿触发的存储单元。
应用场合:时钟有效滞后于数据有效。这意味着数据信号先建立,时钟信号后建立。在CP上升沿时刻打入到寄存器。
寄存器:
在实际的数字系统中,通常把能够用来存储一组二进制代码的同步时序逻辑电路称为寄存器。由于触发器内有记忆功能,因此利用触发器可以方便地构成寄存器。由于一个触发器能够存储一位二进制码,所以把n个触发器的时钟端口连接起来就能构成一个存储n位二进制码的寄存器。
当一个信号signal的赋值是以一个信号的跳变为条件时,或者说当发生同步赋值时,该信号经过综合编译之后就会产生寄存器。这样的赋值过程只能在进程,函数或过程中出现(一般跟在IF signal's EVENT...或WAIT UNTIL...等语句之后)。
锁存器:
锁存器是电平触发的存储单元,数据存储的动作取决于输入时钟(或者使能)信号的电平值,仅当锁存器处于使能状态时,输出才会随着数据输入发生变化。简单地说,它有两个输入,分别是一个有效信号EN,一个输入数据信号DATA_IN,它有一个输出Q,它的功能就是在EN有效的时候把DATA_IN的值传给Q,也就是锁存的过程。
应用场合:数据有效迟后于时钟(或者使能)信号有效。这意味着时钟(或者使能)信号先到,数据信号后到。在某些运算器电路中有时采用锁存器作为数据暂存器。
缺点:时序分析较困难。
不要锁存器的原因:
1)锁存器容易产生毛刺
2)锁存器在ASIC设计中应该说比ff要简单,但是在FPGA的资源中,大部分器件没有锁存器这个东西,所以需要用一个逻辑门和ff来组成锁存器,这样就浪费了资源。
优点:面积小。锁存器比FF快,所以用在地址锁存是很合适的,不过一定要保证所有的latch信号源的质量,锁存器在CPU设计中很常见,正是由于它的应用使得CPU的速度比外部IO部件逻辑快许多。latch完成同一个功能所需要的门较触发器要少,所以在ASIC中用的较多。
触发器&寄存器&锁存器的联系与区别
寄存器:在实际的数字系统中,通常把能够用来存储一组二进制代码的同步时序逻辑电路称为寄存器。由于触发器内有记忆功能,因此利用触发器可以方便地构成寄存器。由于一个触发器能够存储一位二进制码,所以把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单元。
用VHDL来描述就是:
触发器:
process
begin
wait until clk’event and clk=’1’;
q<=d;
end process;
锁存器:
process(en,d)
begin
if en=’1’ then
q<=d;
end if;
end process;
一般的设计规则是:
1)在绝大多数设计中避免产生latch。它会让您设计的时序完蛋,并且它的隐蔽性很强,非老手不能查出。latch最大的危害在于不能过滤毛刺。这对于下一级电路是极其危险的。所以,只要能用D触发器的地方,就不用latch。
2)有些地方没有时钟,也只能用latch了。比如现在用一个clk接到latch的使能端(假设是高电平使能),这样需要的setup时间,就是数据在时钟的下降沿之前需要的时间,但是如果是一个DFF,那么setup时间就是在时钟的上升沿需要的时间。这就说明如果数据晚于控制信号的情况下,只能用latch,这种情况就是,前面所提到的latch timing borrow。基本上相当于借了一个高电平时间。也就是说,latch借的时间也是有限的。
3)对latch进行STA的分析其实也是可以,但是要对工具相当熟悉才行.不过很容易出错.当前PrimeTime,是支持进行latch分析的.现在一些综合工具内置的STA分析功能也支持,比如RTL compiler, Design Compiler.除了ASIC里可以节省资源以外。latch在同步设计里出现的可能还是挺小的,现在处理过程中大都放在ff里打一下。