Vivado Constraint(created by gemini)

Vivado 中的约束(Constraints)主要通过 Xilinx Design Constraints (XDC) 文件来定义,其语法基于 Tcl(Tool Command Language),并扩展了用于时序、管脚分配、物理约束等的专用命令。以下是 Vivado 约束的基本语法和常用命令分类:


1. 管脚分配(Pin Assignment)

指定顶层模块端口对应的 FPGA 引脚:

1
2
set_property PACKAGE_PIN <pin_name> [get_ports <port_name>]
set_property IOSTANDARD LVCMOS33 [get_ports <port_name>]

示例:

1
2
set_property PACKAGE_PIN D18 [get_ports clk]
set_property IOSTANDARD LVCMOS33 [get_ports clk]

2. 时钟约束(Clock Constraints)

定义主时钟、生成时钟或虚拟时钟。

主时钟(Primary Clock):

1
create_clock -name <clk_name> -period <period_ns> [get_ports <port_name>]

示例(100 MHz 时钟):

1
create_clock -name sys_clk -period 10.000 [get_ports clk]

生成时钟(Generated Clock):

用于 PLL/MMCM 输出或分频/倍频时钟:

1
create_generated_clock -name <gen_clk_name> -source [get_pins <source_pin>] -divide_by <N> [get_pins <output_pin>]

示例(2 分频):

1
create_generated_clock -name clk_div2 -source [get_pins clk] -divide_by 2 [get_pins clk_div2_reg/Q]

3. 输入/输出延迟约束(I/O Delay)

用于指定外部器件与 FPGA 之间的时序关系。

输入延迟:

1
set_input_delay -clock <clk_name> <delay_ns> [get_ports <input_port>]

输出延迟:

1
set_output_delay -clock <clk_name> <delay_ns> [get_ports <output_port>]

示例:

1
2
set_input_delay -clock sys_clk 2.0 [get_ports data_in]
set_output_delay -clock sys_clk 1.5 [get_ports data_out]

4. 时序例外(Timing Exceptions)

用于覆盖默认时序分析,如多周期路径、伪路径等。

伪路径(False Path):

1
set_false_path -from [get_pins <start_point>] -to [get_pins <end_point>]

或针对端口:

1
set_false_path -from [get_ports async_in]

多周期路径(Multicycle Path):

1
2
set_multicycle_path <num_cycles> -setup -from [get_clocks clk1] -to [get_clocks clk2]
set_multicycle_path <num_cycles> -hold  -from [get_clocks clk1] -to [get_clocks clk2]

5. 物理约束(Physical Constraints)

如区域约束(Pblock)、布局锁定等(较少在 XDC 中直接写,但支持):

1
set_property LOC SLICE_X10Y20 [get_cells my_reg]

注意事项:

  • 顺序敏感:XDC 文件按顺序执行,后面的约束可能覆盖前面的。
  • 对象获取:常用 [get_ports ...][get_pins ...][get_cells ...][get_clocks ...] 来定位设计对象。
  • 单位:时间单位默认为纳秒(ns),可省略。
  • 注释:使用 # 开头。

示例完整 XDC 片段:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# Clock
create_clock -name clk -period 10.000 [get_ports clk]

# Pin assignment
set_property PACKAGE_PIN E3 [get_ports clk]
set_property IOSTANDARD LVCMOS33 [get_ports clk]

set_property PACKAGE_PIN D9 [get_ports reset_n]
set_property IOSTANDARD LVCMOS33 [get_ports reset_n]

# Input delay
set_input_delay -clock clk 2.0 [get_ports data_in]

# False path for async reset
set_false_path -from [get_ports reset_n]

如果你正在编写状态机并关注复位信号(如 rst),通常建议:

  • 若为同步复位,无需特殊约束;
  • 若为异步复位,需用 set_false_pathset_input_delay 明确其时序不参与分析,或使用 create_clock + set_false_path 组合处理。

需要更具体的约束示例(比如针对你的状态机复位)可以告诉我。

Built with Hugo
Theme Stack designed by Jimmy