理想的人生大概就是在正确的时间做正确的事。
一切都恰如其分,不紧一步,不慢一步。
数据信号和时钟信号之间的恰到好处的平衡状态是保证芯片性能的重要指标。
setup check: slack=RT-AT=T +delay_ck - delay_data -setuptime-uncertainty
hold check: slack=AT-RT=delay_data -delay_ck -holdtime - uncertainty
时钟树的质量就直接关乎到芯片的性能。为了做好时钟树,常用的方法有H-tree,fishbone等,由于算法的复杂度影响,目前EDI工具只能做到H-tree的创建,finshbone等复杂的tree需要攻城狮手动去规划,写脚本来完成。
在prects阶段,工具clock tree还未做好,clock上都是理想的delay,因此时序只是工具进行的模型估算,会和cts之后的时序和congestion有一定的差异,时序的修正就不能最大程度得到优化,那么减小前后的差异就显得尤为必要。这里一般会采用以下手段进行平衡:
1. 调节clock uncertainty,进行一定程度的过约,然后在后续阶段逐步放开,达到减小差异的目的;
2. 手动做tree,设置multi-tap点,用H-ree等方式得到一个较好的clock 分布。尽量减少skew和控制clock latency,减少长tree对时序造成的degrade;
3. 在pace之前吃进clock spec,采用ecf flow,让工具在place的时候就考虑到clock的分布情况,这样能够保持cts前后congestion的一致性,并且较少timing degrade;
另外,为了进一步提高cts的效率得到更好的时序,现在工具会将cts和opt一起进行:
1.ccopt_design
不必完全将tree做平,而是考虑到时序情况,进行一定程度的balance,提高了cts的效率。
2.setOptMode -ccoptUseFulSkew medium
再深入优化,可以开useful skew,让工具把可用的skew借上,提高优化力度。
3.使用NDR,例如2W2S,3W3S等,并加shield 保影响;护clock net,减少绕线之后的SI问题;
4.最大化利用工具资源;
未完。。。