CTS目标
我们做cts时钟树综合的目标就是把latency尽量做小,skew尽量小,common path尽量长。以下是我做CTS的一些参考步骤。插入组合逻辑、buffer、inverter建立时钟网络,同时,让各个点balance。
CTS相关信息
1、cts cells和common cells之间的差别
CTS cells是CTS专用的cell。 与common cellls相比, cts cells的rising transition time 和 falling transition time 是平衡的。cts cells 的Ref name是以CK/DCCK开头的。CK开头的是clock cell,DCCK开头的是decoupling cell。
2、插入的buffer/inverter cell的名字。
在innovus中用命令“show_ccopt_cell_name_info”进行查找,cbd前缀属于一些ballance cell,cci/ccl等前缀属于一些长tree的buffer cell。
3、clock cell size
一般太小的不用,太大的也不用,最大的不会超过X16。Buffer太大会导致电流太大,EM越严重。
CTS流程
根据SDC,工具会自动抽取时钟网络结构,只要SDC定义正确 ,clock tree一般不会有太大的错误。
1、sdc try run
从数字前端得到function、capture、shift等相关的sdc,分别跑出相关sdc下的clock tree,查看相关的树结构文件。
2、重整sdc
整合相关sdc的clock成一个新的sdc,重新跑一次到PostC,查看新生成的clock tree结构,是否有漏clock tree。
3、长tree的一些调整:
①看相关时序report是否需要create 一些主时钟或者生成时钟,从而做短一些时序路径。
②stop:遇到MUX/IND2等逻辑器件,判断是否需要把dft clock先stop,不让它先长tree,先让function clock先长tree。语句如下:
set_ccopt_property sink_type -pin stop
③ignore:不进行ballance,就近相连,可用于细调时钟树。语句如下:
set_ccopt_property sink_type -pin ignore
④使用insertion_delay,不需手动插入buffer cell。做短设置为正数,eg0.1;做长设置为负数,eg-0.1。语句如下:
set_ccopt_property insertion_delay 0.1 -pin
4、不优先使用useful skew
useful skew是针对和timing有关、有timing check的一条/一组chain。
5、set_annotated_delay
为了方便快速报时序结果也可以使用set_annotated_delay,但是这个需要自行插入buffer cell。
CTS其他相关
1、修时序违例的最大和最多
2、Max capacitance violations通常由以下原因引起:
net太长。net越长,EM越严重。net长,一般switch功耗变大,电流也就变大,会有更多的电子击打导线。
fanout 太多,过多的fanout也会导致max transition violation。
3、为什么place阶段的hold为什么要比CTS阶段的hold要好
place时,clock是0,skew是0;CTS之后,clock很难balance,CTS tree上还有OCV,这些都使得clock tree不平,会导致一些hold violation。
4、slack time
修时序违例可以看看slack time,查找是否有数值断层,时序违例一般先修大的和多的违例,如果违例大的可以先不管,后边直接硬修。