沛林网络科技工作室

可见在做CTS的时候
沛林网络科技工作室
可见在做CTS的时候
发布日期:2024-06-25 08:59    点击次数:55

可见在做CTS的时候

FE-CTS

    EDI 最早的做CTS 的方法叫FE-CTS,就是简单的将clock-tree做平。虽然skew做的很好,但是有很大缺点:留给datapath上面优化的空间就比较小,对于timing比较紧的design,难以meet timing。如下图所示,skew (L-C)保持一定,只有datapath上面能够进行优化,虽然skew很好,但是meet timing比较困难。

图片

    现在的EDI已经不再支持FE-CTS(需要LimitAccessFeature),之前很多的FECTS命令已经不建议用了(其实这些命令有时候还是会被用到),比如说下面的命令都是FECTS中的 :

    

图片

CCOPT原理

图片

    ccopt是一个azuro的公司开发的,后来被cadence收购了。现在已经集成到了EDI中。这个concurrent的意思就是data & clock path可以同时优化,重点就是不再只是简单将clock-tee做平,而是充分利用useful-skew,以slack为目的进行优化。如上个图片中提到的L-C,它不再是一个固定的值,而是可以变化的。

     这样一来,在做CTS引擎的时候就比较复杂了,例如下图所示,在计算中间的一条clock-path的delay的时候(P[i]),需要考虑到它前一级和后一级的各种path。

图片

    有时候光考虑一级还不够,还要考虑很多级,如下图所示,本级借用的useful-skew不是来自前后一级,而是前后两级。可见在做CTS的时候,考虑的东西很多,这样速度没有原来简单做平的FE-CTS速度快。

图片

CCOPT流程

    下面介绍一下CCOPT的流程,简单来说可以分为三步:

一clustering

    这是第一步,插入CK buffer,修DRV。这一步因为没有任何的Balance存在,只是fix DRV,所以经常我们只做这一步,查看他的insertion_delay,检查insertion_delay是否很大。如果是,那么就需要检查你的design或者floorplan等。通过在CTS前设置下面参数,可以只运行第一步:

图片

二balancing

    这是第二步,找出使得insertion delay最小的方法, 于田县名户电动机有限公司然后加入virtual delay。这一步只解方程, 义乌市踏拓电子商务商行并没有任何用于balance的buffer插入。经常我们运行这一步,上海舒洺网络科技有限公司可以排除掉balance buffer造成的影响,只查看Ccopt给出的最优有没有什么问题。设置下面的命令,可以让ccopt运行到这一步后停止:

图片

三implementing

    这是第三步,基于第二步的virtual delay值,插入 balance buffer,绕线,修掉新出现的DRV。因为MMMC等原因,插入的buffer 不可能完全match virtual delay。所以这时候primary-view和buffer的数目就起比较大的影响。如果将比较快的view设置成primary-view,插入的buffer会比较少。在新工艺节点下,1.1V,X16的buffer,可能比1.2V,X8的buffer要满,所以有时候加入过多的buffer反而不是好事。

    

图片

CCOPT调用方式

    ccopt在调用的时候或者在文档里可能有不同的名字,这里就简单解释一下:

一Script ccopt

    这是最早ccopt的存在方式,现在已经不用了,成功案例以防你在文档里看到这个名词,我就放在这里解释一下。即从EDI中吐出spec,然后调用独立的ccopt工具做CTS,做完之后再返回到EDI中。

一Native ccopt

    将ccopt集成到了EDI中,在做CTS的时候完全采用ccopt的引擎。native和standard都集成在了EDI工具内部,可以理解为不同effort 阶段的名字。设置方式(之前的set_ccopt_effort命令已经是legacy):

图片

一Standard ccopt

    采用ccopt引擎做tree,做完之后的优化阶段采用gigaOpt。设置方式:

图片

其他知识点

1. Graph-Based: Ccopt属于graph-based,关于这个上篇文章已经介绍过了

2. DAG:Directed Acyclic Graph 有向无环图,经常会在report或是log里面看到这个词。什么是有向无环图?从launch->capture是有向的,这是需要区分的,所以有向;向前一级,前两级,后一级,后两级......很多级借skew可能会形成环,会造成timing分析的困难,所以无环。为什么用图形:将一个问题转换为图形问题,采用现有的图形学算法,可以事半功倍。

3. Skew-Group: 上面说过,Ccopt通过采用useful-skew来满足timing。但是我们并不想无限制用useful-skew,某些pin还是需要balance在一起的,这就是skew-group,让某些pin之间的skew保持在一定范围,balance在一起。

4. 各种各样的命令:用过ccopt的应该都比较confuse,有很多设置ccopt参数的命令,到底哪个起作用,哪个优先级高?今天就解释一下:这是由于从Azuro到EDI的集成过程中,不同集成阶段的产物。

    a. setCTSMode,这个属于最早FE-CTS的命令,现在已经几乎不用了,可能唯一比较会用到的几个参数:

    

图片

    b. set_ccopt_mode,属于ccopt集成中间阶段的产物,可以设置buffer cell/target skew/use inverters/cluster。用于全局设置CTS相关的参数,优先级比较低。

    c. set_ccopt_property,最高优先级,这里面有很多的property,下次我专门讲讲

    d. 另外还有一些控制usefulSkew模式的命令:setDesignMode / setOptMode / setUsefulSkewMode,因为设置usefulskew比较复杂,所以留下次再讲。

5. spec: 和SDC什么关系? 做clock-tree的时候用到的是spec,不用SDC!spec既可以完全手工写,或者可以由SDC转化而来,或者手工和SDC一起结合而来。经常在spec里面看到:

图片

和SDC中的

图片

描述的是一个东西,但是他们只用于做tree的阶段,在spec里面自定义额外的clock只会影响design中buffer插入的数量等,并不会在timing_path中看到这样一个新clock path。

图片

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报。