本文將介紹FPGA中和時鐘有關的相關概念,閱讀本文前須要對時序收斂的基本概念和創建、保持關係有必定了解,這些內容能夠在時序收斂:基本概念,創建時間和保持時間(setup time 和 hold time)中找到。html
系列目錄 dom
創建時間和保持時間(setup time 和 hold time)ui
OFFSET約束(OFFSET IN 和OFFSET OUT)spa
Clock Skew , Clock uncertainly 和 Period設計
特殊約束From Tohtm
OFFSET IN 使用舉例blog
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等模塊分頻倍頻,通常也不會選擇一個很奇怪的分頻比。element
一旦工做頻率肯定下來以後,問題就來了。你所創建的工程是否能在這一要求的工做頻率下正常工做?只須要在UCF文件內添加時鐘的週期約束,Place & Route以後就能夠獲得結果了。約束知足了,很好;沒有知足,能夠改,如何修改將在Achieving Timing Closure中介紹。
談到這裏,有一個問題呼之欲出:除了器件自己的限制,還有什麼會影響工做頻率?下文將介紹相關概念。
考慮同步時序電路中的觸發器,在時鐘沿到達的時候,數據必須是穩定(非亞穩態)且有效的(符合設計需求)。同步時序電路中,對於兩個相連的觸發器(譬以下圖,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。
上圖是一個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 。
Clock Uncertainty 的概念比較好理解,就是時鐘的不肯定性。時鐘不肯定性是時鐘自己的不完美致使的。譬如對於100MHz時鐘,上升沿本應該在0ns,10ns,20ns;實際上卻在0ns,10.01ns,19.99ns,這個差距就是時鐘的不肯定性。時鐘不肯定性受到了多個因素的影響,其中一個因素是clock jitter,關於clock jitter,PERIOD約束中有一個INPUT JITTER的關鍵字告訴綜合工具輸入時鐘的jitter。譬如
不一樣狀況下,Clock Uncertainty 的計算方式是不同的,譬如DCM時鐘下
Clock Uncertainty = [√(INPUT_JITTER² + SYSTEM_JITTER²) + DCM_Discrete_Jitter]/2 + DCM_Phase_Error
SYSTEM JITTER定義了整個系統的jitter,受到了電源噪聲、板級噪聲和系統任何外部jitter的影響。對於clock uncertainty和clock jitter來講,好像並無什麼太值得注意的地方。
Clock Domains
對於同步時序電路來講,不可避免的有時鐘的存在,比較簡單的就是全部的觸發器都採用了一個時鐘。那麼能夠認爲整個設計中的路徑都處於這個時鐘的覆蓋下,以下圖,這兩個觸發器之間的路徑是受到這一個時鐘的時鐘週期約束的。這種狀況稱爲single clock domain。
可是對於大多數設計來講,狀況並非這樣的,譬如DCM能夠分出不一樣相位的時鐘。以下圖,此時兩個觸發器的時鐘不是同樣的,而這兩個觸發器之間的數據路徑鏈接了這兩個時鐘。什麼是時鐘域?域便是區域,時鐘的區域,在我看來就是時鐘覆蓋的範圍。下圖中觸發器之間的路徑,一端屬於clk20,一端屬於clk20_90g,橫跨了兩個時鐘域。注意這兩個時鐘是一個DCM產生的,時鐘相關,所以XST可以對其進行分析。本節內容不談跨時鐘域的問題。
舉例
以上圖(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節介紹。