hold violation如何修?

作者: 飞奔的大虎 | 来源:发表于2020-12-30 11:21 被阅读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。

    相关文章

      网友评论

        本文标题:hold violation如何修?

        本文链接:https://www.haomeiwen.com/subject/gazcoktx.html