【Vivado约束学习】 IO延时约束

作者: OpenSLee,来源:FPGA开源工作室

1 I/O延迟约束介绍
要在设计中精确建模外部时序,必须为输入和输出端口提供时序信息。Xilinx Vivado集成设计环境(IDE)仅在FPGA边界内识别时序,因此必须使用以下命令指定超出这些边界的延迟值:
1,set_input_delay
2,set_output_delay

2 输入延迟(Input Delay)
set_input_delay命令指定输入端口上相对于设计接口处时钟边沿的输入路径延迟。
在考虑应用板时,输入延迟表示以下各项之间的相位差:
A.数据从外部芯片通过电路板传播到FPGA的输入封装引脚。
B.相关的板上参考时钟
输入延迟值可以是正的或负的,这取决于设备接口处的时钟和数据相对相位。
虽然-clock选项在Synopsys设计约束(SDC)标准中是可选的,但它是Vivado IDE所必需的。相对时钟可以是设计时钟或虚拟时钟。
使用set_input_delay命令选项

例1:此示例定义了相对于先前定义的sysClk的输入延迟,用于最小和最大分析。

> create_clock -name sysClk -period 10 [get_ports CLK0]
> set_input_delay -clock sysClk 2 [get_ports DIN]

例2:此示例定义相对于先前定义的虚拟时钟的输入延迟。

> create_clock -name clk_port_virt -period 10
> set_input_delay -clock clk_port_virt 2 [get_ports DIN]

例3:此示例为min分析和最大分析相对于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:要限制I / O端口之间的纯组合路径,必须在I / O端口上相对于先前定义的虚拟时钟定义输入和输出延迟。以下示例在端口DIN和DOUT之间的组合路径上设置5 ns(10 ns - 4 ns - 1 ns)约束:

> create_clock -name sysClk -period 10 [get_ports CLK0]
> set_input_delay -clock sysClk 4 [get_ports DIN]
> set_output_delay -clock sysClk 1 [get_ports DOUT]

例5:此示例指定相对于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

3 输出延迟(Output Delay)
set_output_delay命令指定输出端口相对于设计接口处的时钟边沿的输出路径延迟。
在考虑开发板时,此延迟表示以下两者之间的相位差:
A.数据从FPGA的输出封装引脚传播,通过电路板传输到另一个器件
B. 相对参考板时钟。
输出延迟值可以是正数或负数,具体取决于FPGA外部的时钟和数据相对相位。
使用set_output_delay命令选项:
例1:此示例定义了相对于先前定义的sysClk的输出延迟,用于最小和最大分析。
> create_clock -name sysClk -period 10 [get_ports CLK0]
> set_output_delay -clock sysClk 6 [get_ports DOUT]

例2:此示例定义相对于先前定义的虚拟时钟的输出延迟。
> create_clock -name clk_port_virt -period 10
> set_output_delay -clock clk_port_virt 6 [get_ports DOUT]

例3:此示例指定相对于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

文章转载自:FPGA开源工作室

推荐阅读