记录修复SDC中的坑
SDC中的坑补全
上次的文章中提到sdc约束有问题的情况
终于把问题解决了,撒花还愿,特别感谢各位的帮忙及后台留言。
![]()
本意是对每级逻辑之间的延迟进行约束,使其固定在一个合理的范围内。
我在设置sdc约束的时候,是对每级逻辑均设置了max delay的,举个栗子。
我设置了get_ports input到In0的max delay。然后又设置了get_pins logic1/o到In1的max delay,那么就存在一个问题,即logic1/o处在input到In0之间,这个在STA中是不允许的。
在理解了上述问题之后,那么我们解决方案就比较明确了。
如下图所示,如果我们想要约束从logic0的输入端口到logic2以及logic3的输出端口之间的delay,那么存在两种约束方式。
方式1:
全部将logic0的输入作为start point,即
set_max_delay 1.5 -from [get_pins logic0/in] -to [get_pins logic2/out]
方式2:
将这段逻辑看成是3个timing path,即
set_max_delay 1.0 -from [get_pins logic0/in] -to [get_pins logic1/out]
set_max_delay 0.5 -from [get_pins logic1/out] -to [get_pins logic2/out]
现实中,更常见的可能是如下图。
很有可能已经设置了从DFF0到DFF1以及从DFF0到DFF2的约束,这是正常的从DFF到DFF之间的约束。
这个时候如果横插一脚,再次设置一个从logic0到logic1的max_delay/min_delay,那么会导致原来设置的相关sdc作废,因为从DFF0到DFF1以及从DFF0到DFF2的timing path均已经被打断。