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