这部分主要介绍ICC2 Zroute绕线工具和postroute优化内容,Zroute能有效处理45nm及以下工艺的设计与DFM(design for manufacturing)。

一 Introduction to Zroute

Zroute有五种绕线引擎:global routing, track assignment, detail routing, ECO routing, 和 routing verification,可以使用指定命令分别执行,其中global routing, track assignment, detail routing可以使用自动绕线的命令一起打包执行。

Zroute包括以下特征:

  • 多线程执行所有的绕线阶段,包括global routing, track assignment, detail routing。
  • 真实的连接模型,只要metal shape连接有接触就认为连接在一起。
  • 允许脱离格点去连接pin。
  • 识别多边形。
  • detail routing可以同时优化DRC、antenna、线优化与孔优化。
  • detail routeing可以插redundant via。
  • global routing, track assignment, detail routing支持软约束。
  • global routing, track assignment, detail routing, ECO routing执行时序和串扰分析。
  • 智能融合DRC规则。
  • 使用layer约束和NDR rule约束进行net group route。
  • clock routing。
  • route verification。
  • DFM(可制造行设计)优化DFY(成品率设计)的软约束。
  • 支持先进的DRC规则,例如double pattern。

二 Basic Zroute Flow

下图是Zroute的基本流程,包括clock route、signal route,DFM优化以及route verification。

三 Prerequisites for Routing

在执行Zroute之前,用户需要确保当前block和physical library满足以下要求。

1)Library 需求

tech file提供design rule,因此需要确保tech file中包含全部的design rule。

2)block 需求

执行绕线之前,当前的block需要满足以下的要求:

  • 已经完成进行power 、ground的规划。
  • 进行过时钟树综合与优化。
  • 确保congestion是可接受的。
  • 确保时序结果是可以接受的。
  • 确保max cap与max trans的违例是可以接受的。

四 Defining Vias

ICC2支持以下几种via的定义方式:

1)simple via和simple via array

simple via指的是单个cut的via。指定矩形的cut layer和metal layer来定义cut,simple via array是指多个cut的simple via,simple via与simple via array应用于以下场景。

  • 使用NDR rule的clock 、signal routing。
  • 插入redundant via。
  • PG routing。
  • custom via(多个cut的畸形via,可以应用于redundant via的插入)

2)via定义的方式如下:

  • tech file 中的ContactCode定义。
  • LEF file中的GENERATE定义。
  • 用户自定义

如果用户需要指定via定义应用在signal routing中,需要保证以下属性设置:

1)is_default 属性为true

2)is_excluded_for_signal_routing属性为false

4.1 Reading Via Definitions from a LEF File

使用read_tech_file命令去读取lef 文件中的GENERATE定义:

via_rule_name GENERATE [DEFAULT]
LAYER lower_layer_name
ENCLOSURE lower_overhang1 lower_overhang2
LAYER upper_layer_name
ENCLOSURE upper_overhang1 upper_overhang2
LAYER cut_layer_name
RECT llx lly urx ury
SPACING x_spacing BY y_spacing

4.2 Creating a Via Definition

ICC2中使用create_via_def命令去创建via,在创建之后,via定义可以在设计中应用于任何地方,类似于 tech file中ContactCode定义,用户定义的via definition只存在于当前设计中。

4.2.1 Defining Simple Vias

使用create_via_def命令定义simple via或者simple via array。

create_via_def
-cut_layer layer
-cut_size {width height}
-upper_enclosure {width height}
-lower_enclosure {width height}
[-min_rows number_of_rows]
[-min_columns number_of_columns]
[-min_cut_spacing distance]
[-cut_pattern cut_pattern]
[-is_default]
[-force]
via_def_name

用户不需要指定enclosure 层次,工具会根据指定的via层次在tech file中自动找到相邻的金属层次。默认情况下,当用户定义一个simple via,它会是一个single cut的via,如果要定义一个via array,需要指定阵列的row和column,还有cut spacing(-min_rows,-min_columns,-min_cut_spacing)。如果要调整cut pattern需要使用-cut_pattern选项,要覆盖已经存在的via定义,使用-force即可。

