吾爱IC社区公众号之前推送过一篇文章,简单分享过LOCKUP LATCH的概念及其应用。今天将带大家深入来了解Lockup latch实际的应用。 听说Latch可以高效修hold违例(Timing borrowing及其应用) 如下图所示,DOMAIN1和DOMAIN2分别为两个clock domain,在func mode下两个domain不存在相互交互的path。因此,在做时钟树综合(CTS)时,会各自独立长clock tree,即他们之间的clock latency可能存在较大的差异。在func模式下不会有任何问题。 但是,在做DFT的时候,我们将DOMAIN1和DOMAIN2的寄存器串在一条链上了。在scan shift时是有问题的。他们之间是需要做hold check(比如DOMAIN2的clock latency比较长)。对应的setup和hold检查波形图如下图所示。从波形图中得知,hold violation比较大。为了解决这个较大的hold violation,需要在DOMAIN1和DOMAIN2之间插入LOCKUP LATCH,从而改善较大的hold violations。
这种情况需要加一个低电平传输的Lockup Latch。也是最常见的case。
这种情况无需加Lockup Latch。
这种情况需要加一个高电平传输的Lockup Latch。
这种情况留给各位思考,自己画波形图就可以知晓 深入浅出讲透set_multicycle_path,从此彻底掌握它 这里以第一种情况为例(即Launch flipflop和capture flipflop均是正沿触发的情况)。通过以上的分析得知,需要在这两个domain之间加Lockup latch,才能够显著减少hold violations。那么问题来了,这个Lockup latch应该加在靠近Domain1,还是靠近Domain 2?
将Lockup latch加在靠近Domain2中后的简易电路结构如下图所示。由于时钟树综合阶段工具会做将 Lockup latch和Domain2中的寄存器做balance,因此clock skew会比较小,这里假设skew为0。对应的setup和hold检查波形如下图所示。 从波形图中得知,Domain1中的DFF到Lockup latch的并没有改善(与之前Domain1中DFF和Domain2中DFF的hold一样大)。因此,这种Lockup latch加的方式是不正确的。
将Lockup latch加在靠近Domain1中后的简易电路结构和波形图如下图所示。 从波形图得知,Domain1中的DFF到Lockup latch的hold明显得到了改善。同样Lockup latch到Domain2中的DFF的hold也没有问题。虽然setup检查变严格了,但是由于scan模式下,scan clock 是低速的。所以setup也没有问题。 众所周知,传统修hold violation的方法就是插buffer。理论上当你的hold violations比较大的情况,都可以采用insert Lockup latch的方法来解决(Func下慎重,需要确认不影响逻辑功能)。比如在某个endpoint点存在1ns hold violation,此时你可能需要在这个endpoint上插几十个甚至上百个hold buffer。这种方式解决hold violation存在以下几方面的弊端。
关于setup和hold冲突的解法方法,会推送在小编的知识星球上。有需要的可以关注起来。
Clock skew特别大,往往是由于前端设计时,时钟结构规划不合理导致的。比如scan clock和func clock太早分开。一方面可以通过前期更改时钟电路结构。另一方面可以后期Timing fixing阶段通过ECO方式加入Lockup latch。关于如何做这种ECO留给各位思考,其实很简单。
在吾爱IC社区之前推送的关于时钟树综合的分享中,提到想得到一个比较好的,比较小的clock skew,一定要将uncommon clock path做到最短。Uncommon clock path越长,受OCV的影响越大,不同corner下variation越大,hold越不好收敛。 |
|