D觸發(fā)器在FPGA里用得很多,但我經(jīng)常無法理解D觸發(fā)器為什么能對數(shù)據(jù)延遲一個時鐘周期(打一拍)。下面從信號處理的角度來談一下我的理解。如發(fā)現(xiàn)理解有誤,煩請留言指正。
D觸發(fā)器形如:
`timescale 1ns/1ps
module d_flip_flop(
input clk,
input rst_n,
input d,
output reg q
);
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
begin
q <= 1'b0;
end else begin
q <= d;
end
end
endmodule
時序圖如下:
解讀如下:
D觸發(fā)器在時鐘CLK上升沿采樣,數(shù)據(jù)D在建立保持時間Tsu和Th內(nèi)需要穩(wěn)定不變,否則出現(xiàn)亞穩(wěn)態(tài)!我們在這個時間“窗口”內(nèi)采樣到的數(shù)據(jù)即為D觸發(fā)器采樣到的數(shù)據(jù),經(jīng)過Tco(其中Tco < Th)的時間后,D觸發(fā)器就會輸出上述采樣到的數(shù)據(jù)D,并且該數(shù)據(jù)會保持一個時鐘周期T不變。
為什么會有延遲一個時鐘周期(打一拍)的效果呢?原因是,如果兩個D觸發(fā)器分別對D和D’這兩個數(shù)據(jù)采樣,則這兩個觸發(fā)器輸出的結果將會一致的,即均為上圖的Q!對比D’和Q會發(fā)現(xiàn):Q比D’延遲了一個時鐘,所以才會說對信號D延遲了一個時鐘周期。
D觸發(fā)器是無法識別數(shù)據(jù)D在時鐘上升沿后肆意變化的那部分(因為D觸發(fā)器在非觸發(fā)沿時是保持輸出不變,而不會再采樣數(shù)據(jù)的),所以才導致在D觸發(fā)器看來D和D’是一模一樣的信號!!
最后,有如下結論:
1.數(shù)據(jù)D在建立保持時間窗口內(nèi)必須保持穩(wěn)定,D觸發(fā)器采樣到的就是該穩(wěn)定數(shù)據(jù)。
2.D觸發(fā)器采樣后,經(jīng)過Tco時間后即可輸出到Q
3.保持時間過后,如果數(shù)據(jù)變化了,D觸發(fā)器無法感知
4.Tco < Th,且 Th很小,均由fpga器件型號決定
根據(jù)前3條,我們可以在仿真時認為,D觸發(fā)器一直對CLK上升沿左邊的信號進行采樣,并保持一個時鐘周期T的時間,因為一直采樣的是前一刻(上一個T)數(shù)據(jù)D的值,并且保持T,所以長遠來看,D觸發(fā)器對數(shù)據(jù)D延遲了一個時間周期!
原文標題:如何理解D觸發(fā)器延遲一拍
文章出處:【微信公眾號:FPGA設計論壇】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
-
FPGA
+關注
關注
1643文章
21923瀏覽量
612389 -
D觸發(fā)器
+關注
關注
3文章
164瀏覽量
48419 -
時鐘周期
+關注
關注
0文章
18瀏覽量
12343
原文標題:如何理解D觸發(fā)器延遲一拍
文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設計論壇】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
評論