Vivado中怎么做set_input_delay約束


前言
在STA中,要分析上游器件和FPGA之間的時序關系就得指定input delay。

流程
什么是input delay:約定上游芯片輸出及時鍾之間的關系。約束的目的就是看適配后的時序關系是什么樣的。
以下以源同步接口舉例,上游芯片發送data和隨路時鍾到下游FPGA芯片端口進行接收,使用解串原語對數據進行解串。


這里使用的DCLK為:4.464ns。時鍾與數據關系是DDR中心對齊。
40M下的建立保持時間如下:Tsu=0.72ns,Tho = 0.82ns。
上vivado中語言模板中找模板。把Tsu、Tho抄進去對應dv_bre、dv_are、 dv_bfe、dv_afe。dv_bre指的是時鍾沿前穩定的時間,這個時間可以用示波器測出來,或者看datasheet上的建立保持時間(這之間的數據肯定是穩定的)。
得到:min=Tho=0.82ns,max=T/2-Tsu=4.464/2-0.72=1.512ns;這里假定時鍾和數據到FPGA的路徑長度是一致的(由PCB布線保證)。
set_input_delay  -clock [ get_clocks  adc_dco_clk] -clock_fall -min -add_delay 0.820 [ get_ports  i_data_ch0_p]
set_input_delay  -clock [ get_clocks  adc_dco_clk] -clock_fall -max -add_delay 1.512 [ get_ports  i_data_ch0_p]
set_input_delay  -clock [ get_clocks  adc_dco_clk] -min -add_delay 0.820 [ get_ports  i_data_ch0_p]
set_input_delay  -clock [ get_clocks  adc_dco_clk] -max -add_delay 1.512 [ get_ports  i_data_ch0_p]

編譯分析STA結果:
本次時鍾路徑:IBUFDS→BUFIO→ISERDESE  差分時鍾經過IBUFDS變為單端,經過IOB中的BUFIO送入ISERDESE。

本次數據路徑:IBUFDS→ISERDESE 差分數據經過IBUFDS變成單端送入ISERDESE。
則要求數據在2.904ns時候到來,但數據抵達時刻是1.559ns,出現了保持違例:1.559-2.904 = -1.345ns。
也就是說數據來早了,提前撤銷導致了保持違例。另一個角度說是時鍾來晚了。
所以要解決這個問題,可以讓數據晚點來,或者讓時鍾早點來。
對於片內邏輯間的保持不滿足可以插LUT1,但接口IOB部分就沒法插了,於是上網上找方法。

參考前面參考鏈接可知:可使用IODELAY原語對數據進行相應的延時,達到保持時間的滿足。
這里1.345ns/78ps=18拍,即IODELAY至少需要延遲18拍;
時序約束文件中參考下述圖片寫,但我還沒有驗證過,待驗證,理論可行,估計就可以STA通過了。

這個延時可以通過時序訓練或者手動調節,找尋合適點。具體可參考:xapp524-serial-lvds-adc-interface.pdf
如果是動態調節TAP值,那么STA就沒卵用了,STA的前提是假定TAP值為定值。

以上。








免責聲明!

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



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