• 正文
  • 相关推荐
申请入驻 产业图谱

ICG时序问题再续新篇

08/08 13:11
1670
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

最近遇到了由于local density引起的ICG时序问题,追加一期,总结一下引起ICG时序问题的一些原因。

逻辑设计引入

前端RTL设计时如果采用特殊的ICG结构,例如级联ICG或高扇出ICG,容易引起潜在时序问题。

级联clock gating容易出现时序违例,主要原因如下。

时钟偏斜增大 :在时钟树综合时,clock gating cell通常不会被看作sink,可能放置在靠近source点附近;对于级联的clock gating,从时钟源到不同级的gating cell以及最终到寄存器的路径长度差异较大,这就导致时钟信号到达不同寄存器的时间不一致,产生较大的时钟偏斜(clock skew);当时钟偏斜大于数据延迟时,就会违背寄存器的时序要求,引发时序违例。

信号传输延迟增加:级联的clock gating会在时钟路径上引入更多的逻辑单元和连线,这会增加信号的传输延迟 ;特别是如果级联级数过多,信号的上升/下降时间会变缓,导致数据在时钟边沿到来之前未能稳定,从而违反建立时间要求。

对毛刺敏感:clock gating单元本身对毛刺敏感,级联的clock gating会使这种敏感性加剧;因为每一级的clock gating都可能引入新的毛刺,这些毛刺可能会在后续的级联中积累并影响到触发器的正常工作,导致功能错误或时序违例。

时序约束难度大:对于级联的clock gating,其enable信号和clock信号之间的时序关系较为复杂,在进行时序分析和约束时,很难准确地设置和满足各种时序检查要求,例如reg2icg的setup/hold检查等,这也增加了出现时序违例的可能性。

高扇出clock gating容易出现时序违例,主要原因如下。

信号传输延迟增加:当clock gating扇出过高时,驱动器需要驱动更多的负载,这会导致信号传输延迟显著增加。因为驱动器需要为多个负载提供足够的电流来充放电负载电容,当负载过多时,电流供应不足,信号的上升/下降时间(斜率)变缓,从而使信号到达各个寄存器的时间变长,可能影响建立时间,导致数据在时钟边沿到来之前未能稳定,进而引发时序违例。

时钟偏斜增大 :在时钟树综合过程中,clock gating单元可能不会被完全当作平衡对象。如果高扇出的clock gating距离其控制的多个寄存器(sink DFF)在逻辑或物理上距离较远,就会导致时钟信号到达不同寄存器的时间不一致,产生较大的clock skew;这种clock skew可能使某些寄存器的建立时间或保持时间不满足要求,从而出现时序违例。

信号完整性问题:高扇出的clock gating信号在传输过程中,由于导线本身存在电阻、相邻导线之间的互感耦合电容等因素,容易产生信号噪声、串扰和反射等信号完整性问题。这些问题会导致信号电压波动和变化,严重时可能使信号失真,进而影响时钟信号的质量和时序,导致时序违例。

物理因素

对于reg2reg路径,可以拆分为reg2icg2reg路径;在做reg2icg检查时,icg是时序器件,在做reg2reg时序检查时,icg其实就是一个组合逻辑。

最近遇到了一个local density引起的reg2icg时序问题。违例point集中在一个有local density问题的module上。

reg2icg时序有问题,但reg2icg2reg中的前面的source reg和后面的sink regs的时序都没问题,只有ICG有时序问题。

分析原因如下:违例icg区域有local density问题,所以reg之间的间距被组合逻辑推得比较开,如果ICG要时序meet那么其物理上离前面的source reg要足够近,但是由于后面的sink regs被推得很开,基于驱动强度和控制精度的需要,其必须离其挂载的sink regs比较近;如果存在local density的问题,那么ICG既要离前面的source reg近又要离后面的sink regs近就会矛盾,产生ICG违例。所以ICG挂的sink regs不能在版图上分布的太远太松散。

如何解决

如果是设计因素引起的问题就改设计,对于高扇出ICG也可以在innovus中手动ECO去split fanout。此处主要说说这个local density物理因素引起的ICG时序问题该如何解决。

常用方法如下。调整floorplan优化local density区域的density。在local density区域加partial blockage,控制cell density。尝试给这些sink regs加一些bound。使用path_adjust命令在综合工具中对特定的ICG进行约束加严,这样综合工具会尽可能优化对应的reg2icg path。使用low VT clock cell做树,因为这样可以降低clock skew,利好时序,也利好总面积。在innovus中使用set_clock_gating_check对ICG违例point提前加严,根据我的经验,如果该ICG fanout不那么大可能有用。

Genus synthesis path_adjust实现脚本:

set_interactive_constraint_modes  [get_db [all_constraint_modes] .name ]

foreach ele [get_db insts -if {.is_integrated_clock_gating == true && .name == *key words* }] {path_adjust -name over_constrain -view  [get_db [get_db setup_views ] .name]  -delay -150 -from  [get_db insts -if {.is_sequential == true  && .is_memory == false && .is_integrated_clock_gating == false}] -to $ele }

set_interactive_constraint_modes  { }

innovus中指定做树的clock cell:

setCCOptMode -cts_buffer_cells {CKBD8BWP240H11P57PDULVT CKBD12BWP240H11P57PDLVT }

setCCOptMode -cts_inverter_cells {CKND8BWP240H11P57PDLVT CKND12BWP240H11P57PDLVT }

setCCOptMode -cts_clock_gating_cells {CKLNQD12BWP240H11P57PDLVT }

指定违例module用ULVT clock cell做树:

就是先把违例module下的clock pins全部don’t touch住,先把别的module的时钟树先做了;然后更新clock cell strategy到ULVT clock cell ,然后解除don’t touch,单独给这个module做时钟树。这个还没开始实践。

相关推荐

登录即可解锁
  • 海量技术文章
  • 设计资源下载
  • 产业链客户资源
  • 写文章/发需求
立即登录

与非网2022影响力创作者TOP2,与非网2023最佳创作者TOP10,与非网2024年度创作者。

微信公众号