在集成电路设计的物理版图交换领域,DFII 和 GDSII 是两个经常被提及但容易混淆的术语。理解这两个概念及其关系,对于实现不同 EDA 工具之间的数据互操作至关重要。本文将详细介绍这两个术语的含义、差异以及它们之间的映射机制。
1. GDSII:行业标准版图格式
1.1 什么是 GDSII
GDSII (Graphic Design Station II) 是集成电路物理版图交换的行业标准格式。它最初由 Calma 公司开发,后来成为整个半导体行业通用的版图数据存储和交换格式。
1.2 GDSII 的数据结构
GDSII 数据库使用简单而高效的编号系统来组织几何图形数据:
核心组成要素:
- Layer Number(层编号): 0 到 63,共 64 层
- Data Type(数据类型编号): 0 到 63,共 64 种数据类型
在 GDSII 中,每一个几何图形都必须关联一个层编号和一个数据类型编号。例如:
- Layer 10, Data Type 0:可能代表 Metal1 层的导线
- Layer 10, Data Type 1:可能代表 Metal1 层的引脚
- Layer 20, Data Type 0:可能代表 Poly 层的多晶硅
最大组合数量:
1
64 layers × 64 data types = 4,096 种可能的层-数据类型组合
1.3 GDSII 的应用场景
GDSII 格式广泛应用于:
- 版图数据交换: 在不同 EDA 工具之间传递设计数据
- 流片 (Tape-out): 将最终版图提交给晶圆厂
- IP 交付: 供应商向客户交付设计 IP 模块
- 存档备份: 长期保存版图设计数据
2. DFII:Cadence 设计框架
2.1 什么是 DFII
DFII (Design Framework II) 是 Cadence 公司的集成设计环境框架,也是 Virtuoso 工具套件的技术基础。DFII 不是一个文件格式,而是一个设计数据库管理系统。
2.2 DFII 的数据模型
与 GDSII 的简单编号系统不同,DFII 使用更加丰富和灵活的数据模型:
核心组成要素:
- Layer Name(层名称): 如 “Metal1”, “Poly”, “Via1” 等
- Purpose(目的): 如 “drawing”, “pin”, “net”, “boundary” 等
- Layer-Purpose Pair(层-目的对): 每个几何图形都关联一个层-目的对
数量限制:
- 最多 255 个层 (layers)
- 最多 255 个目的 (purposes)
- 理论最大组合数:
255 × 255 = 65,025种层-目的对
2.3 Purpose 的典型用途
DFII 中的 Purpose 提供了比 GDSII Data Type 更丰富的语义:
| Purpose | 用途说明 | 是否需要 Stream Out |
|---|---|---|
| drawing | 实际的物理几何图形 | ✅ 是 |
| pin | 引脚位置标记 | ✅ 是 |
| net | 网络连接信息 | ✅ 是(可选) |
| boundary | 单元边界 | ✅ 是 |
| label | 文本标签 | ✅ 是(可选) |
| marker | 设计规则检查标记 | ❌ 否 |
| grid | 网格显示辅助 | ❌ 否 |
| highlight | 高亮显示辅助 | ❌ 否 |
3. DFII 与 GDSII 的对应关系
3.1 核心映射概念
虽然两者都用于描述芯片版图,但它们的数据模型存在本质差异:
| 属性 | DFII | GDSII | 对应关系 |
|---|---|---|---|
| 层标识 | Layer Name (字符串) | Layer Number (0-63) | techLayerNum 映射 |
| 类型标识 | Purpose (字符串) | Data Type (0-63) | techPurpose 映射 |
| 数量限制 | 255 × 255 = 65,025 | 64 × 64 = 4,096 | DFII > GDSII |
| 表达能力 | 丰富的语义 | 简单的编号 | DFII 更灵活 |
关键差异:
1
2
3
DFII: (Layer="Metal1", Purpose="drawing")
↓ Stream Layer Mapping
GDSII: (Layer=10, DataType=0)
3.2 为什么需要映射
由于 DFII 可以拥有远超 GDSII 的层-目的对组合,存在以下问题:
- 数量不匹配: DFII 的 65,025 种组合 » GDSII 的 4,096 种组合
- 语义差异: GDSII 只有编号,无法直接表达 DFII 的语义(如 “pin”, “net”)
- 不必要的数据: 某些 DFII 层-目的对(如 marker、grid)不应被导出
解决方案: 使用 Stream Layer Rules 定义映射关系。
4. Stream Layer Rules:映射机制
4.1 什么是 Stream Layer Rules
Stream Layer Rules 是在 DFII 技术文件 (Technology File) 中定义的一组规则,用于指定:
- 哪些 DFII 层-目的对应该被导出 (stream out)
- 它们应该映射到哪些 GDSII 层-数据类型组合
- 导入 (stream in) 时如何反向映射
4.2 映射规则示例
在 Cadence Virtuoso 的技术文件中,Stream Layer Rules 的定义示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
; 将 Metal1 的 drawing 目的映射到 GDSII Layer 10, DataType 0
streamLayers(
(Metal1 drawing) 10 0
)
; 将 Metal1 的 pin 目的映射到 GDSII Layer 10, DataType 1
streamLayers(
(Metal1 pin) 10 1
)
; 将 Poly 的 drawing 目的映射到 GDSII Layer 20, DataType 0
streamLayers(
(Poly drawing) 20 0
)
; marker 和 grid 等辅助层不定义映射,因此不会被导出
4.3 映射规则的作用
Stream Out(导出)时:
- DFII 读取技术文件中的 streamLayers 规则
- 只有在规则中定义的层-目的对才会被导出
- 按照映射关系转换为 GDSII 的层编号和数据类型编号
Stream In(导入)时:
- GDSII 文件中的层编号和数据类型编号被读取
- 根据 streamLayers 规则反向查找对应的 DFII 层-目的对
- 创建相应的 DFII 几何图形
5. 实际应用场景
5.1 版图数据导出 (Stream Out)
场景: 将 Virtuoso 设计提交给晶圆厂进行流片。
1
2
# 在 Virtuoso CIW 中执行
file > Export > Stream...
流程:
- 选择库 (Library)、单元 (Cell) 和视图 (View)
- 系统读取技术文件中的 Stream Layer Rules
- 将 DFII 版图转换为 GDSII 文件
- 只有在规则中定义的层-目的对被导出
- marker、grid 等辅助层被自动过滤
生成文件: design.gds 或 design.gdsii
5.2 版图数据导入 (Stream In)
场景: 从其他 EDA 工具或 IP 供应商导入 GDSII 版图。
1
2
# 在 Virtuoso CIW 中执行
file > Import > Stream...
流程:
- 选择 GDSII 文件
- 系统读取 Stream Layer Rules
- 将 GDSII 层-数据类型映射到 DFII 层-目的对
- 在 DFII 数据库中创建相应的版图数据
- 未在规则中定义的 GDSII 层可选择性处理(忽略或创建默认映射)
5.3 跨工具协作
场景 1: Cadence Virtuoso ↔ Synopsys Custom Compiler
- 两者都支持 GDSII 格式
- 通过 Stream Layer Rules 确保一致的层映射
场景 2: Cadence Virtuoso ↔ Mentor Calibre
- Calibre 进行 DRC/LVS 验证
- 需要正确的层映射以确保验证规则正确应用
6. 配置 Stream Layer Rules 的最佳实践
6.1 保持一致性
确保 Stream Layer Rules 与工艺厂的 Layer Map 一致:
1
2
3
4
5
6
7
8
9
10
11
; 根据代工厂提供的 layer.map 文件定义
; Foundry Layer Map:
; Metal1 drawing -> GDS 10/0
; Metal1 pin -> GDS 10/1
; Via1 drawing -> GDS 11/0
streamLayers(
(Metal1 drawing) 10 0
(Metal1 pin) 10 1
(Via1 drawing) 11 0
)
6.2 避免映射冲突
不要将多个 DFII 层-目的对映射到同一个 GDSII 层-数据类型:
1
2
3
4
5
6
7
8
9
10
11
; ❌ 错误示例 - 映射冲突
streamLayers(
(Metal1 drawing) 10 0
(Metal2 drawing) 10 0 ; 冲突!同样映射到 10/0
)
; ✅ 正确示例 - 唯一映射
streamLayers(
(Metal1 drawing) 10 0
(Metal2 drawing) 20 0 ; 使用不同的层编号
)
6.3 过滤辅助层
明确哪些层不应该被导出:
1
2
3
4
5
6
; 只定义需要导出的层,未定义的层会被自动过滤
; 以下层通常不需要导出:
; - marker (DRC 标记)
; - grid (网格)
; - highlight (高亮)
; - instance (实例边界)
6.4 文档化映射关系
在技术文件中添加注释说明:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
;==============================================================================
; Stream Layer Mapping Rules
; Based on: XYZ Foundry 28nm Technology (Rev 2.0)
; Last Updated: 2026-01-05
;==============================================================================
; Metal Layers
streamLayers(
(Metal1 drawing) 10 0 ; M1 drawing shapes
(Metal1 pin) 10 1 ; M1 pin labels
(Metal2 drawing) 20 0 ; M2 drawing shapes
(Metal2 pin) 20 1 ; M2 pin labels
)
; Via Layers
streamLayers(
(Via1 drawing) 11 0 ; Via between M1 and M2
(Via2 drawing) 21 0 ; Via between M2 and M3
)
7. 常见问题与解决方案
7.1 Stream Out 后层缺失
问题: 导出 GDSII 后发现某些层缺失。
原因: 该层-目的对未在 Stream Layer Rules 中定义。
解决方案:
1
2
3
4
; 检查技术文件,添加缺失的映射
streamLayers(
(MissingLayer drawing) XX 0 ; 添加映射规则
)
7.2 Stream In 后层名称不正确
问题: 导入 GDSII 后,层名称变成了 “Layer10”, “Layer20” 等默认名称。
原因: Stream Layer Rules 中缺少反向映射。
解决方案: 确保技术文件中的映射规则完整:
1
2
3
4
; 这条规则同时支持 Stream Out 和 Stream In
streamLayers(
(Metal1 drawing) 10 0 ; 双向映射
)
7.3 不同 Purpose 的数据合并
问题: Stream Out 后,同一层的 drawing 和 pin 数据合并到同一个 GDSII 层。
分析:
1
2
3
4
5
; 如果映射到相同的 DataType,数据会合并
streamLayers(
(Metal1 drawing) 10 0
(Metal1 pin) 10 0 ; 与 drawing 相同的 DataType
)
解决方案: 使用不同的 DataType 区分:
1
2
3
4
streamLayers(
(Metal1 drawing) 10 0 ; DataType 0 for drawing
(Metal1 pin) 10 1 ; DataType 1 for pin
)
8. 总结
8.1 关键要点
| 概念 | DFII (Design Framework II) | GDSII (Graphic Design Station II) |
|---|---|---|
| 定义 | Cadence 设计数据库管理系统 | 行业标准版图交换格式 |
| 数据模型 | Layer-Purpose Pair (层-目的对) | Layer-DataType (层-数据类型) |
| 标识方式 | 字符串名称 (如 “Metal1”, “drawing”) | 数字编号 (0-63) |
| 容量 | 255 × 255 = 65,025 种组合 | 64 × 64 = 4,096 种组合 |
| 表达能力 | 丰富的语义和元数据 | 简单的几何数据 |
| 适用范围 | Cadence 内部设计 | 跨工具数据交换 |
8.2 Stream Layer Rules 的重要性
Stream Layer Rules 是连接 DFII 和 GDSII 的桥梁:
- 精确控制: 定义哪些数据被导出/导入
- 语义转换: 将 DFII 的丰富语义转换为 GDSII 的编号系统
- 数据过滤: 自动过滤不必要的辅助层
- 工艺兼容: 确保与代工厂的层定义一致
8.3 最佳实践建议
- 始终基于代工厂规范配置 Stream Layer Rules
- 保持映射的唯一性,避免冲突
- 充分文档化映射关系和更新历史
- 定期验证 Stream Out/In 的正确性
- 版本控制技术文件,追踪映射变更
通过正确理解和配置 DFII 与 GDSII 的映射关系,可以确保版图数据在不同工具和流程之间的无缝传递,这对于成功完成芯片设计和流片至关重要。
参考资料
- Cadence Virtuoso Technology File Manual
- GDSII Stream Format Manual
- Cadence Streamout/Streamin User Guide