ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

版图验证核心:Calibre DRC与LVS从规则到排错实战

版图验证核心:Calibre DRC与LVS从规则到排错实战 简介Calibre DRC和LVS验证总结材料面向IC后端设计工程师与版图验证初学者系统梳理Mentor Calibre工具在物理验证中的核心应用。内容涵盖DRC/LVS/ERC三类检查的验证流程、Runset文件结构划分、常用SVRF命令含义并附有简单Rule File示例帮助读者理解从数据准备、规则编写到RVE定位错误、修改版图的完整链路同时介绍了Calibre支持平坦化与层次化验证、以及被各大Foundry认证等特点。资源以PDF格式打包共1个文件大小704KB便携易读适合作为日常查阅的速查手册。目前已有10463人学习下载获开发者社区认可。通过这份总结读者可快速掌握Calibre DRC的规则检查要点与LVS连接性验证思路减少Tape Out前物理验证的排错盲区。1. 为什么版图验证绕不开 Calibre 的 DRC 和 LVS版图画完真正决定它能不能交出去的不是时序报告而是 DRC 和 LVS 两个签核步骤。Calibre 之所以在业内成为事实标准不是因为界面多友好而是因为代工厂的物理验证标准本身就是按 Calibre 的 rule deck 定义的只有 Calibre 跑出来的结果代工厂才认。以常见的 calibre 3.48 为例命令行选项、结果数据库格式、RVE 图形界面几代版本都没有结构性变化团队换人接手、跨项目复用脚本的成本都很低。DRC 管的是几何合法性——间距、宽度、包围、面积、密度这些版图设计规则LVS 管的是电学一致性——把版图里的器件和连线重新提取成网表再跟原理图网表逐项比较。两者合起来保证「画出来的版图」和「仿真验证过的原理图」在几何与连接关系上是同一份设计。对数字后端、模拟版图布局以及专职做 ic 验证的工程师来说这是每天都会碰的生产环节。这篇材料按一条能照着走的路径组织先看 DRC 规则文件怎么构成、命令怎么跑、报告怎么读再看 LVS 的提取与比对原理、命令和常见失配然后把排错的方法与顺序讲透最后把它落成可回归的批处理流程。新手可以照命令一步步跑通熟手可以重点看参数取舍和排错顺序里跟自己习惯不一样的部分。2. Calibre DRC 的最小可运行流程从规则文件到违例报告2.1 规则文件里到底写了什么DRC 规则文件rule deck由代工厂随 PDK 一起发布常用语法是 SVRF也有用 TVF 的。它由三部分组成版图输入设置、检查规则、结果输出设置。下面是一个最小示例// 输入设置 LAYOUT SYSTEM GDSII LAYOUT PATH top.gds LAYOUT PRIMARY top // 输出设置 DRC RESULTS DATABASE top.drc.results DRC SUMMARY REPORT top.drc.summary // 定义中间层栅极是多晶硅与有源区的交集 GATE POLY AND DIFF // 宽度与间距检查 WIDTH GATE 0.05 ABUT 90 REGION SPACE GATE 0.07这段规则里LAYOUT PATH指定被检版图LAYOUT PRIMARY指定顶层 cell 名DRC RESULTS DATABASE输出可被 RVE 打开的二进制结果库DRC SUMMARY REPORT输出纯文本摘要。中间的检查语句在做「先算层再查几何」GATE POLY AND DIFF里的逻辑运算是 Calibre DRC 的原子操作后面所有WIDTH、SPACE、AREA、ENC检查都建立在中间层之上。一个容易踩的坑是「自己改规则」为了少报错把 PDK 里的SPACE值改大或者用过滤语句把某些规则去掉。签核层面的 DRC 结果必须以代工厂原版规则文件为准任何改动都要走变更评审。也有人问能不能用 KLayout 做 DRCKLayout 的脚本语法与 Calibre 不通用手写转换很容易漏规则KLayout 更适合早期快速检查签核仍要回到 Calibre。注意签核用的规则文件必须是 PDK 原版任何过滤和改值都要走变更评审否则流片风险自担。2.2 跑 DRC 的最小命令与常用参数命令行跑 DRC 是最常用的方式尤其在整芯片和回归场景。最小命令如下calibre -drc -hier -turbo 4 -hyper \ -input top.gds \ -output top.drc.results \ /pdk/calibre/calibre_1P9M.drc这条命令把 GDS 按层次化方式检查结果写入top.drc.results规则文件用 PDK 自带的calibre_1P9M.drc。-hier是层次化开关整芯片检查基本都要开-turbo 4让检查用 4 个线程并行-hyper是加速模式在大版图上对中间结果做压缩复用用内存换时间。命令最后那个位置放规则文件路径放错的话 Calibre 会直接把规则文件当输入版图解释报出很难读的错。用得最多的参数按项目需求取舍参数作用使用建议-hier层次化处理保留 cell 层次整芯片默认开启-turbo N并行线程数4 到 8按机器核数-hyper加速模式数据量大的 top 级开启-automatch自动匹配重复单元含大量重复阵列时开启-output指定结果库路径与规则文件内一致即可-batch非交互模式回归脚本必加-turbo不是越大越好内存会随线程数上涨小机器上开 16 线程可能中途退出。-hyper也有代价它会在解析阶段多花时间小版图收益不明显一般只在超过几平方毫米的 top 级版图上开。2.3 报告和结果库怎么读跑完后产出两样东西二进制结果库和文本摘要。先看top.drc.summary最关键的是末尾几行SUMMARY TOTAL RULE CHECKS PERFORMED: 1245 TOTAL VIOLATIONS: 1212 个违例分布在哪些规则、哪些 cell摘要里会按 cell 和 rule 分列。每一条违例在结果库里记录规则名、违例类型间距、宽度、短路等、坐标、参与违例的图形。定位图形用 RVE命令是calibre -rve top.drc.results在界面上点一条违例版图窗口会聚焦到对应坐标并高亮问题图形。RVE 的层级树里是「cell → rule → violation」三层结构实际排错时大多从规则名入手因为规则名对应设计规则条目比如SPACE.M1.2就能猜到是金属 1 的第 2 条间距规则。还有个常见误区TOTAL VIOLATIONS: 0不等于绝对干净规则文件本身可能排除了某些区域。比如EXCLUDE语句把 IO 区域的某些检查去掉了摘要里不会特别提示。正式签核前要确认规则文件版本号和 PDK 一致别拿旧版 deck 跑出新结果就当作数。2.4 三个值得常调的参数与一个容易混的概念先说参数。第一是-turbo与-hyper的组合中间层计算密集的规则多-hyper收益明显纯金属层密度类检查多收益小。第二是-automatch版图里有大量重复单元memory 阵列、标准单元行时能显著降内存和运行时间代价是结果库层次不如-hier直观。第三是在规则文件末尾追加过滤语句只输出自己关心的规则常见写法是DRC SELECT CHECK后跟规则名列表适合迭代期间只看某几条规则签核前必须移除。容易混的概念是Vivado、Innovus 这类工具里报的 DRC比如 vivado 报错 drc rtstat-2或布线后的 partial route conflicts属于工具内部的工程规则检查目的是约束布局布线流程和本文讨论的 Calibre 物理验证 DRC 不是一回事。前者只管工具自身合法性后者是代工厂签核标准FPGA 流程里没有代工厂规则文件也就不存在跑 Calibre DRC 这步。3. LVS 验证在比什么提取、化简与网表比对3.1 LVS 的比对对象与常见误区LVS 全称 Layout vs Schematic比较对象是两个网表一个从版图提取一个是原理图导出的参考网表通常是 CDL 或 SPICE 格式。准确的说法是「版图提取网表和参考网表比」因为真正参与比较的是晶体管、电阻、电容这些器件以及连接关系而不是图形本身。这也和前端仿真阶段的功能验证functional verification区分开功能验证查行为对不对LVS 查物理实现和原理图一不一致。常见误区有两个。第一个是以为 LVS 只查连接有没有错其实器件参数也在比较范围MOS 管的沟道宽长比、电阻阻值、电容容值都要对上。原理图设计的是 W2um 的管子版图提取出来是 1.8umLVS 会如实报参数不匹配。第二个误区是认为 LVS 是纯布尔操作实际上它内置了约简步骤比如串联电阻合并、并联晶体管合并先约简再比对避免把电学等价的电路误报成失配。3.2 三步走器件识别、提取、比较Calibre LVS 的流程可以拆成三个环节理解这三步比背命令更重要。第一是器件识别规则文件用层组合定义器件。比如一个 NMOS通常定义为GATE POLY AND DIFF源漏区是DIFF去掉GATE的部分再加上NIMP注入层限定。规则文件里对每种器件都有一段定义包含端子层和外延层Calibre 靠这些定义找出版图里所有器件。第二是提取把器件之间的连线关系整理成网表。这一步比的是连通性同一块金属经孔连到有源区提取器就归为同一个 net并给每个 net 记录端口和器件引脚。提取过程中化简指令会生效比如LVS REDUCE PARALLEL MOS、LVS SERIES这类配置都在这步起作用。第三是比较Calibre 把提取网表和参考网表分别约简后做同构匹配。匹配不上的部分在报告里给出 layout 侧和 schematic 侧的对应信息这就是需要排查的 mismatch。3.3 命令行跑 LVS 与报告判读LVS 命令行与 DRC 高度相似把-drc换成-lvs即可calibre -lvs -hier -turbo 4 \ -input top.gds \ -rule /pdk/calibre/calibre_lvs.lvs规则文件里通常已写好参考网表路径、化简选项和输出报告文件名比如LVS REPORT top.lvs.report。跑完后先看报告开头LVS REPORT: top.lvs.report ... LAYOUT vs SOURCE ... CORRECT出现CORRECT表示比对通过。更多时候看到的是失配信息报告里有几个关键区块instance对比区、net对比区、ERC检查区以及最前面的汇总。失配时先看汇总行它写明哪一侧多了还是少了再看具体区块定位到器件或 net 名字。3.4 mismatch 类型速查表与处理顺序LVS 失配的类型就那么几类按下面的顺序排查能少走弯路失配类型报告里的表现优先排查对象短路layout 侧 net 数少于 schematic电源地平面、阱、大面积金属开路两侧 net 数偏多断线、缺孔、跳线没连上器件缺失instance 数量不一致器件识别层是否被误覆盖参数不匹配W/L 或 R/C 值不一致LOD/OD 效应导致的提取偏差soft connect两个 net 被井或衬底连在一起衬底接触、guard ring类型不匹配器件类型对不上注入层、well 层缺失处理顺序上先解决短路和开路因为连接关系错了后面的 instance 数量比对全都会错再处理器件缺失和参数问题最后才看 soft connect 这类偏规则解释的误判。短路先查电源和地这两个网络覆盖面积大是短路高发区。4. DRC 违例与 LVS 失配的排错路径4.1 从 RVE 违例列表联动版图DRC 排错的核心是 RVE。打开结果库后违例列表每一行带规则名和坐标双击后版图窗口直接跳转并高亮。实际项目里 DRC 违例动辄成百上千正确做法不是一条条点而是先在摘要里按 cell 和 rule 分组把同一个 cell 里同一类规则的问题一起看。同一类规则违例往往源于同一个画法习惯比如某段金属走线间距不够大概率是一整条 bus 都要改而不是单根线的问题。RVE 里可以把结果按严重程度过滤排除非关键规则后再逐个过。过滤不要用规则文件里的EXCLUDE那会改变签核结果在界面里做显示过滤或者对报告做文本过滤才是安全做法。4.2 LVS 失配的溯源顺序LVS 失配排错走固定顺序。第一步看报告里失配的 net 和 instance 清单先确认是哪一侧的问题。第二步打开版图对照报告里的器件名字比如M_NMOS_12对应哪一支管子。第三步看这支管子的四个端子连接栅、漏、源、体跟原理图逐一比对绝大多数失配集中在某个端子的连接上。比较麻烦的一类是 ERC 报告里的UNCONNECTED或LATCHUP提示它往往不是网表失配而是版图上存在未连接的浮空引脚或保护环接得不全。这类问题不影响比对结果但影响可靠性签核时同样要处理干净。4.3 soft connect 与衬底连接误判soft connect 是 LVS 排错里最容易误判的问题。它的本质是两个本应独立的 net通过同一口井或同一块衬底产生弱连接。比如 N 阱里两个 PMOS 的体端都接到阱上而阱本身没有明确的电源连接提取器会把它们的体端并到同一个 net原理图侧却是两个独立 net于是报失配。处理 soft connect 有两类做法。一类在规则层面rule deck 里LVS SOFT CONNECT相关设置决定提取器认不认这种弱连接可以配置成忽略阱内弱连接但这涉及对签核规则的解释需要跟代工厂确认。另一类在版图层面给阱和衬底加明确的接触也就是 body tie 和 guard ring让每个器件的体端都有确定电位连接。实战里先做版图侧处理物理上更干净也避免规则解释带来的签核风险。4.4 用文本工具过滤报告LVS 报告和 DRC 摘要都是纯文本可以用标准文本工具快速筛# 统计 DRC 摘要里的违规总数 grep -E TOTAL VIOLATIONS top.drc.summary # 按规则名统计 LVS 报告里的失配项 grep -E Mismatched|INCORRECT top.lvs.report | sort | uniq -c | sort -rn # 提取报告中带坐标的违例行供后续脚本分析 awk /COORDINATES/ {print $0} top.lvs.report coords.txt这种处理在回归场景里很有用每个人提交一版版图跑完后自动统计违例数变化新增违例行会被直接标出来比在界面里翻结果库高效得多。不同版本报告格式有细微差异写过滤脚本前先打开报告看实际行格式再写正则能省不少调试时间。5. 把 Calibre DRC/LVS 跑成可回归的验证流5.1 批处理命令模板与退出码判读项目里的 DRC/LVS 很少手动跑都是脚本批量执行。一个最小可用的回归模板#!/bin/bash set -e calibre -drc -hier -turbo 8 -hyper \ -input ${TOP}.gds \ -output ${TOP}.drc.results \ -rule $DRC_RULE calibre -lvs -hier -turbo 8 \ -input ${TOP}.gds \ -rule $LVS_RULE grep TOTAL VIOLATIONS ${TOP}.drc.summary grep CORRECT ${TOP}.lvs.report | head -1注意Calibre 的退出码 0 只表示「本轮检查正常跑完」不代表没有违例DRC 有违例、LVS 不匹配时退出码同样是 0判断结果只看报告。脚本里不能拿退出码当 PASS/FAIL 依据要继续按报告内容做判断。另一个容易忽略的点是-hyper对老版本规则文件偶尔有等价性差异回归和签核要用同一组参数避免两边结果对不上。5.2 增量验证与结果归档回归省时间的关键是增量策略只改动的 block 先单独跑一轮 DRC/LVS清干净后再做一次 top 级全量验证。block 级跑得快问题早暴露top 级跑得慢主要看拼接后的跨 block 规则和连接关系。配套做法是给结果库文件名加日期或 git commit 号比如top_20240531_a3f2.drc.results让结果和版图版本一一对应出问题时能立刻定位是哪一版版图产生的违例。这样验证就不再是偶尔执行的动作而是每次改版都能自动获得反馈的常规环节。本文还有配套的精品资源点击获取
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进