建立時間和保持時間
圖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的,這就是為什麼移位暫存器的兩個觸發器之間連的只是一根導線,導線後端觸發器的保持時間卻還是可以滿足的原因,其實移位暫存器中觸發器的保持時間可以看成是小於等於其間導線的時延。