本文选自知识星球,原文有10页-2千3百字,完整推文、更多干货知识以及后端笔记、视频教程等,欢迎加入星球进行查看。
最新星球刚刚上线基于GPT4和个人IC设计知识库的IC设计 AI机器人 ,星球成员可以免费使用!!AI机器人24小时随时随地都能立刻回答用户的提问哦,效果非常棒!可以同时在电脑、手机、平板等多个平台上使用。
AI机器人还有绘图功能哦,最近几期的封面都是用AI机器人绘制的。
AI机器人的所有功能介绍如下:
基于GPT4和个人IC设计知识库的IC设计机器人v1.0正式上线
AI机器人的使用情况:
同时星球QQ群还有分享高达55万+字的个人数字后端设计笔记,欢迎加入。
续上文
前面讲解了一下在ICC2/FC中是如何计算利用率Utilization的:
Utilization = Demand / Capacity
Demand就是标准单元的占用面积(不考虑Physical only cell,后边会有另外一篇文章来详细的讲解如何自己用命令去算出这个面积,具体它都包含哪些部分,工具是如何计算keepout margin对util的影响的,如何处理overlap的,并且会去和report_util的报告做对比分析);
Capacity就是所有可用空间的面积(也就是整体的面积减去那些被Macro和Hard blockage占用的面积)。
抛出以下几个问题:
标准单元面积的计算都会考虑哪些Cell?是否包含Physical Only Cell?如何自己用命令去抓出它们的面积? 标准单元的面积是否会考虑上面的Keepout margin? Macro的Keepout margin和标准单元的Keepout margin对利用率的影响方式是一样的么? 标准单元的keepout margin会考虑keepout margin overlap的情况么? 如何自己计算keepout margin的面积?重叠部分的面积是如何考虑的,上面的Util报告里面会重复计算这个部分么?
下面我们对上面的问题逐一解析一下:
如何计算Keepout margin的面积?
可以用下面的命令去抓取多个指定Cell的keepout margin:
icc2_shell> get_keepout_margins -of [get_cells I_PCI_TOP/mult_x_*/*]
{I_PCI_TOP/mult_x_23/U10/KEEPOUT_hard_OUTER_5063 I_PCI_TOP/mult_x_23/U101/KEEPOUT_hard_OUTER_1673 I_PCI_TOP/mult_x_23/U102/KEEPOUT_hard_OUTER_2758 I_PCI_TOP/mult_x_23/U106/KEEPOUT_hard_OUTER_1671 I_PCI_TOP/mult_x_23/U109/KEEPOUT_hard_OUTER_5065 I_PCI_TOP/mult_x_23/U11/KEEPOUT_hard_OUTER_2637...}
Keepout margin都有哪些属性呢?
可以用命令:list_attributes -class keepout_margin -app
我们可以通过下面的命令来判断keepout margin的类型、它所属的对象、具体的margin值和boundary等:
icc2_shell> get_attribute [get_keepout_margins I_PCI_TOP/mult_x_23/U10/KEEPOUT_hard_OUTER_5063] type
hard
icc2_shell> get_attribute [get_keepout_margins I_PCI_TOP/mult_x_23/U10/KEEPOUT_hard_OUTER_5063] owner
{I_PCI_TOP/mult_x_23/U10}
icc2_shell> get_attribute [get_keepout_margins I_PCI_TOP/mult_x_23/U10/KEEPOUT_hard_OUTER_5063] margin
0.304 1.672 0.304 0
上面keepout margin的值分别是左、下、右、上的距离,单位是um。
icc2_shell> get_attribute [get_keepout_margins I_PCI_TOP/mult_x_23/U10/KEEPOUT_hard_OUTER_5063] boundary
{474.6960 46.6640} {474.6960 50.0080} {478.1920 50.0080} {478.1920 46.6640}
还能用下面的命令在GUI里面选中它:
change_selection [get_keepout_margins I_PCI_TOP/mult_x_23/U10/KEEPOUT_hard_OUTER_5063]
而上面报出的Boundary值就分别是它的外边界的左下角、左上角、右上角、右下角的坐标:
{474.6960 46.6640} {474.6960 50.0080} {478.1920 50.0080} {478.1920 46.6640}
那么如何计算keepout margin的面积呢?
Keepout margin的boundary的属性值是keepout margin在外边的坐标,我们可以根据它的面积减去cell的面积就是keepout margin的面积:
icc2_shell> get_attribute [get_keepout_margins I_PCI_TOP/mult_x_23/U10/KEEPOUT_hard_OUTER_5063] boundary
{474.6960 46.6640} {474.6960 50.0080} {478.1920 50.0080} {478.1920 46.6640}
icc2_shell> expr (478.1920-474.6960)*(50.0080-46.6640)
11.690624
icc2_shell> get_attribute [get_keepout_margins I_PCI_TOP/mult_x_23/U10/KEEPOUT_hard_OUTER_5063] owner
{I_PCI_TOP/mult_x_23/U10}
icc2_shell> get_attribute [get_cells I_PCI_TOP/mult_x_23/U10] area
4.82873600
两者相减就是外边的keepout margin的面积:
icc2_shell> expr 11.690624-4.82873600
6.861888
Total area of cells是如何计算的?
下面我们来看一下下面几个问题:
标准单元面积的计算都会考虑哪些Cell?是否包含Physical Only Cell?如何自己用命令去抓出它们的面积?
标准单元的面积是否会考虑上面的Keepout margin?
在含有keepout margin情况下的report_util的报告以及里面Total area of cells的值:
注意:Total Area of cells: 195171.1555
然后执行下面的命令:
icc2_shell> remove_keepout_margins [get_keepout_margins -of [get_cells I_PCI_TOP/mult_x_*/*]]
5316
然后报告一下Util:
所以没有keepout margin的时候:Total Area of cells: 166042.1868
所以keepout margin额外引入的面积为:
icc2_shell> expr 195171.1555-166042.1868
29128.9687
前面计算cell带上keepout margin之后整体的面积的时候用的是下面的方法:
icc2_shell> get_attribute [get_keepout_margins I_PCI_TOP/mult_x_23/U10/KEEPOUT_hard_OUTER_5063] boundary
{474.6960 46.6640} {474.6960 50.0080} {478.1920 50.0080} {478.1920 46.6640}
icc2_shell> expr (478.1920-474.6960)*(50.0080-46.6640)
11.690624
其实它比较复杂,还有一种更简单的方法:
icc2_shell> compute_area -help
Usage: compute_area # Calculates the area of a collection of polygons
-objects from_objects (Use as input geometry)
pos_object_list (Use as input geometry; for compatibility)
用这个命令我们能非常方便地计算一个物体的面积:
icc2_shell> compute_area [get_attribute [get_keepout_margins I_PCI_TOP/mult_x_23/U10/KEEPOUT_hard_OUTER_5063] boundary]
11.69062400
它也能用于计算多个复杂的有重叠的物体的面积,且是会计算去掉重叠部分之后的面积的:
icc2_shell> compute_area [get_attr [get_keepout_margins -of [get_cells I_PCI_TOP/mult_x_*/*]] boundary]
44962.13990400
下面分别去手工计算不带Keepout margin和带上之后的Total area of cell。
icc2_shell> compute_area [get_attribute [get_cells -hierarchical -filter "is_hierarchical==false && is_hard_macro==false && is_physical_only==false"] boundary]
166042.18681600
(这个和上面remove 标准单元的keepout margin之后的util报告是匹配的,所以Total area of cells的计算是不包含physical only cell的)
#下面同时选中标准单元和对应的keepout margin,然后计算整体的总面积(因此keepout margin有overlap的地方不会重复计算):
icc2_shell> change_selection [get_cells -hierarchical -filter "is_hierarchical==false && is_hard_macro==false && is_physical_only==false"]
icc2_shell> change_selection -add [get_keepout_margins -of [get_cells I_PCI_TOP/mult_x_*/*] ]
icc2_shell> compute_area [get_attribute [get_selection] boundary]
191991.30579200
这个计算结果和remove keepout margin之前的Total Area of cells: 195171.1555结果相差的还是比较多的,那么差别在哪里呢?
...完整的10页-2千3百字长文见知识星球...
星球简介
低功耗设计技术总结 - 3万字,129页 IR drop的分析与修复总结 - 4.3千字,20页 数字后端理论及实践-ICC干货笔记 - 11万字,423页 数字后端理论及实践-Innouvs教程(第4版)- 5.7万字,316页 ICC2教程-星球精编版 - 2万字,125页 数字后端理论及实践-Innouvs教程(第5版)- 11.8万字,635页 面试笔试题整理 面试笔试经验分享(第1版)- 1.6万字,48页 面试笔试题整理 面试笔试经验分享(第2版)- 2.3万字,87页 ICC2 ICC与Innovus的命令对照(第1版) Tcl与DesignCompiler教程(第1版)- 6.1万字,183页 DRC规则讲解、DRC的检查与修复(第1版)- 7.3千字,26页 Congestion的分析与修复专题(第1版)- 1.2万字,41页 Perl-Tk教程(第1版)- 1.6万字 73页 星球精华推文分类整理合集(第1版)- 1.8万字,75页 星球精华推文分类整理合集(第2版)- 4.4万字,160页 面试笔试题整理 面试笔试经验分享(第3版)- 2.7万字,96页 星球精华推文分类整理合集(第3版)- 6.6万字,240页 时序分析与sdc专题笔记(第1版) - 3.1万字,115页 星球精华推文分类整理合集(第4版)- 8.4万字,296页 更多教程、笔记持续更新中。。。