1、触发器与锁存器
触发器:是一种具有记忆功能的、可以存储二进制信息的双稳态电路,师组成时序逻辑电路的基本单元,也是最基本的时序电路。
锁存器:是电平触发的存储单元,数据的存储取决于输入时钟(或者使能)信号的电平值。锁存器的输入有数据信号和使能信号,当处于使能状态,输出随着输入发生变化,当不处于使能状态,输入信号怎么变化都不影响输出。
其中双稳态电路特点:在没有外来触发信号的作用下,电路始终处于原来的稳定状态。在外加输入触发信号作用下,双稳态电路从一个状态翻转到另一个稳定状态,由于它具有两个稳定状态,故称为双稳态电路。
组合逻辑基本单元是门电路,门电路某一时刻的输出完全取决于该时刻的输入信号,无记忆功能。
时序逻辑基本单元是触发器,触发器具有记忆功能,能够在无信号的情况下,保持上一次的信号。
D触发器:
D触发器可以由两个D锁存器级联构成,触发器对时钟边沿敏感,D信号可能在时钟上升沿到来前发生多次跳变,Q的输出只取决于时钟上升沿到来一瞬间D的值,因此触发器可以消除毛刺。
触发器实现代码:
always@(posedge Clk)
Q <= D;
D锁存器:
锁存器不锁存数据的时候,输出端信号随输入信号变化,一旦锁存信号拉低,C拉低,Q保持之前的状态,数据被锁住。
D锁存器实现代码:
always @(latch_in)
begin
if(latch_en)
latch_out <= latch_in;
end
区别:
latch:通过电平触发,使能信号有效时候输出随输入变化,使能信号无效的时候Latch保持输出状态。锁存器不依赖于时钟,因此可以实现任意时刻的数据存储和保持,适用于状态存储等场景(状态机)。
对输入电平敏感,很难保证输出没有毛刺。
DFF:由时钟边沿触发,同步控制,触发器广泛用于同步逻辑中。
不容易产生毛刺。
Latch由于是电平触发,因而静态时序分析变得极为复杂。设计的规则避免产生latch,latch容易产生毛刺,对下一级电路极为危险。
在组合逻辑中,在电平敏感的语句中,出现存储功能就会出现锁存器。
典型的if…else…或case…default…语句不完整,也就是出现了信号保持(出现存储功能)。
Latch 只在组合逻辑才会产生,并将其存储在输出端口上,Latch类似触发器,但是它没有始终输入,它的输出取决于输入变化的时间。
Latch锁存器是电平触发的存储器,寄存器是边沿触发的存储器。两者的基本功能是一样的,都可以存储数据。锁存器是组合逻辑产生的,而寄存器是在时序电路中使用,由时钟触发产生的。latch 的主要危害是会产生毛刺(glitch),这种毛刺对下一级电路是很危险的。并且其隐蔽性很强,不易查出。因此,在设计中,应尽量避免 latch 的使用。
锁存器是电平触发的存储单元,当锁存器处于使能状态时,输出才会随着数据输入发生变化。
触发器是边沿敏感的存储单元,存储动作在某一信号的边沿进行同步。
寄存器,一个触发器可以组成一个一位的寄存器,多个触发器可以组成一个多位的寄存器,存储器由大量寄存器组成,其中每个寄存器称为一个存储单元。
2、组合逻辑和时序逻辑
组合逻辑:任意时刻的输出仅仅取决于该时刻的输入,与电路原来的状态无关,不涉及信号跳变沿的处理,无存储电路。 一般使用aways 敏感列表为电平敏感列表、或者assign赋值的语句。组合逻辑电路是指逻辑门组成的电路,其输出只依赖于当前时刻的输入。
时序逻辑:任意时刻的输出不仅取决于该时刻的输入,还与电路原来的状态有关,存储原件用于记忆信息。 reg型会被综合为寄存器。
时序逻辑的特点:**一般是在时钟上升沿采样,在一个时钟周期内,两个上升沿之间的毛刺会被过滤掉,时序逻辑对毛刺有极好的屏蔽作用。**时序逻辑的输出数据会延迟输入数据一拍。
3、竞争与冒险
信号在组合逻辑内部通过连线和逻辑单元时候,都有一定的延时。延时的大小与连线的长短和逻辑单元的数目有关,同时还受器件的制作工艺、工作电压、温度等条件的影响。此外,信号单端高低电平转换也需要一定的过渡时间。 多路信号的电平值发生变化时,在信号发生的瞬间,组合逻辑的输出有先后顺序,不是同时变化,往往会出现一些不正确的尖峰信号,称为毛刺。说明该电路存在冒险。
**在组合电路中,某一输入变量经过不同路径传输后,到达电路中某一汇合点的时间有先有后,这种现象称为竞争。**由于竞争而使电路发生瞬时错误(尖峰脉冲)的现象叫做冒险。由于竞争产生的毛刺叫做冒险。
检查竞争冒险的常用方法:逻辑表达式化简法,如果输出端门电路的两个输入信号A和A`(原变量和反变量出现)经过两个不同的传输路径而来,则当输入变量发生变化时,输出端就可能产生尖峰脉冲。
1、消除冒险竞争,加选通信号,避开毛刺。
选通信号的高电平出现在电路到达稳定状态后。
2、增加冗余项,消除逻辑冒险。
存在竞争的情况下,增加冗余项,实现输出消除毛刺。