IC数字后端知识角

hold violation如何修?

2020-12-30  本文已影响0人  飞奔的大虎

上一期介绍了setup violation的修复,这次我们来讲讲hold violation。 相比setup来说,hold的修复要简单得多。同样地,我们先来回顾下hold time的定义。

hold time(保持时间)检查的是数据不能传输太快,太快会影响前一次数据的锁存。如下图所示:

用公式简单表示为

Tlaunch为launch clock path delay

Tcapture为capture clock path delay

Tdp为data path delay

详细公式可以查看下列文章

【时序分析基本概念介绍】

同样的,我们从公式中可以知道,修复hold主要也有三种方法:

1)增加data path上的delay

这是最常用的修复hold violation的方法。增加path delay要比减小delay方便得多,因此hold violation非常好修。一般情况下,我们只需要在data path上垫buffer或者delay cell就行。buffer cell能增加的delay较小,delay cell会比较大,我们可以根据timing report中每条path的slack情况可以选择垫buffer或者delay cell。

还有个需要注意的事项是,buffer或者delay cell插入的位置。通常情况下,cell的位置都插在path的endpoint附近,因为这样对其他path setup影响的结果最小,也能更好地避免drv的violation。

2)增加launch clock path delay

和修setup violation一样,我们也可以通过垫launch clock path delay来实现修复hold violation的情况。但实际情况下,我们很少使用该手段,因为动到clock,就会出现很多不可控的状况。除非是从同一个register出去有很多hold violation的情况,在设计density很高的情况下可以尝试使用。需要注意检查前一级path的hold margin。

3)减少capture clock path delay

这种方法也需要动到clock,而且减小clock path delay的情况很难实现,因此一般这种方法不可取。

Hold violation很大程度上依赖于clock path的质量,如果clock tree做得很平,那hold violation就会少很多。实际在最后ECO阶段修hold的过程中,我们可以更多地通过脚本来实现。抓取violation path的endpoint点。如果是SI pin,一般可以直接加buffer,或者delay cell。非SI pin的话,记得检查一下对应的setup的margin。

上一篇 下一篇

猜你喜欢

热点阅读