Clock Skew , Clock Uncertainty和 Period


本文將介紹FPGA中和時鍾有關的相關概念,閱讀本文前需要對時序收斂的基本概念和建立、保持關系有一定了解,這些內容可以在時序收斂:基本概念建立時間和保持時間(setup time 和 hold time)中找到。

系列目錄 

    時序收斂:基本概念

    建立時間和保持時間(setup time 和 hold time)

    OFFSET約束(OFFSET IN 和OFFSET OUT)

    Clock Skew , Clock uncertainly 和 Period

    特殊約束From To

    OFFSET IN 使用舉例

    Achieving Timing Closure

0. 引言

    Intel 4790K的主頻是4.0GHz,高通801的單核頻率可達2.5GHz,A8處理器在1.2GHz,MSP430可以工作在幾十MHz……這里的頻率的意思都是類似的,這些處理器的頻率都是廠商給定的。但是對於FPGA的工作頻率而言卻往往需要我們自己決定,在產品的設計初始就需要考慮FPGA工作在哪個頻率,譬如250MHz。這個取值並不是瞎確定的,譬如如果定在1GHz,那顯然是不可能的,有一本叫《XXXXX FPGA Data Sheet DC and Switch Characteristics》的手冊給出了FPGA各個模塊的直流供電特性和最高工作頻率。這里給出的是理論工作上限制,Virtex-5各個模塊工作頻率最高大概在400-500MHz之間。當然還要考慮FPGA的輸入clk了,即使有DCM等模塊分頻倍頻,一般也不會選擇一個很奇怪的分頻比。

    一旦工作頻率確定下來之后,問題就來了。你所建立的工程是否能在這一要求的工作頻率下正常工作?只需要在UCF文件內添加時鍾的周期約束,Place & Route之后就可以得到結果了。約束滿足了,很好;沒有滿足,可以改,如何修改將在Achieving Timing Closure中介紹。

    談到這里,有一個問題呼之欲出:除了器件本身的限制,還有什么會影響工作頻率?下文將介紹相關概念。

1. Clock Skew

    考慮同步時序電路中的觸發器,在時鍾沿到達的時候,數據必須是穩定(非亞穩態)且有效的(符合設計需求)。同步時序電路中,對於兩個相連的觸發器(譬如下圖,Figure6-26),我們自然希望這兩個觸發器的時鍾相位完全一致,但這往往是不現實的。不同的延時將破壞這一關系,延時差稱為Clock Skew,即時鍾歪斜。

    Clock Skew = clock path delay to the destination synchronous element - clock path delay to te source synchronous element.

    時鍾的不同路徑延時將破壞其原本完美的相位關系。但並不是說Clock Skew的取值為0是最好的 。Clock Skew是如何影響時鍾周期(頻率)將在第三節介紹。

    注意,clock skew中只提到了path delay,但是實際上對於destination synchronous element 和source synchronous element而言,時鍾的相位可能是不一樣的。這一點表現出了時鍾的相位和clock skew是獨立的兩個概念。在前文的OFFSET中,相位的表現為clock arrival time。

clipboard

 

    上圖是一個clock skew的例子,可以看到兩個觸發器的時鍾不是同相的,但是計算clock skew的時候沒有必要考慮。以DCM的輸出作為參考,源同步元素的路徑延時為0.852+0.860+0.639 = 2.351,目的同步元素的路徑時延為0.860 + 0.860 +  0.639 = 2.359。故clock skew = 0.008 。

2. Clock Uncertainty

    Clock Uncertainty 的概念比較好理解,就是時鍾的不確定性。時鍾不確定性是時鍾本身的不完美導致的。譬如對於100MHz時鍾,上升沿本應該在0ns,10ns,20ns;實際上卻在0ns,10.01ns,19.99ns,這個差距就是時鍾的不確定性。時鍾不確定性受到了多個因素的影響,其中一個因素是clock jitter,關於clock jitter,PERIOD約束中有一個INPUT JITTER的關鍵字告訴綜合工具輸入時鍾的jitter。譬如

clipboard[1]

    不同情況下,Clock Uncertainty 的計算方式是不一樣的,譬如DCM時鍾下

Clock Uncertainty = [√(INPUT_JITTER² + SYSTEM_JITTER²) +  DCM_Discrete_Jitter]/2 + DCM_Phase_Error

    SYSTEM JITTER定義了整個系統的jitter,受到了電源噪聲、板級噪聲和系統任何外部jitter的影響。對於clock uncertainty和clock jitter來說,好像並沒有什么太值得注意的地方。

3. Period 分析

Clock Domains

對於同步時序電路來說,不可避免的有時鍾的存在,比較簡單的就是所有的觸發器都采用了一個時鍾。那么可以認為整個設計中的路徑都處於這個時鍾的覆蓋下,如下圖,這兩個觸發器之間的路徑是受到這一個時鍾的時鍾周期約束的。這種情況稱為single clock domain。

clipboard[2]

 

    但是對於大多數設計來說,情況並不是這樣的,譬如DCM可以分出不同相位的時鍾。如下圖,此時兩個觸發器的時鍾不是一樣的,而這兩個觸發器之間的數據路徑連接了這兩個時鍾。什么是時鍾域?域即是區域,時鍾的區域,在我看來就是時鍾覆蓋的范圍。下圖中觸發器之間的路徑,一端屬於clk20,一端屬於clk20_90g,橫跨了兩個時鍾域。注意這兩個時鍾是一個DCM產生的,時鍾相關,因此XST能夠對其進行分析。本節內容不談跨時鍾域的問題。

clipboard[3]

舉例

    以上圖(Figure6-6)為例,計算slack。Requirement取決於兩個觸發器時鍾的相對相位關系。注意到第一個觸發器在下降沿采樣,第二個觸發器相移為90,時鍾周期為20ns。結合前文的setup和OFFSET提及的相關概念。這是很好理解的。和OFFSET約束不同的是,OFFSET主要是受到外部信號的相對關系影響,Period則基本取決於設計。通過分析可知,限制最小時鍾周期的影響因素在於data path。data path包括了布線延時和邏輯延時。了解到這一點,對之后代碼編寫是由幫助的。譬如,不能有太復雜的邏輯。(這是因為FPGA的LUT結構輸入有限,以4輸入為例,邏輯復雜需要LUT級聯,那么自然會影響到邏輯延時)

Slack (setup path): 13.292ns (requirement - (data path - clock path skew + uncertainty))

Source: IntC_2 (FF)

Destination: XorB_2 (FF)

Requirement: 15.000ns

Data Path Delay: 2.594ns (Levels of Logic = 1)

Clock Path Skew: -0.086ns

Source Clock: clk0 falling at 10.000ns

Destination Clock: clk90 rising at 25.000ns

Clock Uncertainty: 0.200ns

周期約束分析

    結合三節內容來看,注意式子Slack = requirement - (data path - clock path skew + uncertainty)) 。requirement是由時鍾周期確定的,要判斷時鍾的周期約束是否得到滿足,計算data path - clock path skew + uncertainty是否大於requirement 即可。data path是數據路徑延時,另兩個參數已經在1,2節介紹。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM