Virtuoso中常见文件解析

本文始于2025年4月,主要介绍版图设计中涉及到的一些常见文件,并对各个文件进行讲解。要说的是,在这些文件中,有些文件会有较详细说明,有些只是做基础介绍。文章旨在让读者知道每个文件的基本含义和用途。

该主题将分4篇文章来讲解(每周一上午7点更新),具体分类和要介绍的文件,可以参考如下目录。


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 允许多种单元名匹配方式,包括:

  1. 一对一映射(one-to-one correspondence)
    • 布局单元和原理图单元名称一致。
    • 适用于大部分常见情况。
  2. 一对多映射(one-to-two correspondence)
    • 一个布局单元可以对应多个原理图单元。
    • 适用于原理图设计中存在不同版本的同一个单元,而布局只使用一个单元的情况。
  3. 多对一映射(two-to-one correspondence)
    • 多个布局单元映射到同一个原理图单元。
    • 适用于优化布局或模块复用的情况。
  4. 通配符匹配(many-to-one correspondence)
    • 允许使用 "*" 进行通配符匹配,以支持多个相似单元的自动映射。
    • 适用于标准单元库或命名规则较为一致的情况。

📋 示例解析

HCELL alu alu
HCELL buf buffer
  • alu 在布局中对应 alubuf 在布局中对应 buffer
  • 这属于 一对一映射,即每个布局单元与一个原理图单元完全匹配。
HCELL cellA cellB
HCELL cellA cellC
  • cellA 在布局中可以匹配 cellBcellC
  • 这是 一对多映射,意味着 LVS 允许 cellA 既可以与 cellB 也可以与 cellC 进行匹配。
HCELL cellD cellF
HCELL cellE cellF
  • cellDcellE 在布局中都映射到 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 中,以便在终端输入 virtuosoicfb 等命令时能正确启动。

(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 / .bashrcShell 脚本设置 CDSHOMEMMSIMHOMEPATHLD_LIBRARY_PATH登录或打开新 shell 时
.cdsenv配置文件UI 参数、默认路径、默认单元名、网表类型设置等Cadence 工具启动时优先读取
.cdsinitSkill 脚本加载菜单、函数定义、调试信息、加载 PDK 环境等启动 Virtuoso GUI 时
libInit.ilSkill 脚本加载特定库环境、网表、仿真模式、技术库关联打开该库时
.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,其他以此类推。

字段解释

字段名示例值含义
LayerNamemetal1在技术库中定义的层名称
LayerPurposedrawing层的用途(例如:drawing、pin、label、boundary)
Stream62GDSII 文件中的层号(layer number)
Datatype20GDSII 文件中的数据类型(datatype)

🔔 注意事项

  1. 一一映射非常重要:若未定义映射,导入/导出的图层可能会丢失或错误显示。
  2. 不同 PDK 使用不同 layermap:不同工艺节点(如 TSMC 180nm vs 28nm)定义不同。
  3. 配合 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-

发表评论