
前面幾篇FPGA時序約束進階篇,介紹了常用主時鐘約束、衍生時鐘約束、時鐘分組約束的設置,接下來介紹一下常用的另外兩個時序約束語法“偽路徑”和“多周期路徑”。
FPGA開發過程中軟件的綜合布線耗時很長,這塊對FPGA產品開發的進度影響很大。
偽路徑表示該路徑實際存在,但該路徑的電路功能無須考慮時序約束。
(相關資料圖)
通過定義偽路徑,通知vivado等FPGA開發軟件無需對這些路徑進行時序優化布線。
這樣FPGA開發軟件就會自動跳過這部分路徑的優化,可以減少綜合布線的優化時間。
使用偽路徑命令可以有效地減少時序分析的復雜度,同時提高系統性能和可靠性。
偽路徑主要應用于異步時鐘或異步復位的情況下,例如:
跨時鐘域異步復位邏輯異步RAM偽路徑約束語法為:
set_false_path [-setup] [-hold] [-from < node_list >] [-to < node_list >] [-through < node_list >]
參數 | 定義 |
---|---|
-from | 有效的起始點,例如時鐘、寄存器 |
-to | 有效的終結點 |
-through | 路徑中的節點,比如引腳、端口等等. |
這里需要注意:偽路徑約束是單向的,不是雙向的,如果兩個時鐘域相互之間都有數據傳輸,則需要對兩個方向的都做時序約束,如下所示:
set_false_path -from [get_clocks clk0] -to [get_clocks clk1]set_false_path -from [get_clocks clk1] -to [get_clocks clk0]
或者這樣寫也是可以的:
set_clock_groups -async -group [get_clocks clk1] -to [get_clocks clk2]
默認情況下FPGA開發軟件默認每條路徑都是單周期路徑,即從上一個寄存器到下一個寄存器的時間默認為一個周期內可達,并按照這個約定去布線優化。
其實我們寫的代碼基本默認就是單周期的,時序達不到就拆分代碼邏輯,拆分成多個周期完成即可,則不需要做多周期路徑約束。
但有時也存在需要多周期路徑,設定這個路徑從起點到終點需要1個周期以上才能到達,這時就要進行多周期約束,但這部分約束也用的少。
多周期約束語法:
set_multicycle_path < num_cycles > [-setup|-hold] [-start|-end] [-from < startpoints >] [-to < endpoints >] [-through < pins|cells|nets >]
參數 | 含義 |
---|---|
num_cycles [-setup -hold] | 建立時間或保持時間的周期數 |
[-start -end] | 參數時鐘選取 |
-from | 路徑起點 |
-to | 路徑終點 |
-through | 路徑經過點 |
單時鐘域下,數據經過N個周期從起點寄存器到達終點,約束如下:
set_multicycle_path N -setup -from [get_pins data0_reg/C] -to [get_pins data1_reg/D]set_multicycle_path N-1 -hold -from [get_pins data0_reg/C] -to [get_pins data1_reg/D]
本文介紹了偽路徑和多周期路徑的使用,但要注意的是偽路徑約束不能濫用,只能用在一些異步時鐘或異步復位這些對于時序要求不高的路徑,對于關鍵路徑,不能用這個約束命令,還是要從HDL代碼來優化。
標簽: