IR-drop问题的分析与修复(五):Padding Clock Cells: ICC2 & Innovus

本文转自:自己的微信公众号《集成电路设计及EDA教程》

 

时钟网络有其特殊性:1、频率最高;2、翻转最频繁;3、扇出最大。时钟单元:Buffer、Inverter、ICG;由于时钟网络的扇出很大,因此时钟树上的Buffer或者Inverter的驱动强度必须足够大。另外,由于时钟频率非常高,翻转非常频繁,因此如果有普通的Cell离时钟单元非常近的话很有可能会产生动态IR-drop问题。 解决方案:在时钟单元(Buffer、Inverter、ICG)周围添加Keepout Margin(在Innovus中称为Padding),防止其他Cell摆的离时钟单元太近,防止产生动态IR-drop,如下图所示。

 

 命令:ICC2:我们可以针对一些Instance添加Keepout margin来解IR-Drop,思路在推文:IR-drop问题的分析与修复(含脚本分享)(一):Partition boundary cells clustering

已经介绍过,相关命令如下:create_keepout_margin -outer {3.6 0.576 3.6 0.576} $cells但是对于CTS的Cell,我们更希望对一些库里面的Cell来设置Keepout Margin,这样在CTS例化这些Cell来创建时钟树的时候就直接加上Keepout Margin了。命令如下:create_keepout_margin  -type hard -outer "3.6 0.576 3.6 0.576" [get_lib_cells "*/*CLK* "] "3.6 0.576 3.6 0.576"分别是左、下、右、上四条边的keepout margin值。关于Keepout margin的更多呢内容可以查看推文: 后端概念分享--Keepout margin

Innovus:Innovus有两个加Padding的命令,一个是针对Instance来添加,命令为:specifyInstPad相关用法已经在详细介绍过了,这里就不讲了。这里我们更希望的是对某一类Cell的Reference来设置Padding,命令如下:specifyCellPad CLK* -top 1 -bottom 1 -left 2 -right 2

 

如何显示Cell Padding:

 

 

如果想看设计里面CLK Cell的位置其它们周边的Padding,可以用下面的命令:selectInst [dbGet top.insts.cell.name CLK* -p2]

 

 最后,讲一下ICC2与Innovus两个命令之间的区别:

ICC2:create_keepout_margin  -type hard -outer "3.6 0.576 3.6 0.576" [get_lib_cells "*/*CLK* "]  Innovus:specifyCellPad CLK* -top 1 -bottom 1 -left 2 -right 2 ICC2无论是给Instance还是给Cell加Padding,用的都是create_keepout_margin命令,而Innovus有两个命令,分别是specifyInstPadspecifyCellPad。ICC2的Keepout margin单位是um,而Innovus的cell padding单位是Cell site或者Row site的个数。

原文地址:https://www.cnblogs.com/ASIC-Horizon/p/12316861.html