Xilinx約束學(xué)習(xí)筆記—— 約束方法學(xué)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
1.1 組織約束文件
Xilinx 建議將時(shí)序約束和物理約束分開保存為兩個(gè)不同的文件。甚至可以將針對某一個(gè)模塊的約束單獨(dú)保存在一個(gè)文件中。
1.1.1 綜合和實(shí)現(xiàn)可以使用不同的約束文件
可以使用 USED_IN_SYNTHESIS 和 USED_IN_IMPLEMENTATION 屬性指定約束文件是在綜合或?qū)崿F(xiàn)過程中使用。
注意:特別是IP、DCP這類使用OOC模式的模塊,因?yàn)檫@些模塊在綜合過程中是一個(gè)黑盒,當(dāng)頂層約束指定的約束路徑為黑盒中的內(nèi)容時(shí),可能在綜合過程中會報(bào)找不到目標(biāo)的錯(cuò)誤。因此,最好的方法是將約束會為兩個(gè)文件,一個(gè)綜合用,一個(gè)實(shí)現(xiàn)時(shí)用。
在工程模式中可以使用如下代碼指定約束文件使用時(shí)機(jī)。
set_property USED_IN_SYNTHESIS false [get_files wave_gen_pins.xdc]
set_property USED_IN_IMPLEMENTATION true [get_files wave_gen_pins.xdc]
非工程模式中,不需要如此設(shè)置。因?yàn)槭裁磿r(shí)候使用約束文件,只和讀取約束文件的時(shí)機(jī)相關(guān)。如下:其中 wave_gen_timing.xdc 會在綜合和實(shí)現(xiàn)過程中使用,而 wave_gen_pins.xdc 只會在實(shí)現(xiàn)過程中使用。
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 綜合將設(shè)計(jì)中的 RTL 描述轉(zhuǎn)換為工藝映射網(wǎng)表。此過程分為多個(gè)步驟進(jìn)行,包括一些時(shí)序?qū)虻膬?yōu)化。FPGA 包含許多邏輯特性,可以有許多不同的應(yīng)用方式。需要通過約束來引導(dǎo)綜合引擎工作,以滿足實(shí)現(xiàn)時(shí)所需的要求。
綜合約束可以分為4類:
-
RTL Attributes
-
Timing Constraints
-
Physical and Configuration Constraints
-
Elaborated Design Constraints
1.3.1 RTL Attributes
RTL Attributes 必須寫入 RTL 文件中。他們通常用來選擇邏輯的某些部分的映射樣式,以及保留某些寄存器和網(wǎng)線,或控制最終網(wǎng)表中的設(shè)計(jì)層次結(jié)構(gòu)。
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 的控制,當(dāng)在綜合約束中使用 DONT_TOUCH 時(shí),他會傳遞到實(shí)現(xiàn)過程中,無論 USED_IN_IMPLEMENTATION 的屬性值是什么。
set_property DONT_TOUCH true [get_cells fsm_reg]
1.3.2 Timing Constraints
Timing Constraints 必須通過一個(gè)或多個(gè) XDC 文件傳遞給綜合引擎。只有以下與建立時(shí)間分析相關(guān)的約束對綜合結(jié)果有實(shí)際影響:
-
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 的第一個(gè)版本時(shí),只需要使用簡單的時(shí)序約束來描述高級設(shè)計(jì)要求即可。因?yàn)榇穗A段的路徑延遲并不準(zhǔn)確,目的只是為了在實(shí)現(xiàn)開始前,盡量讓綜合的結(jié)果滿足時(shí)序。并且在此階段可能需要反復(fù)迭代 RTL 代碼和 XDC 文件,以便查找各種網(wǎng)名和排除各種語法錯(cuò)誤。
在 Elaborated Design 的創(chuàng)建過程中,某些 RTL 名稱被修改或丟失。需要注意如下幾點(diǎn):
-
網(wǎng)表中寄存器的名稱會比在 RTL 代碼中的名稱多一個(gè)_reg的后綴。
-
有些寄存器或網(wǎng)線會被吸收掉,例如二維寄存器會被綜合成 Memory Block,乘除法會綜合成 DSP。
-
在使用get_*查詢路徑時(shí),最好不要使用-hierarchical參數(shù),路徑中使用/顯示描述路徑的層級。
-
不要對組合邏輯的網(wǎng)線附加約束。它們很可能會被合并到一個(gè) LUT 中并從網(wǎng)表中消失。
1.4 創(chuàng)建實(shí)現(xiàn)約束
在某些情況下,綜合網(wǎng)表中的對象名稱與 Elaborated Design 中的名稱不同。如果是這種情況,就必須使用正確的名稱重新創(chuàng)建一些約束,并將它們保存在僅用于實(shí)現(xiàn)的 XDC 文件中。當(dāng)工具可以正確加載所有 XDC 文件后,就可以運(yùn)行時(shí)序分析以便:
-
添加缺少的約束,例如輸入和輸出延遲。
-
添加時(shí)序例外,例如偽路徑、多周期路徑和最小/最大延遲約束。
-
識別由于設(shè)計(jì)中的長路徑而導(dǎo)致的嚴(yán)重違規(guī),修改 RTL 代碼。
在綜合期間,為了提高設(shè)計(jì)性能,有些寄存器可能被復(fù)制。但綜合器不會把復(fù)制的單元添加到用戶 XDC 約束中。如要將時(shí)序約束附加到 Vivado Synthesis 復(fù)制的對象上,根據(jù)約束的寫入方式不同,復(fù)制的單元有可能不會被 XDC 約束覆蓋到,這可能會影響結(jié)果的實(shí)現(xiàn)質(zhì)量。可以使用-include_replicated_objects參數(shù)來避免此問題。
例如set_false_path –from [get_cells –hierarchical *rx_reg]可以改為set_false_path -from [get_cells -hierarchical *rx_reg -include_replicated_objects]。





