3. 设计数据准备与导入

在 Calibre 物理验证流程中,设计数据准备与导入是决定后续 DRC、LVS、PEX 能否顺利执行的第一道关口。版图数据通常以 GDSII 或 OASIS 两种主流格式交付,二者在数据组织方式、压缩能力和层次表达上存在明显差异。理解它们的解析机制,并在此基础上完成层次化结构处理、顶层单元识别与数据完整性检查,是每一位版图与验证工程师必须掌握的基本功。

一、GDSII 与 OASIS 的格式解析差异

GDSII 是自 1970 年代沿用至今的二进制流格式,其结构由一系列“记录(record)”组成,每条记录包含长度、类型和数据。核心结构包括:库(LIBRARY)、单元(STRUCTURE)、边界(BOUNDARY)、路径(PATH)、SREF/AREF 引用、文本(TEXT)以及层号(LAYER)与数据类型(DATATYPE)。GDSII 的坐标以数据库单位(DBU)表示,例如 1 DBU = 0.001 μm,所有几何坐标均为整数,因此精度受 DBU 限制。GDSII 不支持内建压缩,大版图文件体积往往达到数 GB。

OASIS 是较新的格式,采用可变长整数与偏移表(offset table)实现随机访问,支持重复结构(repetition)、压缩存储和更灵活的属性扩展。OASIS 中单元称为 CELL,几何用 PLACEMENT、RECTANGLE、POLYGON、PATH 等记录表达,并可通过 REPETITION 一次性描述阵列。相比 GDSII,OASIS 在相同版图下文件体积通常可缩小 5~20 倍,且支持 32 位甚至更大坐标范围。Calibre 通过 calibre -gds 或 calibre -oasis 读取时,会先解析格式头,再构建内部层次数据库。

二、层次化结构处理与顶层单元识别

版图数据本质上是层次化的:底层单元(cell)被上层单元通过 SREF/AREF 或 PLACEMENT 引用,形成一棵以顶层单元为根的树。Calibre 在导入时会构建单元引用图(cell reference graph),并识别哪些单元被引用、哪些是叶子单元、哪些是顶层单元。顶层单元通常满足“不被任何其他单元引用”的条件,但实际项目中可能存在多个候选顶层,例如一个芯片包含 core、IO ring、pad 等多个并列顶层,或存在未被引用的孤立单元。

识别顶层单元时,常用做法是:先统计每个单元被引用的次数,引用次数为 0 的即为候选顶层;再结合单元名命名规范(如 TOP、CHIP_TOP)或项目约定确认。若存在多个候选顶层,需要与设计方确认真正的顶层,否则 Calibre 可能只验证了部分版图。对于层次化处理,Calibre 支持层次化 DRC/LVS,即在不同层次上分别检查并复用结果,从而避免将整个版图展平(flatten)导致内存爆炸。展平操作虽然能简化几何关系,但会丢失层次信息、显著增加运行时间,因此除非必要,应优先保留层次结构。

GDSII / OASIS 导入与层次化处理流程 版图源文件 .gds / .oas 格式解析 记录/偏移表 → 内部DB 层次引用图构建 SREF / AREF / PLACEMENT 顶层单元识别 引用次数 = 0 层次引用树(示例) TOP(顶层) CORE IO_RING PAD STD_CELL_A STD_CELL_B ESD BOND_PAD ORPHAN_CELL 未被引用 → 警告 完整性检查: ① 顶层唯一性 ② 引用闭环 ③ 层号映射 ④ 坐标范围 ⑤ DBU 一致性 ⑥ 孤立单元 ⑦ 空单元

三、数据完整性检查

导入完成后,必须进行数据完整性检查,常见检查项包括:

  • 顶层唯一性:确认只有一个顶层单元,或与设计方确认多个顶层的处理方式。
  • 引用闭环:检查是否存在循环引用(A 引用 B,B 又引用 A),循环引用会导致 Calibre 报错或无限递归。
  • 层号映射:确认 GDSII/OASIS 中的 layer/datatype 与 Calibre 规则文件中的层定义一致,避免“层丢失”或“层错位”。
  • 坐标范围:检查版图坐标是否超出规则文件或工艺允许的范围,尤其是负坐标或超大坐标。
  • DBU 一致性:确认文件 DBU 与规则文件中的 PRECISION 一致,否则会导致尺寸偏差。
  • 孤立单元与空单元:未被引用的单元或没有任何几何的单元应被识别并确认是否可忽略。

四、常见导入错误排查

实际项目中,导入错误往往集中在以下几类:

错误现象 可能原因 排查方法
Calibre 报 “no top cell found” 所有单元都被引用,或顶层名不符合预期 用 calibre -gds -top 列出候选顶层,检查引用计数
层丢失或层号错位 layer/datatype 映射与规则文件不一致 对比 GDSII 层表与规则文件 LAYER 定义,检查 datatype
尺寸偏差(如 0.001 μm 误差) DBU 与 PRECISION 不一致 检查文件头 DBU 与规则文件 PRECISION,统一为 0.001 μm
循环引用报错 单元引用形成闭环 用层次分析工具输出引用图,定位闭环路径
内存溢出或运行极慢 版图被意外展平,或层次过深 检查是否误用 flatten,保留层次化处理
实用建议:在导入前,先用 calibre -gds -summary 或第三方工具(如 KLayout)快速查看文件结构,确认顶层单元、层数和单元数量。导入后,用 Calibre 的 LAYOUT SYSTEM GDSII 与 LAYOUT PATH 明确指定格式和路径,避免自动识别错误。对于 OASIS 文件,注意 LAYOUT SYSTEM OASIS 的声明,并检查压缩选项是否影响读取。
注意:若版图中存在多个候选顶层,切勿随意指定其中一个,否则未验证的顶层可能隐藏 DRC/LVS 违规。务必与设计方确认顶层定义,并在规则文件中用 LAYOUT TOP CELL 显式指定。

完成上述准备后,设计数据即可进入 Calibre 的规则检查阶段。一个干净、层次清晰、顶层明确的版图数据库,是后续 DRC、LVS、PEX 高效运行的基础。实际项目中,建议将数据准备与导入检查固化为标准操作流程,减少因格式、层次或参数不一致导致的反复调试。