使用指南
iEDA概述
iEDA系统部署图
工具准备
环境
- 服务器配置
- 操作系统 Ubuntu 20.04.5 LTS
- 工艺环境 SkyWater PDK
编译构建
# 下载iEDA仓库
git clone https://gitee.com/oscc-project/iEDA.git iEDA && cd iEDA
# 通过apt安装编译依赖,需要root权限
sudo bash build.sh -i apt
# 编译 iEDA
bash build.sh -j 16
# 若能够正常输出 "Hello iEDA!" 则编译成功
./bin/iEDA -script scripts/hello.tcl
拷贝 ./bin/iEDA 到目录 ./scripts/design/sky130_gcd
# 拷贝 iEDA 到sky130 目录
cp ./bin/iEDA scripts/design/sky130_gcd/.
工艺文件准备
下载SkyWater PDK
拷贝TechLEF 文件 和 LEF文件到目录 ./scripts/foundry/sky130/lef
# 拷贝 TechLEF 文件到目录 ./scripts/foundry/sky130/lef
cp <skywater130pdk_tlef_path>/*.tlef scripts/foundry/sky130/lef/.
# 拷贝 LEF 文件到目录 ./scripts/foundry/sky130/lef
cp <skywater130pdk_lef_path>/*.lef scripts/foundry/sky130/lef/.
拷贝Lib文件到 ./scripts/foundry/sky130/lib
# 拷贝 Lib 文件到目录 ./scripts/foundry/sky130/lib
cp <skywater130pdk_lib_path>/*.lib scripts/foundry/sky130/lib/.
拷贝sdc文件到 ./scripts/foundry/sky130/sdc
# 拷贝 sdc 文件到目录 ./scripts/foundry/sky130/sdc
cp <skywater130pdk_sdc_path>/*.sdc scripts/foundry/sky130/sdc/.
设计文件准备
拷贝.v Netlist文件到目录 scripts/design/sky130_gcd/result/verilog
# 拷贝 .v 文件到目录 ./scripts/design/sky130_gcd/result/verilog
cp <skywater130pdk_verilog_path>/gcd.v scripts/design/sky130_gcd/result/verilog/.
工具流程
本文档以跑通skywater PDK 130nm工艺物理后端设计流程作为示例,说明iEDA各个点工具如何配置参数、运行和分析结果。
模块划分
scripts
├── design #iEDA flows for different designs
│ ├── ispd18 #tbd
│ └── sky130_gcd #flow of gcd in sky130
│ ├── iEDA
│ ├── iEDA_config # iEDA parameters configuration files
│ ├── README.md
│ ├── result # iEDA result output files
│ ├── run_iEDA_gui.py # Python3 script for running all iEDA flow with GUI layout
│ ├── run_iEDA.py # Python3 script for running all iEDA flow
│ ├── run_iEDA.sh # POSIX shell script for running all iEDA flow
│ └── script # TCL script files
├── foundry
│ ├── README.md
│ └── sky130 # SkyWater Open Source PDK
│ ├── lef # lef files
│ ├── lib # lib files
│ ├── sdc # sdc files
│ └── spef # folder for spef files if needed
└── hello.tcl # Test running iEDA
script 模块说明
script目录包含物理后端设计需要的所有流程脚本和结果分析评估脚本,并且按流程、功能划分好模块;流程脚本可支持顶层自动化运行脚本run_iEDA.py的调用,也可以支持独立运行。
scripts/design/sky130_gcd/script
├── DB_script # Data process flow scripts
│ ├── db_init_lef.tcl # initialize lef
│ ├── db_init_lib_drv.tcl # initialize lib only for flow of drv
│ ├── db_init_lib_fixfanout.tcl # initialize lib only for flow of fix fanout
│ ├── db_init_lib_hold.tcl # initialize lib only for flow of optimize hold
│ ├── db_init_lib_setup.tcl # initialize lib only for flow of optimize setup
│ ├── db_init_lib.tcl # initialize lib for common flow
│ ├── db_init_sdc.tcl # initialize sdc
│ ├── db_init_spef.tcl # initialize spef
│ ├── db_path_setting.tcl # set paths for all processing technology files, including TechLEF,LEF, Lib, sdc and spef
│ ├── run_db_checknet.tcl # check net connectivity based on data built by DEF (.def) and LEF (.lef & .tlef)
│ ├── run_db_report_evl.tcl # report wire length and congestion based on data built by DEF (.def) and LEF (.lef & .tlef)
│ ├── run_db.tcl # test building data by DEF (.def) and LEF (.lef & .tlef)
│ ├── run_def_to_gds_text.tcl # transform data from DEF (.def) to GDSII (.gdsii)
│ ├── run_def_to_verilog.tcl # transform data from DEF (.def) to netlist (.v)
│ ├── run_netlist_to_def.tcl # transform data from netlist (.v) to DEF (.def)
│ └── run_read_verilog.tcl # test read verilog file (.v)
├── iCTS_script # CTS flow scripts
│ ├── run_iCTS_eval.tcl # report wire legnth for CTS result
│ ├── run_iCTS_STA.tcl # report CTS STA
│ └── run_iCTS.tcl # run CTS
├── iDRC_script # DRC(Design Rule Check) flow scipts
│ ├── run_iDRC_gui.tcl # show GUI for DRC result
│ └── run_iDRC.tcl # run DRC
├── iFP_script # Floorplan flow scripts
│ ├── module # submodule for Floorplan scripts
│ │ ├── create_tracks.tcl # create tracks for routing layers
│ │ ├── pdn.tcl # create pdn networks
│ │ └── set_clocknet.tcl # set clock net
│ └── run_iFP.tcl # run Floorplan
├── iGUI_script # GUI flow scipts
│ └── run_iGUI.tcl # run GUI
├── iNO_script # NO(Netlist Optimization) flow scipts
│ └── run_iNO_fix_fanout.tcl # run Fix Fanout
├── iPL_script # Placement flow scripts
│ ├── run_iPL_eval.tcl # report congestion statistics and wire legnth for Placement result
│ ├── run_iPL_filler.tcl # run standard cell filler
│ ├── run_iPL_gui.tcl # run gui flow that shows Global Placement Processing result
│ ├── run_iPL_legalization_eval.tcl # report congestion statistics and wire legnth for Legalization result
│ ├── run_iPL_legalization.tcl # run Cell Legalization
│ └── run_iPL.tcl # run Placement
├── iRT_script # Routing flow scripts
│ ├── run_iRT_DRC.tcl # run DRC for Routing result
│ ├── run_iRT_eval.tcl # report wire legnth for Routing result
│ ├── run_iRT_STA.tcl # run STA for Routing result
│ └── run_iRT.tcl # run Routing
├── iSTA_script # STA flow scripts
│ ├── init_iSTA.tcl # STA initialization
│ ├── report_iSTA.tcl # report STA result
│ └── run_iSTA.tcl # run STA
└── iTO_script # TO(Timing Optimization) flow script
├── run_iTO_drv_STA.tcl # run STA for DRV result
├── run_iTO_drv.tcl # run DRV
├── run_iTO_hold_STA.tcl # run STA for Fix Hold Violation result
├── run_iTO_hold.tcl # run Fix Hold Violation
├── run_iTO_setup_STA.tcl # run STA for Fix Setup Violation result
└── run_iTO_setup.tcl # run Fix Setup Violation
运行Flow
准备好iEDA和工艺文件后,您可以选择自动运行sky130流程脚本,也可以分步骤运行各个点工具脚本,所有的结果都默认保存在script/sky130/result文件夹
Flow基础流程
不管是自动运行顶层 run_iEDA.py 脚本还是单独运行点工具脚本,基于 iEDA 平台设计的脚本都有着相似的步骤,具体流程如下 <br>
step 1 路径设置<br>
首先必须先配置工艺环境路径,为方便查找和配置路径参数,脚本将TechLEF、LEF、Lib、sdc、spef的路径统一在文件 ./script/DB_script/db_path_setting.tcl配置,如下表所示
功能 | 配置命令 | 参考 TCL 样例 |
---|---|---|
设置 TechLef 路径 | set TECH_LEF_PATH xxx | set TECH_LEF_PATH "./lef/sky130_fd_sc_hs.tlef" |
设置 Lef 路径 | set LEF_PATH xxx | set LEF_PATH ./lef/sky130_ef_io__com_bus_slice_10um.lef |
设置 Lib 路径 | set LIB_PATH xxx | set LIB_PATH ./lib/sky130_dummy_io.lib |
设置 Fix Fanout Lib 路径 | set LIB_PATH_FIXFANOUT xxx | set LIB_PATH_FIXFANOUT ./lib/sky130_dummy_io.lib |
设置 Fix DRV Violation Lib 路径 | set LIB_PATH_DRV xxx | set LIB_PATH_DRV ./lib/sky130_dummy_io.lib |
设置 Fix Hold Violation Lib 路径 | set LIB_PATH_HOLD xxx | set LIB_PATH_HOLD ./lib/sky130_dummy_io.lib |
设置 Fix Setup Violation Lib 路径 | set LIB_PATH_SETUP xxx | set LIB_PATH_SETUP ./lib/sky130_dummy_io.lib |
设置 SDC 路径 | set SDC_PATH xxx | set SDC_PATH "./sdc/gcd.sdc" |
设置 SPEF 路径 | set SPEF_PATH xxx | set SPEF_PATH "./spef/xxx.spef" |
step 2 配置点工具Config<br>
所有点工具的参数设置Config都在路径 ./iEDA_config 中,可查看后面章节的 输入输出一览表 修改对应的点工具Config文件
step 3 读 .def 设计文件<br>
以 CTS 为例,执行 def_init 命令,读取布局后的结果
#===========================================================
## read def
#===========================================================
def_init -path ./result/iPL_result.def
步骤 1 - 3 后,Tech LEF、LEF、DEF 文件数据将被加载,这是点工具启动的前提条件
step 4 启动点工具<br>
以 CTS 为例,执行 run_cts 命令,将启动 CTS 流程
#===========================================================
## run CTS
#===========================================================
run_cts -config ./iEDA_config/cts_default_config.json
step 5 保存点工具运行结果<br>
以 CTS 为例,执行完点工具流程后,将点工具运行结果保存在路径 ./result/ 中
#===========================================================
## Save def
#===========================================================
def_save -path ./result/iCTS_result.def
#===========================================================
## Save netlist
#===========================================================
netlist_save -path ./result/iCTS_result.v -exclude_cell_names {}
step 6 输出报告<br>
以 CTS 为例,数据存储后,将输出设计结果相关的总体报告,报告路径存储在 ./result/report/ 中
#===========================================================
## report
#===========================================================
report_db -path "./result/report/cts_db.rpt"
step 7 退出<br>
#===========================================================
## Exit
#===========================================================
flow_exit
以上步骤为执行单个点工具的一般流程,其中步骤 1 - 3 初始化配置和数据库,为必须的步骤,步骤 4 之后,可以按照需求灵活接入各个点工具或模块命令<br>
报告分析
点工具运行完成后,分析报告将存储在路径 ./result/report 中,模块划分如下表所示<br>
报告类型 | 路径 | 说明 |
---|---|---|
Tech LEF、LEF、DEF数据报告 | ./result/report | 分析、统计 Design 文件的数据,并对PR过程单元、线网数据进行详细报告 |
线长、拥塞评估报告 | ./result/report/eval | 分析、统计点工具输出结果的线长、单元密度、布线拥塞等数据 |
DRC报告 | ./result/report/drc | 主要检测布线后的DRC违例情况,已支持GUI可视化分析 |
基础信息
以 CTS 后的结果报告为例<br>
查看 CTS 的数据报告,路径在 ./result/report/cts_db.rpt<br>
+-----------------+-----------------------------+
| iEDA | V23.03-OS-01 |
+-----------------+-----------------------------+
| Stage | iCTS - Clock Tree Synthesis |
| Runtime | 2.863340 s |
| Memmory | 5745.216000 MB |
| | |
| Design Name | gcd |
| DEF&LEF Version | 5.8 |
| DBU | 1000 |
+-----------------+-----------------------------+
各标签含义如下表<br>
标签 | 样例值 | 说明 |
---|---|---|
iEDA | V23.03-OS-01 | iEDA 当前版本号 |
Stage | iCTS - Clock Tree Synthesis | 当前结果的流程阶段,iCTS表示当前结果由 CTS 输出 |
Runtime | 2.863340 s | 当前点工具读入数据到保存结果所需运行时间 |
Memmory | 5745.216000 MB | 当前点工具读入数据到保存结果所需最大峰值内存 |
Design Name | gcd | 设计名称 |
DEF&LEF Version | 5.8 | 当前设计的工艺文件版本号 |
DBU | 1000 | 1 微米含单位长度个数,用于转换 DEF 和 Tech LEF 参数值(DATABASE MICRONS LEFconvertFactor) |
Design 数据报告
以 CTS 后的 Design 数据报告为例,以下对报告的各个参数、标签进行说明<br>
查看 CTS 的数据报告,路径在 ./result/report/cts_db.rpt<br>
Summary<br>
Summary 报告基于 Tech LEF 和 DEF 数据,统计了各个数据类型的基本信息<br>
以 CTS 结果的 Summary 为例<br>
###################################################################
Summary
+------------------------+----------------------------------------+
| Module | Value |
+------------------------+----------------------------------------+
| DIE Area ( um^2 ) | 22513.194880 = 149.960000 * 150.128000 |
| DIE Usage | 0.297306 |
| CORE Area ( um^2 ) | 16893.489600 = 130.080000 * 129.870000 |
| CORE Usage | 0.396206 |
| | |
| Number - Site | 2 |
| Number - Row | 39 |
| Number - Track | 12 |
| Number - Layer | 13 |
| Number - Routing Layer | 6 |
| Number - Cut Layer | 5 |
| Number - GCell Grid | 0 |
| Number - Cell Master | 856 |
| Number - Via Rule | 54 |
| | |
| Number - IO Pin | 56 |
| Number - Instance | 941 |
| Number - Blockage | 0 |
| Number - Filler | 0 |
| Number - Net | 683 |
| Number - Special Net | 2 |
+------------------------+----------------------------------------+
报告的参数说明如下表所示
参数名 | Tech LEF/LEF 关键字段 | DEF 关键字段 | 说明 |
---|---|---|---|
DIE Area ( um^2 ) | DIEAREA | 版图 DIE 面积,单位 平方微米 | |
DIE Usage | 版图 DIE 的利用率,即 Design中所有 Instance 面积 / DIE 面积 | ||
CORE Area ( um^2 ) | 版图 CORE 面积, 单位 平方微米, CORE 的面积为所有标准单元ROW的面积之和 | ||
CORE Usag | 版图 CORE 的利用率, 即 Design中所有 Instance 面积 / CORE 面积 | ||
Number - Site | SITE | Tech LEF 中定义的 SITE 的个数 | |
Number - Row | ROW | 版图生成的 标准单元ROW 的个数 | |
Number - Track | TRACKS | 版图生成的 TRACK 的个数 | |
Number - Layer | LAYER | Tech LEF 中定义的 总层数 | |
Number - Routing Layer | TYPE ROUTING ; | Tech LEF 中定义的 布线层 层数 | |
Number - Cut Layer | TYPE CUT ; | Tech LEF 中定义的 通孔层 层数 | |
Number - GCell Grid | GCELLGRID | 版图生成的 GCell Grid 的个数 | |
Number - Cell Master | MACRO | LEF 中定义的所有 Cell Master 个数,包括宏单元、标准单元、填充单元等 | |
Number - Via Rule | VIA<br> VIARULE | VIAS | LEF 中定义的 Via 个数 |
Number - IO Pin | PINS | DEF 中生成的 IO Pin 的个数 | |
Number - Instance | COMPONENTS | DEF 中生成的所有 Instance 个数 | |
Number - Blockage | BLOCKAGES | DEF 中生成的所有 Blockage 个数 | |
Number - Filler | FILLS | DEF 中生成的所有 Filler 个数 | |
Number - Net | NETS | DEF 中生成的所有 Net 个数 | |
Number - Special Net | SPECIALNETS | DEF 中生成的所有 Special Net 个数 |
Summary - Instance<br>
按不同的分类规则,统计所有 Instance 的信息<br>
以 CTS 的结果为例<br>
Summary - Instance
+---------------+--------+--------------+------------+------------+
| Type | Number | Number Ratio | Area | Area Ratio |
+---------------+--------+--------------+------------+------------+
| All Instances | 941 | 1 | 7161635200 | 1 |
| | | | | |
| Netlist | 648 | 0.688629 | 6693304000 | 0.934606 |
| Physical | 293 | 0.311371 | 468331200 | 0.0653945 |
| Timing | 0 | 0 | 0 | 0 |
| | | | | |
| Core | 940 | 0.998937 | 7157635200 | 0.999441 |
| Core - logic | 647 | 0.687566 | 6689304000 | 0.934047 |
| Pad | 0 | 0 | 0 | 0 |
| Block | 0 | 0 | 0 | 0 |
| Endcap | 0 | 0 | 0 | 0 |
| Cover | 0 | 0 | 0 | 0 |
| Ring | 0 | 0 | 0 | 0 |
+---------------+--------+--------------+------------+------------+
报告的参数说明如下表所示<br>
参数名 | 说明 |
---|---|
Type | Instance 的类型 |
Number | 统计的 Instance 的个数 |
Number Ratio | 统计的 Instance 个数占比,即 统计的 Instance 个数 / 所有 Instance 个数 |
Area | 统计的 Instance 的总面积 |
Area Ratio | 统计的 Instance 的面积占比, 即 统计的 Instance 总面积 / 所有 Instance 总面积 |
其中类型 Type 的分类说明如下<br>
- All Instances : 所有 Instance
- Netlist : 所有 线网 类型的 Instance,对应关键字为 DEF 里的 COMPONENTS 的 SOURCE 属性为 NETLIST
- Physical : 所有 物理单元 类型的 Instance,对应关键字为 DEF 里的 COMPONENTS 的 SOURCE 属性为 DIST
- Timing : 所有 用于改变线网时序 的 Instance,比如 Buffer,对应关键字为 DEF 里的 COMPONENTS 的 SOURCE 属性为 TIMING
- Core : 所有Core区域内的 标准单元 个数,对应关键字为 LEF 里的 MACRO 的 CLASS 属性为 CORE
- Core - logic : 所有Core区域内的 非填充单元的标准单元 个数
- Pad : 所有 I/O Pad Instance,对应关键字为 LEF 里的 MACRO 的 CLASS 属性为 PAD
- Block : 所有 Block Instance,对应关键字为 LEF 里的 MACRO 的 CLASS 属性为 BLOCK
- Endcap : 所有 Endcap Instance,对应关键字为 LEF 里的 MACRO 的 CLASS 属性为 ENDCAP
- Cover : 所有 Cover Instance,对应关键字为 LEF 里的 MACRO 的 CLASS 属性为 COVER
- Ring : 所有 Ring Instance,对应关键字为 LEF 里的 MACRO 的 CLASS 属性为 RING
Summary - Net<br>
按不同的分类规则,统计所有 Net 的信息<br>
以 CTS 的结果为例<br>
Summary - Net
+----------------+--------+--------------+--------+--------------+
| Net Type | Number | Number Ratio | Length | Length Ratio |
+----------------+--------+--------------+--------+--------------+
| All Nets | 683 | 1 | 0 | 0 |
| Signal | 674 | 0.986823 | 0 | 0 |
| Clock | 9 | 0.0131772 | 0 | 0 |
| Power & Ground | 0 | 0 | 0 | 0 |
+----------------+--------+--------------+--------+--------------+
报告的参数说明如下表所示<br>
参数名 | 说明 |
---|---|
Net Type | Net 类型 |
Number | 统计的 Net 的个数 |
Number Ratio | 统计的 Net 个数占比,即 统计的 Net 个数 / 所有 Net 个数 |
Length | 统计的 Net 的总面积 |
Length Ratio | 统计的 Net 的线网长度占比, 即 统计的 Net 总长度 / 所有 Net 总长度 |
其中类型 Net Type 的分类说明如下<br>
- All Nets : 所有 Net
- Signal : 所有信号 Net,对应关键字为 DEF 里的 NETS 的 USE 属性为 SIGNAL
- Clock : 所有时钟 Net,对应关键字为 DEF 里的 NETS 的 USE 属性为 CLOCK
- Power & Ground : 所有电源 Net,对应关键字为 DEF 里的 NETS 的 USE 属性为 GROUND 或者 POWER
Summary - Layer<br>
统计所有层的数据信息<br>
以 CTS 的结果为例<br>
Summary - Layer
+-------+-------------------+-------------------+------------------+--------------------+---------------------------+---------------------------+--------------------------+
| Layer | Net - Wire Length | Net - Wire Number | Net - Via Number | Net - Patch Number | Special Net - Wire Length | Special Net - Wire Number | Special Net - Via Number |
+-------+-------------------+-------------------+------------------+--------------------+---------------------------+---------------------------+--------------------------+
| nwell | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| pwell | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| li1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| mcon | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| met1 | 0 | 0 | 0 | 0 | 5203200 | 40 | 0 |
| via | 0 | 0 | 0 | 0 | 0 | 0 | 180 |
| met2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| via2 | 0 | 0 | 0 | 0 | 0 | 0 | 180 |
| met3 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| via3 | 0 | 0 | 0 | 0 | 0 | 0 | 180 |
| met4 | 0 | 0 | 0 | 0 | 1173150 | 9 | 0 |
| via4 | 0 | 0 | 0 | 0 | 0 | 0 | 41 |
| met5 | 0 | 0 | 0 | 0 | 1170720 | 9 | 0 |
+-------+-------------------+-------------------+------------------+--------------------+---------------------------+---------------------------+--------------------------+
报告的参数说明如下表所示<br>
参数名 | 说明 |
---|---|
Layer | 第n层信息,按从下到上的层顺序递增 |
Net - Wire Length | 统计当前层所有 Net 的总线长 |
Net - Wire Number | 统计当前层所有 Net 的 Wire 类型的Segment数据的总个数 |
Net - Via Number | 统计当前层所有 Net 的 Via 类型的Segment数据的总个数 |
Net - Patch Number | 统计当前层所有 Net 的 Patch 类型的Segment数据的总个数 |
Special Net - Wire Length | 统计当前层所有 Special Net 的总线长 |
Special Net - Wire Number | 统计当前层所有 Special Net 的 Wire 类型的Segment数据的总个数 |
Special Net - Via Number | 统计当前层所有 Special Net 的 Via 类型的Segment数据的总个数 |
Summary - Pin Distribution<br>
按Pin的个数统计所有的 Net 和 Instance 的分布情况<br>
以 CTS 的结果为例<br>
Summary - Pin Distribution
+------------+------------+-----------+-----------------+----------------+
| Pin Number | Net Number | Net Ratio | Instance Number | Instance Ratio |
+------------+------------+-----------+-----------------+----------------+
| 0 | 0 | 0.000000 | 1 | 0.001063 |
| 1 | 0 | 0.000000 | 0 | 0.000000 |
| 2 | 490 | 0.717423 | 0 | 0.000000 |
| 3 | 116 | 0.169839 | 0 | 0.000000 |
| 4 | 20 | 0.029283 | 293 | 0.311371 |
| 5 | 25 | 0.036603 | 0 | 0.000000 |
| 6 | 16 | 0.023426 | 370 | 0.393199 |
| 7 | 0 | 0.000000 | 133 | 0.141339 |
| 8 | 7 | 0.010249 | 117 | 0.124336 |
| 9 | 1 | 0.001464 | 27 | 0.028693 |
| 10 | 0 | 0.000000 | 0 | 0.000000 |
| 11 | 6 | 0.008785 | 0 | 0.000000 |
| 12 | 0 | 0.000000 | 0 | 0.000000 |
| 13 | 1 | 0.001464 | 0 | 0.000000 |
| 14 | 0 | 0.000000 | 0 | 0.000000 |
| 15 | 0 | 0.000000 | 0 | 0.000000 |
| 16 | 0 | 0.000000 | 0 | 0.000000 |
| 17 | 0 | 0.000000 | 0 | 0.000000 |
| 18 | 0 | 0.000000 | 0 | 0.000000 |
| 19 | 0 | 0.000000 | 0 | 0.000000 |
| 20 | 0 | 0.000000 | 0 | 0.000000 |
| 21 | 0 | 0.000000 | 0 | 0.000000 |
| 22 | 0 | 0.000000 | 0 | 0.000000 |
| 23 | 1 | 0.001464 | 0 | 0.000000 |
| 24 | 0 | 0.000000 | 0 | 0.000000 |
| 25 | 0 | 0.000000 | 0 | 0.000000 |
| 26 | 0 | 0.000000 | 0 | 0.000000 |
| 27 | 0 | 0.000000 | 0 | 0.000000 |
| 28 | 0 | 0.000000 | 0 | 0.000000 |
| 29 | 0 | 0.000000 | 0 | 0.000000 |
| 30 | 0 | 0.000000 | 0 | 0.000000 |
| 31 | 0 | 0.000000 | 0 | 0.000000 |
| 32 | 0 | 0.000000 | 0 | 0.000000 |
| >= 32 | 0 | 0.000000 | 0 | 0.000000 |
+------------+------------+-----------+-----------------+----------------+
报告的参数说明如下表所示<br>
参数名 | 说明 |
---|---|
Pin Number | 当前统计的 Pin 个数 |
Net Number | 统计 Pin 个数相同的的 Net 数量 |
Net Ratio | 统计 Pin 个数相同的的 Net 数量与总 Net 数量的占比 ,即 统计的 Net 个数 / 所有 Net 个数 |
Instance Number | 统计非PDN PIN 的 Pin 个数相同的的 Instance 数量 |
Instance Ratio | 统计的 Instance 数量与总 Instance 数量的占比 ,即 统计的 Instance 个数 / 所有 Instance 个数 |
线长、拥塞评估报告
以 Placement 结果的 Design 线长评估和拥塞评估报告为例,以下对评估报告的各个参数、标签进行说明<br>
Congestion Report<br>
查看 Placement 结果的拥塞评估报告,路径在 ./result/report/eval/iPL_result_congestion.rpt<br>
###################################################################
Congestion Report
+------------------------+---------------+-------------+
| Grid Bin Size | Bin Partition | Total Count |
+------------------------+---------------+-------------+
| 509 * 508 | 256 by 256 | 65536 |
+------------------------+---------------+-------------+
| Instance Density Range | Bins Count | Percentage |
+------------------------+---------------+-------------+
| 0.95 ~ 1.00 | 24738 | 37.75 |
| 0.90 ~ 0.95 | 450 | 0.69 |
| 0.85 ~ 0.90 | 205 | 0.31 |
| 0.80 ~ 0.85 | 352 | 0.54 |
| 0.75 ~ 0.80 | 0 | 0.00 |
+------------------------+---------------+-------------+
| Pin Count Range | Bins Count | Percentage |
+------------------------+---------------+-------------+
| 7 ~ 8 | 17 | 0.03 |
| 6 ~ 7 | 50 | 0.08 |
| 6 ~ 6 | 0 | 0.00 |
| 5 ~ 6 | 0 | 0.00 |
| 4 ~ 5 | 388 | 0.59 |
+------------------------+---------------+-------------+
报告的参数说明如下表所示<br>
参数名 | 说明 |
---|---|
Grid Bin Size | 版图(core)区域所划分网格的:长度 * 宽度 |
Bin Partition | 版图(core)区域所划分网格数:水平数 by 竖直数 |
Total Count | 版图(core)区域所有网格数 |
Instance Density Range | 与网格重叠的单元面积总和除以单个网格面积,用于表征较高密度的网格 |
Bins Count | 对应单元密度的网格数 |
Percentage | 对应单元密度的网格数与所有网格数的比值 |
Pin Count Range | 单个网格内的引脚个数,用于表征较高引脚密度的网格 |
Bins Count | 对应引脚密度的网格数 |
Percentage | 对应引脚密度的网格数与所有网格数的比值 |
Wire Length Report<br>
查看 Placement 结果的线长评估报告,路径在 ./result/report/eval/iPL_result_wirelength.rpt<br>
###################################################################
Wire Length Report
+-------------------+--------------+----------------+------------------+----------------+
| Wire-length Model | Total Length | Average Length | Longest Net Name | Longest Length |
+-------------------+--------------+----------------+------------------+----------------+
| HPWL | 9944165 | 14732 | clk | 214845 |
| Bound2Bound | 10618154 | 15730 | clk | 315427 |
| Flute | 10672566 | 15811 | clk | 441165 |
+-------------------+--------------+----------------+------------------+----------------+
报告的参数说明如下表所示<br>
参数名 | 说明 |
---|---|
Wire-length Model | 计算线长的方法,目前支持三种线长计算方法,包括 HPWL、Bound2Bound、Flute |
Total Length | 统计所有 Net 的总线长 |
Average Length | 所有线网的平均线长,即 统计所有 Net 的总线长 / 所有 Net 个数 |
Longest Net Name | 线长最大的 Net 名称 |
Longest Length | 线长最大的 Net 线长 |
DRC违例报告
以 Routing 结果的 Design DRC报告为例,以下对报告的各个参数、标签进行说明<br>
查看 Routing 结果的DRC检测报告,路径在 ./result/report/drc/iRT_drc.rpt<br>
Drc Summary<br>
DRC 违例分布统计如下表所示
###################################################################
Drc Summary
+-----------------------------------+------------+
| DRC Type | Number |
+-----------------------------------+------------+
| Cut Different Layer Spacing | 0 |
| Cut EOL Spacing | 0 |
| Cut Enclosure | 537550672 |
| Cut EnclosureEdge | 1159733280 |
| Cut Spacing | 0 |
| Metal Corner Filling Spacing | 892941358 |
| Metal EOL Spacing | 0 |
| Metal JogToJog Spacing | 540357424 |
| Metal Notch Spacing | 775040288 |
| Metal Parallel Run Length Spacing | 1663 |
| Metal Short | 747 |
| MinHole | 173298255 |
| MinStep | 1344282656 |
| Minimal Area | 808595560 |
+-----------------------------------+------------+
报告的参数说明如下表所示<br>
参数名 | 说明 |
---|---|
DRC Type | DRC 检测规则类型 |
Number | DRC 违例数量 |
其中类型 DRC Type 的分类说明如下<br>
- Cut Different Layer Spacing :
- Cut EOL Spacing :
- Cut Enclosure :
- Cut EnclosureEdge :
- Cut Spacing :
- Metal Corner Filling Spacing :
- Metal EOL Spacing :
- Metal JogToJog Spacing :
- Metal Notch Spacing :
- Metal Parallel Run Length Spacing :
- Metal Short :
- MinHole :
- MinStep :
- Minimal Area :
Connectivity Summary<br>
检测所有 Net 的连通性
Connectivity Summary
+------------------------------------+----------+
| Connectivity Check | Number |
+------------------------------------+----------+
| Disconneted nets [pin number >= 2] | 38 / 683 |
| Disconneted nets [pin number < 2] | 0 / 683 |
+------------------------------------+----------+
报告的参数说明如下表所示<br>
参数名 | 说明 |
---|---|
Connectivity Check | 未连通的 Net 类别,按 Net 中包含的 Pin 个数进行分别统计 |
Number | 未连通的 Net 数量和总 Net 数量 比值 |
DRC - Disconnected Net<br>
记录未连通的所有 Net 名称
DRC - Disconnected Net
+------------------+
| Disconnected Net |
+------------------+
| req_rdy |
| resp_val |
| req_val |
| resp_rdy |
| reset |
| clk |
| req_msg[16] |
| req_msg[17] |
| req_msg[18] |
| req_msg[19] |
| req_msg[20] |
| req_msg[21] |
| req_msg[22] |
| req_msg[23] |
| req_msg[24] |
| req_msg[25] |
| req_msg[26] |
| req_msg[27] |
| req_msg[28] |
| req_msg[29] |
| req_msg[30] |
| req_msg[31] |
| req_msg[0] |
| req_msg[1] |
| req_msg[2] |
| req_msg[3] |
| req_msg[4] |
| req_msg[5] |
| req_msg[6] |
| req_msg[7] |
| req_msg[8] |
| req_msg[10] |
| req_msg[9] |
| req_msg[11] |
| req_msg[12] |
| req_msg[14] |
| req_msg[13] |
| req_msg[15] |
| |
+------------------+
物理后端设计全流程运行
运行sky130目录的run_iEDA.py,将自动运行从读取.v Netlist文件到最后生成 .gdsii GDSII文件的全流程,全流程使用默认参数,所有运行结果将保存在scripts/design/sky130_gcd/result目录下,详细的功能描述、参数配置、输入、输出和报告等可查看点工具运行。
运行脚本
# 切换目录到sky130
cd <sky130 path>
# 运行自动化流程脚本
./run_iEDA.py
输入输出一览表
全流程自动运行,前后流程的输入、输出已在脚本中配置好且存在先后依赖关系,如下表所示
Flow | Script | Config | Design Input | Design Output | Report |
---|---|---|---|---|---|
布图规划 (Floorpan) | ./iEDA -script ./script/iFP_script/run_iFP.tcl | ./result/verilog/gcd.v | ./result/iFP_result.def<br> ./result/iFP_result.v | ./result/report/fp_db.rpt | |
网表优化(Fix Fanout) | ./iEDA -script ./script/iNO_script/run_iNO_fix_fanout.tcl | ./iEDA_config/cts_default_config.json | ./result/iFP_result.def | ./result/iTO_fix_fanout_result.def<br> ./result/iTO_fix_fanout_result.v | ./result/report/fixfanout_db.rpt |
布局 (Placement) | ./iEDA -script ./script/iPL_script/run_iPL.tcl | ./iEDA_config/pl_default_config.json | ./result/iTO_fix_fanout_result.def | ./result/iPL_result.def<br> ./result/iPL_result.v | ./result/report/pl_db.rpt |
布局结果评估 (评估线长和拥塞) | ./iEDA -script ./script/iPL_script/run_iPL_eval.tcl | ./result/iPL_result.def | ./result/report/eval/iPL_result_wirelength.rpt<br> ./result/report/eval/iPL_result_congestion.rpt | ||
时钟树综合 (CTS) | ./iEDA -script ./script/iCTS_script/run_iCTS.tcl | ./iEDA_config/cts_default_config.json | ./result/iPL_result.def | ./result/iCTS_result.def<br> ./result/iCTS_result.v | ./result/report/cts_db.rpt |
时钟树综合结果评估 (评估线长) | ./iEDA -script ./script/iCTS_script/run_iCTS_eval.tcl | ./result/iCTS_result.def | ./result/report/eval/iCTS_result_wirelength.rpt | ||
时钟树综合时序评估 (评估时序) | ./iEDA -script ./script/iCTS_script/run_iCTS_STA.tcl | ./result/iCTS_result.def | ./result/cts/sta/ | ||
修复DRV违例 (Fix DRV Violation) | ./iEDA -script ./script/iTO_script/run_iTO_drv.tcl | ./iEDA_config/to_default_config_drv.json | ./result/iCTS_result.def | ./result/iTO_drv_result.def<br> ./result/iTO_drv_result.v | ./result/report/drv_db.rpt |
Fix DRV结果评估 (评估时序) | ./iEDA -script ./script/iTO_script/run_iTO_drv_STA.tcl | ./result/iTO_drv_result.def | ./result/to/drv/sta/ | ||
修复Hold违例(Fix Hold Violation) | ./iEDA -script ./script/iTO_script/run_iTO_hold.tcl | ./iEDA_config/to_default_config_hold.json | ./result/iTO_drv_result.def | ./result/iTO_hold_result.def<br> ./result/iTO_hold_result.v | ./result/report/hold_db.rpt |
Fix Hold结果评估(评估时序) | ./iEDA -script ./script/iTO_script/run_iTO_hold_STA.tcl | ./result/iTO_hold_result.def | ./result/to/hold/sta/ | ||
单元合法化(Legalization) | ./iEDA -script ./script/iPL_script/run_iPL_legalization.tcl | ./iEDA_config/pl_default_config.json | ./result/iTO_hold_result.def | ./result/iPL_lg_result.def<br> ./result/iPL_lg_result.v | ./result/report/lg_db.rpt |
合法化结果评估(评估线长和拥塞) | ./iEDA -script ./script/iPL_script/run_iPL_legalization_eval.tcl | ./result/iPL_lg_result.def | ./result/report/eval/iPL_lg_result_wirelength.rpt<br> ./result/report/eval/iPL_lg_result_congestion.rpt | ||
布线 (Routing) | ./iEDA -script ./script/iRT_script/run_iRT.tcl | ./result/iPL_lg_result.def | ./result/iRT_result.def ./result/iRT_result.v | ./result/report/rt_db.rpt | |
布线结果评估(评估线长) | ./iEDA -script ./script/iRT_script/run_iRT_eval.tcl | ./result/iRT_result.def | ./result/report/eval/iRT_result_wirelength.rpt | ||
布线结果评估 (评估时序) | ./iEDA -script ./script/iRT_script/run_iRT_STA.tcl | ./result/iRT_result.def | ./result/rt/sta/ | ||
布线结果DRC | ./iEDA -script ./script/iRT_script/run_iRT_DRC.tcl | ./iEDA_config/drc_default_config.json | ./result/iRT_result.def | ./result/report/drc/iRT_drc.rpt | |
单元填充 (Filler) | ./iEDA -script ./script/iPL_script/run_iPL_filler.tcl | ./iEDA_config/pl_default_config.json | ./result/iRT_result.def | ./result/iPL_filler_result.def<br> ./result/iPL_filler_result.v | ./result/report/filler_db.rpt |
DEF转GDSII | ./iEDA -script ./script/DB_script/run_def_to_gds_text.tcl | ./result/iPL_filler_result.def | ./result/final_design.gds2 |
布图规划 (Floorplan)
执行脚本<br>
./iEDA -script ./script/iFP_script/run_iFP.tcl
参数配置<br>
无
输入<br>
- ./result/verilog/gcd.v
输出
- ./result/iFP_result.def
评测和报告<br>
- ./result/report/fp_db.rpt
GUI<br>
step 1:修改脚本 ./script/iGUI_script/run_iGUI.tcl 的输入设计 def 为 ./result/iFP_result.def
#===========================================================
## read def
#===========================================================
def_init -path ./result/iFP_result.def
step 2: 执行iEDA GUI脚本
./iEDA_gui -script ./script/iGUI_script/run_iGUI.tcl
step 3: 查看GUI
初始版图
PDN
网表优化(Fix Fanout)
执行脚本<br>
./iEDA -script ./script/iNO_script/run_iNO_fix_fanout.tcl
参数配置<br>
参数配置的路径在 ./iEDA_config/no_default_config_fixfanout.json,如下所示
{
"file_path": {
"design_work_space": "./result/no",
"sdc_file": "",
"lib_files": "",
"lef_files": "",
"def_file": "",
"output_def": "",
"report_file": "./result/no/report.txt"
},
"insert_buffer": "sky130_fd_sc_hs__buf_8",
"max_fanout": 30
}
可配置参数定义如下
参数名 | 默认值 | 说明 |
---|---|---|
design_work_space | ./result/no | 设置 Fix Fanout 运行过程的工作区路径 |
sdc_file | 无效参数,后续删除 | |
lib_files | 无效参数,后续删除 | |
lef_files | 无效参数,后续删除 | |
def_file | 无效参数,后续删除 | |
output_def | 无效参数,后续删除 | |
report_file | ./result/no/report.txt | Fix Fanout 过程中产生的报告 |
insert_buffer | sky130_fd_sc_hs__buf_8 | 设置插入的 buffer 名称 |
max_fanout | 30 | 最大Fanout数量 |
输入<br>
- ./result/iFP_result.def
输出<br>
- ./result/iTO_fix_fanout_result.def
- ./result/iTO_fix_fanout_result.v
评测和报告<br>
- ./result/report/fixfanout_db.rpt
GUI<br>
step 1:修改脚本 ./script/iGUI_script/run_iGUI.tcl 的输入设计 def 为 ./result/iTO_fix_fanout_result.def
#===========================================================
## read def
#===========================================================
def_init -path ./result/iTO_fix_fanout_result.def
step 2: 执行iEDA GUI脚本
./iEDA_gui -script ./script/iGUI_script/run_iGUI.tcl
step 3: 查看GUI
布局 (Placement)
执行脚本<br>
./iEDA -script ./script/iPL_script/run_iPL.tcl
参数配置<br>
参考iEDA_config/pl_default_config.json: ./scripts/design/sky130_gcd/iEDA_config/pl_default_config.json
JSON参数 | 功能说明 | 参数范围 | 默认值 |
---|---|---|---|
is_max_length_opt | 是否开启最大线长优化 | [0,1] | 0 |
max_length_constraint | 指定最大线长 | [0-1000000] | 1000000 |
is_timing_effort | 是否开启时序优化模式 | [0,1] | 0 |
is_congestion_effort | 是否开启可布线性优化模式 | ||
ignore_net_degree | 忽略超过指定pin个数的线网 | [10-10000] | 100 |
num_threads | 指定的CPU线程数 | [1-64] | 8 |
[GP-Wirelength] init_wirelength_coef | 设置初始线长系数 | [0.0-1.0] | 0.25 |
[GP-Wirelength] reference_hpwl | 调整密度惩罚的参考线长 | [100-1000000] | 446000000 |
[GP-Wirelength] min_wirelength_force_bar | 控制线长边界 | [-1000-0] | -300 |
[GP-Density] target_density | 指定的目标密度 | [0.0-1.0] | 0.8 |
[GP-Density] bin_cnt_x | 指定水平方向上Bin的个数 | [16,32,64,128,256,512,1024] | 512 |
[GP-Density] bin_cnt_y | 指定垂直方向上Bin的个数 | [16,32,64,128,256,512,1024] | 512 |
[GP-Nesterov] max_iter | 指定最大的迭代次数 | [50-2000] | 2000 |
[GP-Nesterov] max_backtrack | 指定最大的回溯次数 | [0-100] | 10 |
[GP-Nesterov] init_density_penalty | 指定初始状态的密度惩罚 | [0.0-1.0] | 0.00008 |
[GP-Nesterov] target_overflow | 指定目标的溢出值 | [0.0-1.0] | 0.1 |
[GP-Nesterov] initial_prev_coordi_update_coef | 初始扰动坐标时的系数 | [10-10000] | 100 |
[GP-Nesterov] min_precondition | 设置precondition的最小值 | [1-100] | 1 |
[GP-Nesterov] min_phi_coef | 设置最小的phi参数 | [0.0-1.0] | 0.95 |
[GP-Nesterov] max_phi_coef | 设置最大的phi参数 | [0.0-1.0] | 1.05 |
[BUFFER] max_buffer_num | 指定限制最大buffer插入个数 | [0-1000000] | 35000 |
[BUFFER] buffer_type | 指定可插入的buffer类型名字 | 工艺相关 | 列表[...,...] |
[LG] max_displacement | 指定单元的最大移动量 | [10000-1000000] | 50000 |
[LG] global_right_padding | 指定单元间的间距(以Site为单位) | [0,1,2,3,4...] | 1 |
[DP] max_displacement | 指定单元的最大移动量 | [10000-1000000] | 50000 |
[DP] global_right_padding | 指定单元间的间距(以Site为单位) | [0,1,2,3,4...] | 1 |
[Filler] first_iter | 指定第一轮迭代使用的Filler | 工艺相关 | 列表[...,...] |
[Filler] second_iter | 指定第二轮迭代使用的Filler | 工艺相关 | 列表[...,...] |
[Filler] min_filler_width | 指定Filler的最小宽度(以Site为单位) | 工艺相关 | 1 |
[MP] fixed_macro | 指定固定的宏单元 (string macro_name) | 设计相关 | 列表[...,...] |
[MP] fixed_macro_coordinate | 指定固定宏单元的位置坐标(int location_x, int location_y) | 设计相关 | 列表[...,...] |
[MP] blockage | 指定宏单元阻塞矩形区域,宏单元应该避免摆放在该区域(int left_bottom_x, int left_bottom_y, int right_top_x, int right_top_y) | 设计相关 | 列表[...,...] |
[MP] guidance_macro | 指定指导摆放宏单元,每个宏单元可以设置期望摆放的区域 (string macro_name) | 设计相关 | 列表[...,...] |
[MP] guidance | 指定对应宏单元的指导摆放区域(int left_bottom_x, int left_bottom_y, int right_top_x, int right_top_y) | 设计相关 | 列表[...,...] |
[MP] solution_type | 指定解的表示方式 | ["BStarTree","SequencePair"] | "BStarTree" |
[MP] perturb_per_step | 指定模拟退火每步扰动次数 | [10-1000] | 100 |
[MP] cool_rate | 指定模拟退火温度冷却率 | [0.0-1.0] | 0.92 |
[MP] parts | 指定标准单元划分数(int) | [10-100] | 66 |
[MP] ufactor | 指定标准单元划分不平衡值 (int) | [10-1000] | 100 |
[MP] new_macro_density | 指定虚拟宏单元密度 | [0.0-1.0] | 0.6 |
[MP] halo_x | 指定宏单元的halo(横向) | [0-1000000] | 0 |
[MP] halo_y | 指定宏单元的halo(纵向) | [0-1000000] | 0 |
[MP] output_path | 指定输出文件路径 | "./result/pl" |
输入<br>
- ./result/iTO_fix_fanout_result.def
输出<br>
- ./result/iPL_result.def
- ./result/iPL_result.v
评测和报告<br>
- ./result/report/pl_db.rpt
iPL工具的中间报告默认存放在目录:./scripts/design/sky130_gcd/result/pl/
- report/violation_record.txt :布局违例的单元
- report/wirelength_record.txt :布局的HPWL线长、STWL线长以及长线线长统计
- report/density_record.txt :布局的峰值bin密度
- report/timing_record.txt :布局的时序信息(wns、tns),调用Flute进行简易绕线
GUI<br>
step 1:修改脚本 ./script/iGUI_script/run_iGUI.tcl 的输入设计 def 为 ./result/iPL_result.def
#===========================================================
## read def
#===========================================================
def_init -path ./result/iPL_result.def
step 2: 执行iEDA GUI脚本
./iEDA_gui -script ./script/iGUI_script/run_iGUI.tcl
step 3: 查看GUI
时钟树综合 (CTS)
执行脚本<br>
./iEDA -script ./script/iCTS_script/run_iCTS.tcl
参数配置<br>
参数 | 类型 | 说明 |
---|---|---|
skew_bound | 浮点字符串 | 时钟源到达各个寄存器的最大时钟偏差 |
max_buf_tran | 浮点字符串 | 缓冲器最大转换时间约束 |
max_sink_tran | 浮点字符串 | 寄存器最大转换时间约束 |
max_cap | 浮点字符串 | 最大负载电容约束 |
max_fanout | 整型字符串 | 最大扇出约束 |
max_length | 整型字符串 | 最大线网线长约束 |
scale_size | 整型 | 用于减小规模加速时钟树构建的划分程度 |
buffer_type | 字符串列表 | 用于指定时钟树综合阶段可用的缓冲器类型列表 |
routing_layer | 整型列表 | 指定时钟绕线层以获取单位电容、电阻信息 |
use_netlist | 字符串("ON" or "OFF") | 是否只对"net_list"中的线网进行时钟树综合,若该参数为"OFF"则默认对所有时钟线长进行时钟树综合 |
net_list | 字符串字典列表 | 指定需要进行时钟树构建的线网 |
输入<br>
- ./result/iPL_result.def
输出<br>
- ./result/iCTS_result.def
- ./result/iCTS_result.v
评测和报告<br>
- ./result/report/cts_db.rpt
GUI<br>
step 1:修改脚本 ./script/iGUI_script/run_iGUI.tcl 的输入设计 def 为 ./result/iCTS_result.def
#===========================================================
## read def
#===========================================================
def_init -path ./result/iCTS_result.def
step 2: 执行iEDA GUI脚本
./iEDA_gui -script ./script/iGUI_script/run_iGUI.tcl
step 3: 查看GUI
修复DRV违例 (Fix DRV Violation)
执行脚本<br>
./iEDA -script ./script/iTO_script/run_iTO_drv.tcl
参数配置<br>
参考"./scripts/design/sky130_gcd/iEDA_config/to_default_config_drv.json"
参数名 | 默认值 | 说明 |
---|---|---|
design_work_space | ./result/to | 设置运行过程的工作区路径 |
sdc_file | 无效参数,后续删除 | |
lib_files | 无效参数,后续删除 | |
lef_files | 无效参数,后续删除 | |
def_file | 无效参数,后续删除 | |
output_def | 无效参数,后续删除 | |
report_file | ./result/to/report.txt | 优化过程产生的报告 |
gds_file | ./result/to/to.gds | 生成的GDS文件路径,默认不会生成该文件 |
setup_slack_margin | 0.0 | setup slack小于该值时认为违例,也是slack优化的目标 |
hold_slack_margin | 0.0 | hold slack小于该值时认为违例,也是slack优化的目标 |
max_buffer_percent | 0.2 | 缓冲器插入的面积占芯片面积的最大比例 |
max_utilization | 0.8 | 缓冲器插入后的面积+其他单元的面积,占芯片面积的最大比例 |
DRV_insert_buffers | sky130_fd_sc_hs__buf_8 | 优化DRV时使用的缓冲器(需要针对设计指定),为空时会自动从缓冲器库中选择 |
setup_insert_buffers | sky130_fd_sc_hs__buf_8 | 优化setup时使用的缓冲器(需要针对设计指定),为空时会自动从缓冲器库中选择 |
hold_insert_buffers | sky130_fd_sc_hs__buf_8 | 优化hold时使用的缓冲器(需要针对设计指定),为空时会自动从缓冲器库中选择 |
number_passes_allowed_decreasing_slack | 5 | 迭代优化setup时,允许WNS不断变差的最大连续迭代次数 |
rebuffer_max_fanout | 20 | 针对setup,线网的fanout超过该值时不会对其进行缓冲器插入优化 |
split_load_min_fanout | 8 | 针对setup,线网的fanout大于该值时通过插入缓冲器把fanout降低 |
输入<br>
- ./result/iCTS_result.def
输出<br>
- ./result/iTO_drv_result.def
- ./result/iTO_drv_result.v
评测和报告<br>
- ./result/report/drv_db.rpt
修复Hold违例(Fix Hold Violation)
执行脚本<br>
./iEDA -script ./script/iTO_script/run_iTO_hold.tcl
参数配置<br>
参考"./scripts/design/sky130_gcd/iEDA_config/to_default_config_hold.json"
参数详细信息同修复DRV违例
输入<br>
- ./result/iTO_drv_result.def
输出<br>
- ./result/iTO_hold_result.def
- ./result/iTO_hold_result.v
评测和报告<br>
- ./result/report/hold_db.rpt
单元合法化(Legalization)
执行脚本<br>
./iEDA -script ./script/iPL_script/run_iPL_legalization.tcl
参数配置<br>
输入<br>
- ./result/iTO_hold_result.def
输出<br>
- ./result/iPL_lg_result.def
- ./result/iPL_lg_result.v
评测和报告<br>
- ./result/report/lg_db.rpt
GUI<br>
step 1:修改脚本 ./script/iGUI_script/run_iGUI.tcl 的输入设计 def 为 ./result/iPL_lg_result.def
#===========================================================
## read def
#===========================================================
def_init -path ./result/iPL_lg_result.def
step 2: 执行iEDA GUI脚本
./iEDA_gui -script ./script/iGUI_script/run_iGUI.tcl
step 3: 查看GUI
布线 (Routing)
执行脚本<br>
./iEDA -script ./script/iRT_script/run_iRT.tcl
参数配置<br>
输入<br>
- ./result/iPL_lg_result.def
输出<br>
- ./result/iRT_result.def
- ./result/iRT_result.v
评测和报告<br>
- ./result/report/rt_db.rpt
GUI<br>
step 1:修改脚本 ./script/iGUI_script/run_iGUI.tcl 的输入设计 def 为 ./result/iRT_result.def
#===========================================================
## read def
#===========================================================
def_init -path ./result/iRT_result.def
step 2: 执行iEDA GUI脚本
./iEDA_gui -script ./script/iGUI_script/run_iGUI.tcl
step 3: 查看GUI
单元填充 (Filler)
执行脚本<br>
./iEDA -script ./script/iPL_script/run_iPL_filler.tcl
参数配置<br>
输入<br>
- ./result/iRT_result.def
输出<br>
- ./result/iPL_filler_result.def
- ./result/iPL_filler_result.v
评测和报告<br>
- ./result/report/filler_db.rpt
GUI<br>
step 1:修改脚本 ./script/iGUI_script/run_iGUI.tcl 的输入设计 def 为 ./result/iPL_filler_result.def
#===========================================================
## read def
#===========================================================
def_init -path ./result/iPL_filler_result.def
step 2: 执行iEDA GUI脚本
./iEDA_gui -script ./script/iGUI_script/run_iGUI.tcl
step 3: 查看GUI
DEF转GDSII
执行脚本<br>
./iEDA -script ./script/DB_script/run_def_to_gds_text.tcl
参数配置<br>
输入<br>
- ./result/iPL_filler_result.def
输出<br>
- ./result/final_design.gds2
GUI操作手册
运行GUI
编译构建
step 1: 修改可编译选项
切换到iEDA工程目录
# 切换到工程目录 iEDA
cd iEDA
设置顶层 CMakelist.txt 的BUILD_GUI为 ON
# 设置顶层 CMakelist.txt 的BUILD_GUI为 ON
option(BUILD_GUI "If ON, build GUI." ON)
step 2: 编译构建
# 通过apt安装编译依赖,需要root权限
sudo bash build.sh -i apt
# 编译 iEDA
bash build.sh -j 16
step 3: 拷贝副本为 iEDA_gui
# 拷贝 iEDA 到sky130 目录
cp ./bin/iEDA scripts/design/sky130_gcd/iEDA_gui
配置设计文件
修改脚本 ./script/iGUI_script/run_iGUI.tcl 的输入设计 def 为查看的设计文件, 比如修改为 ./result/iFP_result.def
#===========================================================
## read def
#===========================================================
def_init -path ./result/iFP_result.def
运行GUI
执行iEDA GUI脚本
./iEDA_gui -script ./script/iGUI_script/run_iGUI.tcl
可视化
下图为读取 ./result/iFP_result.def 设计文件的可视化结果