FPGA時序約束之偽路徑和多周期路徑-天天頭條

2023-06-12 18:14:57 來源:FPGA入門到精通

前面幾篇FPGA時序約束進階篇,介紹了常用主時鐘約束、衍生時鐘約束、時鐘分組約束的設置,接下來介紹一下常用的另外兩個時序約束語法“偽路徑”和“多周期路徑”。

一、偽路徑

1、偽路徑的定義

FPGA開發過程中軟件的綜合布線耗時很長,這塊對FPGA產品開發的進度影響很大。

偽路徑表示該路徑實際存在,但該路徑的電路功能無須考慮時序約束。


(相關資料圖)

通過定義偽路徑,通知vivado等FPGA開發軟件無需對這些路徑進行時序優化布線。

這樣FPGA開發軟件就會自動跳過這部分路徑的優化,可以減少綜合布線的優化時間。

使用偽路徑命令可以有效地減少時序分析的復雜度,同時提高系統性能和可靠性。

2、偽路徑的應用范圍

偽路徑主要應用于異步時鐘或異步復位的情況下,例如:

跨時鐘域異步復位邏輯異步RAM

3、偽路徑的約束的寫法

偽路徑約束語法為:

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代碼來優化。

標簽:

上一篇:從信號完整性角度談如何選擇示波器
下一篇:最后一頁