ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Calibre DRC/LVS物理验证实战:Runset编写与RVE排错指南

Calibre DRC/LVS物理验证实战:Runset编写与RVE排错指南 简介这份Calibre DRC和LVS验证总结材料是一份面向集成电路后端设计与验证工程师的中文入门与查漏补缺笔记。内容系统梳理了Mentor Calibre物理验证工具在DRC、LVS、ERC三个方面的核心应用包括验证流程、规则文件结构、常用检查命令与简单规则文件示例。资源为单个PDF文件大小约704KB篇幅精炼适合快速浏览与反复参考。目前已有超过一万人学习使用说明内容具有较好的实用价值。文档从Calibre简述与常用缩写开始逐步介绍DRC的数据准备、完整流程步骤、规则文件中的基本控制与层次定义并配有带注释的规则文件片段LVS部分则强调版图与原理图比对方法同时简要说明ERC的作用。整体以实操总结为主可帮助初学者理解SVRF语法、熟悉RVE界面操作并为流片前的物理验证提供可借鉴的检查思路与排错方法。1. Tape Out之前Calibre DRC/LVS是绕不开的那道门做超大规模IC物理验证的人都知道一条铁律Tape Out之前流片厂签核的验证标准里一定有Calibre。它不是功能最花哨的物理验证工具而是因为它被几乎每家主流Foundry认证过DRC/LVS的Runset由代工厂自己维护规则定义、结果数据库和版图工具的配合已经非常成熟。Calibre既能跑Flat模式也能跑Hierarchical模式后者对百万门级设计尤其关键配合RVE结果反标界面错误可以绕过繁琐的坐标换算直接跳到版图对应位置。这篇实战记录适合正在接触物理验证的后端工程师也适合做版图集成的人对照Runset字段理解验证流程。底层验证原理和跑命令的细节都会覆盖重点放在Runset怎么写、参数怎么设、报错从哪里查起。2. DRC Runset逐段拆解从路径设置到Edge-Based报错DRC Runset的完整结构通常分五段运行设置、层次定义、层次运算、规则检查和选择控制。要理解这五段怎么协作先得明白Calibre是Edge-Based工具大多数错误信息表述为“错误位于这些边之间”而不是像DRACULA那样只给一个封闭区域。所以写检查命令时需要区分Internal内边对内边检查Width、Overlap与External外边对外边检查Space、NotchEnclosure则用于包围检查。结果的三种控制方式Euclidean默认、Square、Opposite也会影响错误图形在RVE里的呈现形态Euclidean最直观Square适合格点化设计Opposite用得少但在对称结构上有奇效。2.1 运行设置段路径、顶单元与网格精度Runset最上方的设置定义整个验证会话的运行边界。LAYOUT PATH指定GDS位置LAYOUT PRIMARY指定顶层单元名LAYOUT SYSTEM指定版图数据格式。路径里不要带空格引号内不要残留多余字符。紧跟着的DRC MAXIMUM RESULTS和DRC RESULTS DATABASE前者控制每条规则最多输出多少错误默认1000够用调试阶段可以放大到5000甚至10000目的是尽量一次看全问题。DRC SUMMARY REPORT则指定可读文本报告输出位置建议用HIER层级汇总。PRECISION和RESOLUTION组合决定检查格点的物理尺寸。PRECISION 1000配合RESOLUTION 10实际格点为10/10000.01版图单位。如果设计数据库本来就是格点化的这两个值必须对齐版图最小分辨率否则OFFGRID会大面积误报。我见过一种典型错误PRECISION和RESOLUTION只写了一半结果RVE里显示的坐标与实际图形错开半个格点改错时总感觉光标差一步。2.2 层次运算INTERACT、NOT与SIZE的配合层次定义段把版图的Layer编号映射成Runset里可读的符号名比如LAYER nwelli 1表示1号层对应N阱。后面是连接性定义CONNECT met1 poly1 BY cont表示方形接触孔把金属1和多晶硅连通这条语句在DRC模式影响带CONNECT关键字的规则在LVS模式则直接决定电气连通性。CONNECT之后是用SCONNECT定义的衬底类连接阱的电位传播依赖它。层次运算段最常见的操作是先做图形筛选再做尺寸变换最后与目标层求交或求差。典型写法fpoly poly1 INTERACT celiso tpoly poly1 NOT INTERACT celiso pcode SIZE pcodei BY 0.15 OVERUNDERINTERACT表示有任意重合关系的图形相当于DRACULA里的OVERLAP。SIZE带OVERUNDER是先放大再缩小适合做外扩检查UNDEROVER先缩小再放大适合做内缩检查。还有一条高频用法WITH WIDTH met1 10直接筛出宽度大于10的金属线做天线检查和EM检查前经常用到。层次运算本身不输出错误它只是为后面的规则检查构造中间层。如果某条规则报错数量异常优先怀疑这段的中间层是否被过度过滤而不是急着去改规则值。2.3 规则检查INT、EXT、ENC与第二关键词规则检查是Runset的主体。最常用三类INT检查最小宽度和最小重叠EXT检查最小间距和缺口ENC检查包围量。每条规则用一对花括号包裹大括号前的名字就是该检查的标识RVE里会直接显示命名要让人一眼看出含义比如nw_chk1表示N阱宽度检查。下面是一套完整的N阱检查模板nw_chk1 { nwell width must 2.5 INT nwelli 2.5 ABUT 90 SINGULAR REGION } nw_chk2 { nwell same potential space must 1.4 EXT nwelli 1.4 ABUT 90 SINGULAR REGION SQUARE CONNECT } nw_chk3 { nwell different potential space must 4 EXT nwelli 4 ABUT 90 SINGULAR REGION NOT CONNECT }第二关键词决定边检查的附加行为ABUT 90用来排除交叉处小于90度的尖角区域去掉它会把本该正常的顶点也报出来SINGULAR让点碰点、点碰线的奇点暴露REGION是显示控制报错时给出完整错误区域SQUARE影响错误结果的呈现形状CONNECT与NOT CONNECT把电气连通性纳入考量同电位阱间距和不同电位阱间距分别写两条规则。这套模板在Bulk CMOS工艺里几乎可以原样复用换工艺节点时只需要改数值和层次名称。2.4 命令行执行与Summary报告解读运行DRC可以走命令行也可以走图形界面。命令行适合批量回归和定时任务calibre -hier -drc drc.rule-hier表示层次化运行如果版图不大Flat模式定位问题更快。运行结束后目录下会出现两个关键输出drc.out是结果数据库给RVE调用的drc_err.sum是文本摘要。打开摘要文件先看RULECHECK RESULTS STATISTICS部分对照下表快速判断状态报告字段含义RULECHECK M1_2 TOTAL Result Count 1M1_2这条规则有1个错误TOTAL DRC Results Generated: 9本次总错误数为9TOTAL DRC RuleChecks Executed: 205实际执行了205条规则RUNTIME WARNINGS非致命警告但可能直接影响完整性如果错误数在个位数到几十个直接开RVE改。如果上千个先别急着逐条点掉回到规则检查段看是不是层次运算写错导致大面积误报。最常见的误报来源是SIZE方向反了、INTERACT误判为NOT或者ABUT 90缺失导致所有尖角顶点都被标记。每次跑完检查一下总错误数量级如果与上一次改动后新增的数量不成比例优先怀疑运算逻辑而不是规则数值这一条经验能让排查节奏快很多。3. LVS对比前的Source准备v2lvs网表转换与器件容差LVS的本质是把版图提取出的SPICE网表与设计给出的SPICE网表做一一比对。但很多数字模块的原网表是Verilog格式Calibre不能直接读Verilog必须用v2lvs转成类SPICE格式转换之后两边网表的器件定义、端口命名规则才能对齐。这里的坑主要在端口顺序和总线端口尤其是PA[31:0]这类数组端口处理不当做出来的LVS报告满篇都是连接关系不匹配。v2lvs原理不复杂根据Verilog网表的元件例化把每个元件名称和端口对应到SPICE库里的同名子电路或库器件替换连接关系并调整语法格式。3.1 v2lvs转换机制与verilog子库的作用-l参数指定Verilog子库里面的模块端口列表声明了端口顺序-lsp和-lsr是SPICE子库的两种模式前者是pin模式不允许数组端口出现后者是range模式可以接受PA[31:0]这类总线端口。如果网表里有数组端口但没提供Verilog子库v2lvs会按默认从高位到低位的方式展开一旦原网表的声明方向与此不一致转换结果就会错位。这个坑在集成第三方IP时最常遇到。正确做法是给每个带总线的子模块都提供对应的Verilog库文件并确保库内端口声明顺序与SPICE子电路里的pin顺序一致。3.2 命令行参数对照与常见用法v2lvs参数看起来多记住核心几个就够用。下面是一个多电源域设计的典型命令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各参数在实际项目里的用途对照如下参数作用适用场景-vVerilog网表输入文件必选-o输出的类SPICE源文件必选-lVerilog子库顶层模块带总线端口时必选-lspSPICE子库pin模式端口是展开标量时用-lsrSPICE子库range模式端口是总线形式时用-s只做INCLUDE不解析的子库需要保留子库声明时用-s0 / -s1Verilog中1b0和1b1对应的地电源网络名必须与Runset的POWER/GROUND定义一致-sk允许多组复合电源多电源域设计时必加-i输出兼容仿真的pin格式转出网表还要做后仿真时加上如果设计只有一对全局VDD/VSS-sk可以省略但多电源域漏掉-skv2lvs会默认把所有电源折叠成一组转出的网表在LVS比对时会出现大量无关的电源连接错误。还有一点容易被忽略-s0和-s1的网络名必须与LVS Runset文件里LVS POWER NAME和LVS GROUND NAME中定义的名字完全一致大小写、通配符不能含糊否则Source网表和版图提取网表之间的电源地节点永远对不上。3.3 LVS Runset的Source声明、电源地与过滤控制Source准备完之后LVS Runset的头部要换成SOURCE PATH和SOURCE PRIMARY随后是电源地定义。带通配符的写法可以同时接受同一网络的不同前缀命名LVS POWER NAME ?VDD? ?vdd? ?VCC? ?vcc? LVS GROUND NAME ?GND? ?gnd? ?VSS? ?vss?通配符?在SVRF里匹配任意长度字符串这样设置后不同IP内部用VDD、VDD18、VCC等命名LVS会统一解析成全局电源。多电源域设计必须把每个域单独用一行LVS POWER NAME列出并打开LVS ABORT ON SUPPLY ERROR YES一旦发现电源地短路立即终止避免后续漫长运行只输出一些没有意义的错误。LVS FILTER UNUSED开头的几行用于忽略悬空器件常见配置是MOS、电阻、电容都设为YES然后通过LVS FILTER UNUSED OPTION AB RC RE RG YC O细化过滤条件AB去掉栅源漏短接的MOSRC去掉两端短接的电阻RE去掉两端短接的电容RG去掉两端短接的二极管YC去掉三端短接的三极管O是重复过滤设置。处理悬空器件要小心如果版图里本来就有设计上被关断的器件Source端网表也要做同样过滤否则两边网表器件数量不同LVS报告会指向一个不存在的连接关系。3.4 DEVICE定义、TRACE PROPERTY与Soft Check器件定义决定版图提取网表把哪些层组合识别成什么器件。一个常见的工艺模板DEVICE MN(N) tpoly tnsd tnsd bulk [0.5] TRACE PROPERTY MN(N) L L 0.1 TRACE PROPERTY MN(N) W W 0.1 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.3DEVICE后面方括号里是拐角因子或标称方块值0.5是MOS沟道拐角修正800是电阻方块阻值0.72是每平方微米电容值。TRACE PROPERTY的三参数分别是器件类型、比较参数、允许误差容限0.1表示沟道长度允许10%偏差。容差不能凭感觉调大Foundry标准Runset给的值已经考虑了工艺波动。电阻电容容差可以放到30%MOS的L/W如果放到30%小的光刻偏差全被掩盖LVS就失去了对比意义。LVS SOFTCHK tnwell CONTACT和ERC PATHCHK是电气规则粗查。SOFTCHK报告阱接触缺漏PATHCHK检查从电源经过器件路径到地的连续性。Report里出现SOFTCHK错误经常指向阱电位不明确或衬底接触距离过远DRC不会报这类问题但LVS会因此判定阱电位网络定义不完整。改法通常两方向补衬底接触孔或者调整Runset里的CONNECT定义让更多层次参与阱电位传播。4. RVE交互排错在Virtuoso中快速定位DRC/LVS错误验证跑完只是开始真正花时间的是排错。Calibre的RVEResults Viewing Environment是把验证结果可视化反标到版图编辑器的关键组件。它既能独立启动也能被Cadence Virtuoso的Calibre菜单调用。区别在于独立启动时RVE与版图工具没有实时联动需要手动指定数据库集成模式下直接在Virtuoso窗口里点击错误坐标版图立刻高亮对应图形。RVE的界面结构分三块左侧是检查项和错误计数右侧是错误坐标列表底部是Runset中注释对应的规则解释。这个布局用熟悉之后排错速度会比看纯文本报告快一个量级。4.1 RVE的启动方式与数据库加载独立模式下RVE读取验证过程中生成的数据库文件。DRC的结果数据库一般是drc.outLVS的结果数据库即SVDBStandard Verification Database。启动命令相同calibre -rve drc_errdrc_err是DRC运行后生成的结果数据库文件LVS生成的SVDB同样可以用这个命令加载。加载后如果规则项很多左侧列表会显得拥挤可以在View菜单切到By Check模式将结果按规则折叠展示。绿色的规则表示0错误红色数字是该规则的错误计数点开就能看到全部错误坐标。如果只想关注某几类问题用Filter按层次名或错误关键字过滤比如输入PD_M1只看金属1密度相关错误。RVE的布局窗口支持放大到错误坐标的上下文这一点比读坐标去版图里找要高效。4.2 按Check分屏浏览与错误跳转错误数量多时逐条点开效率很低。RVE的By Check模式让每条规则的错误集合一目了然。鼠标点选一条错误记录后右侧显示坐标、错误层次和附加属性。与Virtuoso联动时双击记录即可在版图中定位。常用操作对应的快捷键整理如下操作菜单/快捷键用途下一个错误F5跳到下一条错误上一个错误F6跳回上一条错误按规则分组浏览View / By Check以检查项为维度筛选错误跳转版图坐标双击错误记录在版图工具中定位到对应图形打开DRC报告File / Open Report快速换绑不同的结果文件跳转后版图工具会以高亮框把错误图形框出来。此时可以根据RVE底部的规则注释判断是真错还是假错。很多新手在这里容易陷入一个误区看到高亮就去改版图但其实RVE底部注释会写“minimum width of an NW region is 0.86um”这类判定依据先读注释再决定动哪一层能避免很多无效修改。4.3 在Virtuoso中配置Calibre并完成反标Cadence环境集成Calibre后Virtuoso菜单栏会出现Calibre下拉菜单。点击Start RVE选择要加载的数据库文件确认后RVE窗口弹出同时与Virtuoso建立联动。这里我一般会先在Setup菜单里检查Layout工具类型和层级深度是否正确默认设置在某些版本里会把显示层级限制在顶层导致底层错误在版图里看不到。集成模式下重新加载数据库不需要重启VirtuosoRVE的File菜单里打开新的结果报告或Runset文件即可。切换数据库时RVE会自动清理上一轮的高亮标记避免旧错误掩盖新问题。对于LVS比对错误RVE还能同时展开版图提取网表中的对应器件和Source网表中的对应器件两侧并排选中短路造成的器件失配很快就能顺着点亮关系一路追到根因。5. 层次化验证与Runset调优的几条建议Flat和Hierarchical两种模式在实际项目中经常切换。Flat模式把整个版图打平验证时间随图形数量线性增长小模块验证最合适。Hierarchical模式复用单元级结果百万门级设计能在几小时内跑完代价是Debug复杂度上升因为错误可能出现在单元内部也可能出现在单元间连接处。选择判断标准很简单单次运行超过两小时就该考虑切层次化单元数量少但每个单元图形复杂Flat反而更快。Runset里LAYOUT TOP LAYER pad met2 via1这句对验证速度影响很大。它把pad、met2、via1这些层标记为顶层数据Calibre在层次化运行时会优先处理顶层互连不需要从底层单元逐个向上归集。类似的DRC CELL NAME YES配合CELL SPACE XFORM能让底层单元的错误直接在底层坐标系里显示省掉一层坐标变换误差自然小。还有三个常被忽略的检查控制技巧只复验某几条规则时用DRC SELECT CHECK配合组名。先用GROUP nwchk nw_chk?把nw_chk开头的规则定义成一个组再用DRC SELECT CHECK nwchk只跑这个组运行时间能压到原来的十分之一。FLAG OFFGRID、SKEW、ACUTE三个开关决定Summary Report里是否列出非格点坐标、非45度线、锐角图形。这些报告项全部打开的话每轮跑完除了规则错误还要清理一堆与工艺无关的图元瑕疵建议在项目中后期关掉OFFGRID之外的开关。关注Report末尾的Runtime Warnings。LVS报告里出现There is no data for layout net name这种Warning通常指向电源地网络命名不一致或某个子模块在Source网表里丢了。忽略这些Warning直接看对比结果大概率会浪费至少一轮完整验证的时间。最后说一个日常迭代节奏对照摘要文件先看TOTAL DRC Results Generated再看每条规则的Result Count最后用RVE处理错误。如果总数比上一版少但有一两条规则新增了几十个错误先看那个规则名是否对应新改的层次和连线往往是改版图时把某一层意外接错了而不是规则本身的问题。本文还有配套的精品资源点击获取
返回列表