set_input_delay中-add_delay的作用

作者:张海军,来源:傅里叶的猫微信公众号

在设置input_delay时,我们经常会使用下面的方式:

set_input_delay -clock clk -min 2 [get_ports data_in]
set_input_delay -clock clk -max 4 [get_ports data_in]

但有时也会在后面增加一个-add_delay的参数:

set_input_delay -clock clk -max 2.1 [get_ports data_in]
set_input_delay -clock clk -max 1.9 [get_ports data_in] -clock_fall -add_delay
set_input_delay -clock clk -min 0.9 [get_ports data_in]
set_input_delay -clock clk -min 1.1 [get_ports data_in] -clock_fall -add_delay

在默认情况下,一个port只需要一个min和max的dealy值,如果我们设置两次,那么第二次设置的值会覆盖第一次的值:下面的第一行就无效了。

set_input_delay -clock clk -max 2.1 [get_ports data_in]
set_input_delay -clock clk -max 2.5 [get_ports data_in]

但如果是加了-add_delay参数,就可以多个约束同时存在:

set_input_delay -clock clk -max 2.1 [get_ports data_in]
set_input_delay -clock clk -max 2.5 [get_ports data_in] -add_delay

但其实,第一行也是无效的,因此2.5比2.1要大,如果满足2.5了,那一定满足2.1。

因此,-add_delay参数一般都是用于双沿采样的场景:

set_input_delay -clock clk -max 2.1 [get_ports data_in]
set_input_delay -clock clk -max 1.9 [get_ports data_in] -clock_fall -add_delay

如果不增加-add_delay参数,那么第二条会覆盖第一条约束,那么上升沿的约束就没有了。

在UG903中,也有下面的描述:

Add Delay Input Delay Command Option
The -add_delay option must be used if:
• A max (or min) input delay constraint exists, and
• You want to specify a second max (or min) input delay constraint on the same port.
This option is commonly used to constrain an input port relative to more than one clock
edge, as, for example, DDR interface