之前的理解
最近在做設(shè)計(jì)的時(shí)候,發(fā)現(xiàn)之前對(duì)DFF的理解有些模糊,直到有次在實(shí)踐中遇到了一些問(wèn)題,含糊其詞的也不能解決問(wèn)題,于是乎就把DFF理解透徹透徹,畢竟這可是時(shí)序電路的基本概念。
對(duì)于DFF,之前理解的,DFF在時(shí)鐘的上升沿進(jìn)行對(duì)D端的數(shù)據(jù)采集,再下一個(gè)時(shí)鐘的上升沿來(lái)臨,Q端輸出D端采集的數(shù)據(jù)。能這么理解,是離開(kāi)書(shū)本時(shí)間太長(zhǎng)了,又觀察到了ModelSim仿真波形的影響,這么理解只是在描述仿真波形的表征現(xiàn)象,并非根本的原理。比如,在Modelsim仿真中,若通過(guò)DFF將數(shù)據(jù)組進(jìn)行延時(shí),用時(shí)鐘將寄存器進(jìn)行多個(gè)時(shí)鐘周期的同步,并帶有異步復(fù)位,對(duì)應(yīng)Verilog描述如下:
對(duì)應(yīng)仿真波形如下: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

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

Event 1時(shí)刻:
-
-
在Event 1時(shí)刻,時(shí)鐘上升沿之前data_in(值為8’h00),data_d0的D端為data_in(值為8’h00);
-
在Event 1時(shí)刻,時(shí)鐘上升沿之后data_in(值為8’h00),data_d0的Q端為data_in(值為8’h00);所以在Event 1時(shí)刻,data_d0的Q端保持為8’h00不變;
-
-
- 在Event 2時(shí)刻,時(shí)鐘上升沿之后data_in(值為8’h01),data_d0的D端為data_in(值為8’h01);
- 在Event 2時(shí)刻,時(shí)鐘上升沿之后data_in(值為8’h01),data_d0的D端為data_in(值為8’h01);所以在Event 2時(shí)刻,data_d0的Q端從8’h00變?yōu)?’h01;
-
- 在Event 3時(shí)刻,時(shí)鐘上升沿之后data_in(值為8’h02),data_d0的D端為data_in(值為8’h02);
- 在Event 3時(shí)刻,時(shí)鐘上升沿之后data_in(值為8’h02),data_d0的D端為data_in(值為8’h02);所以在Even 3時(shí)刻,data_d0的Q端從8’h01變?yōu)?’h02;
總結(jié)
DFF捕獲時(shí)鐘上升沿的D端數(shù)據(jù),并在Q端輸出,一直維持到下一時(shí)鐘上升沿到來(lái)之前。在此期間,D端的數(shù)據(jù)變化不會(huì)直接影響到Q端的輸出。
審核編輯:湯梓紅-
時(shí)序電路
+關(guān)注
關(guān)注
1文章
114瀏覽量
21949 -
ModelSim
+關(guān)注
關(guān)注
5文章
174瀏覽量
48126 -
D鎖存器
+關(guān)注
關(guān)注
0文章
13瀏覽量
3809 -
dff
+關(guān)注
關(guān)注
0文章
26瀏覽量
3653
原文標(biāo)題:時(shí)序電路之DFF再理解
文章出處:【微信號(hào):mcu168,微信公眾號(hào):硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
FPGA開(kāi)發(fā):modelsim仿真流程及波形

Altera ModelSim 6.5仿真入門教程

Modelsim的功能仿真和時(shí)序仿真
使用 ModelSim 進(jìn)行設(shè)計(jì)仿真詳解
modelsim仿真詳細(xì)過(guò)程(功能仿真與時(shí)序仿真)

仿真軟件ModelSim及其應(yīng)用,ModelSim的仿真流程
Modelsim仿真教程Modelsim的基礎(chǔ)入門基礎(chǔ)教程免費(fèi)下載

基于ModelSim使用二聯(lián)合Quarus自動(dòng)仿真教程

基于ModelSim使用四ModelSim手動(dòng)仿真教程
如何夾帶modelsim的仿真波形白底黑線
ModelSim手動(dòng)仿真教程
芯片設(shè)計(jì)之Modelsim仿真工具
Vivado調(diào)用Modelsim仿真

評(píng)論