简介:《运放版图分解》演示文稿是西南科技大学网络教育系列课程《集成电路版图设计》的配套课件,聚焦运放版图分解,面向集成电路版图设计初学者、在校生及模拟版图工程师。资源包仅含一个演示文稿,体积约一点三二兆字节,图文结合,便于课堂演示与自学复习。截至目前,该演示文稿已有三百七十四人学习下载。内容从版图与原理图一致性、元件命名规则等基本规范讲起,逐一剖析差分对管版图的二维共中心匹配、Dummy管添加与源漏共用,电流镜的ABA/ABB排列、源漏互换及保护环设置,并穿插棍棒图绘制和相同标号节点连接;后半部分总结LVS检查常见的九类问题及解决建议,如原理图名称不合理、输出/输入引脚定义冲突、版图与原理图不匹配、网表中不可见元件等。可系统掌握运放版图从原理图到物理实现的分解流程,规避设计误区,提升对称性、抗干扰能力与可制造性。
1. LVS 不能通过:模拟版图交付前最折腾人的坑
“LVS 又不能通过。”这大概是版图工程师在流片前最怕听到的一句话。画了几周的运放版图,差分对管、电流镜、保护环都摆得整整齐齐,一跑 LVS 却弹出几十条 ERROR,短路、悬空、端口对不上连着涌出来。更折磨人的是,很多报错“看着全对”——原理图里明明是同一个网络名,版图里的 label 也标了,可网表比对就是不认。这类问题在模拟版图里出现频率极高,尤其是运放这种对匹配和噪声敏感、单元重复度又高的电路。这份“运放版图分解”讲义里,恰好把 LVS 常见问题和差分对管、电流镜的匹配画法放在一起讲,非常适合正被 LVS 卡住的人:新手能照着清单逐条排除,熟手则能静下心看根因和预防。
2. 先从九类 LVS 报错说起:原理图和网表说了算
LVS 全称 Layout Versus Schematic,本质是“网表对网表”,不是“人眼对人眼”。版图提取出的网表要和原理图生成的网表逐器件、逐节点地比对,所以很多肉眼看不出问题的事都会在这儿现形。某高校版图设计课讲义里总结了九条 LVS 不能通过的常见问题,我结合自己跑过的项目逐条拆开讲。
2.1 命名规则的坑:原理图名字不合理,网表直接不认
讲义里的第一条是“原理图名字不合理(例如:A=A)”。这个例子看着极端,实际工作中一点也不少见。SPICE 语法里=是赋值或参数分隔符,你把网络名起成A=A,导出的 CDL 网表就成了类似XA A=A的语句,LVS 工具解析时直接当非法字符报错;更隐蔽的是名字里带中文、空格、@、!这些字符,原理图上显示正常,一到网表就翻车。
解决这类问题,我会在画原理图之前就定一套命名规则:网络名只允许字母、数字、下划线,不以数字开头;顶层端口全部大写;不同页面的同名网络必须拼写完全一致,不要出现VDD和VDD_1这种“看起来一样”的写法。跑 LVS 前先导出一份 CDL 网表,用命令行扫一眼端口和网络名,能省掉大量来回盲改的时间:
# 检查 SPICE/CDL 网表里的非法命名 grep -E "^\.SUBCKT|^\+.*=" netlist.cdl | head -20这段命令的逻辑是:^\.SUBCKT匹配网表里的子电路定义行,^\+.*=匹配续行里含等号的网络名或参数,head -20只取前 20 行,避免日志太长刷屏。如果输出里出现类似A=A、V!DD这样的名字,基本可以断定问题出在命名上,回到原理图改名再重新生成网表即可。原理图命名最好和版图文件命名保持相同,这一点讲义放在第七条,我在项目里也验证过:只要 cell name 不一致,XL 生成的版图和原理图就在工具里对不上,LVS 上来就报“找不到对应 cell view”。
2.2 符号撞名:D 触发器输出标成 Y,和反相器符号起冲突
讲义第二条说“D 触发器的输出与反相器或传输门符号相同(比如:D 触发器输出标号为 Y)”。这属于典型的“符号级撞名”。很多标准数字库或自制符号库里,反相器输出 pin 叫Y,传输门输出 pin 也习惯叫Y,如果你手画的 D 触发器输出标号恰好也叫Y,整个原理图导出网表后,这些不同器件的输出节点全被并到了同一个网络Y上——LVS 比对时就变成了“你该有 N 个独立节点,实际只有 1 个”。
根因是 pin 名在网络中是全局有效的,同一层次下同名即同网。解决方法是给输出网络加一个区分性的标号,比如把 D 触发器输出标成Q或DFF_OUT,不要在原理图里顺手沿用库符号的默认 pin name。这里要养成一个习惯:改完符号或实例名字后,重新导出一次网表,用 diff 对比改动前后两个版本,确认没有额外合并节点再往下走。
2.3 版图与原理图不一致:最直接的报警来源
讲义第三条叫“版图与原理图不一致”,听起来像废话,但很多人栽在“改图不同步”上。常见场景是:原理图里把某个电阻从 10k 改成 20k,版图里的电阻条却还是原来的尺寸;或者原理图里删除了一路偏置,版图里那一路 MOS 管还留着。LVS 报告会明确给出“原理图有 10 个器件,版图提取出 11 个”这类数字差异。
这类问题没有聪明解法,只有流程约束。我一般会在原理图上做任何结构性改动后,立刻在版图上同步,然后跑一次“只比较器件数量和类型”的 LVS 预检,不等全部连线画完才去面对灾难。讲义列出的九条问题我做了一张对照表,方便你拿自己的报告一条条查:
| 报错现象 | 根因方向 | 直接处理 |
|---|---|---|
| 非法字符 / 重复网络名 | 命名不规范,如 A=A | 统一命名规则后重新导网表 |
| 器件输出节点互相短路 | 不同器件符号 pin 同名 | 给输出网络加区分标号 |
| 器件数量对不上 | 原理图和版图改动不同步 | 以原理图网表为准,逐器件核对 |
| 网表多出原理图看不到的器件 | 存在隐藏实例或未显示 symbol | 显示全部实例,逐个确认 |
| 连线看着接上但报 open | 导线没有真正落在 pin 上 | 检查 off-grid 和 pin 接触点 |
| 有输出驱动输出 | 结构错误,两个输出并接 | 回到原理图检查电路连接 |
| 文件命名不一致 | cell view 不匹配 | 原理图和版图 cell 名称统一 |
| 输出 pin 在符号里变输入 | 符号生成方向属性对不上 | 重新生成 symbol 并比对 pin 方向 |
这张表里后面几条,展开讲都能单独写一篇,下面重点说两个最隐蔽的。
2.4 网表里才看得到的元件:屏幕上的黑匣子
讲义第四条说“原理图存在你无法看见的元件(只能通过网表查得到)”。这条我最初吃了大亏。某次跑一个运放 LVS,报告里多出一个 MOS 管,我在原理图上翻来覆去找不到,最后打开导出的 CDL 网表才发现,底层库里一个 ESD 保护二极管默认是隐藏显示状态,它一直挂在输入 pin 上,只是原理图界面没画出来。你盯着屏幕看一辈子也看不见它,因为它根本不在当前显示层级里。
定位方法是直接查网表,别靠肉眼。导出的 CDL 里找出所有M、R、C、D开头的器件行,和原理图中的实例列表做数量比对。确认多出来的器件之后,在 Virtuoso Schematic Editor 里用菜单把全部 instance 设为可见,通常路径是 Edit → Display → Instance,勾选“显示所有隐藏实例”,逐个确认它的连接关系是否合理。这类“黑匣子元件”不一定错,但要确认它确实应该在电路里,而不是误放了某个测试结构。
同样隐蔽的还有第五条“原理图连线无法连接到元件”。诱发原因是导线终点没有真正落在 pin 的接触点上,常见于 off-grid 到0.005这类非整格坐标,视觉上导线尖端碰到了 symbol 边框,实际电气上悬空。检查方法很简单:把原理图网格设成最小 step,重新走一遍可疑连线;或者用Check and Save让工具自动报出未连接 pin。
2.5 输出驱动输出:结构错误,不是连线问题
讲义第六条说“一个电路的输出是不能给另外一个电路的输出”。这句话在模拟电路里要分两层理解:第一层,两个输出端直接并接,在网表里就是同一个节点,多半意味着电路结构错误;第二层,一个运放输出连到另一个运放输出,即使没有直接短路,也一定存在低阻抗回路,LVS 不报错但后续仿真/测试会出问题。
处理这类问题,我的做法是先看 LVS 报告里“短路”类错误的坐标,把它对应到原理图上的网络名。如果两个网络名分属两个输出 pin,基本可以判定原理图连线画错了;如果网络名本来就该连在一起(比如开漏输出并联),那要在原理图上加显式标注,并确认版图上做得也是完全等电位连接,避免 LVS 提取时因走线过长产生莫名其妙的额外节点。
2.6 Virtuoso XL 的两种工具习惯坑:I/O 标号与符号方向
讲义第八条和第九条都和 Virtuoso XL 相关。第八条说“Virtuoso XL 中输入输出标号不允许在版图中给出,需要生成时给出”,这条很关键——用 XL 从原理图生成版图时,输入输出 pin 的 label 是生成动作自动打上去的,如果你再手动往版图里补一遍 I/O 标号,就会出现重复端口,LVS 报“端口数量不一致”。我见过有人在版图上给VIN打了两层不同 metal 的 label,结果一个网络被提取成两个节点。
第九条则是符号方向问题:“原理图中输出引脚定义为输出,生成的符号中却定义为输入”。这个发生在你改过原理图的 pin 方向、但符号没有重新生成时。解决办法是在原理图编辑器中重新创建 symbol(菜单里通常是 Create Symbol),让 symbol 的 pin 方向与 schematic 一致,然后关闭所有旧 symbol 实例再替换。检查方法很简单:打开 symbol 编辑界面,逐个看 pin 的direction属性,确认input/output/inout没有标反。
3. 差分对管版图:匹配不对,LVS 通过也白搭
LVS 通过只代表“你画的版图等价于原理图”,并不保证“电路性能够好”。运放里最典型的就是差分对管,如果两个输入管的版图不对称,失调电压能比手册标称值翻几倍,LVS 照样绿灯。这一章说清差分对管版图该怎么做匹配。
3.1 先画棍棒图,再想源漏能不能共用
讲义的顺序很有讲究:“看哪些源漏能共用”→“画棍棒图”→“连接相同的标号”→“根据棍棒图开始连线”。很多人跳过棍棒图直接摆管子,摆到后面线绕成一团才发现源漏合并不了。棍棒图说白了就是把每个 MOS 管简化成一条有源区杠,杠中间是栅,两端分别是源和漏;管子并排时,相邻管子相同电位的那一端就可以合并成一个有源区。
具体操作时,我会先在原理图上给所有源漏节点标好网络名:差分对管两个输入管的 drain 是输出端(通常一个接正输出、一个接负输出),source 在运放里一般接到尾电流源那一端。两个 drain 不是同一网络,不能共用;两个 source 通常是同一网络,可以共用一块有源区。判断方法就一句话:电位相同的节点,才能考虑源漏共用。把相同网络名用同色高亮,版图布局的基本形状就出来了——这也是讲义里“连接相同的标号”的原始含义。
这里给一个差分对管版图设计的参数检查表,画完对照着勾一遍:
| 项目 | 建议值 / 做法 | 检查目的 |
|---|---|---|
| 输入对管 finger 数 | 相等,且为偶数 | 保证交叉配对时中心对称 |
| 源漏共用区 | 仅同一网络的源/漏可合并 | 避免 LVS 多节点 |
| Dummy 管数量 | 左右各一,对称分布 | 保持刻蚀环境一致 |
| 阱区区边界 | 至少留出规则要求间距 | 防止闩锁效应 |
| 有源区方向 | 全部同向 | 减小应力失配 |
3.2 二维共中心匹配和 Dummy:对抗工艺梯度的核心
讲义里提了个概念叫“二维共中心匹配”,示例排布是 ABBA 或 BABA。所谓共中心,就是两个输入管在横轴和纵轴两个方向上都有对称中心;如果只是简单的 AB 并排,晶圆上的栅氧厚度梯度、离子注入浓度梯度会沿一个方向单调变化,两个管子一个吃多了、一个吃少了,失调电压自然变大。交叉成 ABBA 之后,梯度的影响对两个管子来说是对称叠加的,差值被平均掉。
Dummy 管在这里的用处,是保证真实管子两侧的环境一致。光刻和刻蚀都有一个“边缘效应”,孤立的管子比周围有相同图形的管子刻蚀速率不同,导致关键尺寸偏差。加上 Dummy 管后,真实输入管两侧看起来和中间一样,工艺偏差就被隔离了。讲义特别画了“无 Dummy 和有 Dummy”的对比,强调了这一点。
Dummy 加进去有个常见的 LVS 坑:它本身是一个完整的 MOS 管结构,很多工具会把它提取成真管子,导致器件数量报错。我的做法是在 LVS 规则文件里显式定义 dummy 器件过滤规则,或者把 Dummy 管的源、漏、栅接固定电位,让它在电学上不构成任何功能路径——通常是栅接电源或地,源漏短接。这样即使工具把它提取出来,也会因为所有节点等电位而被判定为“虚器件”自动合并。
3.3 连线不只是走通:等长、对称、别跨敏感区
讲义在画完棍棒图后写了一句“开始连接相同的标号!自己试着画画有没有更好的走线方式”。这句话看着轻松,实际是版图连线质量的试金石。差分对管的栅极是高频输入,两条栅极走线必须尽量等长、等宽、平行走线,否则寄生电阻不一致会带来额外的失调;两个输出 drain 的走线也要对称,最好用同一层金属、同样的转角方式。
连线阶段我会按这个顺序检查:先看有没有哪条金属线跨过另一个管子的有源区——这会引入寄生电容耦合;再看走线转角是不是都是 45 度或 90 度对称出现;最后看金属层选择,两条关键信号线别一个走 M1 一个走 M3,层高不同,寄生的容值差也会破坏对称性。讲义里“根据画好的棍棒图,开始进行连线”这句话的潜台词是:连线是棍棒图的物理实现,棍棒图里标了相同标号的节点,版图里才允许连在一起;棍棒图里没有合并的节点,哪怕空间上再近也不能硬拉到一起。
4. 电流镜版图:排列、源漏互换与保护环
电流镜是运放里最需要“电流一致性”的单元。一个电流镜的复制精度,直接决定偏置电流在各级之间的分配误差。讲义把电流镜分成“电流镜一”和“电流镜二”,分别对应不同管数下的匹配方案,核心技巧是排列方式、源漏互换和保护环。
4.1 方案一:ABA 和 ABB 两种排列,各有各的代价
讲义给电流镜一画了两种方案:方案一“ABA 排列棍棒图”,方案二“ABB 排列”。这里的 A、B 代表两个不同的管子,因为它们在版图里的位置朝向不同。ABA 排列中,A 管被拆成两份放在两边,B 管放在中间,几何上以 B 为中心左右对称,是一维共中心;ABB 排列则是两个 B 相邻,A 靠边。
ABA 的对称性好,但拆管后需要额外的有源区,面积更大;ABB 面积紧凑,但只适合对单向梯度不那么敏感的场景。如果电流镜的复制比要求高,我会选 ABA;如果只是普通偏置,ABB 更划算。讲义在“棍棒图”下特别画了“无 Dummy 有 Dummy”两组对比,意思是无论 ABA 还是 ABB,都建议在阵列两端各加一个 Dummy 管,让真实管子的边缘环境对称。
4.2 方案二:源漏互换,找到全部共用
电流镜二更复杂,讲义给出了两种排布:“BCCAACCB”和“CABCCBAC”。这一长串字母看着像密码,本质是在多个管子之间找源漏共用的最优解。多管电流镜里,每个管子都有自己的 source 和 drain 网络;如果相邻两个管子的源或漏恰好是同一网络,就能共用一块有源区。所谓“源漏互换”,就是允许把某个管子的 source 和 drain 对调(MOS 管本身结构对称,源漏可以互换),从而让更多相邻管子的同电位端点凑到一起。
BCCAACCB 这种序列,常见理解是让同一种偏置条件的管子穿插排布,使热梯度和应力梯度被对称化;CABCCBAC 则是在保持中心对称的前提下进一步压缩有源区数量。实际画法分四步:先把所有管子画成等长的有源区杠;在杠上标记每个管子的源漏网络名;逐个调整管子的源漏朝向,让相邻杠上相同网络名的端点对齐;最后把对齐的端点合并。讲义里那句“寻找源漏共用”,找的就是这些能合并不合、浪费面积又增加失配的节点。
合并完成后,所有相同网络名的节点要打上同在的标号,然后再走线。这里我习惯用一个简单规则:有源区合并的边界,就是网络名的边界;如果一块有源区里涵盖了三个不同网络名,那就是短路,LVS 一定报错。反过来说,如果两个管子的源明明是同一网络,却为了布线省事分了两个有源区,LVS 不报错,但电流失配会找上门。
4.3 保护环不是装饰品:位置、电位和接法都有讲究
讲电流镜一画完棍棒图后,明确要求“并打保护环”。保护环(guard ring)的作用有两个:一是防止闩锁效应,二是隔离衬底噪声。运放里电流镜所在的位置往往是电源和地之间的关键偏置路径,如果周围有其他模块的衬底电流串进来,复制电流就会抖。保护环一般用一层高浓度注入区围一圈,上面压金属环并打满接触孔。
打保护环有三个细节容易翻车。第一,电位别搞反:NMOS 周围保护环接衬底电位(通常是地),PMOS 周围保护环接 N 阱电位(通常是 VDD);接反了就等于给电路加了一个正向偏置的二极管,流片回来电流大的离谱。第二,环必须封闭,不能留缺口;我见过有人以为保护环绕过去就行,结果电源地引线硬生生穿过环,等于开了一个噪声门。第三,保护环要在 LVS 里能识别出电位,也就是环上必须有 text label 且标注正确网络名,否则 ERC 会报“衬底悬空”,很多设计流程把它当硬错误卡住。
5. 运放版图避坑清单:五个踩过的坑
这一章我把自己实际踩过的、以及讲义里提醒过的坑整理成五条,每条按“现象 → 原因 → 解决”写清楚,方便你在出问题时直接索引。
5.1 现象:LVS 报“器件数量多了一个”,版图里全是 Dummy
我在一个电流镜里加了四个 Dummy 管,跑 LVS 直接报多出四个 MOS 器件,原理图里根本找不到对应的管子。原因很典型:Dummy 管在版图里是有源区、多晶硅完整的假管,LVS 工具按物理结构提取时把它们当成真实器件了。解决办法分两层:先在原理图里给 Dummy 管建立对应 symbol 并接成“源漏短接、栅固定电位”的失活结构,让网表里有名分;再在 LVS 规则文件里配置 dummy 识别选项,或者用版图图层单独标记 Dummy 区域,让提取工具把它们从比较列表里过滤掉。从那以后我每次加 Dummy 前,都会先查一遍当前 LVS rule 里有没有和 dummy 相关的 filter 开关,省得跑完才看到墙。
5.2 现象:版图和原理图器件数量完全对不上,查半天是改图没同步
某次我把原理图里一个偏置管子的宽长比从 2/0.5 改成了 4/0.5,版图里对应的管子还是 2/0.5,LVS 报了“parameter mismatch”,不是数量错,是参数错。这种最隐蔽,因为器件数量和连接关系都对,只有 W、L 数值不一样。原因就是改图不同步,没有遵循“原理图先行、版图紧跟”的流程。解决方法是把参数类报错单独列出来看,LVS 报告通常分“器件差异”和“属性差异”两段,属性差异里会直接列出 schematic 里的 W/L 和 layout 里提取出的 W/L。遇到这个报错,回到版图改尺寸,或者用 XL 的 update 功能重新生成器件,不要手工拉伸有源区——手工拉出来的尺寸往往和原理图差一个小数位。
5.3 现象:原理图里找不到的器件,网表里却赫然在列
项目里用了一个包含 ESD 保护二极管的 IO 库元件,原理图里画的是一个简洁框图,内部的二极管被设置成不可见。LVS 报多出一个D器件,我先是不信,后来在 CIW 里显示全部 instance 才看到它。这个坑的教训是:不要迷信原理图的可见性,网表才是唯一真相。处理步骤是导出 CDL,用文本编辑器搜出所有D、M、R开头的行,数清楚数量;再回到原理图把隐藏实例显示出来,核对它是否“应该存在”。如果一个器件物理存在但不参与电学功能,最好在原理图里删掉或用空连接处理,避免每次 LVS 都被它干扰。
5.4 现象:LVS 全绿,但流片回来电流镜电流偏了 15%
比 LVS 报错更难受的,是 LVS 通过但性能翻车。一个多管电流镜,流片回来实测电流复制比明显偏离设计值,原因就是版图里管子方向不一致:有的管子横放,有的竖放,有的 source 和 drain 被绕线绕反了方向,导致应力失配和注入梯度没被平均掉。LVS 只认连接关系,不认匹配对称性,所以它全绿不代表能做出来符合预期的电路。解决这种问题必须在画版图阶段就用共中心思想:同名管拆成交叉对,整体排布保证几何中心重合,方向全部一致,外围加 Dummy。遇到这类性能类失配,用探针实测电流和仿真值对比,能快速分辨是哪个支路偏了。
5.5 现象:Virtuoso XL 生成的版图端口错位,报 “net not connected”
用 XL 自动生成的版图,跑 LVS 报了多个端口未连接;检查发现顶层输入输出标号被我在版图里手动打了两个版本,一个在 M1 上,一个在 M3 上,物理上没有连接。这就是讲义第八条说的“输入输出标号不允许在版图中给出”。XL 生成版图时端口是自动打上去的,你手动加的标号如果网络名恰好相同但层次不同,提取网表时就会形成两个独立端口;如果网络名不同,就直接变成 open。解决方法是把所有手动加的 I/O 标号删干净,改用 XL 的 pin 生成流程统一创建;如果要改名,在原理图上改网络名后重新生成版图,而不是在版图里画蛇添足。
6. 拿到 LVS 报告怎么快速定位:先看三张表
LVS 报告动辄几百行,逐行看会看到崩溃。我这些年最快的定位方法是只看三类内容,并且固定按顺序看,基本能在十分钟内锁定问题。
第一类,标题栏附近的差异统计表。它通常会告诉你 schematic 和 layout 各自有多少个 instance、多少条 net、多少个端口。先对比这三个数字:如果 instance 数量不一致,优先找器件层面的增减;如果 net 数量不一致,大概率是哪里短路或开路;如果端口数量不一致,直接去顶层 pin 的 label 找问题。这一步是“体检”,帮你判断问题出在哪个层面。
第二类,未匹配节点列表(Unmatched Nets)和连接差异列表。列表里会逐条列出 schematic 里有、layout 里没有的节点,以及反过来 layout 里有、schematic 里没有的节点。我处理这类问题的顺序是:先看“layout 多余的节点”——多为版图里某处该短接的没短接,或 label 打错;再看“schematic 多余的节点”——多为原理图里某个 pin 没连上,或导出的网表里还残留着隐藏元件。这两类列表里都带坐标,可以直接在版图编辑器里高亮跳转。
第三类,参数差异列表(Property Differences)。当器件数量和节点都对上时,再看这组列表,里面逐条写着哪个器件的W、L、M数值在两边不一致。差分对管和电流镜的失效大多死在这里。
实际操作时,我不会从头翻 PDF 报告,而是直接用命令把关键字筛出来:
# 从 LVS 报告里提取关键差异统计和未匹配节点 grep -E "Instance|Net|Port|Unmatched|Mismatch|Property" lvs.report | head -60这段命令用多个关键字做一次grep,把报告里跟器件、网络、端口、未匹配、参数相关的行全部捞出来;head -60限制输出量,避免整个报告直接灌满终端。如果报告结构比较乱,我会改用awk抓ERROR SUMMARY后面的正文块,再按上面的三张表顺序分别统计。定位到具体类别后,回版图里高亮坐标,比盲查全图快得多。
从那以后,我每次跑完 LVS 都强制自己走一遍“先看统计表、再查未匹配节点、最后核对参数差异”的三步流程,不再对着版图肉眼找半天;这习惯帮我省下了不少后悔药,也让我在流片前敢对匹配结构说一声“稳了”。希望这篇笔记能让你下次看到 LVS 报错时,不再一头扎进版图里瞎找。
本文还有配套的精品资源,点击获取