锁存器和寄存器的区别是什么 锁存器的工作原理( 三 )


有些地方没有时钟,也只能用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语句中) 。并且这种赋值语句也有连续赋值的特征,在过程性连续赋值语句中,右端表达式中操作数的任何变化都会引起赋值语句重新执行 。