Vivado约束 - 为什么以及何时需要set_multicycle_path来约束输入和输出路径?

描述

当基于源和目标时钟之间的波形关系以及在路径上传输的数据切换速率时,默认最差要求过于严格,set_multicycle_path约束用于放宽路径要求。

set_multicycle_path约束通常用于FPGA内的顺序元件之间的片内路径,例如FF,RAM,DSP等。

然而,当使用set_input_delay和set_output_delay约束来约束芯片间路径时,也可能以与芯片内路径相同的方式需要set_multicycle_path约束。

此答复记录解释了为什么以及何时需要set_multicycle_path约束来约束输入和输出路径。

1.为什么我们需要set_multicycle_path用于芯片间路径?

如下图所示,芯片间路径与芯片内路径相同,只是Vivado时序引擎不知道FPAG器件外部的路径延迟部分。

当set_input_delay和set_output_delay用于指定外部路径延迟时,Vivado定时引擎能够分析芯片间路径,就像FPGA内部的路径一样。

因此,使用set_multicycle_path来放宽路径要求的原则对于芯片内和芯片间路径是相同的。

有关set_multicycle_path约束的更多信息,请参阅(UG903) - “使用约束”

http://www.xilinx.com/support/documentation/sw_manuals/xilinx2015_1/ug903-vivado-using-constraints.pdf




2.典型用例,其中需要set_multicycle_path来约束芯片间路径。

  • 用例#1
数据切换捕获时钟的每两个周期。

由定时引擎确定的默认设置要求是单周期,即8-0 = 8。

如果在启动数据后有第二个上升沿捕获数据是可以接受的,我们可以使用set_multicycle_path约束来放宽设置要求,但保持保持检查不变。

注意
:仅当中间边缘不捕获数据时,set_multicycle_path约束才适用。

多周期调整后,设置要求变为16-0 = 16。



如果这是在输入端:

create_clock -name clk0 -period 8.0 [get_ports CLK0]
set_input_delay -max 3.0 -clock clk0 [get_ports DIN]
set_input_delay -min 2.0 -clock clk0 [get_ports DIN]
set_multicycle_path -setup 2 -from [get_ports DIN] -to [get_clocks clk0]#relax the setup requirement
set_multicycle_path -hold 1 -from [get_ports DIN] -to [get_clocks clk0]#保持保持要求不变

如果这是在输出端:

create_clock -name clk0 -period 8.0 [get_ports CLK0]
set_output_delay -max 5.0 -clock clk0 [get_ports DOUT]
set_output_delay -min -2.0 -clock clk0 [get_ports DOUT]
set_multicycle_path -setup 2 -from [get_clocks clk0] -to [get_ports DOUT]#放宽设置要求
set_multicycle_path -hold 1 -from [get_clocks clk0] -to [get_ports DOUT]#保持保持要求不变


  • 用例#2
捕获时钟与发射时钟相比具有相移。

由定时引擎确定的默认设置要求是两个最接近的发射和捕获时钟边沿之间的时间差,在下列情况下为1-0 = 1。

一般来说,1ns的要求过于严格且不切实际。

所以我们需要使用set_multicycle_path来放宽设置要求。

多周期调整后,设置要求变为9-0 = 9。


如果这是在输入端:

create_clock -name clk0 -period 8.0 [get_ports CLK0]
set_input_delay -max 3.0 -clock clk0 [get_ports DIN]
set_input_delay -min 2.0 -clock clk0 [get_ports DIN]
set_multicycle_path -setup 2 -from [get_ports DIN] -to [get_clocks clk0]
注意:在这种情况下,没有必要使用额外的set_multicycle_path约束修改保持关系,因为它已经相对于设置关系正确建立。

如果这是在输出端(源同步接口):

create_clock -name clk0 -period 8.0 [get_ports CLK0]
create_generated_clock -name fwclk -multiply_by 1 -source [get_pins oddr_inst / C] [get_ports CLKOUT]
set_output_delay -max 6.0 -clock fwclk [get_ports DOUT]
set_output_delay -min -1.0 -clock fwclk [get_ports DOUT]
set_multicycle_path -setup 2 -from [get_clocks clk0] -to [get_ports DOUT]

注意:在这种情况下,没有必要使用额外的set_multicycle_path约束修改保持关系,因为它已经相对于设置关系正确建立


编辑 重设标签(回车键确认) 标为违禁 关闭 合并 删除

提问于 2018-07-30 21:38:29 +0800

这个帖子被标记为一个社区wiki

这个帖子是一个wiki(维基). 任何一个积分 >500的人都可以完善它