HFNS
HFNS即(Hign fanout net syntheis),在开始cts之前需要做这个步骤(这一步包含在placement之中)。
为什么要做这一步, tool做tree也会尽可能让timing 收敛;在route之前tool使用early global route的方式去评估绕线对timing的影响;fanout会影响绕线的RC以及输入Cap,这对timing有较大影响,如果不提前做HFNS,可能导致cts看的timing不准,后续修复难度大。
optimize directive
长树cell策略:使用BUF(包括普通BUF和CKBUF)还是INV(包括普通INV和CKINV);还是INV和BUF混合使用。
Don’t use:禁用某些lib cell,例如驱动过大过小的cell,或者某些容易引起IR drop(或者某些物理DRC)的cell。
Size only:一般继承自前端,针对某些提前例化的cell。
CTS routing rule
时钟树从root到leaf可以分为三部分,可以分别设置不同的NDR rule。另外,同一个design中不同的clock也可使用不同的NDR rule。
NDR rule可以使时钟树对EM更不敏感、对cross talk更不敏感、可以减少insertion delay(net delay大幅减小)。
Clock tree synthesis
CTS几乎是PnR中最重要的一个step,这直接关乎整个design的timing质量和power情况。因为时钟树是以一个较长的cell链的形式存在,那么相对于reg2reg路径本身不那么长,而且比较容易被gating住;所以时钟树上的power消耗比较大,一般约占整个design power的30%-40%。一般可以通过cloc gating和clock结构调整等方法优化时钟树质量。
CTS的输入件
库文件:tech file(或tech lef)、Netlist & Placement def(或者placement database)、SDC、libarary files(.lib & .lef )、TLU+ file(或cap table 或qrc tech file)。
Clock spec file:insertion delay、target skew、clock transition、clock cell、NDR rule、CTS tree type、CTS exception(例如stop pin等);等。
CTS目标
CTS Latency & Dealy
CTS主要关注的指标
Skew:分为global skew和local skew,体现时钟是否做平。
Power:时钟树power决定了design的能效情况。
Noise:时钟树对noise敏感,因为时钟树如果电平不稳,可能导致大量reg的状态不确定。
Delay:满足spec和timing情况下,clock不宜太长。
Clock uncertain
包括clock skew和clock jitter。
Clock tree Exception
Non-Stop pin、Exclude pin、Float pin、Stop pin、Don’t touch sub-tree 、Don’t buffer net、don’t size net。
CTS策略
CTS输出件
Timing 报告、Congestion 报告、skew report、Insertion delay report、latecny report、CTS def file等。
CTS核心命令
以Innovus为例。
create_clock_tree_spec:根据user设置的各种configuration settings生成design的clock network。
ccopt_design:在前述步骤的基础上进行时钟网络优化。
为什么有时要带多corner做tree
因为不同corner的delay计算是不一样的,在某个corner下做平的tree换成另一个corner可能就不平了;如果critical corner不止一个,那么显然用单corner做tree是有风险的。
部分参考文献
https://ivlsi.com/clock-tree-synthesis-cts-vlsi-physical-design/
https://chipedge.com/what-is-clock-tree-synthesis/