例如,要创建一个single cut的via def,命名为design_via1_HV,使用VIA12的via层次:

icc2_shell> create_via_def design_via1_HV \
-cut_layer VIA12 -cut_size {0.05 0.05} \
-lower_enclosure {0.02 0.0} -upper_enclosure {0.0 0.2}

再例,要创建一个2x2的cut pattern使用如下命令:

icc2_shell> create_via_def design_via12 -cut_pattern "01 10"

使用report_via_defs报告用户自定义的via def。

4.2.3  Defining Custom Vias

定义用户自定义的via,使用如下命令:

create_via_def
-shapes { {layer {coordinates} [mask_constraint]} ... }
[-lower_mask_pattern alternating | uniform]
[-upper_mask_pattern alternating | uniform]
[-force]
via_def_name

其中,-shape选项,用户必须指定via 层次和金属层次的shape,每层都可以指定多个shape。

例如,要创建一个custom via def,使用如下命令:

icc2_shell> create_via_def design_H_shape_via \

-shapes { {VIA12 {0.035 -0.035} {0.100 0.035}}
{VIA12 {-0.100 -0.035} {-0.035 0.035}}
{METAL1 {-0.130 -0.035} {0.130 0.035}}
{METAL2 {-0.100 -0.065} {-0.035 0.065}}
{METAL2 {0.035 -0.065} {0.100 0.065}}
{METAL2 {-0.100 -0.035} {0.100 0.035}} }

覆盖存在的via def,使用-force选项,不然命令就会失败。如果用户使用double pattern的工艺,用户可以使用shape来约束mask。

要用-shape指定mask约束,需要使用mask-one,mask-two,mask-three关键词。当使用create_via命令创建via时,via shape继承了via def中的mask约束,如果用户创建via使用的enclosure 层次不同于via def定义的第一个shape,指定的mask约束决定所有该层次的mask-shift。

例如。

icc2_shell> create_via_def VIA12 \
-shapes { {M1 {-0.037 -0.010} {-0.017 0.01} mask_two}
{M1 {0.017 -0.010} {0.037 0.01} mask_one}
{VIA1 {-0.037 -0.01} {0.037 0.01} mask_two}
{M2 {-0.044 -0.010} {0.044 0.010} mask_one} }
icc2_shell> create_via -net n1 -via_def VIA12 \
-origin {100.100 200.320}

指定enclosure层次使用-lower_mask_pattern和-upper_mask_pattern选项,用户可以指定uniform或者alternating作为mask patterm。在任意一种情况下,使用create_via创建via时,为第一个shape指定mask约束。如果用户使用的uniform,那么这一层的所有shape都被指定mask约束,如果使用alternating,在第一个shape之后,shape的颜色交替出现。

icc2_shell> create_via_def VIA12 \
-shapes { {M1 {-0.010 -0.030} {0.027 0.050}}
{M1 {0.047 -0.030} {0.084 0.050}}
{VIA1 {0.000 0.000} {0.074 0.020}}
{M2 {-0.030 0.000} {0.104 0.020}} } \
-lower_mask_pattern uniform
icc2_shell> create_via -via_def VIA12 -origin {000.100 200.320}
-lower_mask_constraint mask_two  

五 Inserting Via Ladders

via ladder也叫via pillar,是一种stack via用于出pin到高层金属,via ladder会降低via的电阻,提升性能和em能力。

via ladder一般定义在tech file中,要插入via ladder需要在global route之前。

5.1 Defining Via Ladder Rules

via ladder的古额则定义row和每个row上cut的数量,一般定义在tech file中,亦可以使用create_via_rule进行自定义。

## tech file

ViaRule "VL1" {
cutLayerNameTblSize = 2
cutLayerNameTbl = (VIA1, VIA2) # via layer names
cutNameTbl = (CUT1A, CUT2A) # cut names
numCutRowsTbl = (2, 2) # rows in ladder
numCutsPerRowTbl = (2, 2) # columns in ladder
upperMetalMinLengthTbl = (L1, L2) # minimum length rule
cutXMinSpacingTbl = (X1, X2) # X-direction spacing
cutYMinSpacingTbl = (Y1, Y2) # Y-direction spacing
maxNumStaggerTracksTbl = (S1, S2) # maximum staggering
forHighPerformance = 0
forElectromigration = 1
}

