STA和SDF之间的时序不匹配
有时候静态时序分析(STA)的结果会与时序反标文件(SDF)出现不匹配的地方,而它们同样都是Vivado生成的。以下内容列出了为什么会存在这种差异,以及如何解释STA运行结果和SDF之间的差异。
1
首先要确认的是这些时序结果是在相同的状态下比较的
例如,STA是在综合后运行的,那我们与之比较的SDF结果也应该是综合后的,而不是布线后的。
大部分的vivado用户也都很清楚这一点,在做比较的时候一定要保持设计所处的状态是一致的。
这里提到这一点是为了文章内容的完整性。
2
确认使用了相同的Timing Corner
SDF文件一般是在Slow Corner下生成的,而STA可能是在不同的Corner下生成的,(比如:fast corner)。vivado可以做不同Corner的时序分析,然后呈现出相应条件下最糟糕的结果。
查看附件文件STA.txt和dummy_synth_time.sdf
定位到IBUF的时序路径,STA文件显示这个路径延迟为293ps,而SDF文件显示这个路径延迟信息为600.5:725.7: 725.7
在STA文件的头部,你可以看到路径类型,在Fast Process Corner…..
两类分析使用了不同的Corner(SDF是在Slow下运行的,STA是在Fast下运行的)导致了IBUF路径延迟的差异。
为了弄清楚这种差异,可以切换到Fast Corner下生成SDF文件。结果文件为fast.sdf。
现在,你可以看到SDF文件中IBUF时序路径的延迟与STA的结果是匹配的:SDF中延迟为292.7ps,STA中延迟为293ps。
3
触发器的建立时间
SDF文件(fast corner下)给出的D触发器的建立时间为:-50.0:-44.0:-44.0,而STA文件中列出的建立时间为11ps。
这种差异归咎于不同分析中线网和组件之间的延迟分配不同。
在SDF文件中,一些延迟被看作由内部互连汇集的,而STA文件中相同的延迟被看作由组件汇集的。
产生的效果是相同的。
让我们追踪一个条路径,为了让数字之间的关系更简单,我们简化了问题。
在STA中:
在触发器数据引脚端的路径
IBUF 延迟= 293ps
Net 延迟 = 259 ps
到达触发器D端的延迟 = 552ps
建立时间 = 11ps.
这意味着时钟要在563ps之后到达。
同一路径在SDF文件中:
IBUF 延迟 = 293ps (与STA中相同)
Net 延迟 = 313 ps (比STA中更高, 因为它额外的汇集了内部互联的延迟)
到达触发器D端的延迟 = 606 ps
建立时间 = -44 ps (注意这里是负号)
这意味着时钟要在562ps后到达(1ps的差异是由于精度的不同,SDF文件使用了更高的精度。)
所以,就像例子中描述的,最终没有实际的差异。虽然在SDF和STA中记录的线或单元的延迟不同,但是一条路径的总延迟是相同的。
只是SDF中内部互联算作了一部分延迟,而STA中组件算作了一部分延迟。
通过对整条数据路径的追踪会发现这种差异会被抵消。
所以,如果你看到vivado分析的STA和SDF文件的时序延迟数值不同,在把它当成一个bug之前。检查一下上文提到的内容是否能解释这些明显的差异。
感谢Radhe Raman Singh, David Pefourque, David Sheils, Nadir Rahman参与讨论
我已经把源文件tt.v和约束文件tt.xdc添加在附件中,使用-1的速度等级的7vx485t-ffg1157设备可以重新生成上文用到的时序相关文件。(点击“阅读原文”下载下列文件)
tt.v 1 KB
tt.xdc 1 KB
fast.sdf 2 KB
dummy_time_synth.sdf 2 KB
STA.txt 4 KB STA和SDF之间的时序不匹配 STA和SDF之间的时序不匹配 STA和SDF之间的时序不匹配
页:
[1]