锁存器
锁存器(Latch)是一种对脉冲电平敏感的存储单元电路。
1、在有效的电平下,锁存器处于使能状态,输出随着输入发生变化,此时它不锁存信号,就像一个缓冲器一样。输出Q跟随输入D;
2、 在锁存器没有使能时,则数据被锁住,输入信号不起作用,此时输出一直为锁存的状态信息。
3、锁存器也称为透明锁存器,指的是不锁存时输出对于输入是透明的。
代码如下:
module latch(
input D,
input EN, //输入信号
output Q //输出信号
);
always@(EN or D) //组合逻辑
begin
if(EN)
Q = D; //阻塞赋值
end
endmodule
锁存器代码还可以这样写:
module latch(
input D,
input EN, //输入信号
output Q //输出信号
);
assign Q= EN?D:Q; //组合逻辑
endmodule
其时序如下图所示:
D为输入信号,当EN为高时,输出Q即为输入的D;当EN为低时,Q保持EN为高时的最后一次状态,也就是锁存过程。
触发器
触发器(Flip-Flop,简写为 FF),也叫双稳态门,又称双稳态触发器。是一种可以在两种状态下运行的数字逻辑电路。触发器一直保持它们的状态,直到它们收到输入脉冲,又称为触发。
1、当收到输入脉冲时,触发器输出就会根据规则改变状态,然后保持这种状态直到收到另一个触发。
2、除了时钟沿的其余时刻,无论D如何变化,都不会存储到Q中。
其代码如下:
module DFF(
input D,
input CLK, //输入信号
output Q //输出信号
);
always@(posedge clk) // 时序逻辑
begin
Q <= D; //非阻塞赋值
end
endmodule
其时序图如下:
触发器只在时钟边沿时起作用,所以哪怕输入的信号中有毛刺,输出还是比较干净的。
我的理解:
触发器,只在时钟边沿采样,不管输入信号D在时钟沿到来之前怎么变化,触发器都不予以理会,任其变化的天花乱坠,触发器输出端只输出上次时钟沿时采样到的数据,直到下个时钟沿的到来,触发器才再次进行采样。
总得来说。在连续的的两个时钟沿(上升沿 或 下降沿)之间数据是保持不变的。
锁存器与触发器的区别
1、latch由电平触发,非同步控制。在使能信号有效时latch相当于通路,在使能信号无效时latch保持输出状态。DFF由时钟沿触发,同步控制。
2、latch对输入电平敏感,受布线延迟影响较大,很难保证输出没有毛刺产生;DFF则不易产生毛刺。锁存器电平触发会把输入端的毛刺带入输出;而触发器由于边沿作用可以有效抑制输入端干扰。
下面的时序图可以看出锁存器对毛刺敏感:
触发器只在时钟边沿时起作用,所以哪怕输入的信号中有毛刺,输出还是比较干净的。
3、如果使用门电路来搭建latch和DFF,则latch消耗的门资源比DFF要少,这是latch比DFF优越的地方。
什么样的代码会产生锁存器?
一、在组合逻辑中,如果条件描述不全就会容易产生Latch:
1、if语句中缺少了else语句
2、case语句中没有给出全部的情况。
3、我的理解:输出只要会保持就是锁存,如下代码:
module latch(
input D,
input EN, //输入信号
output Q //输出信号
);
assign Q= EN?D:Q; //组合逻辑
endmodule
二、在时序电路中,条件不齐全情况下会保持之前条件的值。
三 、在时序电路中,触发器似乎也可以看作是一个特殊的触发器,只不过由于时钟沿触发的缘故,它的锁存保持时间只有一个时钟周期。
当满足特定条件,下面的代码也可以看做是一个锁存器:
module DFF(
input D,
input CLK, //输入信号
input EN,
output Q //输出信号
);
always@(posedge clk) // 时序逻辑
begin
if(EN)
Q <= D; //非阻塞赋值
end
endmodule
当EN为一个单脉冲信号。脉冲信号高电平时,D被写入Q中,脉冲信号低电平时,D被所存在Q中,当D再变化时,输出也不会再改变。同样起到了锁存的作用。
(需要注意 锁存器 与 锁存 的区别)
总结
门电路是构建组合逻辑电路的基础,而锁存器和触发器是构建时序逻辑电路的基础。门电路是由晶体管构成的,锁存器是由门电路构成的,而触发器是由锁存器构成的。
锁存器没有时钟信号,而触发器常常有时钟触发信号。 锁存器是异步的,就是说在输入信号改变后,输出信号也随之很快做出改变非常快。而另外一方面,今天许多计算机是同步的,这就意味着所有的时序电路的输出信号随着全局的时钟信号同时做出改变。触发器是一个同步版锁存器。 触发器泛指一类电路结构,它可以由触发信号 (如: 时钟、置位、复位等) 改变输出状态, 并保持这个状态直到下一个或另一个触发信号来到时。触发信号可以用电平或边沿操作,锁存器是触发器的一种应用类型。