如果要使用命令定义的话,需要指定详细信息,然后再用set_attribute进行补充。

icc2_shell> create_via_rule -name VL1 -cut_layer_names {VIA1 VIA2} \
-cut_names {CUT1A CUT2A} -cut_rows {2 2} -cuts_per_row {2 2}
icc2_shell> set_attribute [get_via_rules VL1] \
upper_metal_min_length_table {L1 L2}
icc2_shell> set_attribute [get_via_rules VL1] \
cut_x_min_spacing_table {X1 X2}
icc2_shell> set_attribute [get_via_rules VL1] \
cut_y_min_spacing_table {Y1 Y2}
icc2_shell> set_attribute [get_via_rules VL1] \
max_num_stagger_tracks_table {S1 S2}
icc2_shell> set_attribute [get_via_rules VL1] \
for_high_performance false
icc2_shell> set_attribute [get_via_rules VL1] \
for_electro_migration true

也可以创建一个空的via rule,详细规则都用set_attribute进行补充。

icc2_shell> create_via_rule -name VL1
icc2_shell> set_attribute [get_via_rules VL1] \
cut_layer_name_table_size 2
icc2_shell> set_attribute [get_via_rules VL1] \
cut_layer_name_table {via1 via2}
icc2_shell> set_attribute [get_via_rules VL1] \
cut_name_table {CUT1A CUT2A}
icc2_shell> set_attribute [get_via_rules VL1] \
num_cuts_per_row_table {2 2}
icc2_shell> set_attribute [get_via_rules VL1] num_cut_rows_table {2 2}
icc2_shell> set_attribute [get_via_rules VL1] \
upper_metal_min_length_table {L1 L2}
icc2_shell> set_attribute [get_via_rules VL1] \
cut_x_min_spacing_table {X1 X2}
icc2_shell> set_attribute [get_via_rules VL1] \
cut_y_min_spacing_table {Y1 Y2}
icc2_shell> set_attribute [get_via_rules VL1] \
max_num_stagger_tracks_table {S1 S2}
icc2_shell> set_attribute [get_via_rules VL1] \
for_high_performance false
icc2_shell> set_attribute [get_via_rules VL1] \
for_electro_migration true

获取via rule使用get_via_rules,移除使用remove_via_rules,报告则使用report_via_rules,

list_attributes -application -class via_rule查看via rule的各方面属性,把定义的via rule写到tech file中可以使用write_tech_file。

5.2 Generating Via Ladder Rules for Electromigration Via Ladders

要定义一个electromigration via ladder rule,用户可以使用generate_via_ladder_template命令基于cofig文件去产生via ladder rule和约束。这个config文件时XML文件,提供via ladder规则,以及via ladder rule和它指定的pin。用户需要使用-config_file选项。命令会产生两个脚本文件,

1)一个脚本文件定义via ladder rule,使用create_via_rule和set_attrubute。

2)另一个脚本定义via ladder约束,使用set_via_ladder_candidatemingming定义pin,并且把is_em_via_ladder_required属性定义为true。

config文件的示例如下:

