热度 36| ||
目录
ccopt阶段介绍
cluster :ccopt里面特有的一个概念,聚拢。这里主要是两个步骤,修复drv和insertion delay。insertion delay也就是latency,pin到root点的latency。
implementation:主要的步骤。其中polish为磨平,打平。这里创建完时钟树之后通常是不会动了,处于fix的状态。
ccopt一共有四个步骤,如图所示,接下来分别看每个步骤都做了什么事。
Initialization 阶段开始,三个点就代表这是一大步骤
最先开始的就是对placement的检查,这里检查比较严格,有问题就会停止。
如图,最后报告了cell已placed的数量以及density等
更新I/O latenty
ccopt引擎会自动把clock path设置为propagated mode。
到这里前面的检查阶段就完成了。
执行时钟树综合进程:
先对时钟树进行初步的global绕线
期间会进行绕线overflow和congestion分析。
at least one key说明设置参数为非默认的。至少设置过一次,是用户自己设置的
包括一些配置信息:还会自己设置上top的slew target
确认skew group上的一些信息
由于ccopt检查很严格,导致一些设置不合理的ingore pin被舍弃掉了
Estimated routes为cts阶段的绕线引擎,因为此时需要计算rc和插入buf等操作,需要计算net的delay信息。这里的via rc信息是供cts来使用的,后期的nanoroute是不会使用的。
到这里验证配置阶段就结束了。
如果设置不合理,ccopt也会主动显示出来,并作出最优选择,例如:
merging duplicate silings:merge掉一些clock gate cell
然后在网表中删掉时钟树重新纵综合。
DAG:(时钟树网络被建模为DAG(有向无环图),以适应时钟树和skew group之间的重新收敛和重叠),是一个ccopt中树的结构的概念
cluster阶段:修复drv和insertion delay
聚 拢cell,对全局的drv快速的修一下,并不是详细的修,所以后面调用了refine place得到cell的位置。后面显示了cell移动的数量和多少距离
cluster之后显示使用了什么cell,
b:buffer 103个;i: inv 0个;nicg:clock gate cell 0 个;l:logic cell 0个
insertion delay:sd为方差
此时快速修drv的过程已经做完了
然后就会抽一下rc,再进行计算insertion delay。
接下来就是详细有drv的过程,这个过程会做两次。并且会报出优化之后使用的cell。
各种DAG信息
由于修复drv可能会插入inv,buf等cell会导致insertion delay变大,所以后面需要减少delay。
通过减少不必要的buffer,由于这个design很简单,这里没有可以减得buffer了。
减少最长net上的cell。
这个过程也是两次。
此时cluster就做完了!
减少功耗、balance、polish、route
cell越大的话,功耗会越大,所以可以通过size down的方式减小功耗,这里也会做两次。
功耗做完之后就会开始进行balance了,会分很多的小步骤。
首先是两轮的balance-Approximately balancing fragments step
之后就会improve fragments clock skew
前面的两次balance的effort是最大的,后面就是简单的修复工作。
balance之后由于插了buffer,可能影响drv,多以会在这些步骤上多次的修复,直到找到最好的平衡点。
通过一系列操作减少insertion delay,修复drv,balance等。
balance阶段过后进入polish阶段
把tree整体做短一点
第三次减少power
减少insertion delay
这样来回的找到优化的平衡点!
减少线电容,移除较长的线和短路的线。
refine placement,合理摆放cell
最后进入clock的route的过程,布线之后就fix。这里就会真正的调用nanoroute布线引擎。
3.4 route
开始对时钟树进行绕线
会先进行earlyGlobalRoute,然后评估congestion
然后globalDetailRoute
这里结束route
继续评估congestion
做完route之后进行总结,然后抽取RC
到这里就结束了
接下来就是对时钟树进行时序优化阶段,基本上内容类似。