Chapter 7:XDC Precedence (ug903)
7.1 About XDC Precedence(关于XDC优先级)
Xilinx®设计约束(XDC)的优先级规则继承自Synopsys设计约束(SDC)。本章讨论如何解决约束冲突或重叠。
7.2XDC Constraints Order(XDC约束顺序)
XDC约束是按顺序解释的命令。对于等效约束,最后一个约束优先。约束顺序示例:
> create_clock -name clk1 -period 10 [get_ports clk_in1]
> create_clock -name clk2 -period 11 [get_ports clk_in1]
在该示例中,第二时钟定义覆盖第一时钟定义,因为:
•它们都连接到同一个输入端口。
•未使用create_clock-add选项。
7.3 Exceptions Priority(例外优先级)
如果约束重叠(例如,如果对同一路径应用了多个时序例外),则从最高到最低的优先级为:
1.时钟组(set_Clock_Groups)
2.错误路径(set_False_Path)
3.最大延迟路径(set_max_Delay)和最小延迟路径(set _min_Delay)
4.多周期路径(set_multycle_path)
注意:set_bus_skew约束不会影响上述约束的优先级。set_bus_skew约束不会覆盖,也不会被clock groups, max delays, false paths, and multicycle paths覆盖。原因是总线偏斜不是对特定路径的约束,而是路径之间的约束。
注意:False Path, Maximun/Minimum Delay 和Multicycle Path之间的优先级可以使用选项-reset_Path更改。时钟组约束不能被覆盖。Maximun/Minimum Delay或Multicycle Path约束只能覆盖先前定义的“False Path”或“Maximun/Minimum Delay”约束,前提是这两个约束都是用-from/-to/-through的完全相同的参数定义的,并且最新的约束使用-reset_Path。
优先根据过滤选项和约束中使用的对象类型,可以修改约束的特定性。对象的优先级规则为:
1.Ports, pins和cells
使用单元的pins而不是单元本身。
2.时钟
时钟的优先级总是低于Ports, pins和cells。使用时钟对象的时序异常的优先级始终低于使用端口、引脚和单元定义的另一个时序异常。
过滤器的优先级规则(从最高到最低)为:
1. -from -through -to
2. -from -to
3. -from -through
4. -from
5. -through -to
6. -to
7. -through
重要:请注意,在-from或-to中使用的cells总是比时钟具有更高的优先级,即使时钟用于-from到-to的更具体情况。
7.3.1 Exceptions Priority Example(例外优先级示例)
> set_max_delay 12 -from [get_clocks clk1] -to [get_clocks clk2]
> set_max_delay 15 -from [get_clocks clk1]
在本例中,对于从clk1到clk2的路径,第一个约束覆盖第二个约束。
异常中使用的-through选项的数量不会影响优先级。时序引擎使用最严格的约束。如下示例所示:
> set_max_delay 12 -from [get_cells inst0] -to [get_cells inst1]
> set_max_delay 15 -from [get_clocks clk1] -through [get_pins hier0/p0] -
to [get_cells inst1]
在本例中,第一个约束仅使用单元对象,第二个约束使用时钟对象。尽管inst0由clk1驱动,但对于从单元inst0到单元inst1的路径,第一个约束覆盖第二个约束。
7.3.2 Exceptions Priority with Multiple -through Options Example(具有多个-through选项的异常优先级示例)
> set_max_delay 4 -through [get_pins inst0/I0]
> set_max_delay 5 -through [get_pins inst0/I0] -through [get_pins inst1/I3]
这两个例外都由时序引擎保持。更具挑战性的约束用于时序分析。在该示例中,即使对于穿过引脚inst1/I3的路径,也将使用4ns最大延迟约束。
7.3.3 Exceptions Priority with -reset_path Example(带有-reset_path的异常优先级示例)
> set_false_path -from [get_clocks clkA] -to [get_clocks clkB]
> set_max_delay 1 -from [get_clocks clkA] -to [get_clocks clkB] -
reset_path
时钟clkA和clkB之间的路径由最大延迟覆盖,路径要求为1ns。最大延迟是用-from/-to的相同参数定义的,并指定-reset_path,它会覆盖False path。
> set_false_path -from [get_clocks clkA] -to [get_clocks clkB]
> set_max_delay 1 -from [get_pins reg0/CLK] -to [get_pins reg1/D] -
reset_path
reg0/CLK和reg1/D之间的路径由false path覆盖,因为该约束的优先级高于最大延迟。尽管有-reset_Path,但最大延迟不会覆盖False Path,因为它没有用相同的-from/-to参数定义。
建议:必须避免在同一路径上使用多个时序异常,这样时序分析结果就不依赖于优先级规则,并且更容易验证约束的效果。建议您使用report_exceptions命令验证时序异常。此命令可深入了解哪些时序异常被覆盖或忽略。关于更多信息,请参阅Vivado Design Suite User Guide: Design Analysis and Closure Techniques (UG906)。