TIMING_06 VIVADO环境下的时序约束 之 输入延迟约束
? ? ? ? ?由于該系列文章閱讀有順序性,所以請?zhí)D(zhuǎn)至該系列文章第一篇從頭開始閱讀,并按照文章末尾指示按順序閱讀,否則會云里霧里,傳送門在此:??https://blog.csdn.net/qq_33486907/article/details/89380368???《TIMING_01 時序約束與時序分析》
目錄
1.輸入延遲約束
1.1?同步方式 之 系統(tǒng)同步
1.1.1? 傳輸線延遲的計算方式
1.1.2??系統(tǒng)同步約束案例
1.2?同步方式 之 源同步方式
1.2.1 SDR
1.2.2?DDR
1.輸入延遲約束
? ? ? ? 輸入延遲約束用于告訴VIVADO FPGA上游器件的時序性能參數(shù),FPGA結(jié)合自身內(nèi)部的時序性能參數(shù)即可獲得這條時序路徑的分析結(jié)果,如圖:
約束如下:
? ? ? ? 情況1:沒有最大最小延遲的情況
? ? ? ?create_clock -period 10.000 -name clk -waveform {0.000 5.000} [get_ports clk]
? ? ? ?set_input_delay –clock clk 4 [get_ports din]
? ? ? ?情況2:有最大最小延遲的情況
? ? ? ? create_clock -period 10.000 -name clk -waveform {0.000 5.000} [get_ports clk]
? ? ? ? set_input_delay -clock clk -max number [get_ports din]
? ? ? ? set_input_delay -clock clk -min number [get_ports din]
? ? ? ? max用于分析建立時間? min用于分析保持時間
? ? ? ? 對于延時時間參數(shù)的計算方式和系統(tǒng)同步方式有關(guān),接下來分別介紹。
1.1?同步方式 之 系統(tǒng)同步
? ? ? ?分析輸入端口到FPGA內(nèi)部時序單元的路徑時,當(dāng)source clock和destination clock來自同一個系統(tǒng)時鐘時,稱為系統(tǒng)同步輸入(system synchronous input);
? ? ? ? source clock是CLKA,destination clock是CLKB,其中CLKB通過輸入端口引入FPGA內(nèi)部(約束成主時鐘),而CLKA引到了FPGA外部的板上芯片,并沒有引入到FPGA內(nèi)部,CLKB是采集輸入端口的時鐘,因此首先約束CLKB為主時鐘。
?????? Tclkd_ext:表示外部時鐘源到外部芯片的延時;
? ? ? ?Tclkd_int:表示外部時鐘源到FPGA輸入端口的延時;
? ? ? ?Tco:表示外部芯片Tco時間;
? ? ? ?Tbd:表示外部芯片輸出端口到FPGA芯片的板上延時。
通用公式如下:
? ? ? ? max_input_delay = Tclkd_ext_max?+ Tco_max?+ Tbd_max?– Tclkd_int_min
? ? ? ? min_input_delay = Tclkd_ext_min?+ Tco_min?+ Tbd_min?– Tclkd_int_max
? ? ? ? 通常在硬件設(shè)計時會將外部時鐘源到FPGA管腳和到外部芯片時鐘管腳做等長處理,即可認(rèn)為Tclkd_ext == Tclkd_int,可以將公式簡化為:
? ? ? ? max_input_delay = Tco_max?+ Tbd_max?
? ? ? ? min_input_delay = Tco_min?+ Tbd_min?
? ? ? ? 做約束時只需關(guān)注上游芯片的Tco時間和傳輸線延遲時間即可,但前提是時鐘線做了等長處理;
? ? ? ? Tco時間一般由上游器件的器件手冊或時序圖得到,傳輸線延遲時間Tbd則是根據(jù)實際PCB布線的長度來獲得的。
? ? ? ? 對于Tbd的最大最小值的得來,如果約束的對象是單比特數(shù)據(jù)線,那么自然Tbd只存在一個值;但如果約束的是多比特數(shù)據(jù)總線,那么在不做到絕對等長的情況下,走線肯定存在長短,也就有了最大和最小的延遲時間;
? ? ? ? 系統(tǒng)同步接口(System?Synchronous?Interface)的構(gòu)建相對容易,以?FPGA?做接收側(cè)來舉例,上游器件僅僅傳遞數(shù)據(jù)信號到?FPGA?中,時鐘信號則完全依靠系統(tǒng)板級來同步。時鐘信號在系統(tǒng)級上同源,板級走線的延時也要對齊。正因為這樣的設(shè)計,決定了數(shù)據(jù)傳遞的性能受到時鐘在系統(tǒng)級的走線延時和?skew?以及數(shù)據(jù)路徑延時的雙重限制,無法達到更高速的設(shè)計要求,所以大部分情況也僅僅應(yīng)用?SDR?方式。
1.1.1? 傳輸線延遲的計算方式
?????? 這里單獨給出一個章節(jié),用于講解傳輸線延遲的計算方法:
? ? ? “信號速度還與不同材料的介電常數(shù)相關(guān),具體計算公式是?? V=C/Er0.5????,其中Er是信號線周圍材料的相對介電常數(shù)。我們常見的PCB材料Fr4的介電常數(shù)在4.2-4.5左右,為了計算方便我們?nèi)?。帶入公式可以算出,Fr4材料制作的PCB板上面信號的傳輸速度是光速的二分之一。光速大約等于12inch/ns,計算得出Fr4板上信號速度大約是6inch/ns。換算成延時,也就是166ps/inch。這就是我們經(jīng)常說的PCB板上信號延時大約是166ps/inch。”
? ? ?Tbd = lenth mil * 166ps/inch / 10^6 = num ns? 使用這個公式即可得出傳輸線的延遲時間;
1.1.2??系統(tǒng)同步約束案例
?????? 如圖所示:假設(shè)時鐘信號在板級做等長處理,那么可以采用簡化的延遲時間計算公式:
? ? ? ?max_input_delay = Tco_max?+ Tbd_max? = 2 + 0.4 = 2.4ns
? ? ? ?min_input_delay = Tco_min?+ Tbd_min?? = 1 + 0.3 = 1.3ns
?????? 然后就可以對input 做出如下約束:
第一步約束主時鐘:
? ? ? ? create_clock -period 10.000 -name clk -waveform {0.000 5.000} [get_ports clk]
第二步輸入端口延遲約束:
? ? ? ? set_input_delay -clock clk -max 2.4 [get_ports din]
? ? ? ? set_input_delay -clock clk -min 1.3 [get_ports din]
? ? ? ? 這樣就完成一個對系統(tǒng)同步輸入端口的延遲約束; 如果始終信號在板級沒有做等長處理則就需要考慮時鐘的歪斜帶來的延遲。
1.2?同步方式 之 源同步方式
?????? 分析輸入端口到FPGA內(nèi)部時序單元的路徑時,當(dāng)destination clock來自外部芯片,即與數(shù)據(jù)輸入同源,稱為源同步輸入(source synchronous input)。
? ? ? ?Tcd:表示外部芯片時鐘輸出到FPGA輸入端口的延時;
? ? ? ?Tco:表示外部芯片Tco時間;
? ? ? ?Tbd:表示外部芯片輸出端口到FPGA芯片的板上延時;
? ? ? ? max_input_delay = Tbd_max?+ Tco_max?- Tcd_min
? ? ? ? min_input_delay = Tbd_min?+ Tco_min?- Tcd_max
?????? 通常在硬件設(shè)計時會將隨路時鐘和數(shù)據(jù)線進行等長處理,即Tbd = Tcd,即可得出簡化的延遲時間計算公式:
? ? ? ?max_input_delay = Tco_max?
? ? ? ? min_input_delay = Tco_min
? ? ? ? 做約束時只需關(guān)注上游芯片的Tco時間即可,但前提是時鐘線做了等長處理;
? ? ? ? 源同步相對于系統(tǒng)同步更為復(fù)雜一些,由于時鐘和與數(shù)據(jù)的相位關(guān)系,分為邊緣對齊和中心對齊兩種;然后數(shù)據(jù)采集的方式又分為兩種SDR和DDR兩種情況,下面分兩種方式來對約束進行講解。
1.2.1 SDR
(1)Center Aligned 中心對齊
?????? 中心對齊是指時鐘和數(shù)據(jù)到達后級時序單元時,時鐘沿在數(shù)據(jù)中心,在這種情況下可以直接使用時鐘采集數(shù)據(jù)。
?????? 中心對齊輸入延遲約束案例:
?????? 如圖所示,假設(shè)時鐘和數(shù)據(jù)走線做了等長處理,其中:
? ? ? ?Tcko max = max_input_delay = Tco_max?= 3ns
? ? ? ?Tcko min = min_input_delay = Tco_min? = 2ns?
然后就可以對input 做出如下約束:
第一步約束隨路時鐘:
? ? ? ? create_clock -period 5.000 -name SRCCLK -waveform {0.000 2.500} [get_ports SRCCLK]
? ? ? ?源同步所約束的源時鐘一定是隨路時鐘,這里一定要注意;
第二步輸入端口延遲約束:
? ? ? ?set_input_delay -clock SRCCLK -max 3 [get_ports din]
? ? ? ?set_input_delay -clock SRCCLK -min 2 [get_ports din
(2)Edge Aligned 邊沿對齊
?????? 邊緣對齊是指時鐘和數(shù)據(jù)到達后級時序單元時,時鐘沿與數(shù)據(jù)變化沿重合,如圖所示,由于是隨路時鐘的關(guān)系,時鐘和數(shù)據(jù)極有可能同時達到FPGA的輸入端口,這樣很明顯不能滿足目的端寄存器的時序要求,通常的做法是通過邏輯或鎖相環(huán)對時鐘和數(shù)據(jù)的關(guān)系進行相位調(diào)整,這樣就能正確采集數(shù)據(jù)了,之后在以調(diào)整后的相位進行時序約束即可;
??????
邊緣對齊輸入延遲約束案例:
?????? 如圖所示,數(shù)據(jù)data和時鐘Clock的關(guān)系是邊緣對齊,案例中使用MMCM將隨路時鐘相移了90°,使數(shù)據(jù)和采樣時鐘的關(guān)系變成了中心對齊,因此可以得到如下約束:
??????
第一步約束隨路時鐘:
? ? ? ? ? create_clock ?-period?clk_period -name?CLKB –waveform {0.000? clk_period/2} [get_ports?{CLKB}]
第二步約束隨路時鐘的生成時鐘:
? ? ? ? ? create_generated_clock -name?CLKB_90?-source?[get_clocks?CLKB]?-phase?90 [get_pins{MMCM|co[0]}]??? //該約束僅僅適用于Altera,不適用于XILINX
第三步輸入端口延遲約束:
? ? ? ? ? set_input_delay -clock SRCCLK -max max_input_delay [get_ports data]
? ? ? ? ?set_input_delay -clock SRCCLK -min min_input_delay [get_ports data]
1.2.2?DDR
(1)Center Aligned 中心對齊
?????? 如圖所示,DDR的中心對齊;
? ? ? ?這里直接給出案例來講解約束的方法,如圖所示:
第一步約束隨路時鐘:
? ? ? ? ? create_clock -period 10.000 -name clk -waveform {0.000 5.000} [get_ports clk]
第二步輸入端口延遲約束:
? ? ? ? ? ?set_input_delay -clock clk -max 4.3 [get_ports data]?
(max = period/2 – dv_bfe)
? ? ? ? ? set_input_delay -clock clk -min 0.6 [get_ports data]
? ? ? ? ? set_input_delay -clock clk -max 4.6 [get_ports data] –clock_fall –add_delay
(max = period/2 – dv_bre)
? ? ? ? ?set_input_delay -clock clk –min 0.2 [get_ports data] –clock_fall –add_delay
(2)Edge Aligned 邊沿對齊
?????? 邊沿對齊的情況,可通過如下約束:
第一步約束隨路時鐘:
? ? ? ?create_clock -period 10.000 -name clk -waveform {0.000 5.000} [get_ports clk]
第二步輸入端口延遲約束:
? ? ? ?set_input_delay -clock clk -max 0.4 [get_ports data]?
? ? ? ?set_input_delay -clock clk -min -0.6 [get_ports data]
? ? ? ?set_input_delay -clock clk -max 0.7 [get_ports data] –clock_fall –add_delay
? ? ? ?set_input_delay -clock clk –min -0.3 [get_ports data] –clock_fall –add_delay
?????? 通常這樣約束以后也很難達到理想的效果,一般采用和SDR中邊沿對齊的方式相同,將時鐘經(jīng)過一個MMCM/PLL 做一定的相移,從而把邊沿對齊變成中心對齊,然后使用相移的時鐘進行采樣和約束;
本系列博客對應(yīng)的完整《時序約束手冊》傳送在此,點擊下方下載鏈接一:
https://download.csdn.net/download/qq_33486907/19846182
或點擊下載鏈接二:https://item.taobao.com/item.htm?spm=a1z38n.10677092.0.0.22131debncNwzA&id=588531553802
推薦使用鏈接一,鏈接二即將停止服務(wù)
總結(jié)
以上是生活随笔為你收集整理的TIMING_06 VIVADO环境下的时序约束 之 输入延迟约束的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: css的position中absolut
- 下一篇: 摩托罗拉G32推出8+128GB版本 或