为什么Latency没有满足target insertion delay的要求

电子说

1.3w人已加入

描述

背景介绍

背景:为什么Latency没有满足target insertion delay的要求

这些都是对Clock latency/insertion delay有要求的情况。同时上面的推文里面也有分享一些Tree长度没有满足要求的情况,这里再分享另一个经常会遇到的原因 - Useful Skew。

在实际做项目过程中,有发现一些Run,工具做出来的Tree的latency和设置的target insertion delay以及target skew之间匹配的非常好,但是有些Run却不行,Latency变长了,超过了要求,Debug发现工具在上面做了Useful Skew动到了它们的Tree(比如你可能在上面发现一些USKC、ESOC等cell)。

这是因为,如果在Flow里面打开了Useful skew,那么工具在ccopt和optDesign以及signoffOptDesign的时候是可以通过调整所有Sink的Tree来做Useful Skew来修Timing的,因此你可能发现它们的Latency和预期设置的target insertion delay以及target skew之间有差异。

03

解决思路

知道了上面的原因,那么问题的解决思路自然是关闭Useful Skew了,可是直接全部关掉Useful Skew的话显然会恶化Timing,这是非常不明智的。解决方案有几种:

1、针对不同阶段、工具的不同引擎来控制Useful Skew的使用与否;这种方法不能从根本上解决问题,但是可以根据工具是在什么时候动Tree做了Useful Skew来有针对性的关闭Useful Skew的使用。

2、针对某些Sink来关闭Useful Skew。这个就非常实用了,对于一些对Latency有要求或者不想让工具通过Useful Skew来修Timing(后边会讲解)的Path,我们可以针对它们来关闭Useful Skew,这种方法也不会影响其他Sink上Useful Skew的使用,因此对Timing没有什么大的影响。

可是这种方法也有一个缺陷,就是目前的Innovus,signoffOptDesign并不支持指定Sink来关闭Useful Skew。ccopt和optDesign是支持的(后边会讲解具体方法)。期待以后signoffOptDesign也可以支持。

04

想针对Flop关闭Useful skew的几种情况

一般情况下,我们对于Tree的latency可能没有特别的要求,因此工具调整Sink的Tree去修Timing也是允许的。可是某些情况下,我们对于某些Sink的latency是有要求的,不允许工具随便通过Useful Skew来改变Tree的latency。

还有一些情况是,某些Sink的Timing在Partition/Block level看是不准的(比如IO flop,我们一般都会有过约束的情况),如果此时还让工具通过Useful Skew来修Timing的话,那么是很不合时的。比如Block B的in2reg的Path,上一级是Block A的reg2out path,其实它们之间的Timing不是很难meet,因为中间的组合逻辑比较短。

可是我们一般会在IO上加过约束努力让工具去把组合逻辑做短,这使得Block B里面的in2reg可能也比较差。那么此时工具很可能会把FF_2的Tree通过Useful Skew做长,这就会带来一个很严重的问题,它会影响Block B内部的Timing,这是不期望的。比如下面的情况,Block B的FF_2之后的Path timing很难Meet,因为组合逻辑很长。

DEBUG命令





审核编辑:刘清

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

全部0条评论

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

×
20
完善资料,
赚取积分