由于XDC約束是按順序應(yīng)用的,并且基于明確的優(yōu)先級(jí)規(guī)則進(jìn)行優(yōu)先級(jí)排序,因此必須仔細(xì)檢查約束的順序。
如果多個(gè)物理約束發(fā)生沖突,則最新約束將獲勝。 例如,如果通過多個(gè)XDC文件為I / O端口分配了不同的位置(LOC),則分配給該端口的最新位置優(yōu)先。
Vivado IDE可全面了解您的設(shè)計(jì)。 要逐步驗(yàn)證您的約束:
1.運(yùn)行相應(yīng)的報(bào)告命令。
2.查看Tcl控制臺(tái)或“消息”窗口中的消息。
推薦的約束順序
建議:無論是為設(shè)計(jì)使用一個(gè)還是多個(gè)XDC文件,都按以下順序組織約束。
## Timing Assertions Section # Primary clocks # Virtual clocks # Generated clocks # Clock Groups # Bus Skew constraints # Input and output delay constraints ## Timing Exceptions Section # False Paths # Max Delay / Min Delay # Multicycle Paths # Case Analysis # Disable Timing ## Physical Constraints Section # located anywhere in the file, preferably before or after the timing constraints # or stored in a separate constraint file
從時(shí)鐘定義開始。 必須先創(chuàng)建時(shí)鐘,然后才能將它們用于任何后續(xù)約束。 聲明之前對(duì)時(shí)鐘的任何引用都會(huì)導(dǎo)致錯(cuò)誤,并忽略相應(yīng)的約束。 在單個(gè)約束文件中以及設(shè)計(jì)中的所有XDC文件(或Tcl腳本)中都是如此。
約束文件的順序很重要。 您必須確保每個(gè)文件中的約束不依賴于另一個(gè)文件的約束。 如果是這種情況,則必須最后讀取包含約束依賴項(xiàng)的文件。 如果兩個(gè)約束文件具有相互依賴關(guān)系,則必須將它們手動(dòng)合并到一個(gè)包含正確序列的文件中,或者將文件分成幾個(gè)單獨(dú)的文件并正確排序。
編輯約束順序
Vivado IDE約束管理器將任何已編輯的約束保存回XDC文件中的原始位置,但不會(huì)保存在Tcl腳本中。 任何新約束都保存在標(biāo)記為目標(biāo)的XDC文件的末尾。 在許多情況下,當(dāng)約束集包含多個(gè)XDC文件時(shí),目標(biāo)約束文件不是列表中的最后一個(gè)文件,并且在打開或重新加載設(shè)計(jì)時(shí)不會(huì)最后加載。 因此,保存在磁盤上的約束序列可能與之前在內(nèi)存中的約束序列不同。
重要信息:您必須驗(yàn)證存儲(chǔ)在約束文件中的最終序列是否仍按預(yù)期工作。 如果必須修改序列,則必須通過直接編輯約束文件來修改它。 這對(duì)時(shí)序約束尤為重要。
約束文件順序
在沒有任何IP的項(xiàng)目流程中,所有約束都位于約束集中。 默認(rèn)情況下,Vivado IDE中顯示的XDC文件(或Tcl腳本)的順序定義了將elaborated design或synthesized design加載到內(nèi)存時(shí)工具使用的讀取順序。 首先讀取列表頂部的文件,最后讀取底部的文件。 您只需在IDE中選擇文件并將其移動(dòng)到列表中的所需位置即可更改順序。
例如,在圖1中,使用拖放操作將文件wave_gen_pin.xdc移動(dòng)到文件wave_gen_timing.xdc之前。
The equivalent Tcl command is:
reorder_files -fileset constrs_1 -before [get_files wave_gen_timing.xdc] [get_files wave_gen_pins.xdc]
在非項(xiàng)目模式下,read_xdc調(diào)用的順序決定了約束文件的計(jì)算順序。
Constraint Files Order with IP Cores
許多IP內(nèi)核隨附一個(gè)或多個(gè)XDC文件。 在RTL項(xiàng)目中生成此類IP內(nèi)核時(shí),還會(huì)在各種設(shè)計(jì)編譯步驟中使用其XDC文件。
例如,圖2顯示項(xiàng)目中的一個(gè)IP核帶有一個(gè)XDC文件。
默認(rèn)情況下,在用戶XDC文件之前讀入IP XDC文件。 以這種方式處理它允許IP創(chuàng)建可在XDC中引用的時(shí)鐘對(duì)象。 它還允許您覆蓋由IP內(nèi)核設(shè)置的物理約束,因?yàn)樵贗P之后評(píng)估用戶約束。 對(duì)于依賴于由用戶或其他IP創(chuàng)建的時(shí)鐘對(duì)象的IP核,此順序有一個(gè)例外(例如,get_clocks -of_objects [get_ports clka])。 在這種情況下,在用戶文件之后讀取IP XDC。
此行為由PROCESSING_ORDER屬性控制,為每個(gè)XDC文件設(shè)置:
?EARLY:必須先讀取的文件
?NORMAL:默認(rèn)
?LATE:必須最后讀取的文件
IP XDC將其PROCESSING_ORDER屬性設(shè)置為EARLY或LATE。 沒有哪個(gè)IP提供屬于NORMAL約束組的XDC文件。 對(duì)于屬于同 一PROCESSING_ORDER組的用戶XDC(或Tcl)文件,Vivado IDE中顯示的相對(duì)順序決定了它們的讀取順序。 可以通過移動(dòng)Vivado IDE約束集中的文件或使用reorder_files命令來修改組中的順序。
對(duì)于屬于同一PROCESSING_ORDER組的IP XDC文件,順序由IP內(nèi)核的導(dǎo)入或創(chuàng)建順序確定。 創(chuàng)建項(xiàng)目后,無法更改此順序。
最后,用戶組和IP XDC PROCESSING_ORDER組之間的相對(duì)順序如下:
1.標(biāo)記為EARLY的用戶約束
2.標(biāo)記為EARLY的IP約束(默認(rèn))
3.標(biāo)記為NORMAL的用戶約束
4.標(biāo)記為L(zhǎng)ATE的IP約束(包含時(shí)鐘依賴性)
5.標(biāo)記為L(zhǎng)ATE的用戶約束
注意:將其PROCESSING_ORDER設(shè)置為L(zhǎng)ATE(以便在用戶約束后進(jìn)行處理)的IP XDC文件命名為
下圖顯示了如何設(shè)置PROCESSING_ORDER屬性的示例:
The equivalent Tcl command is:
set_property PROCESSING_ORDER EARLY [get_files wave_gen_pins.xdc]
建議:使用Tcl控制臺(tái)中的report_compile_order -constraints命令報(bào)告由工具根據(jù)上述屬性確定的XDC文件讀取順序,包括IS_ENABLED,USED_IN_SYNTHESIS和USED_IN_IMPLEMENTATION。
Changing Read Order
要在約束集中更改XDC文件或非托管Tcl腳本的讀取順序,請(qǐng)執(zhí)行以下操作:
1. 在“源”窗口中,選擇要移動(dòng)的XDC文件或Tcl腳本。
2. 將文件拖放到約束集中的所需位置。
對(duì)于圖1中所示的示例,等效的Tcl命令是:
reorder_files -fileset constrs_1 -before [get_files wave_gen_timing.xdc] [get_files wave_gen_pins.xdc]
在非項(xiàng)目模式下,read_xdc或source命令的順序決定了約束文件的讀取順序。
如果使用帶有約束的IP內(nèi)核,則會(huì)自動(dòng)處理兩組約束,如下所示:
?不依賴于時(shí)鐘的約束被分組到XDC文件中,PROCESSING_ORDER設(shè)置為EARLY,
?依賴于時(shí)鐘的約束在PROCESSING_ORDER設(shè)置為L(zhǎng)ATE的XDC文件中分組。
默認(rèn)情況下,用戶XDC文件屬于PROCESSING_ORDER NORMAL組。 它們?cè)贓ARLY XDC文件之后和LATE XDC文件之前加載。 對(duì)于每個(gè)PROCESSING_ORDER組,IP XDC文件的加載順序與IP Sources窗口中IP核的列表順序相同。 例如,下圖顯示了XDC文件附帶的項(xiàng)目IP內(nèi)核之一。
打開設(shè)計(jì)時(shí),日志文件顯示最后加載了IP XDC文件:
Parsing XDC File [C:/project_wave_gen_hdl.srcs/sources_1/ip/clk_core/clk_core.xdc] for cell 'clk_gen_i0/clk_core_i0/inst' Finished Parsing XDC File [C:/project_wave_gen_hdl.srcs/sources_1/ip/clk_core/clk_core.xdc] for cell 'clk_gen_i0/clk_core_i0/inst' Parsing XDC File [C:/project_wave_gen_hdl.srcs/sources_1/ip/char_fifo/char_fifo/char_fifo.xdc] for cell 'char_fifo_i0/U0' Finished Parsing XDC File [C:/project_wave_gen_hdl.srcs/sources_1/ip/char_fifo/char_fifo/char_fifo.xdc] for cell 'char_fifo_i0/U0' Parsing XDC File [C:/project_wave_gen_hdl.srcs/constrs_1/imports/verilog/wave_gen_timing.xdc] Finished Parsing XDC File [C:/project_wave_gen_hdl.srcs/constrs_1/imports/verilog/wave_gen_timing.xdc] Parsing XDC File [C:/project_wave_gen_hdl.srcs/sources_1/ip/char_fifo/char_fifo/char_fifo_clocks.xdc ] for cell 'char_fifo_i0/U0' Finished Parsing XDC File [C:/project_wave_gen_hdl.srcs/sources_1/ip/char_fifo/char_fifo/char_fifo_clocks.xdc ] for cell 'char_fifo_i0/U0' Completed Processing XDC Constraints
與用戶XDC文件不同,您無法直接更改屬于同一PROCESSING_ORDER組的IP XDC文件的讀取順序。 如果必須修改訂單,請(qǐng)執(zhí)行以下操作:
1. 禁用相應(yīng)的IP XDC文件(IS_ENABLED設(shè)置為false)。
2. 復(fù)制他們的內(nèi)容。
3. 將內(nèi)容粘貼到約束集中包含的一個(gè)XDC文件中。
4. 在需要的地方使用完整的分層網(wǎng)表對(duì)象路徑名更新復(fù)制的IP XDC命令。 這樣做是必需的,因?yàn)镮P XDC約束以這樣的方式編寫,即它們可以作用于IP實(shí)例。
5. 查看以特殊方式處理范圍約束的get_ports查詢。
編輯:hfy
-
Vivado
+關(guān)注
關(guān)注
19文章
828瀏覽量
68205 -
xdc
+關(guān)注
關(guān)注
1文章
24瀏覽量
6026
發(fā)布評(píng)論請(qǐng)先 登錄
一文詳解Vivado時(shí)序約束

無法在XDC文件中設(shè)置maxdelay約束
Vivado忽略了約束文件
在使用Vivado GUI實(shí)現(xiàn)和分配引腳信息后xdc約束文件中看不到結(jié)果
如何創(chuàng)建自己的xdc文件
關(guān)于XDC約束文件,你需要知道的幾點(diǎn)
ISE約束導(dǎo)入vivado總共分幾步

評(píng)論