3. 版图数据准备与GDS/OASIS处理
物理验证的输入并不是“版图”这个概念本身,而是从版图编辑器或版图数据库导出的版图交换文件。Calibre、PVS、ICV 等验证工具并不直接读取 Virtuoso 的 OpenAccess 数据库,而是读取 GDSII 或 OASIS 这类平面化交换格式。因此,签核流程的第一步不是跑 DRC,而是把数据“喂对”。大量所谓“工具误报”,追根溯源其实是数据准备阶段的问题:层次被展平、文本层丢失、cell 名被截断、坐标被取整、OASIS 压缩选项不兼容等。
GDSII 与 OASIS 的差异与选择
GDSII 是 1978 年定型的格式,结构简单、兼容性最好,但有两个硬伤:一是单个文件不能超过 4 GB(受记录长度与坐标 32 位限制),二是 cell 名最长 32 字符。先进工艺的全芯片版图动辄几十 GB,GDSII 往往需要切分。OASIS 是 2004 年推出的替代格式,支持 64 位坐标、任意长度 cell 名、内置压缩与重复结构引用,文件通常比 GDSII 小 5~20 倍,且支持增量读取。
选择原则很直接:成熟工艺、与第三方 IP 交换、需要给封装/测试环节时,优先 GDSII 保证兼容;先进节点全芯片、内部流转、需要控制文件体积时用 OASIS。但要注意,OASIS 的 CBLOCK 压缩、REPETITION 重复结构和 XYABSOLUTE/XYRELATIVE 模式如果与验证工具的读入设置不匹配,会出现图形错位或漏读,这是 OASIS 最典型的坑。
读入与层次化处理
Calibre 读入版图的核心命令是 LAYOUT PATH 与 LAYOUT PRIMARY、LAYOUT SYSTEM。一个典型的 DRC 运行集开头如下:
LAYOUT PATH "chip_top.oas"
LAYOUT PRIMARY "chip_top"
LAYOUT SYSTEM OASIS
DRC RESULTS DATABASE "drc_results.gds" GDSII
DRC MAXIMUM RESULTS ALL
DRC SUMMARY REPORT "drc.summary" REPLACE
这里 LAYOUT PRIMARY 指定顶层 cell,工具从它开始向下遍历层次。层次化处理的关键在于:验证工具默认保留层次,对每个 cell 只检查一次,再通过层次引用复用结果,这是全芯片 DRC 能在数小时内完成的原因。如果误用了展平选项(如 Calibre 的 FLATTEN 或某些流程中的 -flatten),全芯片会被展开成上亿个多边形,内存暴涨且运行时间成倍增加。
但层次化也有代价:跨层次的图形关系(如 A cell 中的金属与 B cell 中的通孔)在层次化检查中需要工具自动做层次提升(hierarchy promotion)。如果某个 cell 被 DONT_TOUCH 或 BLACKBOX 处理,其内部图形不参与检查,跨层次规则就可能漏检。因此,对标准单元、SRAM、IP 宏,要明确哪些是黑盒、哪些需要展开检查。
文本标注与 cell name 映射
文本标注(text label)在版图中通常放在 text 层,用于标注 pin 名、net 名、器件名。LVS 依赖这些文本做 net 对应,如果导出时把文本层过滤掉,LVS 会报大量“net 不匹配”。导出时必须在 layermap 中显式保留文本层,例如:
# layer_name layer datatype purpose
text 131 0 label
MET1 31 0 drawing
MET1_pin 31 1 pin
cell name 映射是另一个高频问题。GDSII 限制 32 字符,Virtuoso 中形如 INV_X2_5V_DRIVE_STRENGTH_HIGH 的 cell 名会被截断成 INV_X2_5V_DRIVE_STRENGTH_HIG,导致两个不同 cell 截断后重名,工具读入时发生覆盖。解决办法是在导出前用 strmout 的 -map 选项做名称映射,或改用 OASIS 避免长度限制。若必须用 GDSII,应建立一份 cell name 映射表,把长名映射为短名并保证唯一性。
数据完整性检查清单
在正式跑 DRC/LVS 之前,建议先做一轮轻量级数据检查,避免把数据问题误判为设计违规。以下检查项可直接用于流程脚本:
| 检查项 | 检查方法 | 常见问题 |
|---|---|---|
| 顶层 cell 存在性 | 读入后查询 top cell 名 | PRIMARY 名拼写错误,工具报空版图 |
| 层号/数据类型 | 对比 layermap 与工艺文件 | 层号偏移,图形落到错误层 |
| 文本层保留 | 统计 text 层图形数量 | 文本被过滤,LVS net 不匹配 |
| cell 引用完整性 | 检查是否有未定义引用 | 缺失 cell,工具报 unresolved reference |
| 坐标范围 | 统计 bbox 与预期 die 尺寸对比 | 坐标取整或单位错误,版图偏移 |
| OASIS 压缩兼容性 | 用工具读入并对比图形数 | CBLOCK 不兼容,图形漏读 |
calibre -drc -hier 做一次仅统计图形数量的快速运行,确认读入的 polygon 数与版图数据库中的统计值一致,再跑完整规则。这一步通常只需几分钟,却能提前暴露大部分数据问题。
避免数据问题导致误报
误报的典型来源有三类。第一类是层映射错误:工艺文件要求 MET1 在 31/0,但导出时映射到了 31/1,工具在 31/0 上找不到图形,报“missing layer”或大量 spacing 违规。第二类是文本丢失:LVS 中 device 的 terminal 无法通过文本识别,报“unmatched net”。第三类是层次化黑盒设置不当:把需要检查的 IP 设成黑盒,跨层次规则漏检,反而在后续 signoff 阶段才暴露。
处理原则是:先确认数据,再怀疑规则。每次更换工艺节点、更换导出脚本、更换验证工具版本后,都应重新跑一遍数据完整性检查。把数据检查做成流程中的固定步骤,而不是出问题后的补救措施,才能真正减少“工具误报”带来的无效迭代。