我们在查看时钟树综合的log时会发现工具会自动生成一些skew group,这些skew group的名字都是以_clock_gen开头的。
skew_group _clock_gen_CLK_CORE_PLL_clk_reg_1/func: insertion delay [min=0.020, max=0.064, avg=0.038, sd=0.022], skew [0.045 vs 0.050], 100% {0.020, 0.064} (wid=0.002 ws=0.001) (gid=0.062 gs=0.044)
SoC芯片中Clock Gen和Reset Gen的时钟树综合
出现这种情况往往多见于下面这种电路设计中,即多见于时钟分频电路处。
由于工具看到FF1/Q到div_reg/SI有timing check,所以自动把分频器相关配置寄存器和div_reg归到一个新的skew group中。
这样做其实也是有弊端的,如果FF2和FF1之间需要做timing check,同样是会有setup和hold time violation。因为两者的clock tree latency不一样(clock 不平)。
解决的方法是设计中的分频寄存器不要串在scan chain中。
有的时候我们只希望工具严格按照我们的sdc中的时钟定义来生成对应的skew group,并不希望自动来生成。那么我们就需要通过下面的命令来实现。
set_ccopt_property extract_clock_generator_skew_groups false
需要注意的是这个ccopt property一定要在生成clock spec前设置,否则无效。
在咱们社区复杂时钟clock gen设计的时钟树综合CTS训练营项目中,由于default extract_clock_generator_skew_groups是开启的,所以工具会额外生成一系列_clock_gen开头的skew group,并且把分频寄存器和它的fanout归到同一个clock skew group做balance。
这样很显然是不符合我们的预期的。
为了给大家提供一个时钟树综合的练习,小编给大家提供一个innovus小实验。有需要的同学可以留言,我免费分享给大家。