#笔记
SDC中的坑补全
上次的文章中提到sdc约束有问题的情况
写不好的SDC约束
终于把问题解决了,撒花还愿,特别感谢各位的帮忙及后台留言。
本意是对每级逻辑之间的延迟进行约束,使其固定在一个合理的范围内。
01
本质原因是point之间存在交叠:
我在设置sdc约束的时候,是对每级逻辑均设置了max delay的,举个栗子。
我设置了get_ports input到In0的max delay。然后又设置了get_pins logic1/o到In1的max delay,那么就存在一个问题,即logic1/o处在input到In0之间,这个在STA中是不允许的。
STA的工作原理应该是计算从-from到-to的路径上的path timing。并且EDA工具会自动将-from开始的位置作为timing path的起点,将-to的作为timing path的终点,并就此将timing path打断。而在我的这个设置中,在start point和end point之间又设置了一个新的start point。那么在report timing时自然是找不到想要的timing path的。
02
解决方案
在理解了上述问题之后,那么我们解决方案就比较明确了。
如下图所示,如果我们想要约束从logic0的输入端口到logic2以及logic3的输出端口之间的delay,那么存在两种约束方式。
方式1:
全部将logic0的输入作为start point,即
set_max_delay 1.5 -from [get_pins logic0/in] -to [get_pins logic2/out]
set_max_delay 1.5 -from [get_pins logic0/in] -to [get_pins logic3/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]
set_max_delay 0.5 -from [get_pins logic1/out] -to [get_pins logic3/out]
上面两种方式得到的效果是一样的。
03
拓展
现实中,更常见的可能是如下图。
很有可能已经设置了从DFF0到DFF1以及从DFF0到DFF2的约束,这是正常的从DFF到DFF之间的约束。
这个时候如果横插一脚,再次设置一个从logic0到logic1的max_delay/min_delay,那么会导致原来设置的相关sdc作废,因为从DFF0到DFF1以及从DFF0到DFF2的timing path均已经被打断。
小白犯的错,记录下~