圖1
建立時間(setup time)是指在觸發器的時鍾信號上升沿到來以前,數據穩定不變的時間,如果建立時間不夠,數據將不能在這個時鍾上升沿被打入觸發器;
保持時間(hold time)是指在觸發器的時鍾信號上升沿到來以后,數據穩定不變的時間,如果保持時間不夠,數據同樣不能被打入觸發器。
如圖1 。數據穩定傳輸必須滿足建立和保持時間的要求,當然在一些情況下,建立時間和保持時間的值可以為零。 PLD/FPGA開發軟件可以自動計算兩個相關輸入的建立和保持時間。
個人理解:
1、建立時間(setup time)觸發器在時鍾沿到來之前,其數據的輸入端的數據必須保持不變的時間;建立時間決定了該觸發器之間的組合邏輯的最大延遲。
2、保持時間(hold time)觸發器在時鍾沿到來之后,其數據輸入端的數據必須保持不變的時間;保持時間決定了該觸發器之間的組合邏輯的最小延遲。
關於建立時間保持時間的考慮
華為題目:時鍾周期為T,觸發器D1的建立時間最大為T1max,最小為T1min。組合邏輯電路最大延遲為T2max,最小為T2min。問:觸發器D2的建立時間T3和保持時間T4應滿足什么條件?
分析:
Tffpd:觸發器輸出的響應時間,也就是觸發器的輸出在clk時鍾上升沿到來之后多長的時間內發生變化並且穩定,也可以理解為觸發器的輸出延時。
Tcomb:觸發器的輸出經過組合邏輯所需要的時間,也就是題目中的組合邏輯延遲。
Tsetup:建立時間
Thold:保持時間
Tclk:時鍾周期
建立時間容限:相當於保護時間,這里要求建立時間容限大於等於0。
保持時間容限:保持時間容限也要求大於等於0。
由上圖可知,建立時間容限=Tclk-Tffpd(max)-Tcomb(max)-Tsetup,根據建立時間容限≥0,也就是Tclk-Tffpd(max)-Tcomb(max)-Tsetup≥0,可以得到觸發器D2的Tsetup≤Tclk-Tffpd(max)-Tcomb(max),由於題目沒有考慮Tffpd,所以我們認為Tffpd=0,於是得到Tsetup≤T-T2max。
由上圖可知,保持時間容限+Thold=Tffpd(min)+Tcomb(min),所以保持時間容限=Tffpd(min)+Tcomb(min)-Thold,根據保持時間容限≥0,也就是Tffpd(min)+Tcomb(min)-Thold≥0可以得到觸發器D2的Thold≤Tffpd(min)+Tcomb(min),由於題目沒有考慮Tffpd,所以我們認為Tffpd=0,於是得到Thold≤T2min。關於保持時間的理解就是,在觸發器D2的輸入信號還處在保持時間的時候,如果觸發器D1的輸出已經通過組合邏輯到達D2的輸入端的話,將會破壞D2本來應該保持的數據
Tco表示dff從輸入到輸出延時;Tlogic表示組合邏輯延時;Tsu表示dff的建立時間;Thold表示dff的保持時間。
無skew:
T>Tco+Tlogic+Tsu
Thold<Tco+Tlogic
有skew:
T>Tco+Tlogic+Tsu-Tskew
Thold<Tco+Tlogic-Tskew
建立時間與保持時間
時鍾是整個電路最重要、最特殊的信號,系統內大部分器件的動作都是在時鍾的跳變沿上進行, 這就要求時鍾信號時延差要非常小, 否則就可能造成時序邏輯狀態出錯;因而明確FPGA設計中決定系統時鍾的因素,盡量較小時鍾的延時對保證設計的穩定性有非常重要的意義。
建立時間與保持時間
建立時間(Tsu:set up time)是指在時鍾沿到來之前數據從不穩定到穩定所需的時間,如果建立的時間不滿足要求那么數據將不能在這個時鍾上升沿被穩定的打入觸發器;保持時間(Th:hold time)是指數據穩定后保持的時間,如果保持時間不滿足要求那么數據同樣也不能被穩定的打入觸發器。建立與保持時間的簡單示意圖如下圖1所示。
圖1 保持時間與建立時間的示意圖
在FPGA設計的同一個模塊中常常是包含組合邏輯與時序邏輯,為了保證在這些邏輯的接口處數據能穩定的被處理,那么對建立時間與保持時間建立清晰的概念非常重要。下面在認識了建立時間與保持時間的概念上思考如下的問題。舉一個常見的例子。
圖2 同步設計中的一個基本模型
圖2為統一采用一個時鍾的同步設計中一個基本的模型。圖中Tco是觸發器的數據輸出的延時;Tdelay是組合邏輯的延時;Tsetup是觸發器的建立時間;Tpd為時鍾的延時。如果第一個觸發器D1建立時間最大為T1max,最小為T1min,組合邏輯的延時最大為T2max,最小為T2min。問第二個觸發器D2建立時間T3與保持時間T4應該滿足什么條件,或者是知道了T3與T4那么能容許的最大時鍾周期是多少。這個問題是在設計中必須考慮的問題,只有弄清了這個問題才能保證所設計的組合邏輯的延時是否滿足了要求。
答案: T-Tco-T2max>=T3,Tco+T2min-Tpd>=T4
下面通過時序圖來分析:設第一個觸發器的輸入為D1,輸出為Q1,第二個觸發器的輸入為D2,輸出為Q2;
時鍾統一在上升沿進行采樣,為了便於分析我們討論兩種情況即第一:假設時鍾的延時Tpd為零,其實這種情況在FPGA設計中是常常滿足的,由於在FPGA 設計中一般是采用統一的系統時鍾,也就是利用從全局時鍾管腳輸入的時鍾,這樣在內部時鍾的延時完全可以忽略不計。這種情況下不必考慮保持時間,因為每個數據都是保持一個時鍾節拍同時又有線路的延時,也就是都是基於CLOCK的延遲遠小於數據的延遲基礎上,所以保持時間都能滿足要求,重點是要關心建立時間,此時如果D2的建立時間滿足要求那么時序圖應該如圖3所示。
從圖中可以看出如果:
T-Tco-Tdelay>T3
即: Tdelay< T-Tco-T3
那么就滿足了建立時間的要求,其中T為時鍾的周期,這種情況下第二個觸發器就能在第二個時鍾的升沿就能穩定的采到D2,時序圖如圖3所示。Tco是觸發器的數據輸出的延時。
圖3 符合要求的時序圖
如果組合邏輯的延時過大使得
T-Tco-Tdelay<T3
那么將不滿足要求,第二個觸發器就在第二個時鍾的升沿將采到的是一個不定態,如圖4所示。那么電路將不能正常的工作。
圖4 組合邏輯的延時過大時序不滿足要求
結論: 從而可以推出
T-Tco-T2max>=T3
這也就是要求的D2的建立時間。
從上面的時序圖中也可以看出,D2的建立時間與保持時間與D1的建立與保持時間是沒有關系的,而只和D2前面的組合邏輯和D1的數據傳輸延時有關,這也是一個很重要的結論。說明了延時沒有疊加效應。
第二種情況如果時鍾存在延時,這種情況下就要考慮保持時間了,同時也需要考慮建立時間。時鍾出現較大的延時多是采用了異步時鍾的設計方法,這種方法較難保證數據的同步性,所以實際的設計中很少采用。此時如果建立時間與保持時間都滿足要求那么輸出的時序如圖5所示。
圖5 時鍾存在延時但滿足時序
從圖5中可以容易的看出對建立時間放寬了Tpd,所以D2的建立時間需滿足要求:
Tpd+T-Tco-T2max>=T3
由於建立時間與保持時間的和是穩定的一個時鍾周期,如果時鍾有延時,同時數據的延時也較小那么建立時間必然是增大的,保持時間就會隨之減小,如果減小到不滿足D2的保持時間要求時就不能采集到正確的數據,如圖6所示。
這時即T-(Tpd-Tco-T2min)<T4,就不滿足要求了,所以D2的保持時間應該為:
T-(Tpd+T-Tco-T2min)>=T4 即Tco+T2min-Tpd>=T4
從上式也可以看出如果Tpd=0也就是時鍾的延時為0那么同樣是要求Tco+T2min>T4,但是在實際的應用中由於T2的延時也就是線路的延時遠遠大於觸發器的保持時間即T4所以不必要關系保持時間。
圖6 時鍾存在延時且保持時間不滿足要求
下面用數字來說明一下加深理解(以下舉例暫不考慮hold time):
建立時間Tsetup=Tdelay+ Tco- Tpd
假設Tco(觸發器固有的建立時間)= 2ns
假設1,Clock Delay =0,Data delay="0",那么數據port的新數據必須在時鍾port的時鍾沿到來之前2ns趕到數據port,才能滿足觸發器的Tco。
假設2,Clock delay="0",data Delay = 3ns,那么數據port的新數據必須在時鍾port的時鍾沿到來之前5ns就得趕到數據port,其中的3ns用來使新數據從數據port趕到觸發器的D端(由於data Delay ),剩下的2ns用來滿足觸發器的Tco。
假設3,Clock delay="1ns",data Delay = 3ns,由於時鍾port的時鍾沿推后1ns到達觸發器的時鍾端,那么數據port的新數據只需在時鍾port的時鍾沿到來之前4ns趕到數據port即可。
假設4,假設時鍾的周期T=4ns,即你的系統需要運行在250M頻率上,那么以上的假設中,假設2顯然是不成立的,也就是說在假設2的情況下,你的系統運行頻率是低於250M的,或者說在250M系統里是有setup time violation的。在假設2的情況下,由於Tco及Tpd均是FPGA的固有特性,要想滿足4ns的T,那么唯一你能做的就是想方設法減小Tdelay,也就是數據路徑的延時。即所謂的找出關鍵路徑,想辦法優化之。
總結,在實際的設計中,對於一個給定的IC,其實我們很容易看到T,Tpd,Tsetup,Th都是固定不變的(在跨時鍾域時,Tpd會有不同),那么我們需要關心的參數就是Tdelay,即數據路徑的延時,控制好了這個延時,那我們的設計就不會存在建立時間和保持時間不滿足的情況了!
筆試題,這樣說道:時鍾周期為T,觸發器D1的建立時間最大為T1max,最小為T1min,該觸發器的數據輸出延時為Tco。組合邏輯電路最大延遲為 T2max,最小為T2min。假設D1在前,D2去采樣D1的數據(實際就是對圖2的文字描述),問,觸發器D2的建立時間T3和保持時間應滿足什么條件。這里給出一個簡易公式供大家死記一下,
以下兩個公式確定了D2的Tsetup和Thold:
1) D1的Tco + max數據鏈路延時 + D2的Tsetup < T(即T3 < T - Tco - T2max)
2) D1的Tco + min數據鏈路延時 > D2的Thold(即T4< Tco + T2min)
其實上面的式2可以從T3+T4=T推出,不過要注意把1)中的T2max改為T2min即可。
總之,建立時間長了,保持時間就短了。
實際中,某條數據鏈路延時是一個定值,只不過要求它落在區間{T2min,T2max}。這也是T2min和T2max的實際意義。
從現實設計出發,個人覺得這個題改為考T2max和T2min更合適,那是不是有更多人犯暈呢?!hoho
如果是那樣的話,大家自己變個形吧^_^
maxbird: D2的保持時間就是時鍾沿到來之后,D2的數據輸入端要保持數據不變的時間,這個時間是由D1和D2之間的組合邏輯時延決定的。例如:假設D1和D2之間的組合邏輯時延為2ns,時鍾周期為10ns,這意味着在時鍾沿來到后,D1輸出的新數據要過2ns才會到達D2的數據輸入端,那么在這2ns內,D2的數據輸入端保持的還是上一次的舊數據,其值不會立即更新,假設D2的最小保持時間為3ns,這意味時鍾沿到來后,D2的數據輸入端的值在3ns內不能有變化,回到問題的關鍵,由於D1在時鍾沿到來后的輸出結果,經過2ns的組合邏輯延時便到達了D2的輸入端,而D2要求在時鍾沿到來后的3ns內其輸入端的值不能改變,這樣D2的保持時間就得不到滿足,所以D2的保持時間必須小於等於2ns(因為新數據在2ns之后才會過來,所以就給了D2輸入數據<=2ns的保持時間)。至於說T2min為0時的情況,其實T2min是永遠不能為0的,即使是一根導線其時延也是不可能為0的,這就是為什么移位寄存器的兩個觸發器之間連的只是一根導線,導線后端觸發器的保持時間卻還是可以滿足的原因,其實移位寄存器中觸發器的保持時間可以看成是小於等於其間導線的時延。