時鍾信號特性有:抖動(Jitter)、偏移(skew)、占空比失真(Duty Cycle Distortion)
偏移SKEW
因時鍾線長度不同或負載不同,導致時鍾到達相鄰單元的時間不同,這個時間上的偏差就叫時鍾偏移SKEW。
在上圖中的Tskew=Tc1-Tc2
偏移會一直存在,因此FPGA在設計時,會進行優化,采用全銅工藝和樹狀結構,設計專門的始終緩沖和驅動網絡,使得時鍾到達不同單元時的路徑一樣長,盡量減小偏移。
所以,Skew 問題的解決方法就是:設計中的主要信號應該走全局時鍾網絡。
此外FPGA中延遲鎖定環(Delay locked ring,DLL)也可以去SKEW,延遲鎖相環由控制邏輯和延時線組成,控制邏輯將輸入時鍾與輸出時鍾進行比較,並插入延時從而使得時鍾同步。
但無論如何,在STA時,任然要考慮Skew。
抖動Jitter
在理想情況下,一個頻率固定的完美的脈沖信號(以1MHz為例)的持續時間應該恰好是1us,每500ns有一個跳變沿。但這種信號並不存在。如圖所示,信號周期的長度總會有一定變化,從而導致下一個沿的到來時間不確定。這種不確定就是抖動(jitter)。時鍾抖動也永遠存在。
占空比失真Duty Cycle Distortion
占空比失真即時鍾不對稱,高電平和低電平時間發生變化。DCD會占用時間裕量(Slack)造成數字信號的失真,使過零區間偏離理想的位置。DCD通常是由信號的上升沿和下降沿之間時序不同而造成的。
扇入扇出Fan-in/Fan-out
數字電路中,邏輯門相互連接,每個邏輯門輸出端與輸入端都連着大量別的單元,因此由扇入扇出表示處理外部輸入以及驅動外部其他單元的能力。
亞穩態及相關概念
同步電路中:
建立時間(Setup time):觸發器時鍾上升沿到來前數據保持穩定的時間。
保持時間(Hold time):觸發器時鍾上升沿到來后數保持據穩定的時間。
如圖所示,在時鍾上升沿到來前后的一段時間內數據必須保持穩定,否則數據就無法寫入,造成“亞穩態“輸出。如果前級驅動夠強勁,電路就能按照趨勢變化下去,一定時間后該點的值就會變化為“正確值”,如果驅動不夠強勁,電路就會恢復之前的值,最終得到何值是不可控的,所以我們要避免亞穩態。在使用DFF時,必須滿足其建立時間和保持時間的要求。
以上圖為例,假設時序如下
在上圖時序中:
△T=Tskew
T1=REG1檢測到時鍾后內部延時+組合邏輯延時最后到達REG2的時間
Tcycle=CLK的周期
Tsu=數據在CLK2上升沿到達前維持的時間
Tsu = Tcycle + Tskew-T1
Th=數據在CLK上升沿到達后維持的時間
Th = T1 – Tskew
如果Ts>setup time(觸發器),Th>hold time(觸發器)則數據能正常寫入,由這個條件可以看出,Tskew與T1起着關鍵作用,而正之前所說如果使用全局時鍾則Tskew會很小,可以忽略不計。
實例:
以上圖為例Tsu= Tcycle + Tskew-T1要使Tsu最小,則Tskew最小,T1最大。
Tsu(min) = Tcycle + Tskew(min)-T1(max)=15+2+5+2-2-11-2-9-2<Tsetup
因此發生了setup violation
異步復位時:
除了同步電路中會產生亞穩態外(不滿足Tsu和Th),在異步復位時也會產生亞穩態,這里需要提到復位時間與撤銷時間。
復位時間(recovery):復位信號釋放(對於低電平有效的復位信號指上升沿),與緊跟其后的第一個時鍾上升沿之間的最小時間。
撤銷時間(removal):時鍾信號的上升沿,與緊跟其后異步復位信號從有效到無效的最小時間。
如圖所示,異步復位信號撤銷必須在復位時間和撤銷時間外,否則會產生亞穩態。
異步復位信號撤銷時間在Trecovery和Tremoval之內,則會造成亞穩態,在時鍾上升沿Tco(輸出延時)后會產生振盪,振盪時間為Tmet(決斷時間)。
補充:
1.只要系統中有異步元件,亞穩態就是無法避免的,亞穩態主要發生在異步信號檢測、跨時鍾域信號傳輸中。
2.對於同步信號而言不滿足Tsu和Th會產生亞穩態,對於異步信號,復位不滿足Trecovery和Tremoval會產生亞穩態。
3.隨着clk頻率的增加,亞穩態發生的幾率是增加的。
4.采用工藝更好的FPGA。
消除亞穩態方法:
1.對異步信號進行同步處理;
2.使用FIFO對跨時鍾域數據進行緩沖處理;
3.復位電路采用異步復位,同步釋放處理;
時間裕量Slack
概念:
時間裕量分析首先需要將電路中的路徑找出來。路徑的起點有兩種:時序器件的時鍾輸入端、電路的起點;終點也有兩種:時序器件的數據輸入端、電路的終點。如下圖所示,一共有四種路徑。
除了路徑外還有以下幾個概念需要了解:
關鍵路徑(critical path):從輸入到輸出中延時最大的那條路徑。
到達時間(arrival time):信號從參考的時間起到達某特點位置的時間。
需求時間(required time):信號到達的最晚的時間。
時間裕量(slack):用需要時間減去到達時間得到的結果就是時間裕量(slack =required time- arrival time)。如果時證書則說明路徑延時滿足需求,如果時負數則說明延時不滿足。其中比較重要的時Hold Time Slack。
計算:
仍然以該電路為例
發射沿(Launch Edge):產生數據的REG1的clock上升沿;
鎖存沿(Latch Edge):接受數據的REG2的clock的上升沿,延時Launch Edge1個時鍾;
數據到達時間(Data Arrival Time)
Tclk1= CLK到達REG1的時間
Tco = REG1固定延時
Tdata= 數據傳輸時間
時序圖如下:
Data Arrival Time = Launch Edge+Tclk1+Tco+Tdata
時鍾到達時間(Clock Arrival Time)
時序圖如下:
Clock Arrival Time = latch Edge+Tclk2
數據建立需求時間(Data Required Time Setup)
因為數據必須在Tsu之前有效,因此:
Data Required Time Setup = Clock Arrival Time-Tsu
數據保持需求時間(Data Required Time Hold)
因為數據必須在Th之后才能改變,因此:
Data Required Time Hold= Clock Arrival Time+Th
最后計算Slack
Setup Slack = Data Required Time Setup -Data Arrival Time
Hold Slack = Clock Arrival Time - Data Required Time Hold
參考資料:
https://blog.csdn.net/nearcsy/article/details/81304157
https://www.cnblogs.com/oomusou/archive/2010/08/04/timing_slack.html