2015-01-27 42 views
0

我有一個異步復位和啓用的觸發器。這裏是我的代碼:Verilog D-Flip-Flop在異步復位後不能重新鎖存

module DFF_aSR(in, enable, clock, reset, out); 
input in, enable, clock, reset; 
output out; 
reg out; 

always @ (posedge clock or posedge reset) begin 
    if (reset) begin 
     out <= 1'b0; 
    end 
    else if (enable) begin 
     out <= in; 
    end 
end 
endmodule 

但這裏是我得到的波形,這表明重新鎖定未復位後發生的事情,爲什麼會這樣?

flip flop waveform

+0

每次'in'和'en'都啓用重置。 'out'只能在''reset'低位,'en'高位和'in'高位''時鐘的正確位置上出現高位' – Greg 2015-01-27 00:19:50

+0

@Greg,我理解你的解釋,但我仍然不知道如何解決問題。 – MMP 2015-01-27 00:24:49

+0

您需要更改測試臺激勵,而不是您的設計。 – Greg 2015-01-27 00:30:49

回答

1

如果/當一個時鐘上升沿與數據穩定高發生的閂鎖輸出應該去高和復位穩定低。我看到的唯一這樣的邊緣是在第一個復位脈衝之前。如果你希望鎖存器能夠在例如時間110ns,你應該確保復位輸入在此之前變低。如果你的意圖是復位應該是邊沿觸發而不是電平觸發的,你可能需要使用一對觸發器,一個觸發器由時鐘觸發,另一個通過復位連線,使得第一個觸發器的D輸出連接到第二個,第二個D連接到第一個的Q.將鎖存器的輸出送入異或門將產生一個信號,指示哪個信號具有最近的上升沿(警告:同時的上升沿可能觸發亞穩態)。您似乎想要的信號可以通過將鎖存數據的「AND」與XOR的輸出進行組合,以及可能的一些避免危險的門來形成。