4.1 About Constraining I/O Delay
要在设计中准确地建模外部时序上下文,必须为输入和输出端口提供时序信息。由于Xilinx®Vivado®集成设计环境(IDE)只能识别FPGA边界内的时序,因此必须使用以下命令来指定超出这些边界的延迟值:
• set_input_delay
• set_output_delay
4.2 Input Delay
set_input_delay命令指定输入端口上相对于设计接口处的时钟边沿的输入路径延迟。
当考虑应用板时,输入延迟表示以下各项之间的相位差:
1.从外部芯片通过板传播到FPGA的输入封装引脚的数据,以及
2.相对基准板时钟。
因此,输入延迟值可以是正的或负的,这取决于设备接口处的时钟和数据相对相位。
注意:还可以在内部数据引脚上设置输入延迟,如STARTUPE3/data_IN[0:3](UltraScale+™ 设备)。
4.2.1Using Input Delay Options
尽管在Synopsys设计约束(SDC)标准中,clock选项是可选的,但Vivado IDE需要它。
相对时钟可以是设计时钟,也可以是虚拟时钟。
建议:使用虚拟时钟时,使用与设计内部输入端口相关的设计时钟相同的波形。通过这种方式,时序路径要求是现实的。使用虚拟时钟可以方便地对不同的抖动或源延迟场景进行建模,而无需修改设计时钟。
输入延迟命令选项包括:
4.2.1.1Min and Max Input Delay Command Options(最小和最大输入延迟命令选项)
-min和-max选项为以下项指定不同的值:
•最小延迟分析(保持/移除)
•最大延迟分析(设置/恢复)
如果两者都不使用,则输入延迟值同时适用于最小值和最大值。
4.2.1.2Clock Fall Input Delay Command Option(时钟下降沿输入延迟命令选项)
-clock_fall选项指定输入延迟约束应用于由相对时钟的下降时钟沿启动的时序路径。如果没有此选项,Vivado IDE只假设相对时钟的上升沿。
不要将-clock_fall选项与-rise和-fall选项混淆。这些选项指的是数据边沿,而不是时钟边沿。
4.2.1.3 Add Delay Input Delay Command Option(添加延迟输入延迟命令选项)
在以下情况下,必须使用-add_delay选项:
•存在最大(或最小)输入延迟约束,以及
•希望在同一端口上指定第二个最大(或最小)输入延迟约束。
此选项通常用于相对于多个时钟边沿约束输入端口,例如DDR接口。
可以仅将输入延迟约束应用于输入或双向端口,不包括自动忽略的时钟输入端口。不能将输入延迟约束应用于内部引脚。
4.2.2 Use of set_input_delay Command Options
以下示例介绍了set_input_delay命令选项的典型用法。有关输入延迟约束方法的更多信息,请参阅UltraFast Design Methodology Guide for FPGAs and SOCs(UG949)中的此链接。
4.2.2.1Input Delay Example One
此示例定义了相对于先前定义的最小和最大分析的sysClk的输入延迟。
> create_clock -name sysClk -period 10 [get_ports CLK0]
> set_input_delay -clock sysClk 2 [get_ports DIN]
4.2.2.2 Input Delay Example Two
这个例子定义了相对于先前定义的虚拟时钟的输入延迟。
> create_clock -name clk_port_virt -period 10
> set_input_delay -clock clk_port_virt 2 [get_ports DIN]
4.2.2.3 Input Delay Example Three
此示例定义了相对于sysClk的最小分析和最大分析的不同输入延迟值。
> create_clock -name sysClk -period 10 [get_ports CLK0]
> set_input_delay -clock sysClk -max 4 [get_ports DIN]
> set_input_delay -clock sysClk -min 1 [get_ports DIN]
4.2.2.4 Input Delay Example Four
为了约束I/O端口之间的纯组合路径,必须在I/O端口上相对于先前定义的虚拟时钟定义输入和输出延迟。以下示例在端口DIN和DOUT之间的组合路径上设置了5 ns(10 ns-4 ns-1 ns)约束:
> create_clock -name sysClk -period 10
> set_input_delay -clock sysClk 4 [get_ports DIN]
> set_output_delay -clock sysClk 1 [get_ports DOUT]
有关使用Timing Constraints wizard约束组合路径的更多信息,请参阅Combinatorial Delays 。
4.2.2.5 input Delay Example Five
此示例指定相对于DDR时钟的输入延迟值。
> create_clock -name clk_ddr -period 6 [get_ports DDR_CLK_IN]
> set_input_delay -clock clk_ddr -max 2.1 [get_ports DDR_IN]
> set_input_delay -clock clk_ddr -max 1.9 [get_ports DDR_IN] -clock_fall -
add_delay
> set_input_delay -clock clk_ddr -min 0.9 [get_ports DDR_IN]
> set_input_delay -clock clk_ddr -min 1.1 [get_ports DDR_IN] -clock_fall -
add_delay
该示例创建了从设备外部的clk_ddr时钟的上升沿和下降沿启动的数据到对上升沿和上升沿都敏感的内部触发器的数据输入的约束。
4.2.2.6 Input Delay Example Six
此示例指定STARTUPE3内部引脚(UltraScale+设备)上的时钟和输入延迟,以对从STARTUPE2到结构的路径进行计时。
> create_generated_clock -name clk_sck -source [get_pins -
hierarchical*axi_quad_spi_0/ext_spi_clk] [get_pins STARTUP/CCLK] -edges {3
5 7}
> set_input_delay -clock clk_sck -max 7 [get_pins STARTUP/DATA_IN[*]] -
clock_fall
> set_input_delay -clock clk_sck -min 1 [get_pins STARTUP/DATA_IN[*]] -
clock_fall
4.3 Output Delay
set_output_delay命令指定输出端口相对于设计接口处的时钟边沿的输出路径延迟。
当考虑应用板时,此延迟表示以下各项之间的相位差:
1.从FPGA的输出封装引脚通过板传播到另一个设备的数据,以及
2.相对基准板时钟。
输出延迟值可以是正的或负的,这取决于FPGA外部的时钟和数据相对相位。
注意:也可以在内部数据引脚上设置输出延迟,如STARTUPE3/data_OUT[0:3](UltraScale+设备)。
4.3.1 Using Output Delay Options
尽管-clock选项在SDC标准中是可选的,但Vivado Design Suite工具需要它。相对时钟可以是设计时钟,也可以是虚拟时钟。
推荐:使用虚拟时钟时,请使用与设计内部输出端口相关的设计时钟相同的波形。通过这种方式,时序路径要求是现实的。使用虚拟时钟可以方便地对抖动或源延迟场景进行建模,而无需修改设计时钟。
4.3.1.1 Min and Max Output Delay Command Options
-min和-max选项为最小延迟分析(hold/removal)和最大延迟分析(setup/recovery)指定不同的值。如果两者都不使用,则输出延迟值同时适用于最小值和最大值。
4.3.1.2 Clock Fall Output Delay Command Option
clock_fall选项指定输出延迟约束应用于由相对时钟的下降时钟沿捕获的时序路径。如果没有此选项,Vivado IDE默认情况下只假设相对时钟的上升沿(设备外部)。不要将-clock_fall选项与-rise和-fall选项混淆。这些选项指的是数据边沿,而不是时钟边沿。
4.3.1.3 Add Delay Output Delay Command Option
在以下情况下,必须使用-add_delay选项:
•最大输出延迟约束已经存在,并且
•您希望在同一端口上指定第二个最大输出延迟约束。
对于最小输出延迟约束也是如此。此选项通常用于相对于多个时钟边沿约束输出端口,例如DDR中的上升沿和下降沿接口,或者当输出端口连接到使用不同时钟的几个设备时。
重要提示!您可以仅将输出延迟约束应用于输出或双向端口。不能将输出延迟约束应用于内部引脚。
4.3.2 Use of set_output_delay Command Options
以下示例介绍了set_output_delay命令选项的典型用法。有关输出延迟约束方法的更多信息,请参阅UltraFast Design Methodology Guide (UG949)中的此链接。
4.3.2.1 Output Delay Example One
此示例定义了相对于先前定义的最小和最大分析的sysClk的输出延迟。
> create_clock -name sysClk -period 10 [get_ports CLK0]
> set_output_delay -clock sysClk 6 [get_ports DOUT]
4.3.2.2 Output Delay Example Two
此示例定义了相对于先前定义的虚拟时钟的输出延迟。
> create_clock -name clk_port_virt -period 10
> set_output_delay -clock clk_port_virt 6 [get_ports DOUT]
4.3.2.3 Output Delay Example Three
此示例指定了相对于DDR时钟的输出延迟值,其中min(hold)和max(setup)分析的值不同。
> create_clock -name clk_ddr -period 6 [get_ports DDR_CLK_IN]
> set_output_delay -clock clk_ddr -max 2.1 [get_ports DDR_OUT]
> set_output_delay -clock clk_ddr -max 1.9 [get_ports DDR_OUT] -clock_fall -
add_delay
> set_output_delay -clock clk_ddr -min 0.9 [get_ports DDR_OUT]
> set_output_delay -clock clk_ddr -min 1.1 [get_ports DDR_OUT] -clock_fall -
add_delay
此示例创建了从设备外部的clk_ddr时钟的上升沿和下降沿启动的数据到对上升沿和下降沿都敏感的内部触发器的数据输出的约束。
4.2.3.4 Output Delay Example Four
此示例指定STARTUPE3内部引脚(UltraScale+设备)上的时钟和输出延迟,以对从结构到STARTUPE2的路径进行计时。
> create_generated_clock -name clk_sck -source [get_pins -hierarchical
*axi_quad_spi_0/ext_spi_clk] [get_pins STARTUP/CCLK] -edges {3 5 7}
> set_output_delay -clock clk_sck -max 6 [get_pins STARTUP/DATA_OUT[*]]
> set_output_delay -clock clk_sck -min 1 [get_pins STARTUP/DATA_OUT[*]]