ICC2/FC教程-利用率计算是如何考虑 标准单元/Macro的keepout margin影响的

科技   教育   2024-04-07 00:14   北京  


本文选自知识星球,原文有10页-2千3百字,完整推文、更多干货知识以及后端笔记、视频教程等,欢迎加入星球进行查看。

最新星球刚刚上线基于GPT4和个人IC设计知识库的IC设计 AI机器人 ,星球成员可以免费使用!!AI机器人24小时随时随地都能立刻回答用户的提问哦,效果非常棒!可以同时在电脑、手机、平板等多个平台上使用。

AI机器人还有绘图功能哦,最近几期的封面都是用AI机器人绘制的。

AI机器人的所有功能介绍如下:

基于GPT4和个人IC设计知识库的IC设计机器人v1.0正式上线

AI机器人的使用情况:

同时星球QQ群还有分享高达55万+字的个人数字后端设计笔记,欢迎加入。

ICC2/FC教程-利用率计算是如何考虑
标准单元/Macro的keepout margin影响的》

续上文

ICC2/FC是如何计算利用率Utilization的?


前面讲解了一下在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

icc2_shell> list_attributes -class keepout_margin -app
****************************************
Report : List of Attribute Definitions
Version: T-2022.03-SP3-CS3-VAL
Date   : Sat Mar 23 05:30:13 2024
****************************************

Properties:
A - Application-defined
U - User-defined
I - Importable from design/library (for user-defined)
S - Settable
B - Subscripted

Attribute Name            Object     Type       Properties  Constraints
--------------------------------------------------------------------------------
boundary                  keepout_margin
coord_list A
full_name                 keepout_margin
string     A
layers                    keepout_margin
collection A,S
margin                    keepout_margin
margin_list
A,S
max_padding_per_macro     keepout_margin
distance   A
min_padding_per_macro     keepout_margin
distance   A
name                      keepout_margin
string     A
object_class              keepout_margin
string     A
owner                     keepout_margin
collection A
scope                     keepout_margin
string     A
tracks_per_macro_pin      keepout_margin
double     A
type                      keepout_margin
string     A           clock, hard, hard_macro, routing_blockage, soft


我们可以通过下面的命令来判断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的值:

icc2_shell> report_utilization -verbose
****************************************
Report : report_utilization
Design : ORCA_TOP
Version: T-2022.03-SP3-CS3-VAL
Date   : Sat Mar 23 03:20:55 2024
****************************************
Utilization Ratio: 0.5488
Utilization options:
- Area calculation based on: site_row of block ORCA_TOP/place_opt
- Categories of objects excluded: hard_macros macro_keepouts soft_macros io_cells hard_blockages
Total Area: 678847.8506
Total Capacity Area: 355617.5997
Total Area of cells: 195171.1555
Area of excluded objects:
- hard_macros         : 269120.1976
- macro_keepouts      : 56440.2995
- soft_macros         : 0.0000
- io_cells            : 0.0000
- hard_blockages      : 0.0000

Utilization of site-rows with:
- Site 'unit': 0.5488


注意:Total Area of cells: 195171.1555

然后执行下面的命令:

icc2_shell> remove_keepout_margins [get_keepout_margins -of [get_cells I_PCI_TOP/mult_x_*/*]]

5316

然后报告一下Util:

icc2_shell> report_utilization -verbose
****************************************
Report : report_utilization
Design : ORCA_TOP
Version: T-2022.03-SP3-CS3-VAL
Date   : Sat Mar 23 05:56:43 2024
****************************************
Utilization Ratio: 0.4669
Utilization options:
- Area calculation based on: site_row of block ORCA_TOP/place_opt
- Categories of objects excluded: hard_macros macro_keepouts soft_macros io_cells hard_blockages
Total Area: 678847.8506
Total Capacity Area: 355617.5997
Total Area of cells: 166042.1868
Area of excluded objects:
- hard_macros         : 269120.1976
- macro_keepouts      : 56440.2995
- soft_macros         : 0.0000
- io_cells            : 0.0000
- hard_blockages      : 0.0000

Utilization of site-rows with:
- Site 'unit': 0.4669

0.4669


所以没有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百字长文见知识星球...





星球简介


目前星球中一共分享了19本+系统性的、整理成册的笔记,高达55万字+,2024年星球将分享更多私人笔记,逐步完善整个IC设计生态。
以后知识星球也会陆续会开放:
《Timing/DRV修复的专题笔记》 《ICC2 flow教程》 《Makefile在IC设计中的应用》和 《RedHawk教程笔记》 等等。
目前已上传的笔记有:
  • 低功耗设计技术总结 - 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页
  • 更多教程、笔记持续更新中。。。 



集成电路设计及EDA教程
知识 前端 后端 DFT 低功耗 验证 EDA 1rtl检查:LEDA 2仿真:VCS 3逻辑综合:DC 4形式验证:Formality 5布局布线:ICC 6STA:PT 7功耗分析:PTPX 8DRC LVS:Calibre
 最新文章