1、鎖存器latch 和 觸發(fā)器flipflop
鎖存器能根據(jù)輸入端把結(jié)果自行保持;觸發(fā)器是指由時鐘邊沿觸發(fā)的存儲器單元;
由敏感信號(電平,邊沿)控制的鎖存器就是觸發(fā)器;
2、寫電路時,產(chǎn)生鎖存器的原因
if語句中,沒有寫else,默認(rèn)保持原值,產(chǎn)生鎖存器,可能不是想要的結(jié)果;
case語句中,沒有寫完整default項,也容易產(chǎn)生鎖存器;
例子:
always@(a or b)
begin
if(a) q=b;
end
產(chǎn)生了鎖存器,如下
沒有鎖存器的情況
always@(a or b)
begin
if(a) q=b;
else q=0;
end
3、避免使用d鎖存器,盡量使用d觸發(fā)器
d鎖存器
moduletest_latch(y,a,b);
outputy;inputa;inputb;regy;
always@(aorb)begin
if(a==1’b1)
y=b;
endendmodule
d觸發(fā)器
moduletest_d(y,clk,a,b);
outputy;inputclk;inputa;inputb;regy;
always@(posedgeclk)begin
if(a==1'b1)
y=b;
endendmodule
從圖8可知,例10對應(yīng)的電路是d觸發(fā)器。信號a被綜合成d觸發(fā)器的使能端,只有在時鐘上沿到來且a為高時,b信號的值才能傳遞給a;只要在時鐘上升沿期間信號b是穩(wěn)定,即使在其他時候b還有毛刺,經(jīng)過d觸發(fā)器后數(shù)據(jù)是穩(wěn)定的,毛刺被濾除。