Xilinx約束學習筆記—— 約束方法學
掃描二維碼
隨時隨地手機看文章
1.1 組織約束文件
Xilinx 建議將時序約束和物理約束分開保存為兩個不同的文件。甚至可以將針對某一個模塊的約束單獨保存在一個文件中。
1.1.1 綜合和實現可以使用不同的約束文件
可以使用 USED_IN_SYNTHESIS 和 USED_IN_IMPLEMENTATION 屬性指定約束文件是在綜合或實現過程中使用。
注意:特別是IP、DCP這類使用OOC模式的模塊,因為這些模塊在綜合過程中是一個黑盒,當頂層約束指定的約束路徑為黑盒中的內容時,可能在綜合過程中會報找不到目標的錯誤。因此,最好的方法是將約束會為兩個文件,一個綜合用,一個實現時用。
在工程模式中可以使用如下代碼指定約束文件使用時機。
set_property USED_IN_SYNTHESIS false [get_files wave_gen_pins.xdc]
set_property USED_IN_IMPLEMENTATION true [get_files wave_gen_pins.xdc]
非工程模式中,不需要如此設置。因為什么時候使用約束文件,只和讀取約束文件的時機相關。如下:其中 wave_gen_timing.xdc 會在綜合和實現過程中使用,而 wave_gen_pins.xdc 只會在實現過程中使用。
read_verilog [glob src/*.v]
read_xdc wave_gen_timing.xdc
synth_design -top wave_gen -part xc7k325tffg900-2
read_xdc wave_gen_pins.xdc
opt_design
place_design
route_design
1.2 約束的順序
推薦約束順序如下:
## 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
1.3 創(chuàng)建綜合約束
Vivado 綜合將設計中的 RTL 描述轉換為工藝映射網表。此過程分為多個步驟進行,包括一些時序導向的優(yōu)化。FPGA 包含許多邏輯特性,可以有許多不同的應用方式。需要通過約束來引導綜合引擎工作,以滿足實現時所需的要求。
綜合約束可以分為4類:
-
RTL Attributes
-
Timing Constraints
-
Physical and Configuration Constraints
-
Elaborated Design Constraints
1.3.1 RTL Attributes
RTL Attributes 必須寫入 RTL 文件中。他們通常用來選擇邏輯的某些部分的映射樣式,以及保留某些寄存器和網線,或控制最終網表中的設計層次結構。
IMPORTANT: The DONT_TOUCH attribute does not obey the properties of USED_IN_SYNTHESIS and USED_IN_IMPLEMENTATION . If you use DONT_TOUCH properties in the synthesis XDC, it is propagated to implementation regardless of the value of USED_IN_IMPLEMENTATION .
注意:DONT_TOUCH 屬性不受 USED_IN_SYNTHESIS 和 USED_IN_IMPLEMENTATION 的控制,當在綜合約束中使用 DONT_TOUCH 時,他會傳遞到實現過程中,無論 USED_IN_IMPLEMENTATION 的屬性值是什么。
set_property DONT_TOUCH true [get_cells fsm_reg]
1.3.2 Timing Constraints
Timing Constraints 必須通過一個或多個 XDC 文件傳遞給綜合引擎。只有以下與建立時間分析相關的約束對綜合結果有實際影響:
-
create_clock
-
create_generated_clock
-
set_input_delay
-
set_output_delay
-
set_clock_groups
-
set_false_path
-
set_max_delay
-
set_multicycle_path
1.3.3 Physical and Configuration Constraints
Physical and Configuration Constraints 會被綜合算法忽略。(既然會被忽略為什么又提到?)
1.3.4 Elaborated Design Constraints
創(chuàng)建綜合 XDC 的第一個版本時,只需要使用簡單的時序約束來描述高級設計要求即可。因為此階段的路徑延遲并不準確,目的只是為了在實現開始前,盡量讓綜合的結果滿足時序。并且在此階段可能需要反復迭代 RTL 代碼和 XDC 文件,以便查找各種網名和排除各種語法錯誤。
在 Elaborated Design 的創(chuàng)建過程中,某些 RTL 名稱被修改或丟失。需要注意如下幾點:
-
網表中寄存器的名稱會比在 RTL 代碼中的名稱多一個_reg的后綴。
-
有些寄存器或網線會被吸收掉,例如二維寄存器會被綜合成 Memory Block,乘除法會綜合成 DSP。
-
在使用get_*查詢路徑時,最好不要使用-hierarchical參數,路徑中使用/顯示描述路徑的層級。
-
不要對組合邏輯的網線附加約束。它們很可能會被合并到一個 LUT 中并從網表中消失。
1.4 創(chuàng)建實現約束
在某些情況下,綜合網表中的對象名稱與 Elaborated Design 中的名稱不同。如果是這種情況,就必須使用正確的名稱重新創(chuàng)建一些約束,并將它們保存在僅用于實現的 XDC 文件中。當工具可以正確加載所有 XDC 文件后,就可以運行時序分析以便:
-
添加缺少的約束,例如輸入和輸出延遲。
-
添加時序例外,例如偽路徑、多周期路徑和最小/最大延遲約束。
-
識別由于設計中的長路徑而導致的嚴重違規(guī),修改 RTL 代碼。
在綜合期間,為了提高設計性能,有些寄存器可能被復制。但綜合器不會把復制的單元添加到用戶 XDC 約束中。如要將時序約束附加到 Vivado Synthesis 復制的對象上,根據約束的寫入方式不同,復制的單元有可能不會被 XDC 約束覆蓋到,這可能會影響結果的實現質量??梢允褂?include_replicated_objects參數來避免此問題。
例如set_false_path –from [get_cells –hierarchical *rx_reg]可以改為set_false_path -from [get_cells -hierarchical *rx_reg -include_replicated_objects]。





