ARTICLE DETAIL

资讯详情

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

Calibre LVS全流程解析:从版图对比到报错排查的芯片物理验证指南

Calibre LVS全流程解析:从版图对比到报错排查的芯片物理验证指南 芯片设计圈有一句玩笑话前端工程师写代码的时候觉得版图很神秘后端工程师跑LVS的时候希望前端给的网表最好一个字都别改。但真到了流片前不管你是Verilog写得飞起的逻辑工程师还是天天往底层堆标准单元的物理实现工程师都绕不过同一个关卡——Calibre LVS。我当年第一次拿到“LVS报错”的邮件时人都是懵的明明前端仿真都过了PR也做完了为什么物理验证还有一大堆问题后来跑得多了才明白LVSLayout vs. Schematic版图与原理图一致性检查就是把两张图对一遍一张是电路网表Netlist另一张是画出来的版图GDSII。对上了说明版图实现了设计意图对不上轻则改版图重则整个后段流程推倒重来。这篇文章我打算用实际跑过的流程把Calibre LVS的准备、执行、报告解读、常见报错排查完整拆一遍适合正在做数字后端、准备流片验证的工程师也对刚接触物理验证的学生有直接参考价值。1. LVS在整个芯片设计流程中的位置为什么非要卡这一关1.1 从RTL到GDSLVS站在哪一步一条完整的数字IC设计流从前端到后端大致是RTL代码Verilog/SystemVerilog经过综合变成门级网表再做形式验证确认逻辑没被改坏之后布局布线PR把网表映射到物理版图上产生GDSII文件PR之后还有时钟树综合、时序收敛、电源完整性分析最后才是物理验证环节。很多人以为PR跑完了就是tapeout实际上PR工具输出的GDS只是“设计者想象中的版图”它必须被物理验证确认才能真正交给foundry流片。物理验证的核心就两个DRC是查版图有没有违反工艺制造规则LVS是查版图和原始网表是不是同一个东西。两者缺一不可。DRC错了可能只是改间距改尺寸LVS错了通常意味着某个器件的连接关系、尺寸参数、端口定义和设计意图已经分叉这个问题的后果严重得多。从时序上看LVS往往在DRC之后、DFM可制造性设计检查之前跑。实际项目里PR完成后第一件事就是提早期DRC和LVS因为越早发现问题修起来成本越低。等到所有IP都集成完了你再抓到LVS错误那改一次版图可能就得把前面所有验证重跑一遍时间和人力成本完全不是一个量级。1.2 电路视角与版图视角的一致性到底怎么比LVS的原理通俗讲就是“双向翻译后再逐条比对”。工具先把GDS版图中的每一层图形识别成具体器件——MOS管、电阻、电容、二极管、双极型管等再把它们之间的物理连接关系提成一张“版图网表”同时把电路网表通常是CDL/SPICE格式也读进来作为“原理图网表”。然后Calibre按照规则文件里定义的器件属性、节点连接、端口名称对两张网表做对比。比对的重点有三项元件数量是否一致、同一网络上的连接关系是否一致、节点的名称和端口是否匹配。比如电路网表里某个反相器PMOS的W是1um版图提取出来的PMOS如果W只有0.8um那立刻就是parameter mismatch。再比如电路里VDD和VSS是两个独立网络版图提取后如果在衬底处意外连通了就会报short或soft connect。这也是为什么LVS不能靠肉眼检查代替。一个千万门级芯片版图里几亿个图形靠眼睛看根本不可能。Calibre这类工具的价值就是把这件繁重的事自动化并且用规则文件把foundry工艺的特殊性接进去——不同工艺节点识别规则、连接规则、提取规则差别很大LVS规则文件基本都是foundry直接提供的不要随意改。2. 跑LVS之前必须搞清的三类核心输入网表、GDS、规则文件2.1 Verilog网表、CDL网表、SPICE网表到底喂哪个给LVS很多初学者会直接发懵标题写的是Verilog到GDS为什么LVS的source文件却不是Verilog这里需要把网表类别理顺。综合和PR阶段用的Verilog门级网表描述的是逻辑单元之间的互连关系它关注的是“门”和“线”不太关心晶体管级细节。而Calibre LVS要做的对比是物理层面的晶体管级对比所以source端最常用的是CDL网表Circuit Design Language本质上是一种SPICE格式的网表。标准单元库厂商在推出库的时候都会同时提供用于仿真的SPICE模型和用于LVS的CDL网表二者符号、器件、端口需要保持对应。实际项目中我见过三种做法。第一种最标准直接用foundry或IP厂商提供的CDL网表作为source往LVS里灌。第二种常见于后端流程不完整的项目把PR输出的Verilog网表交给工具转换成SPICE/CDL格式再用转换后的网表做LVS。第三种Calibre本身也支持直接读Verilog网表做source但需要正确设置电源地节点和层次映射否则很容易出现端口不匹配的问题。我的建议是除非你对规则文件非常熟悉否则优先用CDL格式的source网表。Verilog门级网表里电源地通常靠命名约束比如VDD、VSS自动连接没有一个显式的物理连接描述直接拿去跑LVS容易出一些莫名其妙的误报。转成CDL之后电源地和衬底节点的连接关系都能显式体现排查问题会直观很多。2.2 GDS里的图形如何变成电路器件GDSII是版图的存储格式本质上就是一堆几何图形矩形、多边形、路径每个图形都有图层号和数据类型号。比如N阱是某个层多晶硅是另一个层有源区一个层金属一、金属二又各是各的层。Calibre LVS做的第一件事就是把这些几何图形按照规则文件里的定义合成有电学意义的器件。这个环节有个专业术语叫layer generation意思是基于原始层做逻辑运算生成一层抽象的识别层。比如MOS管的有源区通常由注入层和有源区的交叠部分生成栅极则是多晶硅覆盖有源区的区域。规则文件里会写明这些层之间的布尔操作顺序顺序不同最终识别出来的器件边界就不同直接影响W/L提取值。因此GDS文件和规则文件是否匹配特别重要。经常有团队换了新PDK手头还拿着旧版规则文件跑出来的器件数量全乱套。图层映射不对LVS第一步就会崩。所以跑LVS之前务必核对GDS里各层的layer number和datatype是否与规则文件期望的一致必要时通过layer map文件做映射。2.3 规则文件里到底写了哪些关键信息这里必须强调LVS规则文件不是用户自己写的它是foundry发布、随PDK一起提供的标准验证规则文件。你不需要重写它但必须知道它包含哪些关键区块因为这些区块直接决定了你的LVS怎么跑、用什么选项。典型的一个Calibre LVS规则文件基本结构包括// 规则文件典型结构示意 LAYOUT SYSTEM GDSII // 输入版图格式 SOURCE SYSTEM SPICE // 输入网表格式 LAYOUT PATH top.gds // 版图文件路径 SOURCE PATH top.cdl // 网表文件路径 LVS REPORT top.lvs.report // 报告输出路径 LVS POWER NAME VDD // 电源网络名 LVS GROUND NAME VSS // 地网络名 CONNECT LAYER M1 M1_PIN // 金属连接定义 CONNECT LAYER M2 M2_PIN // 金属连接定义 // 器件定义、层运算、提取规则在这里继续...LVS POWER NAME和LVS GROUND NAME是重点它告诉工具哪些节点应该被识别成全局电源地节点。多电压域设计里电源地可能有很多组这里可以写多个名字甚至用通配符匹配。这个配置如果和网表里的命名不一致报出来的错误会非常难查经常出现“莫名其妙的悬空节点”。规则文件里还有大量关于器件识别的语句什么条件下识别为NMOS什么条件下识别为PMOS电阻的方块电阻值是多少电容的平板电容密度是多少等等。这些不是摆设它们直接影响LVS对比时的参数阈值和判定标准。3. Calibre LVS实操全流程从建目录到读懂报告3.1 动手前先建好工作环境与目录跑LVS是个输入输出文件比较多的活我习惯先建一个固定的目录结构避免文件散落一地导致版本错乱。通常会这样分lvs_run/ ├── gds/ # 放GDS文件 ├── netlist/ # 放CDL/SPICE网表 ├── rules/ # 放foundry提供的rule deck ├── run/ # 运行目录放中间文件和报告 └── output/ # 最终有效报告存档输入文件方面至少要确认四件事GDS路径和顶层cell名是否正确、source网表顶层是否和GDS顶层一致、规则文件版本是否和PDK版本匹配、规则文件里写好的LAYOUT PATH和SOURCE PATH要不要改成你自己的实际路径。如果规则文件用了相对路径那运行目录必须选对这个坑我在新手期踩过明明报告路径设对了因为run目录不对Calibre读不到网表直接报source file not found。3.2 图形界面操作Calibre Interactive怎么填目前最常见的操作方式是嵌入在Cadence Virtuoso里的Calibre Interactive。它本质上是给Virtuoso做了一套菜单集成不需要在终端敲太多命令适合边看版图边排查问题。流程大概是这样的在Virtuoso的Layout Editor里打开顶层版图菜单栏选Calibre → Run LVS弹出的窗口里分几个页签。Rules页签里填规则文件路径格式选择Calibre LVS Rules。Inputs页签里要分别指定Layout和SourceLayout选GDSII格式路径指到你的GDS文件Source选SPICE/CDL路径指到网表文件。这里如果点选了“Export from layout viewer”工具有时会直接从版图数据库提取当前编辑的cell作为layout输入省去GDS文件路径的填写但我个人还是更倾向于明确指定一个GDS路径因为这样结果可复现不会因为版图窗口里保存不完整就出问题。Outputs页签里可以指定报告名称、结果数据库路径、是否生成SVDB运行产生的中间数据库等。Run Directory在Transcript页签里设置建议放在刚才建的run目录下。全部填好之后点Run LVS开始跑。界面左下方会滚动输出日志最终弹出一个对话框告诉你LVS通过还是不通过。图形界面的好处是能直接调用RVEResults Viewing Environment结果查看工具做错误定位版图窗口里会高亮出具体位置。缺点是它依赖Virtuoso环境而且很多人用的其实是纯命令行流片环境这时候就得靠命令行方式跑。3.3 命令行方式适合批量回归和无人值守流片阶段或者做大量模块级验证时我更推荐命令行方式。它最大的优势是可控性和批量能力一个顶层LVS要跑几个小时总不能一直开着Virtuoso界面等。命令行方式的核心就是直接调用Calibre的可执行程序指向规则文件calibre -lvs -hier -spice lvs_rules_file-hier表示层级化LVS适合大设计-spice表示source网表是SPICE/CDL格式。实际使用时会再加一些参数比如指定运行目录、指定输出报告路径等。如果设计很大可以在机器资源允许的情况下打开并行选项具体参数不同版本略有差异用之前建议看下版本的calibre -help。跑完之后运行目录里会生成几类关键文件.lvs.report是最终对比报告.lvs.log是运行日志.lvs.extract是版图提取出来的网表还有svdb目录存放Calibre的中间数据库。排错时最有用的是report和extract文件前者告诉你对比结论后者让你能检视版图提取出的网络结构。我个人的习惯是每次跑完都把report文件完整读一遍尤其是开头summary部分。哪怕最终结论是CORRECT也要看一眼器件总数、节点数是否在合理范围。有时候工具会报CORRECT但器件总数少了一堆这种是“看起来对实际上不对”的典型情况多半是某些器件未被识别直接跳过了对比。3.4 报告的基本姿势先看Summary再追DetailCalibre LVS报告的summary部分核心是几条统计信息格式类似 Cell Summary Report Source Cells 1 Layout Cells 1 CORRECT“CORRECT”出现意味着当前层次上的对比通过。但注意这只是当前比较范围的结论。如果某个模块被你设成了LVS BOX跳过对比那即便顶层CORRECT也不代表全芯片正确。报告里最重要的对比统计是三类器件总数、节点总数、端口总数。如果这三类数字里任一个和预期差很远后面detail部分往往已经报了一堆错。比如源端netlist有100个器件版图extract出来90个那基本就是有器件识别失败或者画漏了节点数差很多通常是电源地网络合并出了问题端口数不一致多半是pin层定义或顶层连接问题。细看detail部分重点是INCORRECT标记开头的条目常见的报错标签有这样几种PORT MISMATCH、SHORT、OPEN、SOFT CONNECT、PARAMETER MISMATCH、DEVICE COUNT MISMATCH、NCC。每一种都对应一类经典问题接下来逐个拆开讲。4. LVS常见报错全解析从报错文本到根因定位4.1 SOFT CONNECT最容易忽视的版图“隐形短路”soft connect这个词看着陌生但跑LVS的人隔三差五就能碰上。它指的是两个本应独立的电源/地网络通过衬底或者阱形成了低阻通路被提取器判定为“软连接”。我举个真实例子。某个芯片里同时有VDD和VDD_IO两路电源版图设计时PMOS的N阱原本应该各自接各自的电源但版图里两个阱之间没有做正确的阱隔离或者同在一个阱里N阱节点被提取出来连接到了同一个电位于是工具就在两个电源域之间报出SOFT CONNECT。还有一种常见场景是数字模块和模拟模块共用一个衬底P衬底接触没有区分好导致VSS和AVSS网络被识别成同一个节点。排查soft connect第一步在报告里搜SOFT CONNECT关键词它会明确列出是哪些网络之间发生了软连接。第二步打开版图定位到对应区域高亮出这两个网络重点看阱和衬底的接触有没有画对。第三步检查网表和规则文件里的电源地定义确认LVS POWER NAME和LVS GROUND NAME里是否包含了所有电源地网络名。如果多个网络共享同一个P型衬底并且网表里没有显式声明衬底节点工具就会默认它们通过衬底相连这时候soft connect几乎是必然的需要靠隔离环guard ring在物理上断开或者在网表/规则层面显式建模衬底连接。我的处理经验是跑LVS前先静态自查一遍版图电源地连接尤其是多电源多模块设计。提前在版图上把阱接触、衬底接触补齐比事后在LVS report里一条条追根因省力得多。4.2 端口类报错PORT MISMATCH的三种典型场景PORT MISMATCH是另一个高频报错。简单说就是source网表和layout提取网表的端口列表对不上。可能的表现是源端有50个端口版图提取出48个端口或者两边都有50个端口但其中两个名字对不上。第一种典型场景是顶层pin层次不对。版图的pin必须画在规则文件约定的金属层和text层上如果PR工具出GDS时把pin的text层定义错了或者pin画在了金属二但连接点实际在金属三LVS就会认为这个顶层pin不存在。第二种场景是pin没有连到应该连的网络。很多时候版图里pin图形在但它和顶层某根金属线的连接关系是断开的提取器找不到这个pin的电学路径它自然就从端口列表里消失了。第三种场景是电源地端口声明问题。源端CDL网表里通常把VDD/VSS声明为全局端口但版图顶层的VDD pad如果没连接到对应金属层或者被命名成别的名字比如VDDIO端口匹配也会失败。处理端口不匹配我的固定做法是先在report里找到source端口列表和layout端口列表把两个列表逐行对比找出差异项然后回到版图用Calibre RVE高亮缺失的端口位置检查那一层的pin图形是否存在、是否与金属连接、text层名称是否完全一致——注意名称大小写敏感VDD和vdd在LVS眼里是两个完全不同的名字。4.3 器件失配报错数量对不上和参数对不上器件类报错主要分两种数量不匹配和参数不匹配。数量不匹配的例子是source网表里反相器单元有1000个PMOS、1000个NMOS版图提取出来只有999个PMOS。这种差一个的情况很多时候不是真的画漏了而是某个PMOS的源漏区域被其他层遮挡导致提取器没识别出来。常见原因是版图上存在不必要的金属铺铜把有源区分成了两截或者多晶硅栅被填塞孔打断。参数不匹配则集中在W/L值、M倍数、电阻阻值、电容容值上。比如标准单元里PMOS的W设计是0.9um提取出来是0.85um这种差异有时候不是错误而是规则文件里对于层运算的尺寸外扩定义和PR工具导出版图时的处理方式不完全一致导致提取出的边界面略有偏差。遇到这种情况第一反应不是改版图而是确认规则文件版本和PDK版本是否严格匹配。换了PDK版本但规则文件没换这是最常见的W/L误报原因。排查时我会用RVE把报错器件在版图上高亮出来直接看highlight区域覆盖的图形再用Calibre的网表浏览器Netlist Browser分别查看source和layout两端该器件的完整参数。参数差异是普通失配还是规则文件版本问题一眼就能分辨。4.4 网表解析、许可与环境变量类报错除了版图本身的错误跑LVS时还会遇到两类很烦人的报错网表读不进去和工具跑不起来。网表解析类报错常见的有“unable to open file”“error in subckt definition”“invalid device syntax”。这些多半是CDL网表里的include路径不对或者某些子电路定义缺少.ENDS或者网表里存在规则文件不支持的特殊器件语法。处理方式很简单用文本编辑器打开网表定位报错行号看那一行的语法格式是否标准。如果是IP厂商提供的加密网表还要确认Calibre版本能支持对应的加密格式。许可类报错特征非常明显打开日志第一行就是类似“ERROR: failure to obtain a license”的提示。这个问题我在不同项目里见过很多次常见原因无非几种license server不可达、环境变量里LM_LICENSE_FILE路径配错、当前机器节点没有申请到对应feature的授权。排查时先ping一下license server的机器名或IP确认网络通然后检查环境变量是否指向正确的license文件最后确认当前用户对license功能的使用权限。有些工具版本需要单独的feature比如旧版流程里常见的feature名是calibreInterActive或calibrelvs新版本又可能是其他feature名如果项目里换过工具版本要同步更新环境配置。这类问题一般不是设计本身的问题但很容易卡住整个流程尤其是紧急tapeout前夜license一动不了全组都干等。我建议在项目一发版前就把license环境全部核实好别等到火烧眉毛了再处理。4.5 短路和开路SHORT和OPEN的排查思路SHORT和OPEN是LVS report里非常刺眼的两个词。SHORT的意思是两个本不该相连的节点在版图提取后被判定为连在一起比如A网络和B网络之间多了一根不该有的金属线或者某层通孔打多了把上下两层不该连接的金属连到了一起。OPEN则相反本该相连的节点断了最常见的是金属线断裂、通孔缺失、或者两个图形之间间距过大没有搭上。对于SHORT我的排查思路是先看report里列出的短路的两个网络名称。多数情况下这个名称会直接指向问题比如VDD和VSS短路优先去检查反相器阵列区域的电源地走线看看是不是std cell的VDD rail和VSS rail之间被打了一个错误的tap孔或者填写金属时fill把两个网络连起来了。对于OPEN则更多发生在高层金属跳线、电源环、或者走线很长的信号线上用RVE沿着报错网络追踪找到断开点的位置。这里要特别提醒一点很多OPEN和SHORT不是版图作者主动画错的而是后期加金属filldummy metal的时候fill图形没有做网络排除自动生成的fill直接把两个网络搭在了一起。所以每次PR工具填完金属以后一定要重新跑一遍LVS确认fill没有引入短路。5. 进阶场景多电压域、模拟模块和顶层集成中的LVS处理5.1 多电压域设计的LVS关键点现代SoC几乎没有单电源域。多电压域条件下LVS的电源地配置要特别仔细。规则文件里的LVS POWER NAME和LVS GROUND NAME可以设置多个值甚至支持用通配符表示一组名字。比如你同时有VDD、VDD_IO、VDD_MEM可以写成LVS POWER NAME VDD VDD_IO VDD_MEM。但光设置名字还不够还要考虑不同电压域之间的衬底隔离。在同一个P型衬底上不同地网络之间的隔离靠的是深N阱DNW等结构如果版图里没有正确放置隔离结构LVS提取器会把两个地网络通过衬底连起来报出soft connect或者short。多电压域下每个独立的电源域都应有完整的阱环和衬底接触环这既是抗闩锁的可靠性要求也是LVS能正确识别网络独立性的物理前提。另外多电压域设计中经常有电平转换单元Level Shifter这类单元在网表里是普通标准单元形式但版图上可能同时桥接两个电源域。如果电源地配置没写好LVS会把level shifter两端的电源误认为同一个网络造成大量误报。处理办法是仔细核对level shifter单元的CDL模型确认其电源引脚分别落在正确的power name列表下。5.2 模拟与混合信号模块该不该做LVS很多数字后端工程师会下意识认为模拟模块不该由自己管但顶层集成时模拟模块往往以IP形式嵌入SoC此时LVS必须直接面对它。对模拟IP的处理有两种常见策略。第一种是顶层LVS直接把模拟模块当作黑盒跳过规则文件里用LVS BOX语句把模拟IP的层次设置成不参与对比。这种方式效率高适用于模拟IP已经单独完成LVS验证并且有官方报告的情况但顶层LVS无法覆盖IP边界的互连问题只推荐在IP验证结果可靠时使用。第二种是把模拟模块完整纳入顶层LVS对比这种方式更彻底但前提是模拟IP的CDL网表和GDS层次结构可以直接用于当前规则文件否则会遇到大量提取识别问题。我见过最痛苦的场景是PR团队在没有模拟工程师参与的情况下硬跑含模拟IP的顶层LVS。模拟模块里的电阻、电容模型和数字标准单元完全不同网表格式差异也大一跑就是几百个报错。如果有条件顶层LVS还是让模拟工程师确认一下模拟部分的输入输出接口和电源域划分再决定哪些模块BOX跳过、哪些模块参与完整对比。5.3 层级化LVS大芯片时代的必然选择顶层芯片规模一大扁平化LVS会慢到让人怀疑人生。层级化LVSHierarchical LVS的核心思路是把已经验证过的子模块作为已知单元顶层只对比模块之间的互连关系从而把计算量降下来。实际操作中这是靠LVS BOX机制实现的。比如你有一个已通过验证的PLL模块可以在规则文件里把它声明为BOXCalibre就不会在顶层再对这层做逐器件对比只把它当成一个具有端口连接关系的黑盒。这样顶层LVS的速度会大幅提升但同时它依赖一个前提被声明为BOX的模块之前必须通过完整的LVS验证。如果某次流片因为底层模块改了版图但顶层mask上该模块的BOX声明没有更新结果就是顶层LVS顺利通过底层实际有问题却没人发现。所以我的工作习惯是在项目里维护一张“模块验证状态表”记录每个子模块的GDS版本、网表版本、LVS规则文件版本、验证通过时间。每次顶层LVS之前先对照这张表确认所有BOX模块的状态仍然有效。版本不对的模块宁可先跑一遍模块级LVS再纳入顶层也绝不图省事直接跳过。6. 排查LVS问题的通用方法论与避坑清单6.1 一套从总体到细节的排查顺序LVS报错多了之后很多新手容易慌看到几百条错误不知道从哪下手。我的建议是严格按顺序排查不要拿到报告就从第一条开始改。第一步先看顶层端口。端口全对上了再往下看器件数量器件数量对上了再看节点和网络最后才追到具体某一条器件的参数问题。这个顺序的逻辑是端口是顶层接口如果端口都有问题往下查再细也是白搭改完端口其他错误可能自动消失一大半。第二步看电源地网络。确认VDD/VSS/VDDIO这些全局网络上有没有short或soft connect电源地是全局性的一个短路点能牵连几十上百条报错把电源地问题修复后很多连带报错会被重新分类。第三步才轮到信号网络上的开路和短路。第四步再看器件参数细节。这个顺序我用了很多年实测下来比从头追到尾效率高得多。原因很简单LVS报错是有因果链的一个端口问题会引发一堆器件失配你把根因处理了叶子错误自动消失。6.2 高频问题一页速查为了便于平时快速定位我把这些年遇到的典型LVS问题整理成一张表遇到报错先翻这一页。报错现象最常见根因检查路径SOFT CONNECT阱/衬底接触缺失多电源域未隔离检查阱环、衬底环、电源地命名PORT MISMATCHpin层/文字层定义错、pin未连金属高亮pin核对端口列表DEVICE COUNT MISMATCH器件识别失败、金属铺铜切开有源区定位识别区域检查层运算覆盖PARAMETER MISMATCHW/L提取偏差、M倍数错误对照PDK版本和规则文件版本SHORT多余金属连接、fill误连沿报错网络追踪高亮OPEN金属断裂、通孔缺失RVE沿网络找断点source file not found规则文件路径/运行目录错误核对规则文件路径和run目录license报错环境变量、授权feature不对检查LM_LICENSE_FILE和feature列表这张表不能替代完整报告分析但它能帮你快速划定排查范围。大多数情况下根因都能归到这些类别里。6.3 避坑清单这些都是拿加班费换来的教训第一跑LVS之前确认所有源文件的绝对路径和文件名拼写。项目目录一旦被人移动过、重命名过规则文件里的相对路径就会失效报的错还是千奇百怪那种。我吃过最大的亏就是顶层GDS更新了但规则文件里的LAYOUT PATH还是旧路径跑出来一堆莫名其妙的OPEN排查了整整半天才发现跑的根本不是当前GDS。第二网表和GDS的顶层cell名必须一致。PR工具导出的GDS顶层常常带后缀比如top_asic但CDL网表顶层叫TOP这种不匹配会在报告里体现为“顶层找不到”。遇到这个问题可以在Calibre Interactive的Inputs设置里显式指定layout的顶层cell名字或者在规则文件里用相关语句指定但最省事的方法还是统一命名规范。第三标准单元库的CDL网表里子电路名和GDS里cell名要保持一致。现在主流库通常没问题但一些定制单元、修过的ECO单元容易出幺蛾子。ECO改版之后如果底层cell变了但CDL网表没同步更新LVS报出的偏差会把人文三观都整崩溃。第四金属填充metal fill对LVS的影响。PR工具在完成布线之后通常会往空旷区域填充metal fill以满足金属密度要求。这个步骤必须在顶层LVS之前完成并重跑否则顶层LVS报告里的网络连接状态和最终流片版图是不一致的。这个问题最隐蔽因为工具填fill的时候不会主动告诉你它在哪些网络上加了图形。第五多电源域设计一定要盯着soft connect检查。很多芯片流片后才发现电源之间的衬底串扰问题追根溯源往往就是LVS阶段soft connect没有彻底清理。被标成soft connect的网络哪怕最终LVS标了CORRECT也建议逐条确认是不是真的物理隔离。工具说是CORRECT不代表物理上干净这一点做过高速或模拟设计的人应该深有体会。最后再分享一点个人习惯我自己做过很多次大芯片的顶层LVS最大的体会是这个工作看上去是工具在跑实际上考验的是工程师对设计、版图、规则文件三者的理解深度。很多LVS问题并不在版图上而是在网表和规则文件上。比如电源地命名不一致、CDL网表版本陈旧、规则文件与PDK版本不匹配这些都不是靠画图能修好的。所以我建议每个跑LVS的人都养成一个习惯每次拿到一份新的GDS或网表先用几分钟做一次快速体检——比对顶层cell名、器件总数、端口总数、电源地网络列表这些看似枯燥的检查往往能省下后面几小时的排查时间。验证工作做久了你会发现LVS不是洪水猛兽它只是一个非常挑剔的校对员你只要把规则理解清楚、把流程规范起来它其实是整个物理验证环节里最“讲道理”的一步。
返回列表