本文始于2025年4月,主要介绍版图设计中涉及到的一些常见文件,并对各个文件进行讲解。要说的是,在这些文件中,有些文件会有较详细说明,有些只是做基础介绍。文章旨在让读者知道每个文件的基本含义和用途。
该主题将分4篇文章来讲解(每周一上午7点更新),具体分类和要介绍的文件,可以参考如下目录。
1. 设计库与单元相关文件
1.1 .cds.lib(库定义文件)
1.2 HCell(层次单元文件)
1.3 XCell文件
2. 仿真与环境配置相关文件
2.3 .cdsinit(脚本配置文件)
2.4 .simrc(仿真配置文件)
2.6 Setup.loc 与 csfLookConfig(CSF机制文件)
2.7 仿真与环境配置相关文件总结
3. 工艺与显示相关文件
3.1 Techfile (技术文件)
3.2 Layermap(层映射文件)
4. 版图相关文件
4.1 LEF(Library Exchange Format—库交换格式文件)
4.2 DEF(Design Exchange Format—设计交换格式文件)
4.3 LEF和DEF对比
4.4 GDSII 文件
4.5 Layout.oa(OpenAccess 版图数据库文件)
5. 参考
1. 设计库与单元相关文件
1.1 .cds.lib(库定义文件)
用途:指定各种设计库(library)的路径,使 Virtuoso 知道库的位置。
语法:
INCLUDE myLibrary /home/user/cadence/test.lib
DEFINE myLibrary /home/user/cadence/myLibrary
DEFINE
语句用于指定库路径,INCLUDE
语句用于引用其他 cds.lib
文件。
🚀 本站和cdslib相关的文章:点这里。
1.2 HCell(层次单元文件)
用途:HCELL 语句用于在 LVS(Layout vs. Schematic)比对时指定布局单元(layout cell) 与 原理图单元(schematic cell) 之间的对应关系。在 LVS 过程中,版图(layout)和原理图(schematic)可能使用了不同的单元名称,因此需要 HCELL 语句明确它们的匹配规则,以便正确识别对应的单元。提高设计的匹配度和calibre的验证效率。
语法:
HCELL layout_name source_name
其中:
layout_name:在布局中的单元名称。
source_name:在schematic中的单元名称。
📌 常见使用规则:
HCELL 允许多种单元名匹配方式,包括:
- 一对一映射(one-to-one correspondence)
- 布局单元和原理图单元名称一致。
- 适用于大部分常见情况。
- 一对多映射(one-to-two correspondence)
- 一个布局单元可以对应多个原理图单元。
- 适用于原理图设计中存在不同版本的同一个单元,而布局只使用一个单元的情况。
- 多对一映射(two-to-one correspondence)
- 多个布局单元映射到同一个原理图单元。
- 适用于优化布局或模块复用的情况。
- 通配符匹配(many-to-one correspondence)
- 允许使用
"*"
进行通配符匹配,以支持多个相似单元的自动映射。 - 适用于标准单元库或命名规则较为一致的情况。
- 允许使用
📋 示例解析:
HCELL alu alu
HCELL buf buffer
alu
在布局中对应alu
,buf
在布局中对应buffer
。- 这属于 一对一映射,即每个布局单元与一个原理图单元完全匹配。
HCELL cellA cellB
HCELL cellA cellC
cellA
在布局中可以匹配cellB
或cellC
。- 这是 一对多映射,意味着 LVS 允许
cellA
既可以与cellB
也可以与cellC
进行匹配。
HCELL cellD cellF
HCELL cellE cellF
cellD
和cellE
在布局中都映射到cellF
。- 这属于 多对一映射,表示多个布局单元可以匹配同一个原理图单元。
HCELL "cellG*" cellJ
HCELL cellH "cellI*"
"cellG*"
代表所有名称以cellG
开头的布局单元,都可以映射到cellJ
。cellH
对应所有名称以cellI
开头的原理图单元。- 这种匹配方式适用于 通配符映射,可简化 HCELL 规则,适用于大规模单元匹配。
✅ 总结:
HCELL 语句它用于定义布局单元和原理图单元之间的映射关系。通过 一对一、一对多、多对一、通配符匹配 等方式,可以灵活适应不同的设计情况,确保 LVS 验证能够正确地进行单元比对,提高设计的匹配度和验证效率。
1.3 XCell文件
用途:用于后防寄生参数提取忽略对应cell内部寄生参数的提取文件。
语法及使用详解:Xcell 列表用于指定特定单元(cell)的提取方式。它可以采用两种格式:
Hcell 格式
layout_name source_name
特定格式
layout_name [source_name]
-C layout_path
-PCDEF [-INTRINSIC]
-P [-GDS file.gds] |
-FILL file.gds cellname
-I [//Comment]
参数解释:
参数 | 说明 |
---|---|
-C layout_path | 用于in-context提取,但在门级提取时会被忽略。具体请参考calibre手册。 |
-PCDEF | 指定该 cell 为 PCell(参数化单元),其内部内容不会被提取,仅提取外部寄生参数。 |
-INTRINSIC | 仅用于 -PCDEF ,表示忽略单元内的设备层寄生效应。 |
-P | 指定该 cell 为 原始单元(Primitive),内容不会被提取。 |
-GDS file.gds | 仅适用于 LEF/DEF 设计,标识该 cell 是 GDS 宏,必须与 -P 结合使用。 |
-FILL file.gds cellname | 仅适用于 LEF/DEF 设计,指定填充金属位于 file.gds 中的 cellname 单元。 |
-I | 该 cell 被视为 理想单元(Ideal Xcell),不会被提取,但会记录到 netlist。 |
语法示例
// layout_name source_name flag
NOR NOR -I // 作为理想单元处理
NAND NAND -P // 作为原始单元处理
NMOS NMOS -PCDEF // 作为 PCell 处理
1.4 Source.add(端口定义文件)
用途:定义调用cell的端口,该文件是一个空器件的端口定义,为满足网表语法要求。如缺少则在抽取netlist时报错。
常见语句方式如下:

2. 仿真与环境配置相关文件
2.1 .cshrc(Shell 启动脚本文件)
2.1.1 .cshrc
文件是 C shell 的启动脚本文件,在使用 Virtuoso 等 EDA 工具时经常会用到它来配置环境。类似于 .bashrc
对于 Bash shell 的作用。
📁 .cshrc
文件通常位于用户目录下(~/.cshrc
),如果文件不存在,你可以手动创建它。
2.1.2 .cshrc
文件常见的作用如下:
(1)设置环境变量(Environment Variables)
- 包括
PATH
,LD_LIBRARY_PATH
,CDS_INST_DIR
,CDS_LIC_FILE
, 等。 - 这些变量让 shell 能找到 Cadence 工具的可执行文件和使用正确的许可证服务器。
(2)设置软件根目录(PATH)
- 将 Virtuoso 安装根目录加入系统
PATH
中,以便在终端输入virtuoso
或icfb
等命令时能正确启动。
(3)别名和快捷命令(alias)
- 可以设置一些命令的别名,比如快速进入某个项目目录,或是简化启动流程。
2.1.3 举例 .cshrc
文件在Virtuoso中的常见用法:
(1)设置环境变量配置
#设置默认env导入路径
setenv CDS_LOAD_ENV CWD
#设置Plette类型
setenv CDS_PALETTE_TYPE SingleWindow
(2)设置工具安装根目录;
#设置IC618安装路径
setenv CDS_HOME /workspace/software/tools/cadence/IC618
#设置Spectre仿真器的安装路径
setenv MMSIMHOME /workspace/software/tools/SPECTRE191/SPECTRE19
(3)设置执行路径命令加入path,确保命令行可以调用这些工具;
set path = ( $path $MMSIMHOME/tools/dfII/bin $MMSIMHOME/tools/spectre/bin )
set path = ( $MMSIMHOME/tools/dfII/bin $path )
📌 “$path” 位置的影响:
“$path” 在前:旧路径优先,不覆盖已有路径工具,路径为补充路径;
“$path” 在后:新路径优先,会覆盖已有路径工具,指定优先版本。
(4)设置license;
setenv CDS_LICENSE_FILE 5280@licenseserver
(5)别名设置
alias virtuoso '$CDS_HOME/bin/virtuoso'
alias spectre '$MMSIM_HOME/tools/bin/spectre'
2.1.4 使.cshrc
文件生效
source ~/.cshrc 或 source /xxx/xxx/xxx/xxx/.cshrc
2.2 .cdsenv(环境变量配置文件)
🚀 参考本站文章:点这里。
2.3 .cdsinit(脚本配置文件)
🚀 参考本站文章:点这里。
2.4 .simrc(仿真配置文件)
📝 .simrc文件是Simulation Run Control 文件。在界面初始化期间,您可以使用 .simrc 文件自定义 Spectre 中的netlist,另外此文件还可帮助您设置或覆盖仿真变量的默认值。且这些更改仅影响users自己的仿真,其他设计人员不会受此文件影响。
📁 此文件是可选文件,可存在或不存在,如果存在则会按以下顺序进行搜索加载;

📌 当按上述路径搜索到第一个.simrc 时,便停止搜索并加载.simrc文件,其他路径中的.simrc将不在被加载。
🚀 本站和 .simrc文件相关的文章,点这里。
2.5 Libinit.il (PDK库初始化文件)
📝 这是pdk库初始化文件,当你启动virtuoso并加载某个pdk工艺库时,libinit.il文件会被自动调用,用于设置与该工艺相关的基础设计环境,它们是连接设计工具(virtuoso)和具体工艺(如 TSMC 40nm、SMIC 28nm 等)的关键桥梁。
libinit.il 可以在pdk中找到,它可以帮你自动加载,库特定配置的cdsenv文件、skill文件、仿真模型文件、显示文件(display)、source.add文件等等。
Libinit.il它有两个类似文件:LibinitCustomEnter.il 与 LibinitCustomExit.il 。在不同的厂家中,有的PDK中只有libinit.il这一个文件,也有的PDK有它们中的两个文件,具体的用法每个厂家实现方式不同,它们更多的是配合关系,但最终都是实现自动化配置。
🚨 注意:
- 这三个文件只在 每个库目录中生效,也就是说每个库可以有自己独立的初始化逻辑。
- 所有这三种文件,不需要用户手动调用,Virtuoso 打开库时会自动执行。
- 如想对这三个文件进行操作,需要有相关PDK库的编辑权限。
- libInit.il 较其他两个文件,经常使用。
2.6 Setup.loc 与 csfLookConfig(CSF机制文件)
🚀 参考本站文章:点这里。
2.7 仿真与环境配置相关文件总结
文件名 | 类型 | 常见内容 | 执行时机 |
---|---|---|---|
.cshrc / .bashrc | Shell 脚本 | 设置 CDSHOME 、MMSIMHOME 、PATH 、LD_LIBRARY_PATH 等 | 登录或打开新 shell 时 |
.cdsenv | 配置文件 | UI 参数、默认路径、默认单元名、网表类型设置等 | Cadence 工具启动时优先读取 |
.cdsinit | Skill 脚本 | 加载菜单、函数定义、调试信息、加载 PDK 环境等 | 启动 Virtuoso GUI 时 |
libInit.il | Skill 脚本 | 加载特定库环境、网表、仿真模式、技术库关联 | 打开该库时 |
.simrc | 配置文件 | 设置 spectre 默认仿真精度、模型路径、输出格式等 | 启动 Virtuoso或运行仿真工具时读取 |
setup.loc | 配置文件 | 设置加载默认配置文件 | 启动 Virtuoso |
csfLookConfig | 配置文件 | 设置加载默认配置文件 | 启动 Virtuoso |
3. 工艺与显示相关文件
3.1 Techfile (技术文件)
techfile
(全称 Technology File)在Virtuoso 中是整个工艺设计环境(PDK)中最核心的配置文件之一,它定义了你的设计库在物理层(layout)和部分电路层(schematic)的技术规则、图层、规则参数等。这个文件通常由 PDK供应商提供。
📁 文件通常位于pdk工艺库目录中;
对techfile文件相关的操作可以在Virtuoso CIW 窗口,Tools—Technology File Manager…对话框中进行操作。
当你想修改techfile中的via或线宽或其他走线规则时,你可以直接编辑techfile并实时加载修改后的techfile。当然你也可以恢复修改之前的techfile和下载techfile里的内容。参考下图所示;

🧾 techfile的主要内容(组成部分):
- layerDefinitions
- layerRules
- viaDefs
- constraintGroups
- devices
- ……
🚀 具体内容解释请参考本站相关文章,点这里。
3.2 Layermap(层映射文件)
在 Virtuoso 中,layermap
文件是一个非常重要的桥梁文件,用于将 Virtuoso 中使用的逻辑层(layer/purpose) 与 GDSII 文件中的物理层编号(layer number / datatype) 进行对应,主要用于版图的导入和导出(GDS-Virtuoso)。
🧾 layermap 文件概述
属性 | 内容说明 |
---|---|
文件格式 | 文本格式(.layermap),每一行一个 layer 映射 |
文件位置 | 通常在 PDK 中(如 tsmc18rf/layermap/ ) |
用途 | 在导入或导出 GDSII 文件时做 layer number 和 Virtuoso layer 名的转换 |
📌 layermap 的作用
📤 GDS Export(Stream Out)时:
- 把 Virtuoso 中的图层(如
M1/drawing
)映射为 GDS 层号和数据类型(如62 20
) - 用于生成 mask 数据给流片厂
📥 GDS Import(Stream In)时:
- 把 GDS 层号 ,映射为对应的 Virtuoso 图层
- 确保导入的 GDS 文件在 Virtuoso 中可以正确显示和编辑
🔧 layermap 文件格式示例
# LayerName LayerPurpose Stream Datatype
metal1 drawing 62 20
metal1 pin 62 21
poly drawing 30 20
nwell drawing 64 44
text label 255 0
第一行的含义为:将 Virtuoso 中的 metal1/drawing
层 ,对应到 GDS 的 Layer 62 / Datatype 20,其他以此类推。
✅ 字段解释
字段名 | 示例值 | 含义 |
---|---|---|
LayerName | metal1 | 在技术库中定义的层名称 |
LayerPurpose | drawing | 层的用途(例如:drawing、pin、label、boundary) |
Stream | 62 | GDSII 文件中的层号(layer number) |
Datatype | 20 | GDSII 文件中的数据类型(datatype) |
🔔 注意事项
- 一一映射非常重要:若未定义映射,导入/导出的图层可能会丢失或错误显示。
- 不同 PDK 使用不同 layermap:不同工艺节点(如 TSMC 180nm vs 28nm)定义不同。
- 配合 techfile 使用:Virtuoso 通过
techfile
定义 layer/purpose,但只有 layermap 才告诉软件如何转化为 GDS 格式。
📤 导出版图(GDSII):
Virtuoso CIW 窗口—File > Export > Stream Out — Layer Map栏中指定 layermap 文件
📥 导入版图(GDSII):
Virtuoso CIW 窗口 —File > Import > Stream In —Layer Map栏中指定 layermap 文件
3.3 display.drf (Layer显示规则文件)
display.drf
是用于定义版图视图中 图层显示风格(颜色、线型、填充等) 的关键文件,直接影响到版图编辑时的视觉效果和可读性。
🧾 display.drf
文件简介
属性 | 内容说明 |
---|---|
文件格式 | 文本格式(Display Resource File) |
常见位置 | 通常位于 PDK 中(如 tsmc180nm/display.drf ),也可用户自定义 |
用途 | 控制 Virtuoso Layer 编辑器 中图层的可视化效果 |
使用方式 | 与 techfile 中定义的图层对应,控制图层显示 |
📌 display.drf
文件中的内容
如下图所示:


💡 【Define Display Packet】部分,通过techfile中【layerDefinitions—techDisplays】的相关内容,控制layer的显示,参考下图:

📌 display.drf 文件的位置
display.drf文件常见可能存在的几个地方:
📁 PDK文件夹中,(如 tsmc180nm/display.drf
);—— 路径1️⃣
此位置的display.drf文件我们称为原始文件,通常由libinit.il文件中的【load library display resource file】部分的语句负责加载;
📁 home目录下(~/display.drf)
,遵循Virtuoso系统加载顺序;—— 路径2️⃣
📁 当前工作目录下(./display.drf)
,遵循Virtuoso系统加载顺序;—— 路径3️⃣
📁 用户可以放在任意位置;—— 路径4️⃣
此位置的display.drf文件通常由.cdsinit文件中的【drLoadDrf(“/xxx/xxx/xxx/display.drf”)】语句负责加载;
🔄 display.drf 文件的加载机制
分两种情况;
📌 第一种情况:没有PDK文件夹的编辑权限;
display.drf文件存在于PDK文件夹中,且被libinit.il文件中的【load library display resource file】语句加载。
根据2.5小节对libinit文件的描述,当打开库时,才触发libinit文件的加载,而其他路径的display文件是在virtuoso的启动时就加载的,要早于libinit文件的加载;所以libinit文件中加载的display文件会覆盖掉其他路径下的display文件,最终读取的是pdk下的display文件。
其他路径的display都被覆盖了,那我们怎么加载其他路径下自定义的display文件呢?
在此情况下,最方便加载自定义display文件的方法是:设定一个快捷键,在打开版图后再加载display file。如下:
hiSetBindKey(“layout” “z” “drLoadDrf(“/xxx/xxx/xxx/display.drf”)”)
💡 建议弄清libinit文件中加载display的具体机制,因不同fab对display加载的设置是不一样的。只要display文件加载的不是PDK目录下的,那么display文件的加载依旧遵循 “第二种情况” 的加载机制。
📌 第二种情况:有PDK文件的编辑权限;
将 PDK 中自带的display文件移动到其他位置或者重新命名为非display.drf的名字,让libinit文件无法自动加载;
再通过Virtuoso的Display Resource Manager…编辑原始display文件,得到自定义的display文件,并放在上述路径2️⃣或路径3️⃣或路径4️⃣中;
此时加载display文件的顺序如下:
先路径2️⃣——再路径3️⃣——最后路径4️⃣
最后加载的display文件会覆盖之前加载的,也就是最后加载的display文件,就是最终的版图显示文件。
💡 路径2️⃣与路径3️⃣下的显示文件,请命名为【display.drf】,不可是其他名称否则无法加载,而路径4️⃣下的显示文件名称,你可以随意命名。
✅ 建议将自定义的display.drf文件放到路径3️⃣中即可,其他路径可以空着,当然也可根据自己习惯灵活设置。
4. 版图相关文件
4.1 LEF(Library Exchange Format—库交换格式文件)
4.2 DEF(Design Exchange Format—设计交换格式文件)
🚀 DEF文件相关定义和语句用法,请参考本站文章,点这里。
📒 Virtuoso中提取DEF文件流程介绍:
典型的场景:模拟版图中已知mipi相关走线(电源与信号)和它们出pin的位置,需要输出一份DEF文件给到数字,使其后端PR可以避开mipi模块内部走线,并在pin处顺滑连接。
1️⃣ 从Create-P&R Objects-P&R Boundary处创建对应boundary,按照要求排放好相关mipi pin的位置和相关电源线位置;如下图:

2️⃣ 从Virtuoso软件CIW(Cadence Interaction Windows)窗口,File-Export-DEF…处,导出相关DEF文件;

3️⃣ 下面是对应示例的DEF文件内容;


4.3 LEF和DEF对比
比较项 | DEF (Design Exchange Format) | LEF (Library Exchange Format) |
---|---|---|
主要用途 | 描述整个芯片实例化后的物理实现信息 | 提供库单元、宏块和工艺层的物理版图特性定义 |
主要内容 | – 宏实例、单元实例(COMPONENTS) – 网络连接(NETS, SPECIALNETS) – I/O 引脚(PINS) – 版图结构(DIEAREA, ROWS, TRACKS) – 布线、过孔、组、约束 | – 标准单元抽象轮廓(MACRO) – 引脚定义(PIN) – 层(LAYER) – VIA规则、SPACING等工艺参数 (通常为“抽象层级”) |
文件结构特点 | 实例化和布局后的“具体信息”也可理解是设计数据库的复制 | 模块化、参数化的,不含具体放置实例 |
LEF 提供设计的信息:你能用什么,以及它长什么样;
DEF 是基于 LEF 的“具体实现”:你用了什么、放哪儿了、怎么连的。
📌 大白话港:LEF 定义 “你能怎么放”;DEF 告诉 “你怎么放了”。
4.4 GDSII 文件
GDSII(也叫 GDS2)文件是一种标准的物理版图交换格式,是整个芯片制造流程中最关键的文件之一。
🧾 GDSII(GDS2)文件概述
项目 | 内容 |
---|---|
文件格式 | 二进制格式(非文本),扩展名通常为 .gds 、.gds2 、.strm |
存储内容 | Cell、Polygon、Layer、Label 等 |
主要用途 | 存储和交换版图数据(layout),是流片前提交给代工厂的标准格式 |
生成方式 | 从 Virtuoso、Innovus、IC Compiler 等工具导出 |
关联文件 | layermap (层号转换)、display.drf (仅用于显示) |
🧰 常见GDS 查看工具推荐
工具 | 说明 |
---|---|
KLayout | 免费、轻量、支持编辑和脚本 |
Calibre VIEW | 与验证工具集成 |
Virtuoso | 可直接导入后查看 |
4.5 Layout.oa(OpenAccess 版图数据库文件)
layout.oa
文件是实际存储你画的版图(layout)的数据文件。它属于 OpenAccess (OA) 数据库架构的一部分。
📁 layout.oa
文件概述
项目 | 内容说明 |
---|---|
文件名 | layout.oa |
所属架构 | OpenAccess(OA)数据库格式 |
所在位置 | 通常位于:<libName>/<cellName>/<viewName>/layout.oa |
文件作用 | 存储当前 cell 的版图视图(Layout View)数据 |
用户操作 | 用户在 Virtuoso 中打开 layout view 其实就是在编辑它 |
当virtuoso异常退出时,在对应的目录下会多出layout.oa-文件,请将原layout.oa文件移动到其他位置,将layout.oa-重命名为layout.oa。即可恢复未保存之前的数据。
类似的文件还有:
sch.oa:存储电路图(schematic)数据。
symbol.oa:存储 symbol 视图,用于图形层次调用。
5. 参考
【1】svrf_ur.pdf
【2】caiuser.pdf
【3】techfileuser.pdf
-END-