<EmRule>
<!-- template definition -->
<Template name="rule_name">
<Layer name="layer_name" row_number="cuts_per_row"
[max_stagger_tracks="count"]
[upper_cut_x_min_spacing="x_spacing"]
[upper_cut_y_min_spacing="y_spacing"] />
... more layers
</Template>
… more templates
<!-- Pin to template association -->
<Pin name="pin_name">
<Template name="rule_name"/>
</Pin>
... more associations
</EmRule>
每个“Template”部分指定via ladder rule的模板,用户可以指定一个或多个“Template”部分,在一个template部分中,用户指定via ladder结构通过指定不同金属层次,每个row的cut数量。该命令使用config文件和tech file文件中的信息生成via ladder rule。tech file提供如下信息:
1)cut layer以及连接的金属层次
2)cut name
3)每层金属最小长度要求
每个Pin部分指定一个pin的模板,其中,pin的名字可以包含通配符,用户可以指定多个“PIN”,“Pin”部分的“Template”属性必须定义在“Template”部分中。
举例:
<EmRule>
<Template name="template_1_3231">
<Layer name="M1" row_number="3"/>
<Layer name="M2" row_number="2"/>
<Layer name="M3" row_number="3"/>
<Layer name="M4" row_number="1"/>
</Template>
<Pin name="*/BCELLD5A11*/Z">
<Template name="template_1_3231"/>
</Pin>
</EmRule>

产生一个定义via ladder rule和约束的脚本文件使用如下命令:
icc2_shell> generate_via_ladder_template -config_file vl_config

Template Script File

create_via_rule -name template_1_3231 \

-cut_layer_names {VIA1 VIA2 VIA3} -cut_names {V1S V2S V3S} \
-cut_rows {2 3 1} -cuts_per_row {3 2 3}
set viaRule [get_via_rules template_1_3231]
set_attribute $viaRule upper_metal_min_length_table {0.3 0.2 0.4}
set_attribute $viaRule for_electro_migration true

Association Script File

foreach_in_collection pin [get_lib_pins -quiet */BCELLD5A11*/Z] {

set_attribute -quiet $pin is_em_via_ladder_required true
set_via_ladder_candidate $pin -ladder_name "template_1_3231"
}

5.3 Generating Via Ladder Rules for Performance Via Ladders

performance via ladder的via ladder rule,用户可以使用setup_performance_via_ladder命令。默认情况下,这个命令会:

1)产生M5层次以下所有层次的via ladder rule

改变最大层次使用-max_layer属性。这个命令使用来自tech file的信息去产生via ladder rule,tech file信息包含cut layer与相关金属层次,cut name,metal 层次最小的长度要求。这个命令输出XML文件提供关于via ladder rule和一个定义via ladder rule的脚本文件。

2)使用library cell pin声明的via ladder rule(不包含dont use属性的library cell),需要使用dont use的library cell使用-dont_use选项,针对指定pin声明via ladder rule,使用-lib_pins选项,命令分析每个lib pin的信息还有它的shape,然后决定via ladder rule和输出定义声明的脚本,可以使用associate_performance_via_ladder命令。

3)运行产生的脚本。

5.3.1 Via Ladder Rule Files

命令会产生两个via ladder rule文件:

1)一个XML文件提供关于vialadder ru'le的信息。

<EmRule>
<!-- template definition -->
<Template name="rule_name" for_electro_migration="true"
for_high_performance="true">
<Layer name="layer_name" row_number="cuts_per_row"
... more layers
</Template>
… more templates
</EmRule>

每个”Template"部分指定一个via ladder rule的模板,在一个template部分定义中,via ladder 结构被定义为via ladder中每层金属层次每个row上的cut数量,默认情况下,产生XML文件被命名为auto_perf_via_ladder_rule.xml,指定一个名字可以使用-xml_file选项。

2)一个定义via ladder rule的脚本。

脚本包含针对每个定义在XML文件中template的create_via_rule命令,同样也有set_attribute设置的via rule属性,默认情况下,产生的脚本命名为auto_perf_via_ladder_rule.tcl,用户可以指定一个名字,使用-rule_file选项即可。

5.3.2 Via Ladder Association File

命令会产生一个定义声明lib pin与via ladder rule的脚本文件。脚本包含set_via_ladder_candidate命令去声明lib pin,默认情况下,产生的脚本文件名为auto_perf_via_ladder_association.tcl,用户指定名字需要使用-association_file选项。

5.4 Constraint-Based Via Ladder Insertion

使用constraint-based方式去插入via ladder:

1)确保via ladder rule是被定义过的。

2)定义via ladder 约束使用set_via_ladder_rules命令。

3)插入via ladder使用insert_via_ladders命令。

