2. 版图数据准备与GDS/OASIS处理

签核工具(Quantus、Pegasus、PVS、Voltus、Tempus 等)并不直接读取 Innovus 的物理设计数据库,而是消费标准版图交换格式。因此,从 Encounter/Innovus 到签核工具之间,存在一条必须被显式管理的“数据准备链”:导出什么格式、保留多少层次、标签如何携带、器件如何被识别、填充与 dummy 如何处理、多份数据如何合并与压缩。这一节围绕这条链展开,重点讲清楚每一步的输入、操作与判据。

一、导出格式的选择:GDSII 还是 OASIS

Innovus 通过 streamOut 命令导出流片数据。GDSII 是事实标准,兼容性最好,但文件体积大、层次记录冗余;OASIS 采用压缩记录与重复结构引用,同一设计通常可缩小到 GDSII 的 1/5~1/20,且支持 64 位坐标与更大的 cell 数量,适合大规模 SoC 的签核流转。选择原则是:下游工具与 foundry 明确接受 OASIS 时优先用 OASIS;需要与第三方 IP 或旧流程交换时退回 GDSII。两者可通过 Cadence 的 strmout/strmin 或 gds2oasis/oasis2gds 互转,但每次转换都要核对层次与标签是否完整。

一个典型的导出命令如下,注意 -mapFile 决定 layer/datatype 映射,-outputMacros 决定宏单元是否单独成文件:

streamOut ./out/chip.gds \
  -mapFile ./tech/lef2gds.map \
  -libName chip_top \
  -structureName chip_top \
  -merge { ./macro/*.gds } \
  -uniquifyCellNames \
  -outputMacros \
  -mode ALL

其中 -merge 把宏单元、IP、IO 的 GDS 合并进顶层;-uniquifyCellNames 避免不同来源的同名 cell 冲突;-mode ALL 表示导出全部层次。若只导出顶层展平结果,可用 -flatten,但会丢失层次信息,签核阶段一般不推荐。

二、层次化结构与文本标签

签核工具需要层次信息来做 LVS 比对、寄生提取的层次化复用以及 ECO 定位。导出时应保持与设计一致的层次树,避免过早展平。文本标签(TEXT)是连接版图与网表的关键:pin 标签、net 标签、device 标签必须落在正确的 layer/datatype 上,否则 LVS 会报“未识别端口”或“器件无对应”。常见做法是在 map 文件中把 MET1/TEXT、MET1/PIN、POLY/TEXT 分别映射到 foundry 规定的层号,并在 Innovus 中用 addText 或 editPin 生成标签。

标签的坐标参照系必须统一:通常以版图原点 (0,0) 为基准,标签锚点落在 pin 形状中心或指定边上。若导出时发生坐标平移或镜像,标签会整体偏移,导致 LVS 端口错位。因此导出后应做一次“标签层可视化检查”,确认标签与 pin 图形重合。

三、器件识别层与金属填充/dummy

器件识别层(device recognition layer,如 OD、POLY、NWELL、RPO 等)是 LVS 与寄生提取判断器件类型和边界的依据。导出时必须保证这些层完整、无缺失,且与 foundry 的 layer map 一致。若某些识别层在 Innovus 中由 addFiller 或 addWellTap 生成,需确认它们已被写入 GDS。

金属填充(metal fill)和 dummy 图形用于满足 CMP 密度要求,但它们会显著增加寄生电容,影响签核精度。处理策略分两种:签核前保留填充并让提取工具识别填充层(Quantus 支持 fill 层建模),或签核前临时删除填充、签核后再加回。前者更真实,后者更快。无论哪种,都要在导出时用 -skipFill 或 layer 过滤明确控制,避免填充层被误当作信号层参与提取。

从 Innovus 到签核工具的版图数据准备链 Innovus 物理数据库 • 层次化 cell 树 • 标准单元 / 宏 / IO • pin / net / text 标签 • 器件识别层 • metal fill / dummy • LEF / tech map streamOut 导出与格式处理 • GDSII / OASIS 选择 • layer/datatype 映射 • merge 宏 / IP / IO • uniquifyCellNames • 层次压缩 / 展平控制 • fill / dummy 过滤 strmin 签核工具 • Quantus 寄生提取 • Pegasus / PVS DRC • Voltus 功耗 • Tempus 时序 • LVS / ERC • 版图与网表比对 数据准备关键检查点 层次与标签 层次树与设计一致 pin/net/device 标签 落在正确 layer/datatype 坐标原点统一 标签与 pin 图形重合 器件识别层 OD/POLY/NWELL 完整 与 foundry map 一致 filler/welltap 已写入 LVS 器件边界正确 无缺失识别层 填充与 dummy fill 层单独映射 提取时识别或跳过 避免误作信号层 密度满足 CMP 要求 签核前后策略一致 合并与压缩 多源 GDS 合并 cell 名唯一化 OASIS 压缩比检查 层次复用率评估 转换后回读验证

四、数据合并、层次化压缩与格式转换实战

实际项目中,顶层 GDS 往往由多个来源拼合:数字 P&R 结果、模拟 IP、SRAM、IO ring、PLL 等。合并时最容易出问题的是 cell 名冲突和 layer 映射不一致。推荐流程是:先对每个来源单独做 strmin 回读检查,确认 layer 与标签正确;再用 streamOut -merge 或独立的 merge 工具合并;合并后用 strmin 回读顶层,统计 cell 数量与层次深度,确认没有意外展平或重复。

层次化压缩(hierarchical compression)用于减小文件体积并加速签核。OASIS 的 CBLOCK、PLACEMENT 重复引用、XYRELATIVE 等机制可显著压缩。Cadence 的 gds2oasis 支持 -compression 级别设置,级别越高压缩越强但转换时间越长。压缩后必须回读验证:用 oasis2gds 转回 GDS,再与原始 GDS 做 XOR 比对,确认图形完全一致。若 XOR 结果非空,说明压缩过程中丢失或改变了图形,必须回退。

实战建议:每次导出后固定做三件事——① 用 strmin 回读并统计 cell 数与层次深度;② 可视化检查标签层与器件识别层;③ 对 OASIS 做一次 GDS 回读 XOR 比对。这三步能把绝大多数数据准备问题挡在签核之前。
常见陷阱:① map 文件中 layer/datatype 写错,导致标签落到错误层,LVS 报“端口未识别”;② 合并时未做 cell 名唯一化,同名 cell 被覆盖,版图图形丢失;③ 导出时误用 -flatten,层次信息丢失,寄生提取无法复用;④ fill 层未单独映射,被提取工具当作信号层,寄生电容偏大。

最后,格式转换不是单向的。签核工具可能输出 OASIS 格式的修复结果,需要再转回 GDS 给 P&R 工具做 ECO。因此建议在项目目录中保留一份“黄金 GDS”作为基准,所有转换都从它出发,并在每次转换后做回读比对。这样即使中间环节出错,也能快速定位是导出、合并还是压缩阶段引入的问题。