【读者jing*问】:您好,打扰了。请教一下cts的时候如果工具无法把tree做的比较balance,在什么状态下或者什么手段可以看出skew较大的原因呢?先谢谢了
这个读者很聪明,我之前说了不要问“为啥skew那么大”之类的问题,结果他真的不问,而是问“用什么手段分析?”
这个问题有点难,尝试先用排除法,再用正面分析法来回答下。
排除法:
target_skew是否设置正确?默认target_skew是0ps,也就是工具会把skew往最小的做。
时钟树的max_transition是否设置了?一般按照周期来设置。transition太大,可能会导致skew大。
时钟树需要的buffer/inverter,mux,ICG等,是否设为dont use?(检查set_lib_celll_purpose)。要确保有充足的cell可以用来做时钟树。不能把小驱动的(比如x4,x3,甚至x2等)全部禁掉,否则不利于skew。
设计里如果有macro,要检查macro自带的skew。这个问题经常遇到。如果macro lib/db(特别是sram)自带有100ps的skew,然后你的target skew设置的是50ps,那无论你怎么努力,工具也没有办法把skew做到小于100ps。
macro自带skew有两种:
第一种是macro里有internal checkpins:
上图的macro里,有一个U5,U5/CK有两个timing arc,一个是组合逻辑的,到data