电子说
今天我们要介绍的时序分析命令是 uncertainty ,简称时钟不确定性。主要用来定义Clock信号到时序器件的Clock端可能早到或晚到的时间,降低了时钟抖动jitter对有效时钟周期的影响。
值得注意的是,在setup check中,clock uncertainty是代表着降低了时钟的有效周期;而在hold check中,clock uncertainty是代表着hold check所需要满足的额外margin。
来看下面一条reg2reg path. 对照着如下时钟波形图。可以写出下面的约束。
set_clock_uncertainty-from VIRTUAL_SYS_CLK -to SYS_CLK -hold 0.05
set_clock_uncertainty -from VIRTUAL_SYS_CLK -to SYS_CLK -setup 0.3
set_clock_uncertainty -from SYS_CLK -to CFG_CLK -hold 0.05
set_clock_uncertainty -from SYS_CLK -to CFG_CLK -setup 0.1
在pre-CTS的时候,我们将时钟的不确定性设定为target的skew和jitter值之和来模拟真实的时钟;而post-CTS之后,时钟树propagate delay已经确定,skew真实存在,所以uncertainty就是时钟的真实抖动值。因此preCTS的target skew不能设置的太大或者太小,这样会造成preCTS和postCTS的correlation不好。总结一下:
在pre-CTS中,
setup的clock uncertainty = jitter + clock tree skew
hold的clock uncertainty = clock tree skew
在post-CTS中,
setup的clock uncertainty = jitter
hold的clock uncertainty = 0
对于uncertainty的设置,每种工艺,或者每种设计来说,都不尽相同。一般来说,频率较高的时钟,我们可以设置相对较小的clock uncertainty;而频率较低的或者经过分频的时钟,我们可以把clock uncertainty加大一些。
对设计的不同阶段,clock uncertainty的设置也不一样,从design的initial阶段,经过place, cts, route, extraction, signoff等步骤,每个阶段都应该设置不同的clock uncertainty,给后续每个步骤预留margin,而且数值是越来越小的趋势。
全部0条评论
快来发表一下你的评论吧 !