ICG结构知识
延伸阅读:浅谈icg cell
ICG timing check 的瓶颈
在不人工干预的情况下,tool默认会尝试把reg1的CK pin和Reg2的CK pin做平。但是静态时序分析时,reg1→ICG也会做时序check;所以,ICG会天然存在一个很大的clock skew,导致建立时间违例。
如何解决呢?
在place阶段,在ICG的CK pin设置一个负的latency,这个负的latency的值可以大概等于CTS之后T3的delay大小;这样就可以让tool在给reg1的CK pin的树长识别时,会尽力将T1(即reg1的launch path)做短至少T3(ICG→reg2的时钟树长度)的大小。Place阶段工具也会考虑时钟树skew引入的时序问题,让某些cell尽可能的靠近和不要在path上过多插入delay。
Innovus命令:
set_cloCK_latency -0.300 [get_pins ICG/CK]
在CTS阶段,在Reg1的CK pin上设置一个insert delay,这就是所谓的floating pin,这个insert delay的值大概也等于CTS后T3(ICG→reg2的时钟树长度)的大小。
Innovus命令:
set_ccopt_property insertion_delay 0.300 -pin reg1/CK
在timing path中为何ICG的delay跟一个组合逻辑似的
延伸阅读:深谈latch 的 timing check
如下图所示,ICG在reg2icg的timing path中只体现一个组合逻辑的delay。其实icg就是一个组合逻辑。
芯片工作时,时钟电平本身一直在高低变化,因为晶振不会停止振动;但ICG的ENABLE信号是固定在高电平1(开启模块时钟)或者低电平0(关断模块时钟)。ICG的两个输入端一个是ENABLE信号,一个是clock信号,因为ENABLE的电平是固定的(例如固定在高电平1),所以每个时钟周期内锁存器向后面输出的信号一直是固定的(信号电平等于ENABLE 信号电平),ICG的delay大概就是一个锁存器环路的delay(结合锁存器结构一看便知)。
为何在timing path中ICG一般不体现timing borrow
ICG可以是latch + AND组成;或reg + AND组成。肯定要用一个时序器件,因为ICG的ENABLE信号是上一级reg产生的,这样就和ICG组成了两级同步电路,可以规避亚稳态的风险。
为什们ICG一般用latch + AND组合,而不是reg + AND组合呢?我个人理解,一方面latch的面积更小,功耗更低;另一方面,ICG上很容易有建立时间违例,latch有半个时钟周期的timing borrow可以用,可以作为ICG时序瓶颈的“紧急钥匙”。
那为什么ICG 的timing borrow一般不打开呢?因为如果打开了,ICG就由边沿触发check变成电平触发check,采集到亚稳态的概率增大,可能导致clock信号不稳定,影响电路状态。
在INNOVUS中怎么打开ICG timing check的timing borrow: