简介:这份Calibre DRC和LVS验证总结材料面向IC后端物理验证初学者与版图工程师,系统梳理了Mentor Graphics出品的Calibre工具在DRC、LVS、ERC三大验证环节的核心知识,适合需要快速入门或查漏补缺的读者。资源包内含1个PDF文档,约704KB,内容涵盖Calibre简介、常用缩写命令(SVRF、RVE、SVDB等)、DRC与LVS的完整流程图、Runset文件结构,以及一个带详细注释的简单Rule File示例,涉及层次定义、层次运算、规则检查与选择控制等关键环节。文档还介绍了RVE错误反标、版图寄生参数抽取等实用功能,并说明Calibre已获各大Foundry认证,是Tape Out前的验证标准。目前已有10542人学习下载,适合作为IC物理验证的入门参考与实操手册。
1. Calibre DRC/LVS 验证总结材料:从 Runset 到 RVE 反标的一条龙拆解
如果你正在做版图物理验证,手头只有一份 Foundry 给的规则文件,却不知道怎么把它跑起来、怎么看结果、怎么把错误反标回 Virtuoso,那这份 Calibre DRC 和 LVS 验证总结材料就是冲着你来的。它不讲虚的,直接覆盖 Runset 文件结构、命令行运行方式、RVE 结果查看、v2lvs 网表转换这些每天都要碰的环节。Calibre 作为后端物理验证工具,支持平坦化和层次化两种模式,DRC 查设计规则、LVS 比对版图与原理图、ERC 查电气规则,三件套一次配齐。这份材料适合刚接手物理验证的版图工程师、需要自己写 Runset 的 CAD 人员,以及想搞清楚 DRC 报错到底怎么定位的初学者。下面按实际动手顺序,把这份总结材料里的关键操作拆开讲。
2. Calibre DRC Runset 文件结构与命令行运行
2.1 DRC 数据准备与 Runset 五大组成部分
跑 Calibre DRC 之前,手头必须有两样东西:版图数据和 Runset 文件。版图数据支持 GDSII、CIF、BINARY、ASCII 四种格式,实际项目里绝大多数用 GDSII。Runset 文件就是告诉 Calibre 去哪找版图、按什么规则查、结果放哪里的控制文件。
一份完整的 DRC Runset 包含五个部分:运行设置、层次定义、层次运算、规则检查、选择控制。运行设置管路径和输出,层次定义把 GDS 层号映射成变量名,层次运算生成中间层,规则检查写具体的检查语句,选择控制决定这次跑哪些规则。这五块缺一不可,少一块 Calibre 直接报错退出。
运行设置部分最关键的几行是 LAYOUT PATH、LAYOUT PRIMARY、LAYOUT SYSTEM。LAYOUT PATH 指向 GDS 文件绝对路径,LAYOUT PRIMARY 写顶单元名,LAYOUT SYSTEM 声明格式。下面这几行是每次都要改的:
// 运行设置段 LAYOUT PATH "/home/project/calibre/drc/test_nand3.gds" // GDS 绝对路径 LAYOUT PRIMARY "test_nand3" // 顶单元名,必须和 GDS 里一致 LAYOUT SYSTEM GDSII // 版图格式 DRC MAXIMUM RESULTS 500 // 每条规则最多输出 500 个错误 DRC RESULTS DATABASE "/home/project/calibre/drc/drc.out" // 错误数据库路径 DRC SUMMARY REPORT "/home/project/calibre/drc/drc_err.sum" HIER // 摘要报告这里有个参数容易翻车:DRC MAXIMUM RESULTS 设太小,错误多的规则会被截断,你看到的错误数不是真实数量。我一般先设 1000 跑一轮看总量,再根据实际情况调整。DRC RESULTS DATABASE 生成的文件后面要给 RVE 用,路径别写错。
精度设置用 PRECISION 和 RESOLUTION 两行配合。PRECISION 1000 表示数据库单位是 1/1000 微米,RESOLUTION 10 表示检查格点是 10 个数据库单位,合起来就是 0.01 微米。这个值必须和 Foundry 规则文件里的一致,否则所有尺寸检查都会偏。
PRECISION 1000 RESOLUTION 10 // 检查格点 = 10/1000 = 0.01umFLAG 系列用来在摘要报告里标记异常几何。FLAG OFFGRID YES 报不在格点上的坐标,FLAG SKEW YES 报非 45 度线,FLAG ACUTE YES 报锐角。这三个开关建议都打开,尤其是接手别人版图的时候,能快速发现绘图规范问题。
2.2 层次定义、层次运算与规则检查写法
层次定义就是把 GDS 里的层号映射成有意义的变量名。写法是 LAYER 变量名 层号,比如:
LAYER nwell 1 LAYER ndiff 2 LAYER pdiff 3 LAYER poly1 4 LAYER cont 5 LAYER met1 6TEXT 层和连接性定义是 LVS 的基础,DRC 里也要写,因为有些规则检查依赖连接关系。TEXT LAYER 60 ATTACH 60 met1 表示 60 号层是 met1 的文本层,ATTACH 把文本和图形关联起来。CONNECT 语句定义层间连接:
TEXT LAYER 60 ATTACH 60 met1 TEXT LAYER 70 ATTACH 70 met2 CONNECT met1 poly1 BY cont CONNECT met1 ndiff BY cont CONNECT met2 met1 BY via1LAYOUT TOP LAYER 用来指定顶层数据,把 pad、顶层金属、通孔这些设为顶层,Calibre 在层次化模式下会优先处理顶层,能明显加快检查速度。
层次运算部分用布尔运算生成中间层。常用命令有 INTERACT、NOT、AND、OR、SIZE。INTERACT 表示有任何重合关系,相当于旧工具的 OVERLAP。SIZE 后面加 UNDEROVER 是先缩小再放大,OVERUNDER 是先放大再缩小,做 corner 检查时经常用。
fpoly = poly1 INTERACT cel isotpoly = poly1 NOT INTERACT cel pcode = SIZE pcodei BY 0.15 OVERUNDER wmet1 = WITH WIDTH met1 >= 10 // 找出宽度 >= 10um 的 met1规则检查是 Runset 的核心。每条检查用一对花括号包起来,里面至少有一条能输出错误的命令。检查名称随便定义,但建议和规则编号对应,方便查报告。
nw_chk1 { @ nwell width must >= 2.5 INT nwelli < 2.5 ABUT < 90 SINGULAR REGION }INT 是内边对内边检查,用来查宽度和重叠。EXT 是外边对外边,查间距和 notch。ENC 是内边对外边,查包围。ABUT < 90 表示有交叉角度小于 90 度就报错,SINGULAR 表示点碰点或点碰线也报错,这两个 second key words 在大多数规则里都要加。REGION 控制错误显示范围,SQUARE 让输出结果用方形标记。
同电位和不同电位的间距检查靠 CONNECT 和 NOT CONNECT 区分:
nw_chk2 { @ nwell same potential space >= 1.4 EXT nwelli < 1.4 ABUT < 90 SINGULAR REGION SQUARE CONNECT } nw_chk3 { @ nwell different potential space >= 4 EXT nwelli < 4 ABUT < 90 SINGULAR REGION NOT CONNECT }CONNECT 表示通过金属或其他连接层有连接关系的阱算同电位,NOT CONNECT 就是不同电位。这个逻辑在先进工艺里特别重要,同电位和不同电位的间距要求往往差好几倍。
密度检查用 DENSITY 命令,低于阈值时输出报告文件:
den_chk1 { @ min met1 density is 30% DENSITY met1 < 0.3 PRINT den_report_m1.log }这个报告文件要单独看,里面写了具体的密度值。密度不达标在 CMP 工艺里是致命问题,别等到流片前才发现。
2.3 命令行运行 DRC 与摘要报告解读
Runset 写好后,在 UNIX 命令行里运行:
calibre -hier -drc drc.rule-hier 启用层次化模式,-drc 指定这是 DRC 检查。跑完后先看 drc_err.sum 文件,这是摘要报告。报告开头是运行信息,包括 Calibre 版本、规则文件路径、版图路径、顶单元名、运行时间。中间是每条规则的错误统计:
RULECHECK M1_2 ................. TOTAL Result Count = 1 RULECHECK M1_6 ................. TOTAL Result Count = 3 RULECHECK PD_M2 ................ TOTAL Result Count = 1最后是汇总:
TOTAL DRC Results Generated: 9这个数字是总错误数,为 0 说明 DRC 干净。不为 0 就打开 RVE 定位。
RVE 启动命令是:
calibre -rve drc.out左边显示错误种类和数量,右边显示坐标,下面是规则解释。在 RVE 里点错误坐标,如果配置了版图工具接口,Virtuoso 会自动跳到对应位置并高亮。配置方法在 Setup 菜单的 Layout 选项里,指定版图工具的路径和调用参数。在 Virtuoso 里集成 Calibre 后,菜单会多出 Calibre 选项,可以直接从版图窗口启动 DRC 和 RVE,改错效率高很多。
3. Calibre LVS 网表转换与比对流程
3.1 v2lvs 命令参数与数组端口处理
LVS 需要三样数据:版图数据、电路图网表、Runset 文件。Calibre 把电路图网表叫 SOURCE,格式要求标准 SPICE 或 Calibre 自身的类 SPICE 格式。如果前端给的是 Verilog 网表,要用 v2lvs 转成类 SPICE 格式。
v2lvs 的转换原理是:根据 Verilog 子库对元件端口的定义,去 SPICE 子库找同名同端口的元件,然后做网表和格式替换。命令格式:
v2lvs -v verilog_file -o spice_like_file [-l verilog_lib_file] [-lsp spice_lib_file] [-lsr spice_lib_file] [-s spice_lib_file] [-s0 groundnet] [-s1 powernet] [-sk] [-i]参数含义逐个说:-v 接 Verilog 文件,-o 接输出文件。-l 接 Verilog 子库描述。-lsp 接 SPICE 库网表,p 是 pin 模式,不允许数组端口如 PA[3]、PA[2] 出现。-lsr 也是接 SPICE 库,但 pin 是 range 模式,可以接受数组端口。-s 只是让输出文件在前面 INCLUDE 这些 SPICE 子库,不读取内容。-s0 和 -s1 把 Verilog 里的 1‘b0 和 1’b1 替换成指定的地线和电源线。-sk 允许多组复合电源,不只是一对 VDD/VSS。-i 让输出文件采用 SPICE 通用 pin 格式,没有 $ 引导,方便后续仿真。
实际项目里最常见的坑是数组端口。如果 Verilog 网表里有 PA[31:0] 这种数组端口,而你没有提供 Verilog 子库,v2lvs 会按默认的高位到低位顺序转,大概率转错。所以有数组端口时,-l 指定的 Verilog 子库必须有。
一个完整的转换命令示例:
v2lvs -v top_design.hv -o top_design.sp \ -s0 VSS -s1 VDD -sk \ -l pll_risc.v -l cache_core.v -l pad.v -l std.v \ -lsr pll_risc.sp -lsr cache_try_new.sp \ -lsp std.sp -lsp pad.sp \ -s pll_risc.sp -s cache_try_new.sp -s std.sp -s pad.sp这个命令把多个子模块的 Verilog 和 SPICE 库一起处理,转出整个芯片的 LVS 网表。-lsr 和 -lsp 的区别在于是否允许数组端口,根据子模块的端口定义选。
3.2 LVS Runset 关键设置与器件定义
LVS Runset 的结构和 DRC 类似,但多了 SOURCE 相关设置和器件定义。运行设置部分:
LAYOUT PATH "/home/project/calibre/lvs/layout.gds" LAYOUT PRIMARY "top_design" LAYOUT SYSTEM GDSII SOURCE PATH "/home/project/calibre/lvs/top_design.sp" SOURCE PRIMARY "top_design" SOURCE SYSTEM SPICE LVS REPORT "/home/project/calibre/lvs/lvs.rep"电源和地定义用通配符匹配:
LVS POWER NAME "?VDD?" "?vdd?" "?VCC?" "?vcc?" LVS GROUND NAME "?GND?" "?gnd?" "?VSS?" "?vss?"问号是通配符,能匹配任意字符。这样 VDD、VDD_1、VDD_CORE 都能被识别为电源。
LVS ABORT ON SUPPLY ERROR YES 表示电源地短路就中断,调试阶段可以设 NO 让它跑完看完整报告。LVS ISOLATE SHORTS NO 是默认值,发现电源地短路时改 YES 会花很长时间定位,但能给出短路点。
器件定义是 LVS Runset 最核心的部分。以 NMOS 为例:
DEVICE MN(N) ngate tpoly tnsd tnsd bulk [0.5] TRACE PROPERTY MN(N) L L 0.1 TRACE PROPERTY MN(N) W W 0.1DEVICE 定义器件类型和端口。MN(N) 表示 NMOS,N 是模型名。后面依次是栅、多晶硅、源、漏、衬底。方括号里的 0.5 是拐角因子,用于计算有效沟道宽度。TRACE PROPERTY 定义比对参数和容差,L L 0.1 表示沟道长度允许 10% 误差,W W 0.1 表示宽度允许 10% 误差。
电阻、电容、三极管的定义类似:
DEVICE R(RW) bnwell tnsd tnsd [800] TRACE PROPERTY R(RW) R R 0.3 DEVICE C(CL) pccap cpo2 tpoly [0.72 0] TRACE PROPERTY C(CL) C C 0.3 DEVICE Q(PL) TRImk coll base emit DEVICE D(DN) ndiomk bulk tndio TRACE PROPERTY D(DN) A A 0.3电阻的方块阻值写在方括号里,电容的每平方容值也写在方括号里,第二个值 0 表示不计周长效应。容差根据工艺和设计裕量调整,模拟电路里电阻电容的容差通常比数字电路紧。
ERC 检查部分:
LVS SOFTCHK tnwell CONTACT LVS SOFTCHK bulk CONTACT ERC PATHCHK GROUND && !POWER ERC PATHCHK POWER && !GROUND ERC PATHCHK !POWER && !GROUND ERC PATHCHK !LABELEDSOFTCHK 检查软连接,PATHCHK 检查电源地路径。这些检查能发现版图里悬空的阱、没接电源的模块等问题。
3.3 LVS 结果查看与 RVE 反标
LVS 跑完后生成 lvs.rep 报告文件。报告开头是运行信息,然后是比对结果。最关键的几行是:
CELL COMPARISON RESULTS # # # # # # # # #三个 # 表示匹配成功。如果出现 DISC# 或 INC# 之类的标记,说明有问题。报告后面会列出不匹配的器件、网络、端口。
用 RVE 查看 LVS 结果:
calibre -rve lvs.repRVE 左边显示不匹配的类别,右边显示具体器件和网络。点击某个不匹配项,如果配置了版图工具接口,Virtuoso 会高亮对应的版图位置和原理图位置。LVS 调试比 DRC 复杂,因为要同时看版图和原理图两边。常见的不匹配原因包括:器件类型认错、端口顺序不对、电源地没接对、文本层没标对。
RVE 的 View 菜单里可以按 Check 查看每条规则的结果,绿色表示通过,红色表示有问题。File 菜单可以打开 DRC 结果报告、Runset 文件等,方便对照检查。
4. Calibre 验证避坑与常见问题排查
4.1 路径和顶单元名写错导致 Calibre 直接退出
现象:运行 calibre -hier -drc drc.rule 后立即报错退出,提示找不到文件或单元。
原因:LAYOUT PATH 写的路径不存在,或者 LAYOUT PRIMARY 写的顶单元名和 GDS 里的不一致。GDS 里的单元名大小写敏感,多一个空格都算错。
解决:先用 gdsinfo 或版图工具确认 GDS 的顶单元名,复制粘贴到 Runset 里。路径用绝对路径,不要用相对路径。跑之前用 ls 确认文件存在。
4.2 精度设置不匹配导致尺寸检查全错
现象:DRC 报大量尺寸错误,但版图看起来没问题。
原因:PRECISION 和 RESOLUTION 设置和 Foundry 规则文件不一致。比如规则文件要求 0.001 微米精度,你设了 0.01,所有小于 0.01 的偏差都被忽略或放大。
解决:直接看 Foundry 规则文件开头的 PRECISION 和 RESOLUTION 值,照抄。不要自己猜。改完后重新跑,对比错误数量变化。
4.3 v2lvs 数组端口转错导致 LVS 大量不匹配
现象:LVS 报告里大量器件端口不匹配,但版图和原理图看起来是对的。
原因:Verilog 网表里有数组端口如 PA[31:0],v2lvs 没有 Verilog 子库定义,按默认顺序转,导致端口对应关系错乱。
解决:找到对应的 Verilog 子库文件,用 -l 参数指定。如果子库文件缺失,找前端要。临时方案是用 -lsr 代替 -lsp,但根本解决还是要子库。
4.4 RVE 无法调用版图工具
现象:RVE 里点击错误坐标,版图工具没反应。
原因:RVE 的 Layout 接口没配置,或者版图工具路径不对。
解决:在 RVE 的 Setup 菜单里选 Layout,指定版图工具的可执行文件路径和调用参数。不同版图工具的配置方法不同,参考 Calibre 在线帮助里的接口说明。配置好后重启 RVE。
4.5 LVS 电源地短路导致运行时间过长
现象:LVS 跑了几个小时没结束。
原因:版图里电源和地短路,LVS ISOLATE SHORTS 设了 YES,Calibre 在花大量时间定位短路点。
解决:先设 LVS ABORT ON SUPPLY ERROR YES 让它在短路时中断,快速确认是否有短路。确认后改 LVS ISOLATE SHORTS NO,先跑完看其他问题。短路问题单独用 ERC 或版图工具查。
5. 从 Runset 调试到 RVE 高效改错的进阶习惯
Runset 调试有个效率技巧:先只跑一条规则。在 Runset 里用 DRC SELECT CHECK 只选一条检查,跑通后再逐步加。这样能快速定位是 Runset 语法问题还是版图问题。GROUP 语句可以把多条相关规则打包成一个集合,用 SELECT 和 UNSELECT 控制:
GROUP nwchk nw_chk? DRC SELECT CHECK nwchk问号是通配符,把所有以 nw_chk 开头的检查归入 nwchk 集合。调试时只跑这个集合,改完再跑全量。
RVE 里有个容易被忽略的功能:View 菜单的 By Check 模式。它按规则列出所有检查结果,绿色通过、红色报错。改错时按规则逐条过,比按坐标乱点高效得多。File 菜单可以同时打开 DRC 报告和 Runset 文件,对照看规则定义和错误位置。
LVS 调试我一般先看报告里的 CELL COMPARISON RESULTS 部分。三个 # 是匹配,DISC# 是器件不匹配,INC# 是网络不匹配。先解决 DISC#,因为器件不匹配会导致网络也不匹配。器件不匹配常见原因是模型名认错、端口顺序不对、参数超差。TRACE PROPERTY 的容差可以临时放宽来确认是不是参数问题,确认后改回正常值。
v2lvs 转换后,我习惯用 grep 检查电源地网络名是否统一。如果 Verilog 里用了 VDD、VDD_1、VCC 多种写法,-s0 和 -s1 只能替换 1‘b0 和 1’b1,文本形式的电源名要在 Runset 的 LVS POWER NAME 里用通配符覆盖。漏掉一个就会导致大量网络不匹配。
从那以后我每次跑 LVS 之前,都强制走一遍 v2lvs 输出文件的电源地名称检查,用 grep 把 VDD、VSS、VCC、GND 的所有变体列出来,确认 Runset 里的通配符能覆盖全部。这个习惯帮我省过好几次通宵调试。希望帮到你。
本文还有配套的精品资源,点击获取