4)验证via ladder使用verify_via_ladders命令。

5.5 Defining Via Ladder Constraints

via ladder 约束定义插入via ladder 的pin以及对应的模板(template),用户可以定义全局或者指定instance的via ladder约束,发生冲突时以指定instance的方式为主。

1)定义全局的via ladder 约束,使用set_via_ladder_rules命令。

2)定义指定instance的via ladder 约束使用set_via_ladder-constraints命令。

另外,用户可以使用set_via_ladder_candidate命令给指定的pin设置via ladder candidate,这个命令用于在preroute 优化阶段去给关键路径插via ladder,报告via ladder约束可以使用report_via_ladder_constraints命令。

5.5.1 Defining Global Via Ladder Constraints

定义一个全局的via ladder 约束,可以使用set_via_ladder_rule命令去给lib pin设置via ladder约束。用户必须指定lib pin与对应的via ladder template。

使用如下选项去映射lib pin与via ladder template:

1)-master_pin_map或者-master_pin_map_file

指定的方式是{ {lib_cell/pin {via_ladder_list}} ...}。

2)-default_ladders

这个选项指定via ladder template。

使用如下选项去指定要映射的pin。

1)-all_instances_of

指定lib pin应用所有的instance

2)-all_clock_outputs

设置这个选项为“true”,映射所有的clock 输出pin。

3)-all_clock_inputs

设置这个选项为“true”,映射所有的clock 输入pin。

4)-all_pins_driving

这个选下应用于映射所有驱动指定port的pin。

报告via ladder rule使用report_vai_ladder_rule命令,移除via ladder rule使用remove_via_ladder_rules命令。

5.5.2 Defining Instance-Specific Via Ladder Constraints

定义instance-specific的via ladder constraint,使用set_via_ladder_constraints命令,用户可以指定instance pin和对应的template。

举例,让VL1和VL2,VL3 via ladder template应用于u1/i1,u2/i2 pin,使用如下命令:

icc2_shell> set_via_ladder_constraints -pins {u1/i1 u2/i2} \
{VL1 VL2 VL3}

报告via ladder constraint 使用report_vai_ladder_constraints 命令,移除via ladder constraint使用remove_via_ladder_constraintss命令。

5.6 Inserting Via Ladders

插入via ladder使用inset_via_ladder命令,默认情况下,这个命令:

1)不会移除已经存在的via ladder

如果要移除已经存在的via ladder,使用-clean true选项。

2) 针对via ladder约束中的所有的pin,无论是signal net上的还是clock nets上的。

如果要插入到指定net上就使用-nets选项。

3)插入一个via ladder在每个目标pin。

如果约束指定插入超过一个via ladder给一个pin,这个命令插入的via ladder使用的是不会导致drc错误的template中的第一个,默认来过秒如果所有的via ladder template都会导致drc错误,那么这个 插入的via ladder是drc 错误最少的一种,忽略detail routing时drc检查使用-ignore_routing_shape_drcs true选项。忽略line-end cut enclosure规则使用-relax_line_end_via_enclosure_rule true。忽略金属spacing规则,使用-relax_pin_layer_metal_spacing_rules true选项。为了避免插入的via ladder产生drc问题,使用-allow_drcs false选项。

note:如果一个pin太小了插不进去via ladder的话,工具就不插。

4)

六 Checking Routability

七 Routing Constraints

八 Routing Application Options

九 Routing Clock Nets

十 Routing Critical Nets

十一 Routing Secondary Power and Ground Pins

十二 Routing Signal Nets

十三 Shielding Nets

十四 Performing Postroute Optimization

十五 Analyzing and Fixing Signal Electromigration Violations

十六 Performing ECO Routing

十七 Routing Nets in the GUI

十八 Cleaning Up Routed Nets

十九 Analyzing the Routing Results

二十 Saving Route Information

二十一 Inserting and Removing Cut Metal Shapes

