我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?
拾陆楼知识星球入口
insertion_delay
insertion delay的作用是指导clock tree做长或做短。具体可以看以下文章:innovus set_ccopt_property insertion_delay
insertion_delay的设置的来源有三个。
1)来自初始sdc约束 (set_clock_latency)。
2)来自place阶段计算的useful skew(保存在xx.dat/mmmc/views/xx/latency.sdc中的set_clock_latency)
3)来自用户修改的spec file(set_ccopt_property insertion_delay)
这里讲一下第二点,工具在ccopt_design时会使用useful skew去优化时序,这个值可能过于保守,于是在preCTS阶段可以使用如下命令让工具在maxAllowedDelay范围内写一个set_clock_latency的sdc出来。
setUsefulSkewMode -maxAllowedDelay xx
skewClock
除了这种方法,用户也可以设置auto_limit_insertion_delay_factor扩大useful skew的影响范围,这个factor默认是1.5,意思是在ccopt_design时会计算最大的clock latency,useful skew可以让这个最大的值扩大1.5倍。缩小useful skew对clock latency影响的上限用这个factor也是可以的。
target_skew与target_insertion_delay
target_insertion_delay与insertion_delay的定义要区分开,前者指的是clock network delay,后者指的是useful skew的值。
target_insertion_delay需要和target_skew结合来看,因为它虽然设定的是一个具体的值,但工具实现时是一个范围,既target latency为target_insertion_delay加减一半的target_skew。
过度压低target skew会让clock latency变长,所以在时序允许范围内,不需要太低的target_skew,除非有设计要求。当然这个值也只是个软约束上限值,ccopt design之后发现skew值>target skew也是常有的事。
target_max_trans
apec file里的transition约束一般有target_max_transition_sdc和source_output_max_transition两种,前者是sdc中set_max_transition xx [get_clocks xx]转换而来的,约束最大的clock transition,后者是set_input_transition xx [get_ports $clk_root]产生的,设置的是clock root driver的transition。
在cts阶段通常用set_ccopt_property target_max_trans xx来约束clock transition,且优先级比target_max_transition_sdc更高。