OFFSET 的意思是偏移。對於同步時序電路來講,數據和時鐘之間的偏移量是必需要關注的。OFFSET IN和OUT分別對應的是輸入和輸出FPGA數據和時鐘之間的偏移關係,本文將分析這一種關係。閱讀本文前須要對時序收斂的基本概念和創建、保持關係有必定了解,這些內容能夠在時序收斂:基本概念,創建時間和保持時間(setup time 和 hold time)中找到。html
系列目錄 ui
時序收斂:基本概念spa
創建時間和保持時間(setup time 和 hold time)3d
OFFSET約束(OFFSET IN 和OFFSET OUT)orm
Clock Skew , Clock uncertainly 和 Periodhtm
特殊約束From Toblog
簡單來講,以輸入約束爲例 OFFSET約束指定的是rem
數據在採樣時刻以前多少時間有效(OFFSET BEFORE),以及有效時間是多少(VALID)
Input delay指的是
進入到FPGA內部的數據跳變沿可能的最先時刻(min),和最後時刻(max),即max-min是數據不穩定的時間。
譬如(UG911)
UCF OFFSET = IN 1ns VALID 2ns BEFORE clka;
XDC set_input_delay -clock clka -max 9 [all_inputs]
set_input_delay -clock clka -min 1[all_inputs]
Note: This assumes the clock period is 10 ns
Offset 約束定義了外部時鐘pad和與之相關的輸入、輸出pad之間的相對關係。這是一個基礎的時序約束。Offset定義的是外部之間的關係,不能用在內部信號上。
OFFSET約束寫起來仍是比較簡單的,如
OFFSET = {IN|OUT} offset_time [units] {BEFORE|AFTER} clk_name [TIMEGRP group_name];
offset_time 寫多少取決於數據之間所須要的相對關係,另外,弄懂XST是如何分析時序關係也是十分重要的。
下面的式子是UG612中指出的時序要求須要知足的關係,看着可能不是太明白,可是結合例子分析就容易理解了。下面的式子給出的要求是Toffset_IN_BEFORE - (TData + TSetup - TClock) > 0 ,實際上就對應着slack 大於0 。 具體表述以下(分別爲創建時間和保持時間要求)
TData + TSetup - TClock <= Toffset_IN_BEFORE
where
TSetup = Intrinsic Flip Flop setup time
TClock = Total Clock path delay to the Flip Flop
TData = Total Data path delay from the Flip Flop
Toffset_IN_BEFORE = Overall Setup Requirement
TClock - TData + Thold <= Toffset_IN_BEFORE_VALID
where
Thold = Intrinsic Flip Flop hold time
TClock = Total Clock path delay to the Flip Flop
TData = Total Data path delay from the Flip Flop
Toffset_IN_BEFORE_VALID = Overall Hold Requirement
文檔中還提到了Hold time的需求,創建時間和保持時間在上文有介紹。UG612這裏是個大坑,給出了這個式子以後就再也沒有討論過hold time了。以前的WP327(WP327部份內容錯誤,UG612有修正)卻是提到了這一點
「The OFFSET IN requirement value is used as a setup time requirement of the FPGA during the setup time analysis. The VALID keyword is used in conjunction with the requirement to create a hold-time requirement during a hold-time analysis. The VALID keyword specifies the duration of the incoming data valid window, and the timing analysis tools perform a hold-time analysis. By default, the VALID value is equal to the OFFSET time requirement, which specifies a zero hold-time requirement. See Figure 6."
這一段介紹了hold time 的處理方法。若是指定了數據的VALID 時間,那麼hold time 的requirement 是肯定的,這樣可以進行具體的分析;若是沒有肯定,那麼默認認爲hold-time 的requirement 是0 。
Simple Example
Slack: -0.191ns (requirement - (data path - clock path - clock arrival + uncertainty))
Source: reset (PAD)
Destination: my_oddrA_ODDR_inst/FF0 (FF)
Destination Clock: clock0_ddr_bufg rising at 0.000ns
Requirement: 3.000ns
Data Path Delay: 2.784ns (Levels of Logic = 1)
Clock Path Delay: -0.168ns (Levels of Logic = 3)
Clock Uncertainty: 0.239ns
上面的例子首先告訴咱們,OFFSET_IN約束是3ns,也就是說對於輸入數據在採樣時鐘沿前3ns有效。那麼在觸發器上可否正確採樣取決於:觸發器採樣時鐘延遲了-0.168,故多提早了-0.168ns;data path delay是2.784,故數據延遲2.784;源、目的端時鐘關係爲0,不變;不肯定性帶來壞的影響,有
slack = 3 + (-0.168) -2.784 - 0.239 +0;
Phase-Shifted Example
Slack: 2.309ns (requirement - (data path - clock path - clock arrival + uncertainty))
Source: reset (PAD)
Destination: my_oddrA_ODDR_inst/FF0 (FF)
Destination Clock: clock90_bufg rising at 2.500ns
Requirement: 3.000ns
Data Path Delay: 2.784ns (Levels of Logic = 1)
Clock Path Delay: -0.168ns (Levels of Logic = 3)
Clock Uncertainty: 0.239ns
分析過程相似,不過咱們注意到在定義的時候,相對值是clock,可是觸發器採樣的時鐘是clk90(Destination)。這也就意味着咱們多了一個clock arrival time,這個值是2.5ns。其他和上面的例子是同樣的。
那麼回到以前的式子Toffset_IN_BEFORE - (TData + TSetup - TClock) > 0 ;分析報告中的requirement 實際上就是Toffset_IN_BEFORE,data path包括了TData 和 TSetup,TClock實際上就是clock arrival 和clock path delay。這個式子是沒有考慮到clock uncertainty 的。
在結束這一節以前,還要說起一個很奇怪的,不知道爲什麼要存在的概念。以前沒有特別說明,對於OFFSET IN約束來講,寫法大抵是
OFFSET = IN 3ns BEFORE clock;
採用before是很天然的,由於咱們一直在分析創建時間,創建時間就是偏偏是採樣沿以前。OFFSET IN還能夠這樣寫,即(等價的)
OFFSET = IN 2 ns AFTER clock_pad
此時對應的須要知足的條件是
TData + TSetup - TClock <= TPeriod - Toffset_IN_AFTER
where
TSetup = Intrinsic Flip Flop setup time
TClock = Total Clock path delay to the Flip Flop
TData = Total Data path delay from the Flip Flop
TPeriod = Single Cycle PERIOD Requirement
Toffset_IN_AFTER = Overall Setup Requirement
通常採用OFFSET約束的時候還須要指定數據有效的時間,譬如
OFFSET = IN 2 ns VLAID 4ns BEFOR clock_pad
指數據在採樣沿到達前2ns有效4ns。
OFFSET OUT 約束是FPGA到下游的器件的時鐘、數據之間的相對關係,具體能夠用下圖來表示。具體約束要求,下游器件接收到的數據會在時鐘沿以後多久以內到達。那麼,根據這一幅圖能夠得出Clock to Out = clock_delay + clock_to_out + data_delay + clock_arrival。這是由於FPGA內部的觸發器的時鐘延遲了clock path,同時因爲觸發器的觸發時間,FPGA觸發器輸出就延時了clock_delay+clock_to_out時間,同時數據還有延遲。另,圖中給出的是一種狀況,這種狀況下clock_arrival = 0,最後的結果還須要加上clock_arrival. (注:下圖給出的是系統同步方式,圖沒有畫好)
根據這一相對關係,能夠得出FPGA時序須要知足的關係
TQ + TData2Out + TClock <= Toffset_OUT_AFTER
where
TQ = Intrinsic Flip Flop Clock to Out
TClock = Total Clock path delay to the Flip Flop
TData2Out = Total Data path delay from the Flip Flop
Toffset_OUT_AFTER = Overall Clock to Out Requirement
具體的分析和OFFSET IN的相似,這裏再也不重複,一樣給出幾個例子。
例子分析
Simple Example
Slack: -0.865ns (requirement - (clock arrival + clock path + data path + uncertainty)) Source: OutD_7 (FF) Destination: OutD<7> (PAD) Source Clock: clock3_std_bufg rising at 0.000ns Requirement: 3.000ns Data Path Delay: 3.405ns (Levels of Logic = 1) Clock Path Delay: 0.280ns (Levels of Logic = 3) Clock Uncertainty: 0.180ns