IC设计基石:详解create_die_area与create_core_area命令的用法与陷阱
文章目录
- 一、引言
- 二、核心概念认知:Die Area 与 Core Area
- 2.1 Die Area(芯片物理总面积)
- 2.2 Core Area(核心逻辑区)
- 2.3 两者的空间关系
- 三、EDA工具基础环境准备
- 3.1 硬件与系统环境要求
- 3.2 工作目录创建与初始化
- 步骤1:创建专属工作目录
- 步骤2:启动EDA工具
- 3.3 工艺库与单元库加载
- 完整库加载脚本:`script/init_lib.tcl`
- 执行库加载脚本
- 四、create_die_area 命令详解与零基础实操
- 4.1 命令通用语法(Innovus/ICC2)
- 基础语法(矩形Die Area,99%的场景使用)
- 完整参数语法(含可选参数)
- 异形芯片语法(多边形Die Area)
- 4.2 命令参数核心解读
- 4.3 矩形Die Area 零基础实操步骤
- 步骤1:编写Die Area定义脚本
- 步骤2:在EDA工具中执行脚本
- 步骤3:验证定义结果
- 4.4 异形Die Area 实操(拓展)
- 五、create_core_area 命令详解与零基础实操
- 5.1 命令通用语法(Innovus/ICC2)
- 基础语法
- 完整参数语法(项目实际使用版本)
- ICC2专属扩展参数
- 5.2 命令参数核心解读
- 必选参数
- 可选参数
- 5.3 Core Area 零基础实操步骤
- 步骤1:确认关键参数
- 步骤2:编写Core Area定义脚本
- 步骤3:在EDA工具中执行脚本
- 步骤4:验证定义结果
- 5.4 Core Area 的修改与删除
- 六、Die Area & Core Area 定义的完整流程(Mermaid流程图)
- 七、命令使用的高频陷阱与避坑方案
- 7.1 陷阱1:坐标体系混乱,对角坐标写反
- 错误表现
- 工具报错
- 避坑方案
- 正确代码
- 7.2 陷阱2:单位不统一,Die/Core Area单位不一致
- 错误表现
- 工具报错
- 避坑方案
- 7.3 陷阱3:Core Area坐标溢出Die Area范围
- 错误表现
- 工具报错
- 避坑方案
- 7.4 陷阱4:未指定`-core_site`参数,或site名称错误
- 错误表现
- 工具报错
- 避坑方案
- 7.5 陷阱5:多次定义区域,未删除旧区域
- 错误表现
- 工具报错
- 避坑方案
- 7.6 陷阱6:`halo`参数设置不合理,导致布线拥塞/空间浪费
- 错误表现
- 工具报错
- 避坑方案
- 7.7 陷阱7:异形芯片用`-coordinate`代替`-polygon`
- 错误表现
- 工具报错
- 避坑方案
- 八、综合落地案例:可直接运行的完整脚本
- 8.1 完整落地脚本:`script/area_def_complete.tcl`
- 8.2 脚本执行与结果
- 九、区域定义对后续物理设计的关联影响
- 十、总结
一、引言
在IC物理设计流程中,Die Area(芯片物理总面积)和Core Area(核心逻辑区)是所有物理设计操作的基础前提,其定义的准确性直接决定了后续布局布线、时钟树综合、物理验证等步骤的可行性。create_die_area和create_core_area是Cadence Innovus、Synopsys ICC/ICC2等主流EDA物理设计工具中用于定义这两个核心区域的专属命令,也是IC物理设计零基础入门者必须掌握的首个核心命令集。
本文将从基础概念入手,结合EDA工具的实际操作环境,详细讲解两个命令的语法、参数、零基础可落地的实操步骤,同时梳理实际项目中高频出现的命令使用陷阱及对应的避坑方案,所有代码示例均为可直接复制运行的完整版本,配套验证命令和结果解读,确保小白能按照步骤完成实际操作,无任何简化或省略。
二、核心概念认知:Die Area 与 Core Area
在使用命令前,必须先明确两个区域的物理意义和空间关系,避免因概念混淆导致命令使用错误。
2.1 Die Area(芯片物理总面积)
Die Area是芯片在晶圆上的实际物理尺寸范围,是芯片的物理边界,包含核心逻辑电路区、IO环、焊盘(Pad)、划片槽、封装绑定区等所有物理区域。其尺寸由晶圆工艺节点、芯片封装规格、产品需求共同决定,是芯片设计中不可随意修改的硬性指标,单位通常为微米(micron/um)。
2.2 Core Area(核心逻辑区)
Core Area是嵌套在Die Area内部的核心电路放置区域,仅用于放置标准单元、宏单元(Macro)、寄存器、RAM/ROM等核心逻辑器件,排除了IO环、焊盘、划片槽等非逻辑区域。Core Area的尺寸由Die Area尺寸和IO环宽度决定,其大小直接影响物理设计中可利用的布线资源、单元放置空间,是后续布局布线阶段资源规划的核心依据。
2.3 两者的空间关系
Core Area是Die Area的子集,二者为嵌套关系:
- Die Area为最外层矩形(异形芯片为多边形),左下角为物理设计坐标体系的原点
(0,0),x轴水平向右,y轴垂直向上; - Die Area内部外围为IO环和预留物理间距,中间的矩形区域为Core Area;
- Core Area的所有坐标点必须在Die Area的坐标范围内,无重叠、无溢出。
三、EDA工具基础环境准备
本文所有操作均基于Cadence Innovus 19.1和Synopsys ICC2 2023.03,两个工具的create_die_area和create_core_area命令语法95%以上通用,少量参数差异会单独标注。以下步骤为零基础专属的环境初始化流程,包含工具启动、工作目录创建、库文件加载等全流程,是命令执行的前提。
3.1 硬件与系统环境要求
- 操作系统:Linux CentOS7/CentOS8/Ubuntu 18.04+(EDA工具仅支持Linux系统);
- 硬件:至少16G内存(32G及以上更佳),多核CPU(8核及以上),预留至少10G磁盘空间;
- 环境变量:已配置EDA工具的环境变量(由公司IT或工艺厂商提供,配置后可在终端直接调用工具命令)。
3.2 工作目录创建与初始化
步骤1:创建专属工作目录
在Linux终端执行以下命令,创建分层的工作目录,避免文件混乱,小白直接复制运行即可:
# 创建根目录和子目录
mkdir -p IC_Physical_Design/Area_Def/script IC_Physical_Design/Area_Def/log
# 进入工作目录
cd IC_Physical_Design/Area_Def
# 创建空的脚本文件和日志文件
touch script/init_lib.tcl script/area_def.tcl log/run.log
步骤2:启动EDA工具
本文以Cadence Innovus为例,终端执行以下命令启动64位工具,后台运行并输出日志:
# 启动Innovus,日志重定向到log文件
innovus -64 > log/innovus_start.log 2>&1 &
# 查看工具启动进程,确认是否启动成功
ps -ef | grep innovus
若启动Synopsys ICC2,替换为以下命令:
icc2_shell -64 > log/icc2_start.log 2>&1 &
ps -ef | grep icc2_shell
工具启动后会弹出图形化界面(GUI),后续所有命令可在GUI的Console窗口执行,也可通过source命令执行脚本文件。
3.3 工艺库与单元库加载
create_die_area和create_core_area命令的执行依赖工艺库、单元库、IO库的加载,库文件由晶圆代工厂(如台积电、中芯国际)提供,包含.db(时序库)、.tf(技术文件)、.lef(版图交换文件)等格式。以下为通用的库加载脚本,小白只需替换库文件的实际路径即可。
完整库加载脚本:script/init_lib.tcl
# ==============================================
# 库加载脚本:init_lib.tcl
# 适用工具:Innovus/ICC2
# 功能:加载工艺库、单元库、IO库、技术文件
# ==============================================
# 1. 设置库文件根路径(小白替换为自己的库文件实际路径)
set lib_root "/home/ic_design/lib/180nm"
# 2. 加载技术文件(TF文件,定义工艺的金属层、布线规则)
read_tf $lib_root/tech/180nm.tf
# 3. 加载LEF文件(版图交换文件,定义单元、IO、金属层的物理信息)
read_lef $lib_root/lef/tech.lef
read_lef $lib_root/lef/core_cell.lef
read_lef $lib_root/lef/io_cell.lef
# 4. 加载DB文件(时序库,定义单元的时序特性)
read_db $lib_root/db/core_cell.db
read_db $lib_root/db/io_cell.db
# 5. 设置默认单位(统一为微米,避免单位混乱)
set unit micron
# 6. 验证库加载结果
puts "==================== 库加载验证 ===================="
list_libs ;# 查看已加载的库名称
list_sites ;# 查看工艺库中定义的布线site(后续Core Area会用到)
puts "====================================================="
执行库加载脚本
在EDA工具的Console窗口执行以下命令,加载库文件并查看验证结果:
# 执行库加载脚本
source script/init_lib.tcl
若脚本执行无报错,Console窗口会输出已加载的库名称和布线site名称,说明库加载成功;若报错,需检查库文件路径和文件完整性(由工艺厂商确认)。
四、create_die_area 命令详解与零基础实操
create_die_area是定义芯片物理总面积的核心命令,无默认值,必须手动定义,工具不会自动生成Die Area。该命令的核心是指定区域的坐标范围,支持矩形和多边形(异形芯片)两种定义方式,以下为全参数详解和实操步骤。
4.1 命令通用语法(Innovus/ICC2)
基础语法(矩形Die Area,99%的场景使用)
create_die_area -coordinate {x1 y1 x2 y2}
完整参数语法(含可选参数)
create_die_area
-name # 可选:自定义Die Area名称,方便后续调用
-units # 可选:指定单位,micron/um/nm/mil,默认micron
-coordinate {x1 y1 x2 y2} # 必选:矩形对角坐标,左下角(x1,y1),右上角(x2,y2)
异形芯片语法(多边形Die Area)
create_die_area
-name
-units
-polygon {x1 y1 x2 y2 x3 y3 ... xn yn} # 必选:多边形顶点坐标,按顺时针/逆时针排序
4.2 命令参数核心解读
- -coordinate:必选参数,矩形的对角坐标,必须遵循物理设计坐标体系:左下角为
(x1,y1),右上角为(x2,y2),且满足x1 < x2、y1 < y2,否则工具直接报错; - -name:可选参数,自定义名称如
DIE_AREA_MAIN,后续可通过名称调用该区域,多芯片集成场景建议指定; - -units:可选但强烈建议显式指定,避免单位继承混乱,主流工艺均使用
micron(微米); - -polygon:异形芯片专属必选参数,多边形顶点坐标需按顺时针或逆时针连续排序,最后一个顶点无需回到起点,工具会自动闭合多边形。
4.3 矩形Die Area 零基础实操步骤
以180nm工艺为例,工艺厂商指定芯片Die Area为1000um * 800um,坐标范围:左下角(0,0),右上角(1000,800),以下为完整实操步骤。
步骤1:编写Die Area定义脚本
创建script/die_area_def.tcl,内容如下(可直接复制):
# ==============================================
# Die Area定义脚本:die_area_def.tcl
# 工艺要求:1000um * 800um,左下角(0,0),右上角(1000,800)
# ==============================================
# 前置操作:删除旧的Die Area(避免多次定义导致混乱,小白必加)
if {[llength [get_die_area]] > 0} {
delete_die_area [get_die_area]
puts "已删除旧的Die Area"
}
# 定义Die Area,显式指定名称和单位
create_die_area
-name DIE_AREA_MAIN
-units micron
-coordinate {0 0 1000 800}
# 验证Die Area定义结果
puts "==================== Die Area 定义结果 ===================="
report_die_area # 输出Die Area的详细信息
puts "============================================================"
步骤2:在EDA工具中执行脚本
在工具Console窗口执行以下命令:
source script/die_area_def.tcl
步骤3:验证定义结果
执行后Console窗口会输出以下验证结果,核心查看Area(面积)和Bounding Box(边界框)是否与工艺要求一致:
已删除旧的Die Area
==================== Die Area 定义结果 ====================
Die Area: DIE_AREA_MAIN
Units: micron
Bounding Box: (0.000, 0.000) to (1000.000, 800.000)
Area: 800000.000 sq. micron
Perimeter: 3600.000 micron
===========================================================
若输出上述内容,说明Die Area定义成功;若报错,优先检查坐标顺序和库加载是否完成。
4.4 异形Die Area 实操(拓展)
若芯片为异形(如圆形、梯形),使用-polygon参数,以梯形Die Area为例,顶点坐标为(0,0)、(1000,0)、(900,800)、(100,800),脚本如下:
# 删除旧Die Area
delete_die_area [get_die_area]
# 定义梯形Die Area
create_die_area
-name DIE_AREA_TRAPEZOID
-units micron
-polygon {0 0 1000 0 900 800 100 800}
# 验证
report_die_area -polygon
五、create_core_area 命令详解与零基础实操
create_core_area是定义核心逻辑区的命令,其依赖已定义的Die Area,Core Area的所有坐标必须在Die Area范围内。该命令的参数比create_die_area更丰富,包含halo(预留间距)、core_site(布线site)等关键参数,也是实际项目中最容易出错的命令。
5.1 命令通用语法(Innovus/ICC2)
基础语法
create_core_area -coordinate {x1 y1 x2 y2}
完整参数语法(项目实际使用版本)
create_core_area
-name # 可选:自定义Core Area名称
-units # 可选:与Die Area保持一致,建议显式指定
-coordinate {x1 y1 x2 y2} # 必选:Core Area矩形坐标,在Die Area内
-core_site # 必选:绑定工艺库的布线site(核心参数,小白必加)
-halo {hx hy} # 可选:Core Area外围预留间距,水平hx,垂直hy
-exclude {x1 y1 x2 y2} # 可选:排除Core Area内的不可用区域
ICC2专属扩展参数
ICC2中支持对Core Area进行分区定义,新增-region参数,语法如下:
create_core_area
-name CORE_AREA_REGION1
-units micron
-coordinate {50 50 500 750}
-core_site CORE_SITE_180
-region REGION1
5.2 命令参数核心解读
必选参数
- -coordinate:Core Area矩形坐标,左下角
(x1,y1),右上角(x2,y2),必须满足:Die_x1 < Core_x1 < Core_x2 < Die_x2、Die_y1 < Core_y1 < Core_y2 < Die_y2; - -core_site:最核心的必选参数,绑定工艺库中定义的布线site(布线site是物理设计中最小的布线单元,由工艺库定义),无该参数后续布局布线会直接报错,可通过
list_sites命令查看工艺库中的site名称。
可选参数
- -name:自定义名称如
CORE_AREA_MAIN,多区域分区时建议指定; - -units:与Die Area保持一致,优先
micron; - -halo:Core Area外围的预留布线间距,格式为
{hx hy},hx为水平预留,hy为垂直预留,单位与Core Area一致。作用是为单元绕线、宏单元避让提供空间,避免布线拥塞,小规模芯片建议{5 5},中规模{10 10},大规模{20 20}; - -exclude:排除Core Area内的不可用区域,如宏单元RAM/ROM的预留区,格式为排除区域的坐标。
5.3 Core Area 零基础实操步骤
基于4.3中定义的Die Area(0 0 1000 800),工艺厂商指定IO环宽度为50um,因此Core Area的坐标范围为:左下角(50,50),右上角(950,750)(900um*700um);工艺库中布线site名称为CORE_SITE_180,设置水平/垂直预留间距halo {10 10},以下为完整实操步骤。
步骤1:确认关键参数
- Core Area坐标:
(50,50)到(950,750); - 布线site名称:
CORE_SITE_180(通过list_sites命令确认); - halo参数:
{10 10}; - 单位:
micron,与Die Area一致。
步骤2:编写Core Area定义脚本
创建script/core_area_def.tcl,内容如下(可直接复制):
# ==============================================
# Core Area定义脚本:core_area_def.tcl
# 基于Die Area(0 0 1000 800),IO环50um
# Core坐标:(50,50)到(950,750)
# ==============================================
# 前置操作:删除旧的Core Area(小白必加)
if {[llength [get_core_area]] > 0} {
delete_core_area [get_core_area]
puts "已删除旧的Core Area"
}
# 验证Die Area是否已定义(避免无Die Area时定义Core Area)
if {[llength [get_die_area]] == 0} {
error "错误:未定义Die Area,请先执行create_die_area命令"
}
# 定义Core Area,完整参数(项目实际使用版本)
create_core_area
-name CORE_AREA_MAIN
-units micron
-coordinate {50 50 950 750}
-core_site CORE_SITE_180
-halo {10 10}
# 验证Core Area定义结果
puts "==================== Core Area 定义结果 ===================="
report_core_area # 输出Core Area详细信息
report_core_area -check # 检查Core Area是否在Die Area内(核心验证)
puts "============================================================"
步骤3:在EDA工具中执行脚本
在工具Console窗口执行以下命令,需确保已先执行Die Area定义脚本:
source script/core_area_def.tcl
步骤4:验证定义结果
执行后Console窗口会输出以下验证结果,重点查看Bounding Box、Core Site、Halo和Check Result(检查结果),若Check Result为PASS,说明Core Area在Die Area范围内:
已删除旧的Core Area
==================== Core Area 定义结果 ====================
Core Area: CORE_AREA_MAIN
Units: micron
Bounding Box: (50.000, 50.000) to (950.000, 750.000)
Area: 630000.000 sq. micron
Core Site: CORE_SITE_180
Halo: Horizontal 10.000, Vertical 10.000
Check Result: PASS - Core Area is within Die Area
===========================================================
若Check Result为FAIL,需重新计算Core Area坐标,确保其在Die Area范围内。
5.4 Core Area 的修改与删除
实际项目中若需要调整Core Area参数,无需重新启动工具,直接使用modify_core_area和delete_core_area命令即可,小白常用操作代码如下:
# 1. 修改Core Area的halo参数
modify_core_area [get_core_area] -halo {15 15}
# 2. 修改Core Area的坐标
modify_core_area [get_core_area] -coordinate {60 60 940 740}
# 3. 删除Core Area
delete_core_area [get_core_area]
# 4. 验证修改结果
report_core_area
六、Die Area & Core Area 定义的完整流程(Mermaid流程图)
以下为Mermaid流程图,涵盖从环境准备到区域定义验证的全流程,适配Innovus/ICC2工具,流程图样式做圆角、配色优化,字体清晰可辨,可直接在Markdown中渲染。
七、命令使用的高频陷阱与避坑方案
在实际项目中,即使是资深工程师也会在create_die_area和create_core_area命令上出错,零基础小白更是容易踩坑。以下梳理7个高频陷阱,包含错误示例、工具报错信息、核心避坑方案、正确代码,覆盖99%的错误场景。
7.1 陷阱1:坐标体系混乱,对角坐标写反
错误表现
将左下角和右上角坐标写反,如-coordinate {1000 800 0 0},满足x1>x2、y1>y2。
工具报错
ERROR: create_die_area: Coordinate x1 must be less than x2 and y1 must be less than y2
避坑方案
- 牢记物理设计坐标体系:左下角(0,0),x轴右,y轴上;
- 定义前在草稿纸标注坐标,确认
x1、 y1; - 脚本中加入坐标校验逻辑。
正确代码
# 坐标校验逻辑(小白可直接加入脚本)
set x1 0; set y1 0; set x2 1000; set y2 800
if {$x1 >= $x2 || $y1 >= $y2} {
error "坐标错误:x1必须小于x2,y1必须小于y2"
}
create_die_area -coordinate {$x1 $y1 $x2 $y2}
7.2 陷阱2:单位不统一,Die/Core Area单位不一致
错误表现
Die Area用micron,Core Area用nm,如Die Area1000um,Core Area950000nm(实际为950um),但因工具单位解析问题导致尺寸偏差。
工具报错
无直接报错,但后续布局时会出现单元放置溢出,report_placement_overflow显示溢出比例异常。
避坑方案
- 显式指定
-units参数,Die和Core Area均使用micron; - 定义后用
report_area_units验证全局单位; - 脚本开头用
set unit micron设置全局默认单位。
7.3 陷阱3:Core Area坐标溢出Die Area范围
错误表现
Core Area的x2大于Die Area的x2,如Die Area1000,Core Area980(IO环宽度仅20um,工艺要求50um),导致Core Area超出Die Area。
工具报错
ERROR: create_core_area: Core Area bounding box is outside Die Area
避坑方案
- 定义Core Area前计算安全坐标范围:
Core_x1 = Die_x1 + IO环宽度,Core_x2 = Die_x2 - IO环宽度,y轴同理; - 执行
create_core_area后用report_core_area -check验证; - 脚本中加入Die Area范围校验。
7.4 陷阱4:未指定-core_site参数,或site名称错误
错误表现
省略-core_site参数,或site名称拼写错误(如CORE_SITE_180写成CORE_SITE_18)。
工具报错
ERROR: create_core_area: Core site is not specified, please set -core_site
# 或
ERROR: create_core_area: Site 'CORE_SITE_18' is not found in loaded libraries
避坑方案
create_core_area必须显式指定-core_site,无例外;- 用
list_sites命令查看工艺库中的有效site名称,直接复制,避免拼写错误; - 脚本中加入site存在性校验。
7.5 陷阱5:多次定义区域,未删除旧区域
错误表现
重复执行create_die_area/create_core_area,未删除旧区域,导致工具中存在多个Die/Core Area。
工具报错
无直接报错,但后续布局布线时工具随机识别其中一个区域,导致结果混乱,难以排查。
避坑方案
- 定义新区域前,强制删除旧区域,加入
if判断逻辑(如5.3中的脚本); - 用
get_die_area/get_core_area查看当前区域数量,确保仅存在一个。
7.6 陷阱6:halo参数设置不合理,导致布线拥塞/空间浪费
错误表现
小规模芯片设置halo {50 50},导致Core Area可用空间不足;大规模芯片设置halo {2 2},导致布线拥塞。
工具报错
无直接报错,但后续布线阶段report_congestion显示全局拥塞率超过10%,时序优化困难。
避坑方案
- 根据芯片规模设置
halo:小规模(<10万门){5 5},中规模(10万-100万门){10 10},大规模(>100万门){20-50 20-50}; - 若后期出现布线拥塞,用
modify_core_area调整halo参数。
7.7 陷阱7:异形芯片用-coordinate代替-polygon
错误表现
异形芯片(如圆形、梯形)用矩形坐标-coordinate定义Die Area,导致芯片实际物理尺寸与工艺要求不符。
工具报错
无直接报错,但物理验证阶段(DRC)会出现封装匹配错误,芯片无法正常封装。
避坑方案
- 异形芯片必须用
-polygon参数定义Die Area; - 多边形顶点坐标按顺时针/逆时针排序,确保区域闭合;
- 用
report_die_area -polygon验证多边形顶点坐标。
八、综合落地案例:可直接运行的完整脚本
为方便零基础小白直接落地,以下提供包含库加载、Die Area定义、Core Area定义、全验证步骤的完整tcl脚本,适用于180nm工艺,小白只需替换库文件路径和工艺指定的尺寸参数即可直接运行,无任何删减。
8.1 完整落地脚本:script/area_def_complete.tcl
# ==============================================
# IC物理设计Die&Core Area定义完整脚本
# 适用工具:Cadence Innovus/Synopsys ICC2
# 工艺:180nm,可根据实际工艺修改参数
# 功能:库加载+区域定义+全验证+错误处理
# 小白仅需修改:lib_root、die参数、core参数、core_site
# ==============================================
# -------------------------- 第一步:配置全局参数(小白修改此处) --------------------------
set lib_root "/home/ic_design/lib/180nm" # 库文件根路径
set die_param {0 0 1000 800} # Die Area坐标:x1 y1 x2 y2
set core_param {50 50 950 750} # Core Area坐标:x1 y1 x2 y2
set core_site "CORE_SITE_180" # 工艺库布线site名称
set halo_param {10 10} # halo参数:hx hy
set unit "micron" # 单位:micron/nm/mil
# -------------------------- 第二步:库文件加载 --------------------------
puts "==================== 开始加载库文件 ===================="
# 加载技术文件
if {[file exists $lib_root/tech/180nm.tf]} {
read_tf $lib_root/tech/180nm.tf
} else {
error "技术文件不存在:$lib_root/tech/180nm.tf"
}
# 加载LEF文件
foreach lef_file [glob $lib_root/lef/*.lef] {
read_lef $lef_file
puts "已加载LEF文件:$lef_file"
}
# 加载DB文件
foreach db_file [glob $lib_root/db/*.db] {
read_db $db_file
puts "已加载DB文件:$db_file"
}
# 设置全局单位
set unit $unit
puts "全局单位已设置为:$unit"
# 库加载验证
list_libs
list_sites
puts "==================== 库文件加载完成 ====================
"
# -------------------------- 第三步:定义Die Area --------------------------
puts "==================== 开始定义Die Area ===================="
# 删除旧Die Area
if {[llength [get_die_area]] > 0} {
delete_die_area [get_die_area]
puts "已删除旧的Die Area"
}
# 坐标校验
lassign $die_param die_x1 die_y1 die_x2 die_y2
if {$die_x1 >= $die_x2 || $die_y1 >= $die_y2} {
error "Die Area坐标错误:x1=$die_x1, x2=$die_x2, y1=$die_y1, y2=$die_y2"
}
# 定义Die Area
create_die_area
-name DIE_AREA_MAIN
-units $unit
-coordinate $die_param
# 验证Die Area
report_die_area
puts "==================== Die Area定义完成 ====================
"
# -------------------------- 第四步:定义Core Area --------------------------
puts "==================== 开始定义Core Area ===================="
# 删除旧Core Area
if {[llength [get_core_area]] > 0} {
delete_core_area [get_core_area]
puts "已删除旧的Core Area"
}
# 验证Die Area是否存在
if {[llength [get_die_area]] == 0} {
error "未定义Die Area,无法创建Core Area"
}
# 坐标校验
lassign $core_param core_x1 core_y1 core_x2 core_y2
if {$core_x1 >= $core_x2 || $core_y1 >= $core_y2} {
error "Core Area坐标错误:x1=$core_x1, x2=$core_x2, y1=$core_y1, y2=$core_y2"
}
# site存在性校验
if {![lsearch [list_sites] $core_site] >= 0} {
error "Core Site $core_site 不存在,可用site:[list_sites]"
}
# 定义Core Area
create_core_area
-name CORE_AREA_MAIN
-units $unit
-coordinate $core_param
-core_site $core_site
-halo $halo_param
# 验证Core Area
report_core_area
report_core_area -check
puts "==================== Core Area定义完成 ====================
"
# -------------------------- 第五步:最终验证 --------------------------
puts "==================== 最终验证结果 ===================="
puts "Die Area数量:[llength [get_die_area]]"
puts "Core Area数量:[llength [get_core_area]]"
puts "全局单位:[get_unit]"
puts "布线Site:$core_site"
puts "==================== 区域定义全部完成,可进入后续物理设计 ===================="
8.2 脚本执行与结果
在EDA工具Console窗口执行以下命令,直接运行完整脚本:
source script/area_def_complete.tcl
若脚本执行无报错,Console窗口会依次输出库加载、Die Area定义、Core Area定义、最终验证的结果,说明两个区域已成功定义,可直接进入后续的布局(Placement)、**时钟树综合(CTS)**等物理设计步骤。
九、区域定义对后续物理设计的关联影响
create_die_area和create_core_area作为IC物理设计的第一步,其定义的准确性会直接影响后续所有步骤,甚至决定芯片设计的成败,主要关联影响如下:
- 布局阶段:区域定义错误会导致单元放置溢出(
report_placement_overflow报错),无法完成合法布局; - 布线阶段:Core Area过小或
halo参数设置不合理会导致布线拥塞,拥塞率过高会直接导致布线失败; - 时钟树综合:Core Area分区不合理会导致时钟树延迟不均,出现时序违例(
setup/hold violation); - 物理验证:Die Area尺寸错误会导致芯片与封装不匹配,DRC/LVS验证报错,芯片无法流片;
- 芯片成本:Die Area尺寸过大会导致晶圆利用率降低,芯片成本上升;过小会导致时序优化困难,芯片性能下降。
因此,在实际项目中,必须严格按照工艺厂商的要求定义Die Area和Core Area,反复验证,确保无任何错误后再进入后续步骤。
十、总结
create_die_area和create_core_area是IC物理设计中最基础但最核心的命令,其本质是为芯片划定物理边界和逻辑边界。本文从零基础小白的角度出发,完成了从概念认知、环境准备、命令语法、实操步骤到陷阱避坑的全流程讲解,核心要点总结如下:
- 牢记Die Area和Core Area的嵌套关系,Core Area必须在Die Area范围内;
create_die_area的核心是坐标和单位,异形芯片使用-polygon参数;create_core_area的核心是-core_site参数,必须显式指定,且坐标不能溢出;- 定义区域前必须删除旧区域,避免多次定义导致工具识别混乱;
- 所有参数建议显式指定,避免工具默认值导致的错误;
- 定义后必须通过
report_die_area、report_core_area -check等命令验证,确保结果正确。
对于零基础小白,建议按照本文的步骤反复练习,先使用模拟工艺库完成命令的基本操作,再结合实际项目的工艺库进行落地,重点掌握常见陷阱的避坑方案。只有扎实掌握这两个命令,才能为后续的IC物理设计打下坚实的基础。










