ARTICLE DETAIL

资讯详情

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

数模混合版图LVS验证全流程详解:从Calibre配置到Soft Connect处理

数模混合版图LVS验证全流程详解:从Calibre配置到Soft Connect处理 做数模混合芯片的版图最让人心里没底的环节在我看来就是LVS。尤其是刚从数字或者纯模拟单模块转过来的同学往往会觉得DRC清干净了版图就稳了结果在Calibre LVS这一步被满屏的incorrect net吓到怀疑人生。这篇文章我从layout视角把Virtuoso环境里数模混合版图LVS验证的全流程拆开讲一遍覆盖规则文件的选取、网表导出、RVE结果阅读、soft connect的处理、器件属性的坑以及一些提效和排查的思路适合正在做版图设计、准备用Calibre做LVS签核的工程师也适合刚入门的同学当一份实操笔记。1. LVS验证在数模混合版图里的位置1.1 LVS到底在验证什么LVS全称Layout vs Schematic字面意思就是“版图对原理图”。它的核心逻辑很简单从版图里提取出所有器件和它们之间的连接关系生成一份“版图网表”然后和原理图导出的网表做一次数学上的等价比较看看两端是不是一回事。这个比较不是看图形像不像而是看电学关系。比如一个CMOS反相器电路图版图上只要保证PMOS的源漏栅对应正确、N阱里放对了管子、电源和地没有接反LVS就会认为它是clean的。哪怕画得歪歪扭扭只要拓扑一致、尺寸一致LVS就认账。我在实际项目里见过不少新手刚接触Virtuoso版图时把LVS当成“画完之后跑一遍有错就改”的善后工作这是最大的误区。LVS是tapeout前的一道硬性检查更是一种设计质量兜底。流片成本摆在那里一次连接错误可能让整批wafer报废所以LVS不是“要不要跑”的问题而是“什么时候跑、怎么跑得干净”的问题。1.2 数模混合版图比数字版图麻烦在哪纯数字版图大多用标准单元器件种类就那么几样比如反相器、与非门、触发器LVS跑起来相对省心甚至可以用hcell把标准单元整个“黑盒化”只比端口。数模混合就不一样了。模拟部分什么器件都有各种类型MOS、BJT、电阻、电容、二极管甚至还有电感。每种器件的属性差异极大W/L、m系数、指条数、电阻方块数、单位面积电容值哪一个对不上都会在LVS里报错。更麻烦的是模拟版图里大量出现的匹配结构、dummy填充和保护环。比如偏偏要用共用质心画电流镜源漏连来连去本来在原理图上很清爽的连接关系在版图上会被拉得七零八落LVS一提取就容易出现“不该短的短了该连的没连上”。再加上深N阱隔离、多个电源域、衬底接触点分布不均数模混合版图的LVS验证复杂度直接上一个台阶。1.3 在完整验证流程里的位置芯片tapeout前的物理验证包括很多项DRC是检查几何规则看看有没有违反最小线宽、最小间距LVS是检查电学一致性ERC是检查电学规则比如有没有悬空输入、电源地是否短接还有DFM、PERC、可靠性检查等。这些步骤里LVS对“人和人之间的默契”要求最高。DRC可以靠自动修、自动跑LVS必须人来判断这个错误是真实错误还是dummy导致的伪错误soft connect是真实短路还是工艺上允许的寄生器件属性差几个百分比能不能接受。这也是为什么很多公司把LVS签核交给有经验的人来做。2. 环境准备与LVS输入文件解析2.1 工具链怎么选目前主流的LVS工具是Calibre基本是foundry厂普遍支持的行业标准。Cadence环境里你可以直接在Virtuoso中通过Tools菜单调用Calibre Interactive不需要额外切换软件。听说也有用PVS或Assura的但真到了复杂数模混合项目里大多数foundry的PDK都会明确给出Calibre的rule文件Calibre的兼容性和支持都更成熟我劝你优先把Calibre这套流程跑熟。用Calibre跑LVS这件事本质上是把两套工具链对接起来Virtuoso提供版图和原理图的数据源Calibre负责提取和比对。PDK会附带calibre.lvs、calibre.drc、calibre.xrc之类的rule文件。如果PDK版本更新这些rule文件也要跟着更新我有一个同事就是因为PDK升了级但rule文件还用旧的跑出来的LVS结果错了一大半排查了一个下午最后才发现是版本不匹配。2.2 LVS rule文件的关键段落很多版图工程师觉得rule文件是foundry写的自己只需要填个路径这个理解太粗了。至少要能看懂rule文件里几个关键段落是干嘛的在遇到诡异问题时才能判断是规则的事还是版图的事。一份典型的Calibre LVS rule文件开头长这样LAYOUT SYSTEM GDSII SOURCE SYSTEM SPICE LAYOUT PATH top.gds SOURCE PATH top.cdl这里定义了输入格式是GDSII和SPICE网表并指定了对应的文件路径。再往下会有类似这样的LVS配置LVS REDUCE PARALLEL YES LVS COMPACT YES LVS CHECK OPEN NO LVS CHECK SHORT YESLVS REDUCE PARALLEL是并行优化选项对并联的器件做合并处理跑起来更快也更符合原理图里的等效电路。LVS COMPACT是层次化比较选项如果版图和原理图层次不一致它会在比较时做层次优化。还有一个很关键的段落是device map也就是把版图上的层组合映射成具体的器件类型比如DEVICE NMOS nimp poly nactive ... DEVICE RESISTOR rpoly rp_sab ...这一段如果出了问题提取出来的器件种类就会对不上最典型的表现就是“提取不出电阻”或者“提取出一个莫名其妙的MOS”。2.3 HCell文件的生成与作用对于数模混合版图来说特别是那些带大量数字标准单元的项目直接做平铺式LVS是非常消耗时间的。一个百万门的模块如果每个单元都展开到最小器件去比对跑一次LVS可能要一晚上。HCell就是解决这个问题的。它把一个单元当作“黑盒”只比较它的端口连接关系不展开内部器件。比如一个反相器只要它在版图和原理图里都叫INV管脚映射一致就可以整体当作一个器件去比对。在Calibre里使用HCell很简单可以用foundry提供的hcell文件也可以自己生成。我一般习惯把跑过的clean子模块都存下来在顶层跑LVS时指定好这些hcell速度能快好几倍而且错误信息会集中在真正有问题的模块上排查效率高很多。2.4 网表准备与命名规范LVS的源网表必须从原理图准确导出。Virtuoso里可以用Tools - Simulation - Netlisting导出CDL网表也可以在Calibre的设置里直接指定原理图source作为输入。这里有一个很常见的坑命名规范。Virtuoso原理图里允许net名带大小写、下划线甚至中括号但LVS rule文件对大小写是否敏感是有设置的。如果版图里的net叫VDD!而原理图网表里变成了VDD比对时这两个就是两条不同的net直接报incorrect net。我习惯的做法是所有电源地网络在原理图和版图命名时保持完全一致比如统一用大写VDD、VSS、AVDD、AGND不搞花活。这样一旦出现LVS mismatch你至少可以排除命名问题。3. Virtuoso里跑LVS的核心实操流程3.1 启动Calibre LVS打开版图以后在Virtuoso菜单栏依次进入Tools - Calibre - Run LVS就会弹出Calibre Interactive窗口。第一次配置需要花点时间但配置好后可以保存session下次直接复用。在窗口里有几个关键区域Rules区域选择Calibre的rule文件路径也就是PDK里的calibre.lvs。Inputs区域选择版图文件、起始cell还有source netlist。Outputs区域指定输出目录Calibre会把LVS report、extracted netlist、RVE结果写到这个目录。我第一次用Calibre的时候输出目录随便写了一个路径结果一整晚跑完发现报告文件被覆盖了后悔不已。建议每个模块单独建一个输出目录方便历史结果回溯。3.2 LVS选项怎么配Calibre Interactive的LVS选项里有几个在数模混合项目中非常关键的参数。一个是LVS Soft Connect这个跟第4章的soft connect问题直接相关。默认情况下Calibre会检测soft connect并报告出来但如果你确认某些soft connect是工艺上允许的比如同一个衬底电位可以通过规则设置来放宽检查。另一个是LVS VOLTAGE DEVICES这个决定是否把电源地网络识别成“电压源网络”如果设置不当电源地的连接关系可能会被忽略或误判。还有一个是LVS COMPACT和LVS REDUCE PARALLEL建议在跑大模块时都打开。跑小模块时可以关掉因为平铺比较的结果更直观方便初学者理解LVS到底比了什么。3.3 运行结果与RVE阅读LVS运行完成后Calibre会自动打开RVE也就是Results Viewing Environment。RVE的左侧是错误列表中间是报告预览右侧是版图坐标信息。第一次看RVE的人很容易被错误数量吓住比如一个incorrect net可以连锁产生几十条关联错误。我的经验是先看最顶层的summary也就是LVS Report里的器件数量对比和net数量对比如果device count对不上优先去看器件提取问题。如果net count对不上优先去看电源地或衬底连接问题。如果数量和类型都对上了只是某些instance属性不同那就是property mismatch。RVE里每一条错误都可以双击Virtuoso会自动跳转到对应坐标并高亮显示。这个功能非常有用但要注意高亮的是版图侧你需要自己对照原理图去判断问题出在哪。3.4 一个小模块的完整验证实例拿最基本的CMOS反相器来举例。假设你刚画好一个反相器的版图从原理图导出CDL网表后在Calibre配置好rule和source运行LVS最后报告显示两条net和两个instance全部匹配这就是clean了。实际上做数模混合项目时我习惯把大模块切成功能子模块比如模拟前端、DAC、LDO、时钟buffer。每个子模块先单独跑LVS确认干净后再拿到顶层去跑。这样一旦顶层报错错误会集中在子模块之间的连线关系上而不是海量的内部器件。4. 数模混合版图必踩的坑Soft Connect与器件属性4.1 Soft Connect问题到底怎么回事Soft connect是数模混合版图LVS里最常见的疑难杂症。很多刚入门的版图工程师看到这个词就懵其实可以这样理解版图上两个网络在画法上是分开的但因为衬底、N阱或隔离结构的存在提取时出现了一条“软”的寄生连接LVS默认认为它们是短路了。最典型的场景是两个不同的地比如模拟地AGND和数字地DGND版图上明明画了两个独立的guard ring但它们都坐在同一块P型衬底上提取时衬底的电位把两者连到了一起。在某些工艺规则下Calibre就会报soft connect。另一个常见场景是N阱里的PMOS。如果两个PMOS坐在同一个N阱里而N阱通过接触点接到VDD从版图提取的角度看这两个PMOS的body其实通过N阱是连通的。原理图里如果只是单独标了各自的body端没有显式连到一起LVS就会觉得这里有额外连接。4.2 Soft Connect的几种处理方案处理soft connect最粗暴但也是最有效的思路是让这些“软”连接变成确定性的“硬”连接或者在规则里把可忽略的软连接过滤掉。如果两个地确实在芯片内部最终是需要连到一起的那直接在版图上把它们连成一个网络或者在最顶端把它们短接LVS就不会报。如果你想让AGND和DGND在物理上真正隔离那必须用深N阱隔离结构把数字地底下掏空再用独立的guard ring围住让两个地之间不存在公共衬底通道。在Calibre rule里也可以用LVS FILTER对特定的soft connect做过滤。比如LVS FILTER sh_short (SOFT CONNECT)这条命令会把所有标记为soft connect的短路过滤掉但用之前一定要确认这些soft connect真的不影响功能。我见过有人图省事把soft connect全部过滤掉结果真正该报的衬底漏电通路也被过滤了直到芯片测试才发现问题。所以对soft connect的处理一定要逐个检查不要无脑全滤。4.3 Device property错误是重灾区数模混合版图里除了连接关系器件属性的比较也是LVS一大重点。Property错误不像连接错误那么显眼但它同样致命因为哪怕拓扑完全一致尺寸不对也意味着版图和原理图在电学行为上不一致。最常见的属性错误就是W/L不匹配。比如一个运放输入对管原理图上画的是W20uL2um4因为设计者想用四个并联的指条来降低失配。但版图工程师画的时候可能忘了把m设进去画了4根finger却用了1个instanceLVS一提取就变成了W20uL2um1和原理图对不上。你说这管子尺寸有没有变没有。但在LVS看来这就是property mismatch。解决办法是在画版图时保持和原理图一致的参数设置方式。要么在原理图里就用m4要么在版图器件的property里明确指定指条数和乘数。碰到PDK自带的pcell记得用CDF参数里的Multiplier和Fingers不要靠手动画多个poly。还有一个高频的坑电阻阻值不显示。有同事遇到过版图里的电阻怎么加都显示阻值最后发现是画的时候没有调用PDK的电阻pcell而是手动画了电阻层和两个接触孔结果Calibre提取时没有读到“这个图形是电阻”的语义自然提取不出阻值。正确做法是电阻一定要调用PDK的pcell或者至少按照rule文件里电阻器件的layer combination去画保证电阻层、阻挡层、接触孔的搭配能被规则识别。4.4 Dummy器件和匹配结构怎么处理模拟版图特别爱放dummy电流镜匹配结构也喜欢加虚拟管。这些dummy管本身不参与电路功能但如果不做任何标记LVS就会把它们当成extra device报出来。常规的处理方法是在版图上给dummy器件加专门的标记层然后在rule文件里用LVS FILTER或LVS DELETE把带标记的dummy过滤掉。有的PDK里会直接提供dummy器件它们的property已经定义好了“是否参与比较”的选项。我之前做电流镜版图时为了匹配效果在管子两侧加了多个dummy MOS结果跑LVS时多出一堆extra device。后来在dummy器件外圈加了一个DUMMY_MARK层再在rule里把该层上的器件过滤掉问题就解决了。这里有个容易迷惑的地方dummy过滤会影响周围的net连接判断所以过滤时不要连net一起滤掉最好只滤器件本身剩下net上的浮空连接再逐个看。5. 常见问题排查与效率提升5.1 看LVS Report的三个层次拿到LVS报告以后不要急着逐条修错误。先花30秒看报告的结构通常Calibre会给出三个层次的结论第一层器件数量对比。如果多了或少了几十个器件大概率是dummy过滤或提取规则的问题。第二层net数量对比。net数量对不上重点查电源地短路、衬底接触点遗漏、悬空引脚。第三层instance对应关系。这里的错误类型最杂包括incorrect instance、incorrect net、missing/extra device、property mismatch。我习惯按这个顺序从上往下排查先解决数量级的大问题再处理小问题。很多时候一个net的短路会引发几十条instance错误等net层面对齐了小错误会自动消失大半。5.2 常见LVS错误类型速查错误类型常见原因排查方向Extra Devicedummy未过滤、重复放置器件检查LVS FILTER、dummy标记层Missing Device器件层缺失、提取规则无法识别检查device map、版图层组合Incorrect Instance器件类型或尺寸不匹配对比RVE中的property列表Incorrect Net短路、开路、net命名不一致高亮net看连接、检查命名规范Property MismatchW/L、m、finger、阻值等参数不一致查看差异数值回到pcell设置这张表是我项目里的自查清单。遇到问题先归个类能省很多时间。5.3 提高LVS运行速度的实用手段除了HCell还有几个提速的小技巧。一是善用并行计算。Calibre支持多线程运行在环境变量里设置CALIBRE_LVS_RUNSET可以指定并行度。我一般在大模块上开到8或16速度提升很可观。二是模块单独验证。顶层跑LVS前先把子模块跑干净再去跑顶层。顶层跑LVS时可以用hcell把已经clean的子模块黑盒化这样顶层只需要关注模块间的连接运行时间大幅缩短。三是source netlist不一定要每次都从Virtuoso导出。如果你只是改了一小块版图可以直接在顶层复用之前导出的CDL文件只要原理图没动过source部分就不会变。减少重复导出也能节省不少时间。5.4 配合设计流程的一些心得LVS不是孤立存在的它和前面的设计工作是一套链路。比如你用Virtuoso里扫描NMOS gmoverid确定尺寸最后得到一组W/L那么在版图阶段这颗管子的实际画法必须严格落在那个尺寸上LVS就是验证这个落地的工具。很多设计工程师在仿真里把电路调到很好结果版图画完LVS一跑发现W/L被改得面目全非这就是设计和版图没有对齐。LVS在这里起到的作用不只是抓错误还是一种“契约”。电流镜匹配这类对版图要求极高的结构画的时候怎么靠近、怎么对称、怎么加dummy都会直接反映在LVS结果里。如果你画的电流镜版图在拓扑上对称但LVS报出的net数量不一致那多半是源漏共用或衬底连接处理出了问题。这时候别急着改版图先展开netlist对比一下看看版图提取出来的连接是不是真的多了一条不该有的通路。写在最后的小建议跑LVS这件事经验比理论重要得多。我自己做了几年版图最大的体会是LVS跑得快、改得顺很大程度取决于画图时的层次规划。电源地网络怎么走、衬底接触点放哪、dummy怎么标记、器件的property设没设对这些如果一开始就想清楚后面几乎不用加班。反过来如果画的时候随手拖、随手连等LVS报出一堆错再一个个看可能一个模块就要来回改好几轮。我建议做数模混合版图的朋友每周固定留一点时间把自己负责的模块单独跑一次LVS哪怕只是看着report确认一下当前状态。跑多了就会形成直觉看到错误类型就知道大概是什么原因造成的然后再去定位效率高很多。最后再分享一个实用习惯每次LVS clean之后把report和hcell文件按版本存好等到tapeout前做回归对比时你会发现这些历史记录价值很大。
返回列表