ICC2 user guide(四)Routing and Postroute Optimization相关推荐

  1. ICC2 user guide(二)Placement and Optimization

    目录 一 Specifying Coarse Placement Constraints and Settings 1 Defining Keepout Margins 2 Defining Area ...

  2. ICC2 user guide(三)Clock Tree Synthesis

    目录 一 Prerequisites for Clock Tree Synthesis 二 Defining the Clock Trees 1 Deriving the Clock Trees 1. ...

  3. 【ERROR】java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11.XToolkit

    tomcat 出现java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11.XToolkit运行时异常,主要原因是图 ...

  4. IC Compiler II(ICC II)后端设计流程——超详细

    Preface 本文中英文结合(学习一些专有名词),主要介绍ICC II软件进行后端设计的主要流程,在阅读之前需要对数字IC设计流程有一定的了解. 逻辑综合相关知识请查看:Synopsys逻辑综合及D ...

  5. MVC --.Routing

    .Routing的作用 第一讲中实例的首页地址是: localhost/home/index 我们发现访问上面的地址, 最后会传递给 HomeController中名为index的action(即Ho ...

  6. 网址路由Routing组件如何在mvc中生成网址

    一.摘要 本篇文章从基础到深入的介绍ASP.NET MVC中的Routing组件. Routing翻译过来是"路由选择", 负责ASP.NET MVC的第一个工作:识别URL, 将 ...

  7. Tightly Coupled LiDAR Inertial Odometry and Mapping源码解析(四)

    Tightly Coupled LiDAR Inertial Odometry and Mapping源码解析(四) 3. Joint optimization 3.3 IMU preintegrat ...

  8. 2020年 ICLR 国际会议最终接受论文(poster-paper)列表(一)

    来源:AINLPer微信公众号(点击了解一下吧) 编辑: ShuYini 校稿: ShuYini 时间: 2020-01-22     2020年的ICLR会议将于今年的4月26日-4月30日在Mil ...

  9. 从零学web前端_从零到前端英雄(第2部分)

    从零学web前端 This article is part two of the "From Zero to Front-end Hero" series. In part one ...

最新文章

  1. 苹果发布会证实,他们把脸部检测技术和ARKit结合在了一起
  2. 华为交换机一次性进入多个接口_华为交换机端口的批量配置命令
  3. MR/hive/shark/sparkSQL
  4. 从618大促看直播风口,电商玩家如何走得更远
  5. 打开Excel文件时出现提示:“向Excel发送命令时出现错误”解决方案
  6. 他回国后对学生说,玩会这12个游戏就能掌握python基础,其实不难
  7. 使用SignalR和SQLTableDependency进行记录更改的SQL Server通知
  8. JAVA线程池_并发队列工作笔记0001---认识阻塞队列_非阻塞队列
  9. css 动画类库Animate.css
  10. avalon做的抽奖效果
  11. 我的大数据之路(一)-数据仓库也需要大数据
  12. html caption属性,HTML caption align 属性 | 菜鸟教程
  13. http下载异常_荏苒项目二:配置(日志,异常,数据库,前端,跨域CORS)
  14. 用Cyberduck将4EVERLAND Bucket挂载到本地,构建属于自己的Web3云网盘
  15. 【ParaView教程】第四章 常见问题 —— 怎样用ParaView导入Star CCM+的结果?
  16. GBase 8c的易维护性
  17. C语言中scanf()函数的返回值
  18. Google Earth Engine(GEE)——将shp文件导出到Google硬盘中
  19. DIV + CSS 学习笔记(盒模型)
  20. 用Python量化海龟交易法则

热门文章

  1. 为MacBook制作一个随身携带的windows系统
  2. bzoj1050 [HAOI2006]旅行comf(并查集)
  3. Java版本微信授权登录(测试版)
  4. shell教程(2):积木游戏之认识积木--重要的系统命令
  5. MSDB数据库置疑状态的解决方法
  6. rasp 系统_RASP研发踩坑之 解释器与编译器
  7. flutter项目引入iconfont【阿里巴巴图标】的图标
  8. 使用百度AI将语音转换成文字(JAVA)
  9. Apache优化相关
  10. 买手机时几GB+几GB啥意思