Calibre DRC/LVS 验证原理与Runset深度解析
简介:本资源是一份面向集成电路物理验证工程师与高校微电子专业学习者的Calibre DRC/LVS全流程实践总结材料,聚焦Tape Out前关键验证环节,系统梳理DRC(设计规则检查)、LVS(版图与电路图比对)及ERC(电气规则检查)的核心原理、标准流程与实操要点。资料以PDF形式呈现,共1个文件,大小704KB,内容结构清晰:首章概述Calibre工具定位、RVE结果反标机制、SVRF规则语法及寄生参数抽取能力;第二章详述DRC数据准备、Runset文件五大模块(运行设置/层次定义/层次运算/规则检查/选择控制),并附带可直接参考的完整Rule File示例及逐行注释;后续章节延伸覆盖LVS/ERC验证逻辑与共性流程。已有10577人学习下载,适合初学者建立验证知识框架,也便于工程师快速查阅Runset编写规范、典型错误定位方法与常见FLAG配置策略。
1. Calibre DRC/LVS 验证不是“点一下就出报告”的黑匣子:它是一套必须亲手拆解、逐层校准的物理验证流水线
很多刚接手 Tape Out 前最后关卡的工程师,第一反应是:“Calibre 不就是装好就能跑的工具吗?别人给个 rulefile,我 calibre -drc 一下,等 RVE 弹出来改错不就完了?”——这种想法在真实流片项目里,大概率会在 tape-out 前 48 小时触发一场血泪级翻车。我见过某跨平台系统项目,因一条SIZE命令漏了OVERUNDER关键字,导致阱边缘收缩逻辑失效,DRC 报错数为 0,但 LVS 却在电源网络上爆出 17 处隐性短路;也见过某图像处理 Demo 的版图团队,把PRECISION 1000和RESOLUTION 10错配成PRECISION 100,结果所有 0.015μm 级别的 spacing 规则全部失敏,Foundry 回退签核时直接拒收 GDS。Calibre 的本质不是自动纠错器,而是一台高精度物理量具:它不判断“对不对”,只忠实地告诉你“在什么坐标、以什么几何关系、违反了哪条由 Foundry 定义的物理边界”。它解决的是 IC 物理实现层最硬的约束——光刻工艺窗口、刻蚀选择比、金属填充率、电迁移阈值。适合谁?不是只会点 GUI 的新手,而是能看懂.rule文件里每一行INT/EXT/ENC语义、能从drc_err.sum里定位到M1_6对应哪条规则、能在 RVE 中一眼分辨ABUT<90是锐角交叠还是伪影的实战派。你不需要写 Verilog,但必须像读电路图一样读 SVRF;你不用调 PDK,但得清楚LVS FILTER UNUSED MOS YES背后藏着多少寄生效应陷阱。这份总结材料,就是帮你把 Calibre 从“神秘盒子”变成“可拆解、可调试、可复现”的验证工作台。
2. Calibre DRC Runset 文件结构解析:从路径定义到规则检查,每一段都决定错误是否被真实捕获
2.1 Runset 文件的五段式骨架:为什么缺一不可?
Calibre DRC 的 Runset(.rule文件)不是脚本,而是一份声明式物理约束说明书。它被解析为五个逻辑段落,顺序执行,任何一段缺失或错位,都会导致验证结果失真甚至静默失败。这不是语法问题,而是物理建模逻辑断裂。
提示:Runset 文件中
//后的内容仅为注释,Calibre 解析器完全忽略;但实际工程中,注释必须精确对应物理含义,否则团队协作时极易误读。
第一段是运行环境控制区,定义数据入口与出口:
LAYOUT PATH "/home/project/chip_top.gds" LAYOUT PRIMARY "chip_top" LAYOUT SYSTEM GDSII DRC RESULTS DATABASE "/home/project/drc_out/drc_results.db" DRC SUMMARY REPORT "/home/project/drc_out/drc_summary.rpt" HIERLAYOUT PATH必须指向绝对路径且文件存在,相对路径在 batch 模式下常因$PWD变化失效;DRC RESULTS DATABASE路径需有写权限,且目录必须提前创建(Calibre 不自动建目录),否则报错Cannot open database file但不中断流程,后续 RVE 无法加载;HIER关键字表示摘要报告按层次展开,若省略则默认FLAT,对超大规模设计会生成 GB 级文本,拖慢分析。
第二段是几何精度定义区,这是所有规则检查的底层标尺:
PRECISION 1000 RESOLUTION 10 DRC CELL NAME YES CELL SPACE XFORMPRECISION是内部计算精度分母,RESOLUTION是格点步长分子,二者共同决定最小可分辨距离:10/1000 = 0.01μm。若 Foundry PDK 要求0.005μm精度,此处必须改为PRECISION 2000;CELL SPACE XFORM表示子单元错误坐标映射到顶层时保留变换关系,若漏写,RVE 中点击错误会跳转到子单元原点而非实际位置,改错效率归零。
第三段是图层与连接定义区,构建物理网络拓扑:
LAYER nwelli 1 LAYER ndiffi 2 LAYER pdiffi 3 TEXT LAYER 60 ATTACH 60 met1 CONNECT met1 poly1 BY cont CONNECT met1 ndiff BY contLAYER声明必须与 GDS 层号严格一致,nwelli 1表示 GDS 层 1 数据被命名为nwelli,若 PDK 中阱层实际在 GDS 层 42,此处写错将导致所有阱相关规则(如nw_chk1)完全失效;CONNECT定义电气连通性,BY cont表示通过接触孔层连通,若漏掉CONNECT met1 allnsub BY cont,则nw_chk5中的STAMP nwell BY allnsub将无法识别 nwell 与衬底的连接关系,误报大量“未连接阱”。
第四段是层次运算区,生成中间几何用于复杂规则:
fpoly = poly1 INTERACT celisot poly = poly1 NOT INTERACT celisot wmet1 = WITH WIDTH met1 >= 10INTERACT是重叠检测核心,等价于布尔 OR,NOT INTERACT即无重叠区域;SIZE pcodei BY 0.15 OVERUNDER表示先放大 0.15μm 再缩小 0.15μm,用于消除多边形锯齿干扰,若写成SIZE pcodei BY 0.15 UNDEROVER(先缩后放),则实际是腐蚀操作,会漏检边缘缺陷;WITH WIDTH提取特定宽度图形,wmet1变量后续可用于DRC SELECT CHECK wmet1_width_chk,实现对宽金属的专项检查。
第五段是规则检查区,每条{}是一个独立可开关的验证单元:
nw_chk1 { @ nwell width must >= 2.5 INT nwelli < 2.5 ABUT < 90 SINGULAR REGION }@后字符串是 RVE 中显示的错误描述,必须清晰指向物理含义;INT nwelli < 2.5是核心检查,INT表示内边对内边(Internal),即测量nwelli多边形自身最窄处;ABUT < 90和SINGULAR是关键修饰符:ABUT < 90过滤掉钝角交叠(避免误报),SINGULAR激活点-线、点-点接触检测,若漏掉,两个相邻但未真正连接的阱会逃过检查。
2.2 从零手写一个可运行的 DRC Runset:以 28nm 工艺 nwell 检查为例
假设某高校流片项目采用 28nm PDK,要求:
① nwell 最小宽度 2.5μm;
② 同电位 nwell 间距 ≥1.4μm;
③ 不同电位 nwell 间距 ≥4.0μm;
④ nwell 必须完全覆盖 nsub,包边 ≥0.4μm。
我们构建一个最小可行 Runset(nwell_check.rule),不含冗余层和规则:
// ====== 运行环境控制 ====== LAYOUT PATH "/home/university/tapeout/gds/chip_top.gds" LAYOUT PRIMARY "chip_top" LAYOUT SYSTEM GDSII DRC MAXIMUM RESULTS 1000 DRC RESULTS DATABASE "/home/university/tapeout/drc/nwell_db" DRC SUMMARY REPORT "/home/university/tapeout/drc/nwell_sum.rpt" HIER // ====== 几何精度 ====== PRECISION 1000 RESOLUTION 10 DRC CELL NAME YES CELL SPACE XFORM FLAG OFFGRID YES FLAG SKEW YES FLAG ACUTE YES // ====== 图层定义 ====== LAYER nwelli 1 LAYER nsubi 2 LAYER met1 3 // ====== 连接定义(仅需 nwell-nsub 关系) ====== CONNECT nwelli nsubi BY contact_layer // ====== 层次运算(为包边检查准备) ====== nwell_ext = SIZE nwelli BY 0.4 // 先扩大 0.4μm nsub_shrink = SIZE nsubi BY -0.4 // 再缩小 0.4μm,确保包边检测鲁棒 // ====== 规则检查 ====== // 规则1:nwell 宽度检查 nw_width_chk { @ nwell minimum width 2.5um INT nwelli < 2.5 ABUT < 90 SINGULAR REGION } // 规则2:同电位 nwell 间距(假设所有 nwell 接同一 net) nw_space_same_chk { @ nwell same-potential space >=1.4um EXT nwelli < 1.4 SQUARE // 输出为方形框,便于 RVE 定位 CONNECT // 仅检查电气连通的 nwell 对 } // 规则3:不同电位 nwell 间距(需先定义电位分组,此处简化为全局检查) nw_space_diff_chk { @ nwell different-potential space >=4.0um EXT nwelli < 4.0 NOT CONNECT // 排除已连通的 nwell } // 规则4:nwell 包 nsub(核心!) nw_enc_nsub_chk { @ nwell must enclose nsub by >=0.4um ENC nsubi nwelli < 0.4 OUTSIDE ALSO // nsub 在 nwell 外也报错 ABUT < 90 SINGULAR REGION }参数说明与逻辑解释:
ENC nsubi nwelli < 0.4中ENC是 Enclosure(内边对外边),即nsubi边界到nwelli边界的最短距离;< 0.4表示包边不足 0.4μm 时报错;OUTSIDE ALSO是关键,它强制检查nsubi是否完全落在nwelli内部,若nsubi有部分伸出nwelli,此规则必报错;- 所有规则末尾的
ABUT < 90和SINGULAR组合,是防止多边形顶点抖动导致的误报,这是 28nm 以下工艺的必备防护; - 此 Runset 可直接用
calibre -hier -drc nwell_check.rule运行,无需额外配置。
2.3 DRC 运行命令与环境变量:为什么calibre -gui在服务器上必然失败?
Calibre 的命令行模式不是 GUI 的简化版,而是生产环境唯一可靠入口。calibre -gui依赖 X11 图形转发,在无桌面环境的 Linux 服务器(如 EDA 云集群)上执行会立即报错Can't open display,且不输出任何有用日志。正确做法是全程使用 headless 模式。
标准运行命令链:
# 1. 进入工作目录(必须!Calibre 会从当前目录解析相对路径) cd /home/university/tapeout/drc # 2. 执行 DRC(-hier 启用层次化,-64 启用 64 位内存,-turbo 加速) calibre -hier -64 -turbo -drc nwell_check.rule 2>&1 | tee drc_run.log # 3. 检查关键输出文件是否存在 ls -l drc_out/nwell_db drc_out/nwell_sum.rpt必须设置的环境变量(写入~/.bashrc并source ~/.bashrc):
# Calibre 安装根目录(根据实际路径修改) export MGC_HOME=/tools/calibre/2023.3 # PDK 路径(若 rulefile 中引用了 PDK 内置规则) export CALIBRE_PDK_PATH=/pdk/28nm_ff # Java 路径(Calibre RVE 依赖 Java,必须匹配版本) export JAVA_HOME=/tools/jdk/jdk1.8.0_291 export PATH=$JAVA_HOME/bin:$PATH # 防止中文乱码(Linux 终端常见问题) export LANG=en_US.UTF-8失败排查关键点:
- 若
calibre -hier -drc ...报错Cannot find rule file,检查当前目录是否包含该文件,且文件权限为644(chmod 644 nwell_check.rule); - 若日志中出现
Error: Layer 'nwelli' not found in layout,确认 GDS 中层 1 数据存在且未被压缩(GDSII 必须为 ASCII 或 BINARY,不能是 GDSII.Z); - 若
drc_run.log中有Memory limit exceeded,增加-64参数并确保服务器有 ≥32GB 内存,或改用-flat模式(牺牲层次信息换内存)。
3. Calibre LVS 流程深度拆解:从 Verilog 到 SPICE 网表,LVS 不是比对代码而是比对物理连接拓扑
3.1 v2lvs:Verilog 到 LVS 网表的转换不是翻译,而是物理端口映射
LVS 的本质是比对两个 SPICE 网表:一个来自版图提取(Layout Extracted Netlist),一个来自电路设计(Source Netlist)。而 Source Netlist 很少是纯 SPICE,更多是 Verilog 行为模型。v2lvs就是这座桥梁,但它不是语法转换器,而是基于物理引脚定义的端口绑定引擎。
核心原理:v2lvs读取 Verilog 子库(.v)中模块的端口声明(如module inv (in, out, vdd, vss);),再在 SPICE 子库(.sp)中查找同名模块,并严格按端口顺序匹配引脚。若 Verilog 中inv端口为(A, Y, VDD, VSS),而 SPICE 中inv子网表端口为(IN, OUT, VCC, GND),则v2lvs会失败——除非用-map文件手动映射。
典型命令与参数深意:
v2lvs \ -v top_design.v \ -o top_lvs.sp \ -s0 VSS \ -s1 VDD \ -sk \ -l std_cell.v \ -lsr std_cell.sp \ -lsp io_pad.v \ -lsp io_pad.sp \ -s tech_lib.sp-s0 VSS和-s1 VDD:将 Verilog 中1'b0和1'b1驱动的 net 映射为VSS和VDD,这是 ERC 检查的基础,若漏设,LVS POWER NAME将无法识别电源网络;-sk(supply keep):允许多组电源/地,如VDDA/VSSA和VDDD/VSSD,若芯片有模拟/数字隔离域,此参数必不可少;-lsrvs-lsp:-lsr(pin range mode)支持 Verilog 数组端口(bus[31:0]),-lsp(pin strict mode)要求端口名完全一致,混用时需确保子库兼容;-s tech_lib.sp:仅INCLUDE该文件,不解析其内容,用于提供工艺参数(如 MOS 模型),避免v2lvs过度解析导致内存溢出。
血泪经验:某图像处理 Demo 项目曾因-lsp误写为-lsr,导致io_pad模块的PAD_IN[7:0]被错误展开为 8 个独立端口,而 SPICE 子网表中仍是PAD_IN[7:0]单端口,v2lvs输出网表中PAD_IN[0]到PAD_IN[7]全部悬空,LVS 直接报Unconnected pins错误。修复只需将-lsr io_pad.sp改为-lsp io_pad.sp。
3.2 LVS Runset 文件:器件定义与属性容差,决定“相同器件”如何被判定
LVS Runset 的核心是DEVICE和TRACE PROPERTY语句,它们定义了“什么算同一个器件”。这直接决定 LVS 是报Extra device还是Missing device。
DEVICE 语句结构:
DEVICE MN(N) ngate tpoly tnsd tnsd bulk [0.5]MN(N):器件类型名(MN)和端口别名(N),N表示 NMOS;ngate tpoly tnsd tnsd bulk:按 SPICE 网表端口顺序列出物理端口,tnsd是源/漏端,bulk是衬底;[0.5]:拐角因子(Corner Factor),用于补偿版图提取时多边形顶点偏移,典型值 0.3~0.7,28nm 工艺建议 0.5。
TRACE PROPERTY 语句:容差才是关键:
TRACE PROPERTY MN(N) L L 0.1 TRACE PROPERTY MN(N) W W 0.1L L 0.1:第一个L是器件属性(沟道长度),第二个L是提取网表中的属性名,0.1是相对容差(10%);- 若版图提取出
L=0.22μm,SPICE 网表中为L=0.20μm,则|0.22-0.20|/0.20 = 10%,刚好通过;若容差设为0.05(5%),则失败。
完整 LVS Runset 片段(含关键容差):
// ====== 电源/地定义 ====== LVS POWER NAME "?VDD?" "?vdd?" "?VCC?" "?vcc?" LVS GROUND NAME "?GND?" "?gnd?" "?VSS?" "?vss?" // ====== 器件定义 ====== DEVICE MN(N) ngate tpoly tnsd tnsd bulk [0.5] DEVICE MP(P) pgate tpoly tpsd tpsd tnwell [0.5] DEVICE R(RW) bnwell tnsd tnsd [800] DEVICE C(CL) pccap cpo2 tpoly [0.72 0] // ====== 属性容差(必须!) ====== TRACE PROPERTY MN(N) L L 0.1 // L 容差 10% TRACE PROPERTY MN(N) W W 0.1 // W 容差 10% TRACE PROPERTY MP(P) L L 0.1 TRACE PROPERTY MP(P) W W 0.1 TRACE PROPERTY R(RW) R R 0.3 // 电阻值容差 30% TRACE PROPERTY C(CL) C C 0.3 // 电容值容差 30% // ====== 过滤规则(避免误报) ====== LVS FILTER UNUSED MOS YES LVS FILTER UNUSED RESISTORS YES LVS FILTER UNUSEDC CAPACITORS YES LVS FILTER UNUSED OPTION AB RC RE RG YC O为什么LVS FILTER UNUSED OPTION AB RC RE RG YC O不可少?
AB:过滤 G/S/D 三端短接的 MOS(如 dummy device);RC:过滤两端短接的电阻(如 test structure);O:重复过滤标记,确保所有选项生效;
若漏掉,版图中为测试添加的 dummy MOS 会被当作真实器件比对,LVS 必报Extra device。
3.3 LVS 运行全流程:从版图提取到 ERC 检查,每一步都可能埋雷
LVS 不是单命令运行,而是四阶段流水线:
阶段1:版图网表提取(必须显式执行)
calibre -lvs -hier -64 -turbo -extract chip_top.lvschip_top.lvs是 LVS Runset 文件;- 此步生成
chip_top.sp(提取网表)和chip_top.pex(寄生参数),若跳过,LVS 将无 Layout Netlist 可比。
阶段2:LVS 核心比对
calibre -lvs -hier -64 -turbo -run chip_top.lvs- 此步读取
chip_top.sp和 Source Netlist(top_lvs.sp),执行拓扑比对; - 输出
lvs.report(ASCII 报告)和lvs.results(SVDB 数据库)。
阶段3:ERC 电气规则检查(常被忽略的致命环节)
在 Runset 中启用:
LVS SOFTCHK tnwell CONTACT LVS SOFTCHK bulk CONTACT ERC PATHCHK GROUND && !POWER ERC PATHCHK POWER && !GROUNDLVS SOFTCHK是软检查,不终止 LVS,但报错在lvs.report中;ERC PATHCHK检查电源/地网络连通性,GROUND && !POWER表示“必须接地且不能连电源”,若漏设,短路将无法发现。
阶段4:RVE 结果分析
calibre -rve lvs.results- RVE 中
View -> By Check可筛选Extra device或Missing device; - 点击错误,RVE 自动在 Virtuoso 中高亮对应器件,注意观察器件端口命名是否一致(如版图中
M1的D端连VDD,而 SPICE 中M1的D端连VCC,虽电气等效但 LVS 视为不同)。
避坑 / 常见问题 / 排查 / 注意
现象:LVS 报
Extra device: MN1,但版图中只有一个MN1,SPICE 网表中也只有一个MN1。
原因:DEVICE MN(N)定义中端口顺序错误,如将tnsd tnsd写成tnsd bulk,导致版图提取的源/漏端与 SPICE 网表的端口不匹配,LVS 认为这是另一个器件。
解决:用grep -A 5 "MN1" chip_top.sp查看 SPICE 网表中MN1的端口顺序,严格对齐DEVICE语句。现象:
lvs.report中Net name mismatch错误,如net123vsnet_123。
原因:Verilog 中信号名含下划线,而 PDK SPICE 子网表中为驼峰命名,v2lvs未做标准化。
解决:在v2lvs命令中加-rename选项,或在 Runset 中用LVS RENAME NET重映射:LVS RENAME NET "net_123" "net123"。现象:RVE 中显示
Missing device: C1,但版图中有电容,SPICE 中也有C1。
原因:DEVICE C(CL)定义中[0.72 0]的0表示忽略周长效应,但版图提取时电容边缘有 fringing capacitance,TRACE PROPERTY C(CL) C C 0.3容差不足以覆盖。
解决:将DEVICE C(CL)改为[0.72 0.1](加入 0.1fF 周长系数),或增大容差至0.5。现象:
calibre -lvs运行数小时后报Out of memory。
原因:LVS REDUCE PARALLEL MOS YES等优化未启用,导致并联器件被展开为独立实例,内存爆炸。
解决:在 Runset 中强制启用所有REDUCE选项,并加-flat参数降维:calibre -lvs -flat -run chip_top.lvs。现象:
lvs.report显示No devices matched,所有器件均未比对成功。
原因:LAYOUT PRIMARY与SOURCE PRIMARY名称不一致,或LAYOUT SYSTEM与SOURCE SYSTEM格式不匹配(如 GDSII vs OASIS)。
解决:用calibre -info chip_top.gds确认 GDS 顶层单元名,用head -n 5 top_lvs.sp确认 SPICE 网表.SUBCKT名称,二者必须完全相同。
4. RVE 结果可视化与高效改错:从坐标定位到批量修正,RVE 是你的物理验证手术刀
4.1 RVE 启动与布局工具集成:为什么 Setup → Layout 必须手动配置?
RVE(Results Viewing Environment)不是独立软件,而是 Calibre 的结果渲染引擎,其威力完全依赖与版图工具(如 Cadence Virtuoso)的深度绑定。默认安装下,RVE 不知道 Virtuoso 在哪,必须手动配置。
配置步骤(以 Virtuoso 为例):
- 启动 RVE:
calibre -rve drc_results.db; - 菜单
Setup → Layout; - 在
Layout Tool下拉框选Cadence Virtuoso; Command Line输入:virtuoso -nograph -replay $CALIBRE_RVE_SCRIPT;Script File指向 Calibre 安装目录下的calibre_rve_virtuoso.tcl(路径如/tools/calibre/2023.3/share/tools/rve/virtuoso/calibre_rve_virtuoso.tcl);- 点击
OK保存。
注意:
-replay参数让 Virtuoso 执行 RVE 生成的 Tcl 脚本,$CALIBRE_RVE_SCRIPT是 RVE 自动设置的环境变量,指向临时脚本。若Command Line写死路径(如virtuoso -replay /tmp/rve.tcl),则每次启动都需手动更新脚本路径,极不可靠。
验证配置成功:在 RVE 中双击任意错误,Virtuoso 应自动启动(若未启动,检查virtuoso是否在$PATH中),并在版图窗口高亮错误位置,坐标显示在 Virtuoso 状态栏。
4.2 RVE 界面精读:左侧树状图、右侧坐标、底部描述,三者如何联动?
RVE 主界面分为三区,理解其数据流是高效改错的前提:
左侧树状图(Check Tree):显示所有规则检查(如
nw_chk1,M1_2),节点前图标含义:- ✅ 绿色勾:该规则无错误;
- ❌ 红色叉:有错误,数字为错误数;
- ⚠️ 黄色叹号:
SOFTCHK类警告; - 点击节点,右侧坐标区刷新为该规则的所有错误位置。
右侧坐标区(Result List):每行是一个错误实例,列包括:
ID:错误唯一编号;X/Y:版图坐标(单位 μm),注意这是 GDS 坐标,非 Virtuoso 的 DBU;Layer:出错图层名(如nwelli);Rule:规则名(如nw_chk1);- 点击某行,底部描述区显示该错误的详细几何关系(如
nwelli polygon #123 at (-12.45, 3.67) has width 2.32um < 2.5um)。
底部描述区(Result Detail):显示 RVE 自动生成的错误解释,这是最易被忽视的黄金信息。例如:
Error: EXT nwelli < 1.4 between polygons #45 and #78. Distance = 1.23um.
这明确告诉你:是多边形 45 和 78 之间的间距不足,而非整个 nwell 区域。在 Virtuoso 中,可直接Select → By Name输入poly_45定位,避免盲目搜索。
进阶技巧:用 RVE 过滤器聚焦问题
View → Filter Results:可按Layer(如只看met1)、Rule(如只看M1_6)、Distance(如只看<0.5um的严重错误)过滤;File → Export Results:导出 CSV,用 Python 分析错误分布(如pandas.read_csv('errors.csv').groupby('Layer').size())。
4.3 从 RVE 到 Virtuoso 的精准跳转:坐标转换与层级穿透的玄学
RVE 点击错误后 Virtuoso 高亮,看似自动,实则经历三次坐标转换:
- GDS 坐标 → DBU 坐标:RVE 中
X/Y是 μm 单位,Virtuoso 使用 DBU(Database Unit),若 PDK 中1 DBU = 0.001μm,则(-12.45, 3.67)转为 DBU 是(-12450, 3670); - Flat 坐标 → Hierarchical 坐标:RVE 默认跳转到顶层,但错误实际在子单元
inv_123中。此时 Virtuoso 状态栏显示chip_top/inv_123,若inv_123未打开,需手动Open → Cell View; - 视图缩放:RVE 发送
zoom to fit命令,但若版图过大,Virtuoso 可能只缩放到子单元级别,需按z键二次缩放。
血泪经验:某跨平台系统项目,因 Virtuoso 的display.drf中dbuPerUnit设置为1000(即 1μm=1000 DBU),而 RVE 期望1μm=1 DBU,导致点击错误后 Virtuoso 跳转到(0,0)。修复方法:在 Virtuoso 中Options → Display → Database Units设为1,或在 RVE 的Setup → Layout中勾选Convert coordinates using DBU。
批量修正技巧(非 GUI):
当同一规则错误达数百个(如M1_2金属面积不足),手动改不现实。可用 Calibre 的calibre -batch模式:
# 生成修正脚本(示例:将所有 M1 面积不足处扩大 0.1μm) calibre -batch -drc -fix m1_area_fix.rule drc_results.db其中m1_area_fix.rule包含:
// 扩大所有 M1 多边形 0.1μm SIZE met1 BY 0.1此脚本由 Calibre 自动应用到版图,比人工快百倍。
5. DRC/LVS 联合调试:当 DRC 通过但 LVS 失败,如何用 ERC 和寄生抽取反向定位物理缺陷
5.1 DRC 通过 ≠ 物理正确:ERC 检查是最后一道防线
DRC 只管几何规则,LVS 只管网表拓扑,而 ERC(Electrical Rule Checking)检查电气完整性。三者必须全通过,才能认为物理实现无缺陷。常见陷阱是:DRC 报 0 错,LVS 报Unconnected pin,根源却是 ERC 未启用。
必须启用的 ERC 检查项(写入 LVS Runset):
// 电源/地短路检查(致命!) LVS SOFTCHK tnwell CONTACT LVS SOFTCHK bulk CONTACT // 网络连通性检查 ERC PATHCHK GROUND && !POWER // 地网络不能连电源 ERC PATHCHK POWER && !GROUNDERC PATHCHK !POWER && !GROUND // 悬空网络(非电源非地) ERC PATHCHK !LABELED <p> <a href="https://download.csdn.net/download/dfhao123/87411928" style="color:#ec7500;font-size:14px;"> 本文还有配套的精品资源,点击获取 </a> <img alt="menu-r.4af5f7ec.gif" src="https://csdnimg.cn/release/wenkucmsfe/public/img/menu-r.4af5f7ec.gif" style="width:16px;margin-left:4px;vertical-align:text-bottom;cursor:text;"> </p>