Constraint I/O Delay-FPGA常见问题社区-FPGA CPLD-ChipDebug

Constraint I/O Delay

About Constraining I/O Delay

为了精确对外部时序进行建模,必须要给出input和output端口的时序信息。因为Vivado仅能给出FPGA内部的时序信息,所以工程师需要用以下命令具体指出FPGA外部的时序延迟信息。

• set_input_delay
• set_output_delay

Input Delay

set_input_delay命令指出数据输入端口相比较于时钟的延迟信息,输入延迟表示以下两者相位的不同:

  • 数据从外部芯片传输通过PCB板线路输入FPGA的输入引脚的时间

  • 参考时钟通过PCB板的时间

因此输入input delay可以是正也可以是负,这取决于数据和时钟的相位关系。一般情况下,由于数据是多根,尽管PCB工程师会做等长处理,但仍然存在传输的时间先后差距,即最大和最小到达FPGA端口的时间,用这个时间减去参考时钟的时间,即为最大或最小延迟,一般情况下我们不考虑时钟的最大最小延迟,因为时钟线一般是差分,且系统中仅会存在少量的时钟源信号(相比较于数据传输线)。

Using Input Delay Options

尽管-clock选项在SDC标准上是可选择的,但Vivado是必要的,因为参考时钟可能是design clock或virtual clock。

输入延迟命令如下:

  • Min and Max Input Delay Command Options

  • Clock Fall Input Delay Command Option

  • Add Delay Input Delay Command Option

Min and Max Input Delay Command Options

-min和-max选项指定如下的不同:

  • 最小延迟分析(hold/removal)

  • 最大延迟分析(setup/recovery)

如果两者都没有使用,那么输入的数值将会应用到max和min两者。

Clock Fall Input Delay Command Option

-clock_fall选项将会指出输入延迟约束应用到参考时钟的下降沿,如果没有操作这个选项,那么Vivado工具将会默认把延迟约束应用到参考时钟上升沿。

但是不要混淆-clock_fall与-rise以及-fall ,-rise以及-fall用来约束数据的边沿而不是时钟边沿。

Add Delay Input Delay Command Option

-add_delay操作在以下条件使用:

  • max或min输入(input delay)约束存在

  • 你想在同一端口指定次max或min输入约束延迟

这个选项一般用于输入端口的参考时钟采样超过一个时钟沿,比如,DDR接口。你可以把input delay约束应用到输入或者双向端口,但不包括时钟输入端口,当然,也不能用于内部的pin。

Use of set_input_delay Command Options

下面的示例展示典型的set_input_delay命令的使用方法。

示例一

这个示例定义了一个相对于先前定义的sysClk时钟的输入延迟,用于最小和最大分析。(约束数值同时应用到最大和最小)

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

示例二

这个示例定义了一个相对于先前定义的virtual clock。

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

示例三

这个示例定义了相关与sysClk的input delay,分别应用到最大分析和最小延迟分析。

> 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]

示例四

为了约束I/O端口之间的纯组合路径,必须在I/O端口上定义一个相对于先前定义的virtual clock的输入和输出延迟。

这个示例定义了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]

示例五

这个示例定义了DDR clock的输入延迟约束数值

> 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时钟上升沿和下降沿驱动的约束,数据到内部触发器端口,flip-flop对时钟上升沿和下降沿都敏感。

请登录后发表评论

    没有回复内容