怎么解决解决Hold Time违例的问题呢

描述

首先,从理论上讲,Hold Time违例,是因为时钟绕的太远,到达时间太晚。而且综合之后给出的时序报告都是估计值,因此综合之后可以不考虑Hold Time,只考虑Setup Time;即便此时Hold Time违例,我们也不需要去理会。在Place Design之后再去看Hold Time,如果此时Hold Time的违例比较小(比如-0.05ns),还是不需要理会的,因为工具在布线时会修复Hold,但如果Slack太大了,无法修复了,就会牺牲setup来弥补hold。

如果出现了hold的违例,我们首先要分析时序报告,看是不是clock的skew太大了,hold违例一般都是时钟的skew太大导致,如果skew太大,就要检查原因了,是不是时钟路径上有buffer导致的,或者是因为时钟跨SLR这种路径太长导致。如果时钟路径上并没有什么多余的buffer或者逻辑,那使用全局时钟网络带来的skew是最小的。

这里补充一下综合实现的步骤:

synth_design -> opt_design -> place-design -> phys_opt_design -> route_design

我们可以让工具在每一步执行后都会有时序报告,只需要把Report Options的策略选择为Timing Closure Reports

时钟

如果route design之后hold time还是违例,可以使用tcl指令:

 

phys_opt_design -directive ExploreWithHoldFix

 

这个指令会尝试不同的算法来优化hold time违例(其实就是在数据路径上插入LUT增加延迟)

或者在Implementation的时候指定,是一样的效果。

时钟

Hold违例解决方法总结如下:

1. 检查违例的时钟是否是在全局时钟网络上,最好是让时钟走全局时钟网络,减小skew

2. 检查时序路径上,避免有时钟BUFFER的级联

3. 插入延迟逻辑,在数据路径上增加逻辑延迟(可以使用ExploreWithHoldFix让工具自动插入,也可以手动修改代码插入)





审核编辑:刘清

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分