锁存器(latch)---对脉冲电平敏感,在时钟脉冲的电平浸染下改变状态
锁存器是电平触发的存储单元,数据存储的动作取决于输入时钟(或者使能)旗子暗记的电平值,仅当锁存器处于使能状态时,输出才会随着数据输入发生变革。
锁存器不同于触发器,它不在锁存数据时,输出真个旗子暗记随输入旗子暗记变革,就像旗子暗记通过一个缓冲器一样;一旦锁存旗子暗记起锁存浸染,则数据被锁住,输入旗子暗记不起浸染。锁存器也称为透明锁存器,指的是不锁存时输出对付输入是透明的。

锁存器(latch):我听过的最多的便是它是电平触发的,呵呵。锁存器是电平触发的存储单元,数据存储的动作取决于输入时钟(或者使能)旗子暗记的电平值,当锁存器处于使能状态时,输出才会随着数据输入发生变革。(大略地说,它有两个输入,分别是一个有效旗子暗记EN,一个输入数据旗子暗记DATA_IN,它有一个输出Q,它的功能便是在EN有效的时候把DATA_IN的值传给Q,也便是锁存的过程)。
运用处所:数据有效迟后于时钟旗子暗记有效。这意味着时钟旗子暗记先到,数据旗子暗记后到。在某些运算器电路中有时采取锁存器作为数据暂存器。
缺陷:时序剖析较困难。
不要锁存器的缘故原由有二:1、锁存器随意马虎产生毛刺,2、锁存器在ASIC设计中该当说比ff要大略,但是在FPGA的资源中,大部分器件没有锁存器这个东西,以是须要用一个逻辑门和ff来组成锁存器,这样就摧残浪费蹂躏了资源。
优点:面积小。锁存器比FF快,以是用在地址锁存是很得当的,不过一定要担保所有的latch旗子暗记源的质量,锁存器在CPU设计中很常见,正是由于它的运用使得CPU的速率比外部IO部件逻辑快许多。latch完成同一个功能所须要的门较触发器要少,以是在ASIC中用的较多。
二、触发器
触发器(Flip-Flop,简写为 FF),也叫双稳态门,又称双稳态触发器。是一种可以在两种状态下运行的数字逻辑电路。触发器一贯保持它们的状态,直到它们收到输入脉冲,又称为触发。当收到输入脉冲时,触发器输出就会根据规则改变状态,然后保持这种状态直到收到另一个触发。
触发器(flip-flops)电路相互关联,从而为利用内存芯片和微处理器的数字集成电路(IC)形成逻辑门。它们可用来存储一比特的数据。该数据可表示音序器的状态、计数器的代价、在打算机内存的ASCII字符或任何其他的信息。
有几种不同类型的触发器(flip-flops)电路具有指示器,如T(切换)、S-R(设置/重置)J-K(也可能称为Jack Kilby)和D(延迟)。范例的触发器包括零个、一个或两个输入旗子暗记,以及时钟旗子暗记和输出旗子暗记。一些触发器还包括一个重置当前输出的明确输入旗子暗记。
触发器(flip-flop)---对脉冲边沿敏感,其状态只在时钟脉冲的上升沿或低落沿的瞬间改变。
T触发器(Toggle Flip-Flop,or Trigger Flip-Flop)设有一个输入和输出,当时钟频率由0转为1时,如果T和Q不相同时,其输出值会是1。输入端T为1的时候,输出真个状态Q发生反转;输入端T为0的时候,输出真个状态Q保持不变。把JK触发器的J和K输入点连接在一起,即构成一个T触发器。
运用处所:时钟有效迟后于数据有效。这意味着数据旗子暗记先建立,时钟旗子暗记后建立。在CP上升沿时候打入到寄存器。
三、寄存器
寄存器(register):用来存放数据的一些小型存储区域,用光降时存放参与运算的数据和运算结果,它被广泛的用于各种数字系统和打算机中。实在寄存器便是一种常用的时序逻辑电路,但这种时序逻辑电路只包含存储电路。寄存器的存储电路是由锁存器或触发器构成的,由于一个锁存器或触发器能存储1位二进制数,以是由N个锁存器或触发器可以构成N位寄存器。 工程中的寄存器一样平常按打算机中字节的位数设计,以是一样平常有8位寄存器、16位寄存器等。
对寄存器中的触发器只哀求它们具有置1、置0的功能即可,因而无论是用同步RS构造触发器,还是用主从构造或边沿触发构造的触发器,都可以组成寄存器。一样平常由D触发器组成,有公共输入/输出使能掌握端和时钟,一样平常把使能掌握端作为寄存器电路的选择旗子暗记,把时钟掌握端作为数据输入掌握旗子暗记。
寄存器的运用:
1. 可以完成数据的并串、串并转换;
2.可以用做显示数据锁存器:许多设备须要显示计数器的记数值,以8421BCD码记数,以七段显示器显示,如果记数速率较高,人眼则无法辨认迅速变革的显示字符。在计数器和译码器之间加入一个锁存器,掌握数据的显示韶光是常用的方法。
3.用作缓冲器;
4. 组成计数器:移位寄存器可以组成移位型计数器,如环形或扭环形计数器。
四、移位寄存器
移位寄存器:具有移位功能的寄存器称为移位寄存器。
寄存器只有寄存数据或代码的功能。有时为了处理数据,须要将寄存器中的各位数据在移位掌握旗子暗记浸染下,依次向高位或向低位移动1位。移位寄存器按数码移动方向分类有左移,右移,可掌握双向(可逆)移位寄存器;按数据输入端、输出办法分类有串行和并行之分。除了D边沿触发器构成移位寄存器外,还可以用诸如JK等触发器构成移位寄存器。
五、总线收发器/缓冲器
缓冲寄存器:又称缓冲器缓冲器(buffer):多用在总线上,提高驱动能力、隔离前后级,缓冲器多数有三态输出功能。当负载不具有非选通输出为高阻特性时,将起到隔离浸染;当总线的驱动能力不足驱动负载时,将起到驱动浸染。由于缓冲器接在数据总线上,故必须具有三态输出功能。
它分输入缓冲器和输出缓冲器两种。前者的浸染是将外设送来的数据暂时存放,以便处理器将它取走;后者的浸染是用光降时存放处理器送往外设的数据。有了数控缓冲器,就可以使高速事情的CPU与慢速事情的外设起折衷和缓冲浸染,实现数据传送的同步。
Buffer:缓冲区,一个用于在初速率不同步的设备或者优先级不同的设备之间传输数据的区域。通过缓冲区,可以使进程之间的相互等待变少,从而使从速度慢的设备读入数据时,速率快的设备的操作进程不发生间断。
缓冲器紧张是打算机领域的称呼。详细实现上,缓冲器有用锁存器构造的电路来实现,也有用不带锁存构造的电路来实现。一样平常来说,当收发数据双方的事情速率匹配时,这里的缓冲器可以用不带锁存构造的电路来实现;而当收发数据双方的事情速率不匹配时,就要用带锁存构造的电路来实现了(否则会涌现数据丢失)。
缓冲器在数字系统中用途很多:
(1)如果器件带负载能力有限,可加一级带驱动器的缓冲器;
(2)前后级间逻辑电等分歧,可用电平转换器加以匹配;
(3)逻辑极性不同或须要将单性变量转换为互补变量时,加带反相缓冲器;(4)须要将缓变旗子暗记变为边沿陡峭旗子暗记时,加带施密特电路的缓冲器
(5)数据传输和处理中不同装置间温度和韶光不同时,加一级缓冲器进行填补等等。
锁存器与触发器的差异
锁存器和触发器是具有影象功能的二进制存贮器件,是组成各种时序逻辑电路的基本器件之一。差异为:latch同其所有的输入旗子暗记干系,当输入旗子暗记变革时latch就变革,没有时钟端;flip-flop受时钟掌握,只有在时钟触发时才采样当前的输入,产生输出。当然由于latch和flip-flop二者都是时序逻辑,以是输出不但同当前的输入干系还同上一韶光的输出干系。
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的构造图。其它型号和厂家的FPGA没有去查证。——个人认为xilinx是能直接配的而altera或许比较麻烦,要几个LE才行,然而也非xilinx的器件每个slice都可以这样配置,altera的只有DDR接口中有专门的latch单元,一样平常也只有高速电路中会采取latch的设计。altera的LE是没有latch的构造的,又查了sp3和sp2e,别的不查了,手册上说支持这种配置。有关altera的表述wangdian说的对,altera的ff不能配置成latch,它利用查找表来实现latch。
一样平常的设计规则是:在绝大多数设计中避免产生latch。它会让您设计的时序塌台,并且它的暗藏性很强,非老手不能查出。latch最大的危害在于不能过滤毛刺。这对付下一级电路是极其危险的。以是,只要能用D触发器的地方,就不用latch。
有些地方没有时钟,也只能用latch了。比如现在用一个clk接到latch的使能端(假设是高电平使能),这样须要的setup韶光,便是数据在时钟的低落沿之前须要的韶光,但是如果是一个DFF,那么setup韶光便是在时钟的上升沿须要的韶光。这就解释如果数据晚于掌握旗子暗记的情形下,只能用latch,这种情形便是,前面所提到的latch timing borrow。基本上相称于借了一个高电平时间。也便是说,latch借的韶光也是有限的。
在if语句和case不全很随意马虎产生latch,须要把稳。VIA题目这两个代码哪个综合更随意马虎产生latch:
代码1
always@(enable or ina or inb)
begin
if(enable)
begin
data_out = ina;
end
else
begin
data_out = inb;
end
end
代码2
input[3:0] data_in;
always@(data_in)
begin
case(data_in)
0 : out1 = 1'b1;
1,3 :out2 = 1'b1;
2,4,5,6,7 : out3 = 1'b1;
default:out4 = 1'b1;
endcase
end
答案是代码2在综合时更随意马虎产生latch。
对latch进行STA的剖析实在也是可以,但是要对工具相称熟习才行,不过很随意马虎出错。当前PrimeTime是支持进行latch剖析的,现在一些综合工具内置的STA剖析功能也支持,比如RTL compiler, Design Compiler。除了ASIC里可以节省资源以外,latch在同步设计里涌现的可能还是挺小的,现在处理过程中大都放在ff里打一下。
锁存器电平触发会把输入真个毛刺带入输出;而触发器由于边沿浸染可以有效抑制输入端滋扰。
在 CMOS 芯片内部常常利用锁存器, 但是在PCB板级构造上, 建议用触发器在时钟边沿上锁存数据。这是由于在锁存器闸门开启期间数据的变革会直接反响到输出端, 以是要把稳掌握闸门旗子暗记的脉冲宽度,而对付触发器,只考虑时钟的边沿。
门电路是构建组合逻辑电路的根本,而锁存器和触发器是构建时序逻辑电路的根本。门电路是由晶体管构成的,锁存器是由门电路构成的,而触发器是由锁存器构成的。也便是晶体管->门电路->锁存器->触发器,前一级是后一级的根本。锁存器和触发器它们的输出都不仅仅取决于目前的输入,而且和之前的输入和输出都有关系。
它们之间的不同在于:锁存器没有时钟旗子暗记,而触发器常常有时钟触发旗子暗记。
锁存器是异步的,便是说在输入旗子暗记改变后,输出旗子暗记也随之很快做出改变非常快。而其余一方面,本日许多打算机是同步的,这就意味着所有的时序电路的输出旗子暗记随着全局的时钟旗子暗记同时做出改变。触发器是一个同步版锁存器。
触发器泛指一类电路构造,它可以由触发旗子暗记 (如: 时钟、置位、复位等) 改变输出状态, 并保持这个状态直到下一个或另一个触发旗子暗记来到时。触发旗子暗记可以用电平或边沿操作,锁存器是触发器的一种运用类型。
D触发器和D锁存器的差异
钟控D触发器实在便是D锁存器,边沿D触发器才是真正的D触发器,钟控D触发器在使能情形下输出随输入变革,边沿触发器只有在边沿跳变的情形下输出才变革。
两个锁存器可以构成一个触发器,归根到底还是dff是边沿触发的,而latch是电平触发的。锁存器的输出对输入透明的,输入是什么,输出便是什么,这便是锁存器不稳定的缘故原由,而触发器是由两个锁存器构成的一个主从触发器,输出对输入是不透明的,必须在时钟的上升/低落沿才会将输入表示到输出,以是能够肃清输入的毛刺旗子暗记。
寄存器与锁存器的差异
寄存器与锁存器的功能是供应数据寄存和锁存。寄存功能是指把数据暂时保存,须要时取出。锁存功能是指总线电路中,锁天命据输出,使输出端不随输入端变革。
连续赋值与过程赋值的差异:
●连续赋值用于数据盛行为建模,多用于组合逻辑电路,过程赋值用于顺序行为建模,用于顺序行为建模。
●连续赋值等号右边操作数发生变革就须要实行(上电便一贯实行),而过程性赋值语句只是实行一次,把稳我这里的一次是指:在initial块中,过程性赋值只顺序实行一次,而在always块中,每一次知足always的条件时,都要顺序实行一次该always块中的语句。
过程性连续赋值
连续赋值适用于线网,过程赋值适用于寄存器,但是还有一类赋值办法,它既能对线网赋值也能对寄存器赋值(但不能是寄存器的位选择或部分选择),这种赋值办法被称为过程性连续赋值。它属于过程赋值而非连续赋值,以是他能涌如今always和initial语句中(连续赋值语句不可以涌如今always和initial语句中)。并且这种赋值语句也有连续赋值的特色,在过程性连续赋值语句中,右端表达式中操作数的任何变革都会引起赋值语句重新实行。
两种过程性连续赋值举例:
(1)assign-deassign(赋值-重新赋值)assign用于对寄存器赋值(不可用于线网赋值),deassign用于取消之前由assign赋值给某寄存器的值,也便是说,利用assign给寄存器赋值之后,这个值将一贯保持在这个寄存器上,直到碰着deassign为止。
举例:
module DEF(D,Clr,Clk,Q)
input D,Clr,Clk;
output Q;
reg Q;
always@(negedge Clk)
Q = D;
always@(Clr)
begin
if(!Clr)
assign Q = 0;
else
deassign Q;
end
endmodule
以上的程序段,第一个always会将Q的值赋为D,第二个always语句在Clr的值发生变革时实行,若Clr是由高电平变为低电平,则assign有效,并一贯保持这个赋值(直到碰着deassign),这时只管第一个always也在实行(Clk的低落沿是不会起浸染的),Q的值会一贯保持“assign Q = 0;”,直到Clr来一个高电平为止(deassign Q语句实行)。
(2)force-release(逼迫-开释,虽然它也可以用于对寄存器赋值,但紧张用于线网赋值)
当force语句运用于寄存器时,寄存器当前值被force覆盖,当release语句运用于寄存器时寄存器当前值将保持不变,直到被重新赋值。
举例:
reg[2:0]colt;
……
colt=2;//colt被赋值为2;
……
force colt=1;//colt被逼迫赋值为1;
……
release colt;//对colt的逼迫赋值被取消,colt的值将保持为1;
……
assign colt =5;//colt被赋值为5;
……
force colt=3;//colt被逼迫赋值为3;
……
release colt;//对colt的逼迫赋值被取消,assign colt=5;重新生效;
……
force colt[1:0]=3;//不合法,寄存器的部分选择不可以设为过程性连续赋值的目标