D觸發器在FPGA里用得很多,但我經常無法理解D觸發器為什么能對數據延遲一個時鐘周期(打一拍)。下面從信號處理的角度來談一下我的理解。如發現理解有誤,煩請留言指正。
D觸發器形如:
`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觸發器在時鐘CLK上升沿采樣,數據D在建立保持時間Tsu和Th內需要穩定不變,否則出現亞穩態!我們在這個時間“窗口”內采樣到的數據即為D觸發器采樣到的數據,經過Tco(其中Tco < Th)的時間后,D觸發器就會輸出上述采樣到的數據D,并且該數據會保持一個時鐘周期T不變。
為什么會有延遲一個時鐘周期(打一拍)的效果呢?原因是,如果兩個D觸發器分別對D和D’這兩個數據采樣,則這兩個觸發器輸出的結果將會一致的,即均為上圖的Q!對比D’和Q會發現:Q比D’延遲了一個時鐘,所以才會說對信號D延遲了一個時鐘周期。
D觸發器是無法識別數據D在時鐘上升沿后肆意變化的那部分(因為D觸發器在非觸發沿時是保持輸出不變,而不會再采樣數據的),所以才導致在D觸發器看來D和D’是一模一樣的信號!!
最后,有如下結論:
1.數據D在建立保持時間窗口內必須保持穩定,D觸發器采樣到的就是該穩定數據。
2.D觸發器采樣后,經過Tco時間后即可輸出到Q
3.保持時間過后,如果數據變化了,D觸發器無法感知
4.Tco < Th,且 Th很小,均由fpga器件型號決定
根據前3條,我們可以在仿真時認為,D觸發器一直對CLK上升沿左邊的信號進行采樣,并保持一個時鐘周期T的時間,因為一直采樣的是前一刻(上一個T)數據D的值,并且保持T,所以長遠來看,D觸發器對數據D延遲了一個時間周期!
原文標題:如何理解D觸發器延遲一拍
文章出處:【微信公眾號:FPGA設計論壇】歡迎添加關注!文章轉載請注明出處。
-
FPGA
+關注
關注
1629文章
21744瀏覽量
603609 -
D觸發器
+關注
關注
3文章
164瀏覽量
47921 -
時鐘周期
+關注
關注
0文章
18瀏覽量
12192
原文標題:如何理解D觸發器延遲一拍
文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設計論壇】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論