当前位置:首页 > > ZYNQ
		


1.1 组织约束文件

Xilinx 建议将时序约束物理约束分开保存为两个不同的文件。甚至可以将针对某一个模块的约束单独保存在一个文件中。

1.1.1 综合和实现可以使用不同的约束文件

可以使用 USED_IN_SYNTHESIS 和 USED_IN_IMPLEMENTATION 属性指定约束文件是在综合或实现过程中使用。

注意:特别是IP、DCP这类使用OOC模式的模块,因为这些模块在综合过程中是一个黑盒,当顶层约束指定的约束路径为黑盒中的内容时,可能在综合过程中会报找不到目标的错误。因此,最好的方法是将约束会为两个文件,一个综合用,一个实现时用。

在工程模式中可以使用如下代码指定约束文件使用时机。

		
  1. set_property USED_IN_SYNTHESIS false [get_files wave_gen_pins.xdc]

  2. set_property USED_IN_IMPLEMENTATION true [get_files wave_gen_pins.xdc]

非工程模式中,不需要如此设置。因为什么时候使用约束文件,只和读取约束文件的时机相关。如下:其中 wave_gen_timing.xdc 会在综合和实现过程中使用,而 wave_gen_pins.xdc 只会在实现过程中使用。

		
  1. read_verilog [glob src/*.v]

  2. read_xdc wave_gen_timing.xdc

  3. synth_design -top wave_gen -part xc7k325tffg900-2

  4. read_xdc wave_gen_pins.xdc

  5. opt_design

  6. place_design

  7. route_design

1.2 约束的顺序

推荐约束顺序如下:

		
  1. ## Timing Assertions Section

  2. # Primary clocks

  3. # Virtual clocks

  4. # Generated clocks

  5. # Clock Groups

  6. # Bus Skew constraints

  7. # Input and output delay constraints


  8. ## Timing Exceptions Section

  9. # False Paths

  10. # Max Delay / Min Delay

  11. # Multicycle Paths

  12. # Case Analysis

  13. # Disable Timing


  14. ## Physical Constraints Section

  15. # located anywhere in the file, preferably before or after the timing constraints

  16. # or stored in a separate constraint file

1.3 创建综合约束

Vivado 综合将设计中的 RTL 描述转换为工艺映射网表。此过程分为多个步骤进行,包括一些时序导向的优化。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 的属性值是什么。

		
  1. 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

创建综合 XDC 的第一个版本时,只需要使用简单的时序约束来描述高级设计要求即可。因为此阶段的路径延迟并不准确,目的只是为了在实现开始前,尽量让综合的结果满足时序。并且在此阶段可能需要反复迭代 RTL 代码和 XDC 文件,以便查找各种网名和排除各种语法错误。

在 Elaborated Design 的创建过程中,某些 RTL 名称被修改或丢失。需要注意如下几点:

  • 网表中寄存器的名称会比在 RTL 代码中的名称多一个_reg的后缀。

  • 有些寄存器或网线会被吸收掉,例如二维寄存器会被综合成 Memory Block,乘除法会综合成 DSP。

  • 在使用get_*查询路径时,最好不要使用-hierarchical参数,路径中使用/显示描述路径的层级。

  • 不要对组合逻辑的网线附加约束。它们很可能会被合并到一个 LUT 中并从网表中消失。

1.4 创建实现约束

在某些情况下,综合网表中的对象名称与 Elaborated Design 中的名称不同。如果是这种情况,就必须使用正确的名称重新创建一些约束,并将它们保存在仅用于实现的 XDC 文件中。当工具可以正确加载所有 XDC 文件后,就可以运行时序分析以便:

  • 添加缺少的约束,例如输入和输出延迟。

  • 添加时序例外,例如伪路径、多周期路径和最小/最大延迟约束。

  • 识别由于设计中的长路径而导致的严重违规,修改 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]。


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