之前的理解
最近在做設計的時候,發現之前對DFF的理解有些模糊,直到有次在實踐中遇到了一些問題,含糊其詞的也不能解決問題,于是乎就把DFF理解透徹透徹,畢竟這可是時序電路的基本概念。
對于DFF,之前理解的,DFF在時鐘的上升沿進行對D端的數據采集,再下一個時鐘的上升沿來臨,Q端輸出D端采集的數據。能這么理解,是離開書本時間太長了,又觀察到了ModelSim仿真波形的影響,這么理解只是在描述仿真波形的表征現象,并非根本的原理。比如,在Modelsim仿真中,若通過DFF將數據組進行延時,用時鐘將寄存器進行多個時鐘周期的同步,并帶有異步復位,對應Verilog描述如下:
對應仿真波形如下:reg [7:0] data_d0, data_d1, data_d2;
always @ ( posedge clk or negedge rst_n ) begin
if ( !rst_n ) begin
data_d0 <= 8'b0;
data_d1 <= 8'b0;
end else begin
data_d0 <= data_in;
data_d1 <= data_d0;
end
end

正確的理解
正確的理解應該從DFF本身出發,通過DFF的電路原理圖分析DFF的電路工作原理,了解時鐘上升沿之前和之內部邏輯的如何變化,如何影響了從D端到Q端的數據輸出。
D鎖存器
在網上找到的很多電路圖講的都是D鎖存器,D鎖存器的電路為消除邏輯門控SR鎖存器不確定狀態,在電路的S和R輸入端連接一個非門(Inverter),從而保證了S和R同時為0的條件,參考下圖由與非門構成的D鎖存器電路圖:
D觸發器
觸發和觸發器——時鐘脈沖邊沿作用下的狀態刷新稱為觸發,具有這種特性的存儲單元電路稱為觸發器。D觸發器的電路圖如下(圖中的SR為了標注有兩級SR鎖存器,方便邏輯推理):
若繼續保持D端為0,CLK變為1時,第一級D鎖存器處于保持狀態,第二級的SR鎖存器將上一次的D值傳遞到Q端輸出,詳情參考下圖:
若在D端數值發生改變為1,且CLK仍然為1,第一級的D鎖存器仍處于保持狀態,不會由于D端的變化而改變,更不會影響最后Q端的輸出。
若D端繼續保持為1,CLK轉換為0,此時第一級D鎖存器的輸出為D端的數據,Q端輸出仍為保持狀態。
若D端數據繼續保持為1,CLK轉換為高,第一級D鎖存器的結果就會輸出到Q端,Q端的值也就隨著CLK的上升沿,捕獲到了1,并進行輸出到Q端;
從邏輯圖中,也可以看出DFF的數據捕獲和輸出都需要滿足一定的時間約束。比如:
-
-
時鐘上升沿之前前后的數據要做夠穩定,否則在時鐘跳變時刻,可能無法將其傳遞到Q端進行輸出;
-
時鐘上升沿捕獲數據之后,到Q端輸出也需要一定的時間,穩定之后才能用于下一級工作;
-
DFF捕獲時鐘上升沿的D端數據,并在Q端輸出,一直維持到下一時鐘上升沿到來之前。在此期間,D端的數據變化不會直接影響到Q端的輸出。
ModelSim仿真
將tb文件中的data_in輸入做5個單位的傳輸延時,仿真結果見下圖:

Event 1時刻:
-
-
在Event 1時刻,時鐘上升沿之前data_in(值為8’h00),data_d0的D端為data_in(值為8’h00);
-
在Event 1時刻,時鐘上升沿之后data_in(值為8’h00),data_d0的Q端為data_in(值為8’h00);所以在Event 1時刻,data_d0的Q端保持為8’h00不變;
-
-
- 在Event 2時刻,時鐘上升沿之后data_in(值為8’h01),data_d0的D端為data_in(值為8’h01);
- 在Event 2時刻,時鐘上升沿之后data_in(值為8’h01),data_d0的D端為data_in(值為8’h01);所以在Event 2時刻,data_d0的Q端從8’h00變為8’h01;
-
- 在Event 3時刻,時鐘上升沿之后data_in(值為8’h02),data_d0的D端為data_in(值為8’h02);
- 在Event 3時刻,時鐘上升沿之后data_in(值為8’h02),data_d0的D端為data_in(值為8’h02);所以在Even 3時刻,data_d0的Q端從8’h01變為8’h02;
總結
DFF捕獲時鐘上升沿的D端數據,并在Q端輸出,一直維持到下一時鐘上升沿到來之前。在此期間,D端的數據變化不會直接影響到Q端的輸出。
審核編輯:湯梓紅-
時序電路
+關注
關注
1文章
114瀏覽量
21873 -
ModelSim
+關注
關注
5文章
174瀏覽量
47925 -
D鎖存器
+關注
關注
0文章
13瀏覽量
3779 -
dff
+關注
關注
0文章
26瀏覽量
3582
原文標題:時序電路之DFF再理解
文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
FPGA開發:modelsim仿真流程及波形

Altera ModelSim 6.5仿真入門教程

Modelsim的功能仿真和時序仿真
使用 ModelSim 進行設計仿真詳解
仿真軟件ModelSim及其應用,ModelSim的仿真流程
Modelsim仿真教程Modelsim的基礎入門基礎教程免費下載

基于ModelSim使用二聯合Quarus自動仿真教程

評論