ARTICLE DETAIL

资讯详情

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

Virtuoso原理图驱动版图设计全流程:从SDL布局到LVS验证实战

Virtuoso原理图驱动版图设计全流程:从SDL布局到LVS验证实战 从原理图到版图这是每个模拟IC工程师都绕不开的一条路。很多人把版图设计理解成“照着电路图连线”真正上手之后才发现根本不是那么回事。尤其是用Cadence Virtuoso干活的时候如果你还是靠肉眼一条线一条线地对着原理图去连版图那不仅效率低得吓人而且出错率极高。这篇文章就是围绕“virtuoso根据原理图绘制版图并联接”这条主线把我自己实际跑通schematic-driven layout流程的经验、踩过的坑、以及一些常规文档里不会写的细节全部摊开来讲清楚。不管是刚入门准备画第一个运放版图的新人还是已经被LVS折磨了好几天的老哥这篇内容应该都能帮上忙。1. 核心思路版图不是“画”出来的而是“联”出来的1.1 为什么坚持从原理图驱动版图先聊一个很多人容易忽视的底层逻辑在Cadence Virtuoso里原理图和版图之间并不只是“长得像”的关系而是存在一套完整的层次化数据关联机制。我们常说的“根据原理图绘制版图”本质上是让工具通过schematic instance的名字、pin的名字、net的名字去建立版图器件与原理图器件的对应关系。这条对应关系链只要不断后面所有的操作——从器件调取、布局、布线到最终的LVS验证——都会顺畅很多。我见过不少工程师尤其是习惯用老版本工具或者从PCB行业转过来的喜欢直接在版图里用ASAPAs Simple As Possible方式手动放置器件、手动命名net完全脱离原理图。这种方式不是不能做但后果就是到了LVS阶段软件需要花大量时间去“猜测”版图里哪些器件对应原理图里的哪些器件。一旦遇到电流镜这种多个相同尺寸器件并排的情况或者差分对这种对称结构工具匹配失败的几率会直线上升。到时候你看着一堆unmatched instances报告头皮发麻。所以我现在做项目无论时间多紧都坚持用Virtuoso XL的schematic-driven流程。这套流程的核心价值在于版图里所有instance都带着原理图的“身份ID”连线也尽量通过XL的connectivity-aware布线来生成。这样到最后做LVS软件几乎是“秒认”器件对应关系不需要做大量的device recognition和net naming猜测。省下的时间远比前期初始化环境那点功夫要多得多。1.2 SDL流程的整体架构所谓SDL全称是Schematic-Driven Layout通俗点说就是“让原理图成为版图的老大”。在Virtuoso里打开Layout XL/GXL环境之后工具会读取当前cellview对应的原理图信息然后把原理图中的所有器件以“ghost cell”或“instance”的形式浮动显示在版图编辑区。你可以选择自动摆放、半自动摆放或者完全手动拖拽但无论如何每个摆进版图的器件都已经和原理图里的instance绑定了关系。这个流程不是Virtuoso独有的但目前市面上主流模拟IC设计工具里Virtuoso的这套机制是生态最成熟、兼容性最好的。整套流程大致可以分为五个阶段原理图绘制与前仿真验证这个阶段决定版图的工作量生成版图环境和初始器件映射打开Layout XL导入器件布局Placement与匹配设计Matching包括common centroid等技巧布线Routing与物理验证DRC连接性验证LVS与寄生提取PEX后仿很多人容易把LVS当成最后一步来对待这其实是最大的误区。我在实际项目中会把连接性检查前置到布线过程中每布完一块敏感模块就做一次局部LVS或者至少做一遍connectivity check等全部画完再跑整体LVS。这样能把错误控制在模块级排查起来要轻松得多。1.3 环境准备与关键技术前提开始之前得先确认你的Virtuoso版本和工艺库配置。这里我提几个实际工作中容易踩坑的点PDK版本要和你Virtuoso版本匹配。比如有些老工艺库在新版IC231上会有display resource文件不兼容的问题画版图时图层显示不全吓得以为是license问题。记得加载好display.drf文件。如果没有这个文件版图里很多层次比如diffusion、poly、metal会显示成同一种颜色或者干脆不显示基本没法干活。确认CDFComponent Description Format参数已经从原理图正确传递到版图。正常来说通过XL调入的器件会自动带上前仿设定的尺寸参数W/L、m、fingers等但如果你的PDK的CDF callback没写好可能会出现版图里器件尺寸和原理图不一致的情况。这种事遇到一次就够你折腾半天所以每次生成完版图初版后第一件事就是抽查几个关键器件的参数。另外如果你要用emx这类电磁仿真工具嵌入Virtuoso做高频后仿那还需要额外配置emx的安装路径和工艺层映射文件。这个不是必须环节但如果你做的是射频或高速电路后面大概率会碰到。2. 原理图绘制阶段版图的“地基”全在这2.1 库、cell、view的创建与命名规范很多人觉得原理图阶段随便画一画反正后面还要改。这个想法真的会坑到自己。原理图不仅是电气连接的表达它还是整个版图设计的数据源头。命名规范一乱后面全乱。以我自己常用的方式为例建库的时候库名就起得见名知义比如TSMC_28HPC_ProjectA不要搞个lib1、test这种名字。库里按功能模块划分cell比如opamp_folded_cascode、bandgap_core、ldo_passstage。每个cell下至少要有schematic这个view等到开始画版图时再新建layoutview。器件命名也要讲究。Virtuoso默认的instance名字是I0、I1这样画几个小模块还好一上规模就分不清谁是谁。我通常会在原理图里把关键管子和管子对命好名字比如M1_N_Input_Pair、M2_P_Load或者用MN1、MP3这类带管型的命名。这样做的好处是在Layout XL里调器件时能一眼定位到对应的原理图器件LVS报错时报错信息里也能直接看到是哪个器件的问题省去一层“翻译”工作。2.2 原理图绘制的关键细节从器件到连线画原理图本身是个熟练活但有几个细节和后续版图质量强相关很多人会忽略。第一个是电源和地的处理。有些新手画原理图时习惯用全局电源符号比如vdd!、gnd!而不是真正的电源pin端口。这在仿真时问题不大但进入版图阶段后全局net不会自动在cell边界生成pin。也就是说你的版图画完之后可能发现自己忘了给模块引出电源/地端口LVS时直接一堆open error。我的习惯是即便用了全局电源符号也会在cell的schematic里把vdd!和gnd!引到pin上让它们显式化。第二个是总线连线的标识。现在模拟电路里混合信号设计很常见数字控制信号动不动就8位、16位。在原理图里如果你用7:0这种总线方式来画到了版图里布线时Virtuoso能自动按bit拆开并对齐。如果你偷懒画成单根线然后手动填net名后面版图连线就得手工一条条对效率差很多。第三个是标注重要net的名字。这一点对版图连线的影响被很多人低估。假如你的原理图上所有net都叫默认的net0123到了版图阶段你看着密密麻麻的飞线想找某一个关键信号线只能一条条去查。相反如果你把关键net比如VREF、OUT_P、OUT_N、CLK_IN都显式命名好在Layout XL里这些net会有明确标识布线时可以直接按名字过滤、高亮准确率和速度都能上去。2.3 前仿真验证ADEL中如何设置工艺角版图设计的前提是原理图功能正确否则你画了一坨有bug的版图纯属浪费时间。所以在启动版图之前一定要在Virtuoso的ADELAnalog Design Environment里把前仿跑一遍。很多新人一进ADEL就蒙这里我重点讲一下工艺角corner的设置因为这是热词里反复出现的高频问题也是后期分析PVT变化的基础。在ADEL里跑工艺角一般有两种方式。一种是直接修改model library把工艺库文件里的tttypical-typical、ssslow-slow、fffast-fast等corner切换到对应文件。另一种是用Variables里设置corner参数配合PDK自带的corner配置文件来跑多corner仿真。主流PDK一般会提供一个专门的corner setup文件比如corner_28hpc.scs你在ADE的Model Libraries中添加该文件然后在ADE XL或ADE Explorer里设置多个corner并行跑。这里我踩过的一个坑是跑完tt corner后换到ss或ff corner时仿真器报了“parameter not defined”的错误。排查了半天发现是因为我在原理图里直接用了PDK器件的温度系数参数而这个参数只在tt corner的model里定义ss/ff model库路径没包含那个定义文件。解决办法是在model library setup中把公用的定义文件放在所有corner文件之前加载确保所有工艺角都能看到那些参数。另外一个和ADEL相关的小技巧是PWL波形文件的导入。做数模混合或电源电路仿真时经常需要给某个输入net施加一段不规则的时变信号这时用PWLPiecewise Linear文件比手输一堆电压点靠谱得多。在Virtuoso的vsource属性里Source Type选择PWL然后在File那一栏填上波形文件的路径文件内容每一行就是“时间 电压”。这个功能虽然基础但很多人到了后仿阶段才开始找不如现在就学会。3. 从原理图到版图实操过程全记录3.1 打开Layout XL真正开始联动前面准备工作做足了现在进入正题——在Virtuoso里根据原理图生成版图。操作路径有几种我常用的是在Library Manager里选中原理图cellview然后右键选择Open Layout XL或者直接在CIWCommand Interpreter Window里输入layoutXL命令打开。打开后你先得确认这个cell还没有layout view工具会问你是否从原理图create一个新的版图选“是”。进入Layout XL主界面后左侧会有一个“Schematic”窗口缩略图版图编辑区里会自动生成所有器件的“ghost”轮廓。这些半透明的器件轮廓就是你接下来要摆放的“素材”。接下来有两种做法方法一全自动生成。点菜单Connectivity Generate All from Source让工具把所有器件自动摆放并粗略布线。这个方法适合粗略评估版图面积和布线资源但布出来的结果基本不能直接流片器件乱、走线绕还得大改。方法二半自动手动精调。我推荐先用Auto Placement把器件按rule文件初排一版然后根据模块规划和共享端比如差分对的两个管子要靠近甚至做成interdigitated逐个微调。在实际项目中我通常混合使用简单数字单元直接自动摆放模拟敏感模块如电流镜、差分对单独拖出来手动摆。这样既保证效率又不会丢掉模拟版图的精度。3.2 器件摆放与匹配设计电流镜是试金石版图布局是整个流程中最体现功力的地方。特别是模拟版图里非常经典的“电流镜匹配”问题热词里也出现了“layout版图电流镜匹配”可见这是大家普遍关注的焦点。这里我多写几句。电流镜的基本原则是需要匹配的管子必须保持相同的环境包括方向、周围dummy器件、金属走线负载。最简单的做法是把两个管子并排紧挨着放同方向、间距一致。如果电流镜的匹配要求更高就需要用common centroid共质心结构把管子交叉摆放成对称结构让工艺梯度对两个管子产生相同的偏差。举个例子一个1:1的电流镜如果用两个W10u、L1u的管子普通并排放置在工艺梯度的影响下两个管子的阈值电压Vth可能会有几十毫伏的偏差。但如果拆成两个W5u的管子做成交叉结构A-B-B-A那工艺梯度的影响就会在几何上相互抵消Vth偏差可以缩小一个数量级。这个原理听起来很简单但真正在版图里实现时还要注意dummy管的添加、阱well的连接、guard ring的包围方式。这些细节做不好电流镜匹配照样完蛋。布局时还有一个常被忽略的点金属走线的密度一致性。金属走线覆盖在器件有源区上方时会引入额外的机械应力影响器件迁移率。所以两条需要匹配的管子上方金属覆盖尽量一致。这就是所谓的“金属密度匹配”。如果你在设计版图时能顺手注意到这些点流片回来的芯片失配概率会低很多。3.3 互连布线、过孔与金属层选择布局完成之后就是布线。在Virtuoso XL里布线有两种基本方式一种是直接用CreateWire手动连另一种是用routing菜单里的半自动布线器。半自动布线器会根据原理图的连接关系在你点击某个pin之后自动高亮所有需要连到的目标pin你只需要选择合适的metal路径即可。这种方式比盲拉线高效很多也减少了漏连的可能。布线时层选的优先级很重要。通常PDK会规定哪几层金属是走信号、哪层是电源/地。在一般的模拟工艺里下层金属M1、M2密集度低、寄生电阻小但容易挡住器件适合走敏感信号中间金属M3、M4适合走长线高层金属M5、M6/AP通常用于电源/地网络因为它们厚度大、电阻低。如果你把电源走线放到M1上IR drop可能大得离谱后仿直接掉压很厉害。过孔via的处理也值得一提。规则是凡是换层的地方都要打过孔而且要尽量多打几个降低过孔电阻。有些新手只打一个via结果后仿报出莫名其妙的大电阻查了半天发现就是少打了一个via。多打几个via的成本很低却能让版图的可靠性和后仿精度明显变好。3.4 电源、地、IO与衬底连接处理版图里另一件容易出错的事情是电源、地和衬底substrate的连接。原理图里一般不显式画衬底连接但物理上所有管子都生活在同一个衬底上因此版图必须把衬底接触substrate contact打出来并接到对应的电位。对于NMOS衬底是P型要接到最低电位通常为gnd对于PMOS衬底是N阱要接到最高电位通常为vdd。如果你漏了这个连接LVS会报一堆floating substrate错误。在版图布局上我习惯把每个敏感模块用一圈guard ring围起来。Guard ring的作用有两个一是提供低阻抗的衬底偏置防止闩锁效应二是隔离模块之间的噪声耦合。比如做混合信号芯片时数字模块的开关噪声很容易通过衬底耦合到模拟模块这时在模拟模块外面加一圈接地的guard ring效果立竿见影。就是在画版图的时候多发点时间但后仿数据会明显更干净。4. 版图与原理图的联接验证从LVS到PEX4.1 LVS为什么是“生死线”版图画完终于到了“联接验证”的核心环节——LVSLayout vs. Schematic。这一步的目的就是验证版图实现的电路连接关系是否和原理图一致。它不关心你的版图画得漂不漂亮只关心两个问题器件是否一一对应net连接是否完全一致在实际操作中我一般用Calibre做LVS少数工艺库用Assura或PVS。工具选择不一定非要跟风但有些PDK对某种验证工具做了深度优化推荐优先用PDK文档里指定的那个。比如有些工艺库专门为Calibre写了SVRF规则文件那你就别折腾去用PVS了省心。4.2 Calibre LVS完整流程在Virtuoso里调Calibre跑LVS的流程大致是在版图编辑窗口点击菜单CalibreRun LVS弹出Run LVS窗口。设置Rules文件路径指向PDK提供的Calibre LVS规则文件通常类似calibre.lvs.rules。设置Layout和Source的路径。Layout默认指向当前打开的版图Source选择Schematic或Netlist。我一般选Schematic让工具直接抽取原理图网表。点击Run等待输出结果。Calibre会生成一个对比报告显示是否通过如果未通过会有详细的错误说明。报告里常见的错误类型包括Instance mismatches器件数量或类型不匹配、Net mismatches连接关系不匹配、Property mismatchesW/L等参数不匹配。根据报告你可以回到版图中用Calibre的交互式高亮工具把出错的instances或nets高亮出来对比排查。这里分享一个经验跑LVS之前先在版图里跑一遍DRC。DRC是设计规则检查比如最小间距、最小宽度等它不检查连接关系但会检查物理上的可制造性。如果你的金属间距违规了LVS里不一定看得到但DRC会立刻指出来。先保证版图“能造”再保证“连接对”这个顺序绝对不能反。4.3 寄生参数提取与后仿真LVS通过只是第一步对于模拟电路来说版图的寄生效应会直接改变电路性能。这时候就需要做PEX寄生提取把版图中的寄生电阻、电容、电感都提取出来重新做仿真也就是后仿。在Virtuoso环境做PEXCalibre也有对应的Run PEX窗口。设置上需要指定提取类型是只提R、只提C、还是RC一起提。一般来说模拟电路至少要做RC提取高频电路还要再计提L电感和互感到衬底的损耗。通过PEX你能得到一个带寄生参数的版图级网表然后在ADEL里用这个网表替代原原理图网表进行仿真。后仿结果和前仿对比差异大是正常的关键要看是否还在设计指标允许范围内。如果后仿性能衰减太多就要回到版图去优化比如减小关键路径的走线长度、加宽电源线降IR drop、关键匹配管周围去掉多余寄生等。我实测下来很多所谓的“芯片回来不work”根源不在原理图设计上而是后仿阶段没把寄生影响算清楚。你要是能在流片前把寄生提取和后仿做扎实芯片成功率会高出一大截。5. 常见问题与排查技巧实录5.1 器件“悬空”和连接性错误在实际工作中版图连线经常会遇到“看起来连上了其实没连上”的情况。这主要是因为你以为绕了金属线就把两个pin接上了但实际上两个金属层可能根本没有交叠或者中间隔了一层介质没有打通孔。遇到这种问题我的排查办法是在Layout XL里用VerifyMarkers查看DRC/LVS的marker或者用ConnectivityHighlight高亮某个net看它的所有分支是否都确实连到了应该连的pin。还有一种更直接的方式打开CMDLConnectivity Markup and Display Layer把高亮的net颜色调成醒目色肉眼一条条扫过去。虽然听起来土但真的管用。5.2 电流镜匹配类问题从LVS角度审视在LVS里电流镜匹配问题往往不表现为“连错”而是表现为“property mismatch”即两个匹配管的W/L在版图里被拆成了不同的fingers或m值导致LVS无法识别它们完全等价。例如原理图里两个管子各是W20u/L1u版图里你为了让它们做成common centroid把一个管子拆成了4个5u的finger另一个管子拆成了2个10u的finger。从电气角度看两者的W/L都是20u/1u但LVS可能不会自动认为它们是匹配的。这时候就需要在原理图里提前把管子的fingers或m参数设好确保原理图里就是按拆分后的finger来定义的而不是等版图里临时拆分。5.3 原理图工具之间容易混淆的几个问题虽然咱们这篇主要聊Virtuoso但我注意到热词里有些朋友会把OrCAD的几个报错拿来和Cadence Virtuoso混在一起讨论。这里简单提一句像“orcap-11010页码重复”这种问题是OrCAD Capture这类PCB原理图工具里的页面属性冲突和IC设计的Virtuoso完全是两个路线。如果是做芯片级设计就老老实实待Virtuoso里如果是做PCB板级设计才用OrCAD、Altium Designer这类。两者原理不同别搞混。当然工具虽然不同但很多设计思想是通用的比如命名规范、模块划分、电源地处理这些都是跨工具的好习惯。你在Virtuoso里把原理图设计规范养成习惯以后切到任何原理图工具都会顺手很多。5.4 几个容易踩的版图“隐藏坑”最后总结几个我实际踩过、真的会让人怀疑人生的版图坑版图里金属密度不足。有些工艺尤其先进节点要求每个金属层的密度在一个范围内否则化学机械抛光CMP会不平均导致局部金属厚度偏差。对策是画完版图后用Calibre跑一遍Metal Density检查不达标就在空白处补dummy metal。天线效应Antenna Effect被忽略。做工艺时金属刻蚀过程中积累的电荷如果通过栅极放电会把栅氧击穿。对策是在长金属走线附近加天线二极管或通过层次跳线来断开长金属。这个在DRC里通常会有专门的天线规则检查如ANT规则别漏掉。走线宽度和电迁移Electromigration问题。后端电源线要按实际电流密度来估算宽度不要随手拉一条细线。电迁移是芯片长期可靠性的大敌人线路太细用久了会断路。设计完电源/地走线后可以手动估算一下IR drop和电流密度再在PEX里验证。其实很多版图问题的本质都是“你没有从物理的角度去思考电路”。版图设计就是要把理想的电路放到不理想的物理世界中去对抗工艺偏差、寄生参数、噪声干扰。只有抱着这种心态去连每一条线才能真正把版图画好。5.5 我的最终实操心法这篇文章写到这里已经够长了最后再分享一个我自己多年形成的习惯每次版图LVS清干净之后我一定会做一遍Cross-Section View检查。就是把版图沿着某条关键走线切一个剖面出来看看金属层堆叠、过孔位置是不是真的和我想的物理结构一致。这个方法能看到很多平面视图下隐藏的问题比如金属桥接错误、via没对齐、poly层意外断开等。虽然Virtuoso的某些版本里这个视图功能藏得比较深设置略麻烦但一旦用熟排查效率会提升非常多。从原理图到版图再到LVS清透这条路没有人能一次走完不踩坑但只要你坚持用正经的schematic-driven流程保持良好的命名习惯把检查工作前置很多常见的坑其实是完全可以绕开的。希望这篇内容对正在和Virtuoso死磕的你有点帮助。
返回列表