D觸發(fā)器在FPGA里用得很多,但我經(jīng)常無法理解D觸發(fā)器為什么能對數(shù)據(jù)延遲一個(gè)時(shí)鐘周期(打一拍)。下面從信號處理的角度來談一下我的理解。如發(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
時(shí)序圖如下:
解讀如下:
D觸發(fā)器在時(shí)鐘CLK上升沿采樣,數(shù)據(jù)D在建立保持時(shí)間Tsu和Th內(nèi)需要穩(wěn)定不變,否則出現(xiàn)亞穩(wěn)態(tài)!我們在這個(gè)時(shí)間“窗口”內(nèi)采樣到的數(shù)據(jù)即為D觸發(fā)器采樣到的數(shù)據(jù),經(jīng)過Tco(其中Tco < Th)的時(shí)間后,D觸發(fā)器就會輸出上述采樣到的數(shù)據(jù)D,并且該數(shù)據(jù)會保持一個(gè)時(shí)鐘周期T不變。
為什么會有延遲一個(gè)時(shí)鐘周期(打一拍)的效果呢?原因是,如果兩個(gè)D觸發(fā)器分別對D和D’這兩個(gè)數(shù)據(jù)采樣,則這兩個(gè)觸發(fā)器輸出的結(jié)果將會一致的,即均為上圖的Q!對比D’和Q會發(fā)現(xiàn):Q比D’延遲了一個(gè)時(shí)鐘,所以才會說對信號D延遲了一個(gè)時(shí)鐘周期。
D觸發(fā)器是無法識別數(shù)據(jù)D在時(shí)鐘上升沿后肆意變化的那部分(因?yàn)镈觸發(fā)器在非觸發(fā)沿時(shí)是保持輸出不變,而不會再采樣數(shù)據(jù)的),所以才導(dǎo)致在D觸發(fā)器看來D和D’是一模一樣的信號??!
最后,有如下結(jié)論:
1.數(shù)據(jù)D在建立保持時(shí)間窗口內(nèi)必須保持穩(wěn)定,D觸發(fā)器采樣到的就是該穩(wěn)定數(shù)據(jù)。
2.D觸發(fā)器采樣后,經(jīng)過Tco時(shí)間后即可輸出到Q
3.保持時(shí)間過后,如果數(shù)據(jù)變化了,D觸發(fā)器無法感知
4.Tco < Th,且 Th很小,均由fpga器件型號決定
根據(jù)前3條,我們可以在仿真時(shí)認(rèn)為,D觸發(fā)器一直對CLK上升沿左邊的信號進(jìn)行采樣,并保持一個(gè)時(shí)鐘周期T的時(shí)間,因?yàn)橐恢辈蓸拥氖乔耙豢蹋ㄉ弦粋€(gè)T)數(shù)據(jù)D的值,并且保持T,所以長遠(yuǎn)來看,D觸發(fā)器對數(shù)據(jù)D延遲了一個(gè)時(shí)間周期!
原文標(biāo)題:如何理解D觸發(fā)器延遲一拍
文章出處:【微信公眾號:FPGA設(shè)計(jì)論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
-
FPGA
+關(guān)注
關(guān)注
1624文章
21568瀏覽量
600616 -
D觸發(fā)器
+關(guān)注
關(guān)注
3文章
164瀏覽量
47793 -
時(shí)鐘周期
+關(guān)注
關(guān)注
0文章
18瀏覽量
12134
原文標(biāo)題:如何理解D觸發(fā)器延遲一拍
文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設(shè)計(jì)論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論