简介:运放版图分解演示文稿是集成电路版图设计课程的配套资料,面向版图初学者、相关专业学生及工程师,聚焦运算放大器版图设计中的常见难点。内容从版图与原理图的一致性出发,讲解了元件命名规范、差分对管采用二维共中心匹配与源漏共用的布局技巧,以及电流镜中ABA、ABB等排列方式对匹配精度的影响;同时给出了LVS检查中典型问题,如原理图命名不合理、输出符号混淆、网表隐藏元件、连线无法连接等的识别与解决思路,并提及Dummy管添加、保护环设置等实用技巧。资源压缩包内为1个PPT文件,大小1.32MB,内容精炼、层次清楚,适合课堂展示、自学梳理或作为课程讲义补充。这份资料已有374人学习,是一份可用于快速掌握运放版图设计要点和排错方法的实用参考。
1. 运放版图分解:为什么匹配精度决定电路成败
运放版图,说玄学也玄学,说物理也物理。差分对管的失调、电流镜的电流比偏差,追根溯源都是版图上几微米的距离差、几颗Dummy管的位置差造成的。运放版图分解这门课的核心,不是教你怎么把管子摆整齐,而是教你如何用布局对抗工艺梯度、用源漏共用压缩扩散区段数、用Dummy管补齐边缘效应,最后再用LVS把版图和原理图死死绑定在一起。这份拆解笔记源自某高校集成电路版图设计课程的运放章节,我按“差分对管→电流镜→连线→LVS检查”的顺序重新组织了一遍,适合正在上版图课程的学生,也适合刚接手模拟版图、想系统梳理匹配技巧的工程师。读完你至少能回答:共中心为什么要用ABBA,电流镜的ABA排列和ABB排列差在哪,LVS报错时该先查哪里。
2. 差分对管的共中心布局:二维匹配、源漏共用与Dummy管取舍
2.1 为什么差分对管不能简单并排
有同学第一次画差分对,习惯把两个管子整整齐齐并排放,觉得这就算对称了。但把视角拉到硅片层面,工艺参数并不是均匀的。栅氧厚度从晶圆中心到边缘有缓慢变化,注入浓度沿某个方向存在梯度,金属应力也会影响管子阈值电压。当A管和B管相距几十微米时,它们各自看到的工艺偏差完全不同,差分对的失配电压就是这么来的。
简单并排(AB)的问题在于:梯度方向上的偏差是单调变化的,两个管子落在梯度两侧,偏差直接相加,而不是相互抵消。解决办法是让两个管子的质心落在同一点上,这就是二维共中心匹配的核心思路。严格说,共中心匹配要满足两个条件:一是两个管子围绕质心对称分布,二是质心重合。一维交叉排布在一阶梯度下有效,但二阶效应下还需要二维排布兜底。
我一般建议学生先画四个象限的ABBA结构,左上A、右下A、右上B、左下B,让A管和B管沿两条对角线对称。这样的布局对X方向和Y方向的线性梯度都能抵消,代价是走线复杂了一些。但差分对是运放最敏感的结构之一,这点复杂度值得付。
2.2 从原理图到棍棒图:三步画出源漏共用结构
版图设计有个基本原则:能用扩散区共用的节点,就不要用金属连线去接。因为扩散区共用直接省掉了接触孔和有源区面积,更重要的是,共用源漏的两个管子受到的同方向工艺偏差一致,匹配性更好。差分对管画法的第一步,就是找源漏共用的机会。
我习惯按三步走:
第一步,把原理图中的差分对管标成A、B两个基本单元,画出每个管子的源、漏、栅三个端。这里命名要干净,A管和B管的对应端标号保持一致,后面连线会省很多事。
第二步,标出可以共用的节点。比如A管的漏和B管的源,如果电位相同,就把它们合并成同一个扩散区,画出棍棒图。棍棒图说白了就是只看扩散区走向、暂时不管金属层的一张抽象布局图——每个矩形表示一段扩散区,栅极用一根竖线跨过扩散区。
第三步,检查棍棒图里有没有“断开”的扩散区。如果扩散区被栅极切断,要注意哪段是源、哪段是漏。源漏共用后的棍棒图里,A管和B管共享一条扩散带,两根栅极平行横穿这条扩散带,中间夹着的区域就是源漏共用的部分。
画棍棒图时,我让学生先不画金属线,只在纸上把扩散区连起来,确认每个扩散区段都是连续的。差分对管的源漏共用做得好,后续金属连线会省一大半。真正画版图时,我还会把棍棒图里的每一段扩散区标上对应的节点名,这样和原理图比对时一眼就能看出对应关系。
2.3 Dummy管:加在哪、怎么接、加多少
不加Dummy管的差分对管,匹配依然会翻车。原因是刻蚀工艺的边缘效应——扩散区边缘的刻蚀速率和内部不同,导致边缘管子的有效宽度发生偏差。解决思路不是改工艺,而是让所有管子都处在相同的“边缘环境”里:在阵列两侧各放一颗不起电学作用的Dummy管。
Dummy管怎么接很关键。常见做法是栅极接固定电位,PMOS的Dummy接VDD,NMOS的Dummy接GND,源漏短接。这样它不会引入额外节点,但能保证旁边真正工作的管子两侧都有相同的扩散区边界。数量上,一般两侧各一颗就够,也就是从AB变成DABBAD。如果面积预算紧张,最少也要保住敏感方向上的Dummy。
这里有个我踩过的坑:Dummy管加了,但忘了给栅极接电位,结果DRC直接报floating gate。所以画完Dummy,第一件事就是确认它的三个端都有归属,不能让它悬空。另一个坑是Dummy管的W/L和真实管子不一样,导致LVS比对时被当成额外器件。处理办法有二:要么在原理图里把Dummy管明确画进去,要么在LVS规则里配置豁免层,让Dummy不参与器件比对。这两种方式我都用过,个人更推荐在原理图里显式画进去,这样网表和版图永远一致,不会出现“版图有、原理图无”的怪现象。
2.4 差分对连线:先连相同标号
棍棒图画完,开始连线。这里有个习惯值得养成:先把原理图中标号相同的节点在版图里连起来——把所有标着同一名字的引脚用同一根金属线接好——然后再去处理不同标号之间的信号走线。相同标号的连接本质是逻辑连接,物理上只是“同一根线”的不同端点,先做掉它们可以提早发现标号不一致的问题。
如果两个相同标号在版图里相隔很远,我一般会查一下是不是原理图里就有两个独立网络被起了同样的名字。如果是,就需要回原理图拆分重命名,而不是在版图里强行绕一大圈连过去。差分对管区域走线还有一个细节:输入对的两根信号线,尽量保持同样的走线形状和长度。两根线一条直一条弯,引入的寄生电容就不对称,高频时失调会更明显。
3. 电流镜版图布局:ABA/ABB排列、源漏互换与保护环设计
3.1 电流镜的失配:从宽长比到几何偏差
电流镜的输出电流由管子宽长比决定。理想情况下,镜像管和参考管的电流比等于它们的尺寸比。但工艺偏差会让实际尺寸偏离设计值,偏离量不同,电流比就变了。更麻烦的是,电流镜往往不止两个管子,多路镜像时每一路的匹配都直接影响整个运放的偏置精度,甚至影响输出摆幅。
先看两种基础的电流镜结构。第一类是两个管子构成的基本电流镜,重点保证两个管子匹配;第二类是多管电流镜,比如后面要讲的BCCAACCB排列,多个管子的源漏要尽可能共用,以减少扩散区周长的差异。无论哪类,核心都是“让所有管子看到相同的工艺环境”。
差分对管我们要求质心重合,电流镜也一样。但电流镜有一个额外约束:它经常是三个、四个管子一起工作,排列自由度更大,也因此有ABA和ABB两种典型排法。这两种排法没有绝对优劣,关键看连接关系和源漏共用潜力。
3.2 ABA与ABB两种排列怎么选
方案一:ABA排列。三个管子按A-B-A对称摆放,两个A管处于对称位置,匹配性最好。如果源漏共用做得好,两个A管可以共用B管两边的扩散区,形成一条连续扩散带。加Dummy后变成DABBAD,边缘效应也被压住。
方案二:ABB排列。A管在一边,两个B管并排。这种排法不对称,但价值在于某些特定连接关系下,源漏共用的次数更高。比如B管的源正好要接B管的漏时,ABB可以让两个B管背靠背共享一个扩散区,省掉一段金属。
| 排列方案 | 对称性 | 源漏共用潜力 | 典型适用 | 是否需要Dummy |
|---|---|---|---|---|
| ABA | 好 | 中 | 差分对核心管、基本电流镜 | 强烈建议 |
| ABB | 一阶一般 | 高 | 电流镜多路镜像 | 建议 |
选择标准不要只看对称性。我的习惯是先把几种排列的棍棒图都画出来,数一数每种排列能共用几段扩散区——“哪种能全部共用源漏,就优先用哪种”。源漏全部共用意味着扩散区连续,连续扩散区之间的边界最少,工艺偏差最小。
3.3 源漏互换:找出共用机会的关键一步
源漏互换是我觉得电流镜版图最容易被忽略的一步。MOS管在物理结构上源漏是对称的,最终哪边当源、哪边当漏,完全由版图连线决定。画出初步的棍棒图后,故意把某些管子的源漏交换一下,看能不能找到更多的源漏共用机会。
操作上我一般这样做:先把每个管子的端连接列成一张表。比如参考管源接VDD、漏接输出;镜像管源接VDD、漏接负载。然后尝试交换镜像管的源漏,如果交换后镜像管的“新源”恰好能接到另一个管子的“新漏”,那就完成了一次共用。这个技巧在电流镜二里特别有用,因为多管之间共享电位节点更多,交换一次可能省掉两到三段金属跳线。
源漏互换后,棍棒图会变样,但电学连接必须和原理图保持一致。每次交换完,我会对着原理图重新核对一遍节点归属,防止为了省面积连错线。
3.4 保护环的放置原则
保护环(Guard Ring)的作用是收住衬底噪声。电流镜的偏置节点往往是运放里最敏感的网络,衬底耦合过来的噪声会直接调制阈值电压,让电流镜输出抖动。常见做法是围绕电流镜区域打一圈保护环:NMOS器件的保护环接GND,PMOS器件的保护环接VDD。
注意保护环不是画一圈就完事,转角处也要保持连续,接触孔要打得足够密,保证电位在整个环上均匀。如果环在某处断开,衬底电位就会分布不均,保护效果大打折扣。我见过一个案例,保护环画了但转角处没包住,LVS和DRC都过了,实测时偏置噪声比预期高了一倍多。后来回版图看,就是环断开导致的。
正文里那句“开始连接标号相同的节点,并打保护环”,我理解顺序是先连相同标号,再用保护环把整个电流镜区围起来。这个顺序别反,否则保护环会挡住一部分连线通道,后面信号线绕得很难看。
3.5 电流镜二的多管排列
第二类电流镜是三路以上的多管结构,正文提到BCCAACCB能全部共用,CABCCBAC是另一种可选排列。这里的关键是让每个管子的扩散区连续共用。与ABA不同的是,多管排列时对称性不是第一目标,能否全部共用才是。
BCCAACCB的含义是:B-C-C-A-A-C-C-B,左右镜像的排列,中间是AA共用,两侧是CC共用,两端是B。相比于把管子按顺序排成CCCCBA,BCCAACCB能让所有源漏都连进同一条扩散带,省去大量金属跳线,同时保留了一定对称性。
我画这种多管电流镜时,会先在纸上尝试三四种排列,把每种排列的扩散区段数数出来,选段数最少的那种。段数少,匹配就好。CABCCBAC则是另一种布线偏好下的选择——如果你的电源线和地线走向决定了某侧必须放特定管子,CABCCBAC可能让连线更顺。两种都画出来后,我通常会选金属线总长度更短的那个,因为长金属线带来的寄生电容在偏置网络上同样不可忽视。
4. 从棍棒图到连线:相同标号优先、命名一致与LVS准备
4.1 先连相同标号,再处理不同标号
正文原话是:“开始连接相同的标号!自己试着画画有没有更好的走线方式?根据画好的棍棒图,开始进行连线了。”这句话背后是一个实用的连线顺序:在版图编辑器里,连线前先做一次“标号归并”。
筛出所有相同名字的引脚,用同一根金属线把它们接好。理由很简单:标号相同,物理上就是同一电位,晚连不如早连,早连能暴露出标号冲突。我见过有人先画信号通路,画到最后才发现两个同名引脚一个在南一个在北,中间被电源线拦死,只好绕一大圈或者改走线层,这都是顺序没安排好。
具体步骤上,我一般按信号重要性排序:先连电源和地,再连偏置,最后连信号通路。电源地的金属线宽、走向固定,先定下来,后面信号线好绕。连完电源地后,打开版图编辑器的“高亮同名网络”功能,肉眼扫一遍有没有该连却漏连的相同标号。
4.2 原理图命名与版图文件名的对应关系
LVS做的第一件事就是比对名字。正文明确说“原理图的命名最好和版图文件的命名相同”。这里不只是顶层单元名,还包括电源网络的命名。原理图里电源叫VDD,版图里叫VCC,LVS就会认为是两个不同网络。很多LVS第一次跑不过,原因只是大小写不一致。
我一般会在启动LVS前用文本工具扫一遍网表,写个脚本快速对比。下面这段Python脚本是从CDL网表里提取所有标识符,再和版图里的网络名集合做差集,找出“版图里有但原理图里没有”的名字:
import re def check_net_names(cdl_path, layout_net_list): source_nets = set() with open(cdl_path, 'r', encoding='utf-8') as f: for line in f: # CDL网表中器件名、节点名都是普通标识符 for name in re.findall(r'[A-Za-z_][A-Za-z0-9_]*', line): source_nets.add(name) missing = set(layout_net_list) - source_nets return missing layout_nets = ["VDD", "VSS", "INP", "INN", "OUT", "VB1", "VB2"] missing_nets = check_net_names("opamp.cdl", layout_nets) print("版图里有、网表里缺失的网络:", missing_nets)参数说明:cdl_path是原理图导出的CDL网表路径;layout_net_list是你在版图里实际用到的网络名集合。脚本把网表里所有标识符收集成一个集合,再和版图网络列表做差集。跑出来的missing_nets,就是命名不一致的第一现场。每次LVS不过,先跑这个脚本,能省掉一半排查时间。
命名规范这块,我常用下面这张表做自查:
| 网络类型 | 推荐前缀 | 示例 |
|---|---|---|
| 电源 | VDD / VSS | VDD_A、VSS_D |
| 输入 | IN / INP / INN | INP、INN |
| 输出 | OUT | OUT_Diff |
| 偏置 | VB | VB1、VB2 |
这种约定一方面为了人读得懂,另一方面是给LVS少留几个坑。命名越干净,后面生成的网表越容易和版图对起来。
4.3 Virtuoso XL中输入输出标号的生成时机
正文里有一条特别容易踩的规则:Virtuoso XL中输入输出标号不允许在版图中给出,需要生成时给出。意思是,在XL创建版图时,输入输出引脚是通过原理图符号自动生成的,你可以移动它的位置,但不要手动删掉后自己重建一个“同名标签”。
如果你在原理图的输出引脚定义为output,但从符号库里生成的符号把它定义成了input,LVS比对pin方向时就会报错。检查方法是打开原理图编辑器,选中符号,查看属性里的pin direction,确认和电路图里的定义一致。我就见过有人手动在版图上加了一排文字标签,以为能“代替”生成时的pin,结果LVS报label missing。正确做法是:删掉错误的pin实例,回到原理图重新生成一次版图,让工具把pin带着正确方向重新拉出来。
4.4 连线完成后的自检清单
连线完成后,我会按下面这张清单快速过一遍,比起直接跑LVS,它能把失败时间从二十分钟缩到五分钟:
- 相同标号的引脚是否已经由同一根金属连起来,有没有该连却漏连的同名点。
- 不同标号之间是否出现意外的短路,用版图编辑器的short检查功能扫一遍。
- 输入输出pin是否都由XL生成而不是手绘标签,pin方向是否和原理图一致。
- 保护环的电位是否正确覆盖,NMOS环接GND、PMOS环接VDD。
- 顶层单元名是否和原理图顶层单元一致,大小写也要核对。
这个清单不是LVS的替代品,它只是把LVS的调试环节前置了一部分。命名和数据准备做得越干净,第5章的那些坑就越少遇到。
5. LVS不能通过的常见问题:现象、原因与解决
5.1 原理图命名不合理
现象:LVS报出大量unmatched instance,版图看起来明明没问题。仔细看报告,出现类似“A=A”的名字重复,LVS无法区分两个本该不同的对象。
原因:原理图里器件或网络命名冲突,常见于复制粘贴元件后没有重命名。同名对象在网表导出时被合并,版图里却有多个实体,两边一比就全乱了。
解决:打开原理图,筛选全部instance,把重复的名字加后缀区分,比如A=Q1、A=Q2。保存后重新导出CDL,再跑一遍网表对比,确认不再有重复标识符。这个操作只要在前期做一次,后期省下的时间远超这点成本。
5.2 输出标号与逻辑符号同名
现象:D触发器的输出引脚标号叫Y,版图里一个反相器或传输门的输出也叫Y,LVS报“两个不同器件共用同一个标号网络”。
原因:正文原话是“D触发器的输出与反相器或传输门符号相同(比如D触发器输出标号为Y)”。这本质是网表合并——两个不同逻辑符号使用了相同的输出网络名,导出的网表把它们焊在了同一个网络上。
解决:把其中一个标号改名,比如D触发器输出改为Y_FF,反相器输出保持Y。改完重新导出网表,再跑LVS。这里要提醒自己:标号不仅要“不重名”,还要“见名知义”,Y_FF一眼就知道是触发器输出。
5.3 版图与原理图不一致
现象:LVS报mismatch的instance数量不为零,某个管子版图里比原理图少一个,或者W/L尺寸不同。
原因:版图绘制时省略了某个管子,或者修改了宽长比却没有同步更新原理图。更隐蔽的是串并联关系画反了——原理图是两个管子串联,版图画成了并联,电学行为完全不一样,LVS一比就露馅。
解决:以原理图为准,回到版图逐个核对每个device的尺寸和连接方式。使用LVS报告给出的“偏差坐标”,在版图编辑器里高亮到相应位置,一个管子一个管子地过。这条最常见,也最需要耐心,我的经验是不跳过任何一个mismatch,因为留到后面只会更贵。
5.4 原理图里看不见的元件
现象:原理图打开后看不到某个管子,但LVS报“extra instance in schematic”,只有网表里能查到它。
原因:原理图中存在被隐藏的元件,比如放在图纸边缘外、或被其他图形覆盖、或属于某个未显示的层次。正文原话是“原理图存在你无法看见的元件(只能通过网表查看的到)”。这种元件像幽灵一样,画图的人自己都可能忘了它存在。
解决:检查原理图时不要只看画布。导出CDL网表,用文本编辑器翻一遍instance列表。我通常用脚本把CDL里的器件名和画布上可见器件列表做对比,找出“网表里存在但图纸上找不到”的对象,确认后删掉或修正。从那以后,我每次画完原理图都会强制导出一次网表做全文搜索,防止幽灵器件混进设计。
5.5 原理图连线无法连接到元件
现象:LVS报某个端子网络缺失,看原理图该端子明明有一根线连出,但放大后发现端点并没有吸附到引脚上。
原因:连线端点离引脚太远,或者引脚被旋转后连接位置偏移。这种情况经常在移动元件之后出现,wire没有跟着更新,看起来连着、实际上没连。
解决:用“吸附”功能重新连一次。我一般把可疑的线删掉,把元件pin对齐后重新画线,确保端点的连接标识出现在pin上。检查方法:全选原理图,看有没有线端没有吸附的告警提示。每次移动完一个模块,我都习惯性地拖拽一下相邻线,确认它们在动。
5.6 输出接输出与pin方向定义错误
现象:LVS报short或conflict,定位后发现是两个电路的输出直接接在一起,或者pin direction与使用方式矛盾。
原因:正文原话是“一个电路的输出是不能给另外一个电路的输出”。在模拟电路里少数情况下需要线或,但大多数LVS会按短路处理。pin方向错误也是同类问题——原理图输出引脚定义为output,生成的符号里却定义成了input。
解决:先确认电路功能,看是否需要线或连接;不需要就断开两边的输出。pin方向问题则回符号编辑器改定义,重新生成符号后再跑LVS。这两种问题的共同教训是:pin方向不是小事,定义错了后续每一条用到这个symbol的电路都会跟着错。
6. 最后一遍检查:从LVS报告坐标回读版图的习惯
LVS报告出来之后,很多人第一反应是直接到版图里乱找。我的习惯是反着来:先读报告里的坐标,再用坐标回读版图。
LVS报告里的每一处mismatch都会带坐标,格式一般是“instance Q15 at (x, y)”。这个坐标指向的是版图里失配器件的物理位置。拿到报告后,我会用一段简单的Skill脚本把这些坐标批量高亮出来:
; 从LVS报告提取坐标并在版图中高亮 procedure(hiLVSMark(coordList) let((win) win = hiGetCurrentWindow() foreach(coord coordList geAddPoint(win coord) ) ) )参数说明:coordList是你从LVS报告里解析出来的坐标列表,每个元素是一个(x, y)点对。调用时先选中版图窗口,然后执行hiLVSMark(list(list(100.0 200.0) list(230.5 410.0)))即可把这些点标记到当前版图上。geAddPoint会在当前窗口的指定坐标画一个临时标记点,方便你定位到具体位置。
高亮之后,逐项核对这些位置的实际图形:管子尺寸对不对、连线有没有接错层、pin方向是不是反了。定位完成的修改,每一步都有据可依,不会出现“改了这里结果那里又报错”的连锁反应。
从那以后,我每次跑完LVS,都强制自己先读一遍报告里的坐标再动手改版图,而不是凭感觉在画布上乱点。这个习惯帮我省掉了很多来回,也希望帮到你。
本文还有配套的精品资源,点击获取