OFFSET約束(OFFSET IN 和OFFSET OUT)


OFFSET 的意思是偏移。對於同步時序電路來說,數據和時鍾之間的偏移量是必須要關注的。OFFSET IN和OUT分別對應的是輸入和輸出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. Xilinx已采用XDC約束,使用Input/output delay代替OFFSET約束

  簡單來說,以輸入約束為例 OFFSET約束指定的是

  數據在采樣時刻之前多少時間有效(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

1. OFFSET約束的寫法

    Offset 約束定義了外部時鍾pad和與之相關的輸入、輸出pad之間的相對關系。這是一個基礎的時序約束。Offset定義的是外部之間的關系,不能用在內部信號上。

    OFFSET約束寫起來還是比較簡單的,如

    OFFSET = {IN|OUT} offset_time [units] {BEFORE|AFTER}  clk_name [TIMEGRP group_name];

  • offset_time: 捕獲時鍾沿和數據起始時間之差,默認單位為ns,可以定義為ns、ps等
  • BEFORE|AFTER:和本意類似
  • clk_name: 輸入clock pad net 的層次化全稱

    offset_time 寫多少取決於數據之間所需要的相對關系,另外,弄懂XST是如何分析時序關系也是十分重要的。

2. OFFSET IN 分析

   下面的式子是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."

clipboard

 

    這一段介紹了hold time 的處理方法。如果指定了數據的VALID 時間,那么hold time 的requirement 是確定的,這樣能夠進行具體的分析;如果沒有確定,那么默認認為hold-time 的requirement 是0 。


3.OFFSET IN 舉例

Simple Example

clipboard[1]

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

clipboard[2]

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。

4. OFFSET OUT 分析

    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. (注:下圖給出的是系統同步方式,圖沒有畫好)

clipboard[3]

 

    根據這一相對關系,可以得出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

clipboard[4]

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


免責聲明!

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



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