在集成电路设计的物理版图交换领域,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 的层-目的对组合,存在以下问题:

  1. 数量不匹配: DFII 的 65,025 种组合 » GDSII 的 4,096 种组合
  2. 语义差异: GDSII 只有编号,无法直接表达 DFII 的语义(如 “pin”, “net”)
  3. 不必要的数据: 某些 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(导出)时

  1. DFII 读取技术文件中的 streamLayers 规则
  2. 只有在规则中定义的层-目的对才会被导出
  3. 按照映射关系转换为 GDSII 的层编号和数据类型编号

Stream In(导入)时

  1. GDSII 文件中的层编号和数据类型编号被读取
  2. 根据 streamLayers 规则反向查找对应的 DFII 层-目的对
  3. 创建相应的 DFII 几何图形

5. 实际应用场景

5.1 版图数据导出 (Stream Out)

场景: 将 Virtuoso 设计提交给晶圆厂进行流片。

1
2
# 在 Virtuoso CIW 中执行
file > Export > Stream...

流程

  1. 选择库 (Library)、单元 (Cell) 和视图 (View)
  2. 系统读取技术文件中的 Stream Layer Rules
  3. 将 DFII 版图转换为 GDSII 文件
  4. 只有在规则中定义的层-目的对被导出
  5. marker、grid 等辅助层被自动过滤

生成文件: design.gdsdesign.gdsii

5.2 版图数据导入 (Stream In)

场景: 从其他 EDA 工具或 IP 供应商导入 GDSII 版图。

1
2
# 在 Virtuoso CIW 中执行
file > Import > Stream...

流程

  1. 选择 GDSII 文件
  2. 系统读取 Stream Layer Rules
  3. 将 GDSII 层-数据类型映射到 DFII 层-目的对
  4. 在 DFII 数据库中创建相应的版图数据
  5. 未在规则中定义的 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 的桥梁:

  1. 精确控制: 定义哪些数据被导出/导入
  2. 语义转换: 将 DFII 的丰富语义转换为 GDSII 的编号系统
  3. 数据过滤: 自动过滤不必要的辅助层
  4. 工艺兼容: 确保与代工厂的层定义一致

8.3 最佳实践建议

  1. 始终基于代工厂规范配置 Stream Layer Rules
  2. 保持映射的唯一性,避免冲突
  3. 充分文档化映射关系和更新历史
  4. 定期验证 Stream Out/In 的正确性
  5. 版本控制技术文件,追踪映射变更

通过正确理解和配置 DFII 与 GDSII 的映射关系,可以确保版图数据在不同工具和流程之间的无缝传递,这对于成功完成芯片设计和流片至关重要。


参考资料

  • Cadence Virtuoso Technology File Manual
  • GDSII Stream Format Manual
  • Cadence Streamout/Streamin User Guide