☰
模拟CMOS运算放大器设计全流程:从手算到仿真与版图实现
2026/9/25 4:20:08 网站建设 项目流程

拉扎维的《模拟CMOS集成电路设计》读到第七章,大部分人都会产生一种错觉——觉得自己会设计运算放大器了。直到某一天打开Cadence Virtuoso,面对空白的schematic,才发现课本公式和工艺参数之间,隔着一整层现实。这篇笔记完整记录了一个两级密勒补偿运算放大器从指标拆解、手算W/L、Spectre仿真调到版图实现的全过程,设计目标、管子和参数全部可复现。如果你正在学模拟CMOS集成电路课程,或者刚接触运放设计与仿真、版图绘制,这篇东西应该能帮你省下好几个通宵。

1. 为什么是"两级+密勒补偿":架构选择背后的指标博弈

1.1 单级差分结构的天花板

刚开始做运放设计的人经常问:为什么非要搞两级?单级差分放大器不是也能放大吗?确实能,但它的增益上限很尴尬。单级的增益近似为gm乘以输出电阻ro,在0.35μm工艺下,一个常规单级运放的增益往往只有40~50dB。你可能会想,用Cascode结构加输出阻抗不就完了?Cascode确实能把增益推到70dB以上,代价是输出摆幅被压缩得厉害,在1.8V甚至3.3V的低压工艺中,留给信号的摆幅窗口非常有限。

我这次的目标是做一个CL=3pF下DC增益超过70dB、单位增益带宽10MHz的运放,同时要求输出摆幅尽量接近轨到轨。这几个指标放在一起,单级结构基本无解:要增益就没有摆幅,要摆幅就没有增益。两级结构的思路是"分工":第一级差分输入管负责提供高增益和差模放大能力,第二级共源放大管负责补充增益并承担输出摆幅。每个管子不用过分压榨,增益和摆幅都能保住。

1.2 密勒补偿不是"加个大电容"这么简单

两级结构天然有两个高阻节点,也就是两个低频极点。如果两个极点相距不远,闭环接成单位增益时相位裕度很容易跌破45°,产生振铃甚至振荡。密勒补偿的做法是在第一级输出节点和第二级输出节点之间跨接一个电容Cc,利用第二级放大器的反相放大倍数,把Cc折算到第一级输出端时等效电容变成Cc×(1+Av2)。

这个效应的结果是直接拉开了两个极点的距离:第一级主极点被往低频方向推,第二级输出极点被往高频方向推,也就是所谓的极点分裂。你可以把主极点想成队伍里走得最慢的人,密勒电容相当于给他脚上绑了沙袋,让他更慢,这样后面速度快的人不会被堵住,整个环路更接近单极点系统,稳定性自然就好。

但是别忘了,Cc经过米勒效应后还会在右半平面产生一个零点,零点对应的频率大约是gm6/Cc。右半平面零点不但不帮稳定,反而在GBW附近贡献额外的相位滞后,会把相位裕度吃掉不少。所以标准两级运放里都会串一个调零电阻Rz,把这个零点从右半平面拉到左半平面,甚至直接放到第二极点频率上去抵消它。这部分手算细节我在第2节详细展开。

1.3 设计指标怎么拆解:增益、GBW、SR、功耗的联动

这次的目标指标如下:

指标目标值
工艺/电源0.35μm CMOS / 3.3V
负载电容 CL3pF
DC开环增益≥70dB
单位增益带宽 GBW≥10MHz
相位裕度 PM≥60°
压摆率 SR≥20V/μs
输出电压摆幅0.3V ~ 2.8V
静态功耗≤0.7mW

这些指标不是独立的,拆解的时候要同时盯住几条约束链。增益链:Av=gm1×gm6×(ro1∥ro3)×(ro6∥ro7),任何一级阻抗不够都拉不满。GBW链:GBW=gm1/(2πCc),它只由第一级输入管的跨导和密勒电容决定,跟第二级关系不大。SR链:SR≈I5/Cc,尾电流越大、补偿电容越小,压摆率越高。功耗链:总电流=I5+I6,不能超过210μA左右(3.3V下约0.7mW)。

你会发现GBW和SR都依赖Cc,但方向相反:Cc增大,稳定性好、噪声小,但GBW和SR都会下降;Cc减小,速度快了,但极点分裂不够,PM可能崩掉。所以手算的第一步不是到处加管子,而是先把Cc和尾电流定下来。我的经验是Cc取CL的三分之一到二分之一,初次设计取1.5pF,后面在版图阶段还有调整空间。

2. 手算W/L:从指标到每个管子的宽长比

2.1 先定补偿电容Cc和尾电流I5:SR和GBW的约束

我把Cc暂定为1.5pF。既然SR要求20V/μs,SR≈I5/Cc,那么I5至少要有30μA。为了给工艺角留余量,我把第一级尾电流取到40μA,这样SR=40μA/1.5pF≈26.7V/μs,无论FF还是SS角都不会跌破20V/μs。注意这里说的是第一级尾电流,也就是流经M5、然后平均分成两路进入M1和M2的电流。每边差分管电流ID1=ID2=20μA。

GBW=10MHz的要求反推第一级输入对跨导gm1=2π×10MHz×1.5pF≈94.2μS。这里的关键是:第一级跨导和Cc定了GBW,跟第二级无关。所以设计顺序应该是先定Cc和I5,再算gm1,再去倒推W/L。不要一上来就随便给管子定尺寸,否则后面会发现GBW和SR打架。

2.2 第一级差分对尺寸:gm1决定GBW

已知gm1=94.2μS,ID1=20μA,工艺库里PMOS的μpCox大约50μA/V²。先算过驱动电压:Vov1=2×ID1/gm1=2×20/94.2≈0.42V。这个值偏大,但在这个功耗预算下可接受。再用平方律公式算宽长比:

W1/L1 = gm1² / (2×μpCox×ID1) = 94.2² / (2×50×20) ≈ 4.44

取整为4.5,L取1μm(不是为了最小尺寸,而是为了更高的输出阻抗和更好的匹配,λ更小),W=4.5μm。注意L选1μm在这个工艺下ro会有明显提升,这对第一级增益很关键。第一级的两个输入管M1/M2严格同尺寸,版图阶段还要做共质心,这个后面说。

第一级增益估算:沟长1μm时λ大约0.05/V,ro2=ro3=1/(λ×ID)=1/(0.05×20μ)≈1MΩ,并联后约500kΩ,Av1≈gm1×500k≈47倍。这只有33dB,大头得靠第二级补。

2.3 第二级放大管和负载管:增益和摆幅的交叉点

第二级电流I6我取150μA。为什么不是更小?因为第二级跨导gm6直接决定GBW附近第二极点位置:p2≈gm6/CL。如果I6只有50μA,gm6上不去,第二极点就压在GBW边上,相位裕度很难看。取150μA时,如果gm6做到1.4mS,那么fp2=gm6/(2π×CL)=1.4m/(2π×3p)≈74MHz,是GBW的7倍多,单位增益处第二极点只贡献约7°相位滞后,这是合适的。

NMOS的μnCox约170μA/V²,已知ID6=150μA,gm6=1.4mS:

Vov6 = 2×150μ / 1400μ ≈ 0.21V W6/L6 = gm6² / (2×170μ×150μ) ≈ 38.4

取W6/L6=38,L=1μm,W=38μm。这个管子较大,版图里必须拆指,不能一根大条画到底。第二级负载M7是PMOS电流源,过驱动不能太小(否则输出高电平抬不上去),我取Vov7=0.5V,那么W7/L7=2×150μ/(50μ×0.25)=24。这样Vout最高能到3.3-0.5=2.8V,Vout最低到Vov6≈0.21V,摆幅覆盖0.3~2.8V没问题。

第二级增益:ro6和ro7在150μA下大约都是130kΩ,并联约65kΩ,Av2=gm6×65k≈91倍,约39dB。总增益估算在72dB以上,指标已经够到。

2.4 调零电阻Rz:把右半平面零点赶到左边

接下来是补偿电阻。如果不加Rz,Cc会把零点放在z=gm6/Cc≈933Mrad/s(约148MHz),这是一个右半平面零点,在GBW附近相位恶化严重。串上Rz之后,零点频率变为:

ωz = 1 / (Rz×Cc - Cc/gm6)

我们希望这个左半平面零点大致抵消第二极点ωp2=gm6/CL。令ωz=ωp2,解得:

Rz = (CL+Cc) / (gm6×Cc) = (3p+1.5p) / (1.4m×1.5p) ≈ 2.14kΩ

取标准值2.2kΩ,用poly电阻实现。这里有个实操经验:Rz不要做成可调的,第一次流片就固定一个值,仿真验证时确保它在TT、FF、SS下都能保证PM>60°。如果工艺偏了零点没完全抵消,只要Rz在1.5k~2.5k范围内,相位裕度都有余量。

2.5 设计参数汇总表

手算结束,整张设计表长这样:

器件作用W/L (μm/μm)直流电流过驱动电压
M1/M2PMOS差分输入对4.5/120μA each0.42V
M3/M4NMOS电流镜负载3/120μA each0.30V
M5PMOS尾电流源10/140μA0.40V
M6NMOS第二级放大管38/1150μA0.21V
M7PMOS第二级负载24/1150μA0.50V
Cc密勒补偿电容1.5pF--
Rz调零电阻2.2kΩ--

这表不是最终结果,而是仿真的起点。手算模型本身有误差,比如λ估算、Cox精度、寄生电容这几个因素都会让实际结果偏移,但有了这版参数,Spectre仿真的迭代次数就能控制在两三轮以内。真正麻烦的是下一节要说的仿真环节。

3. Spectre仿真实录:从工作点检查到工艺角扫描

3.1 第一件事永远是DC工作点:所有管子必须饱和

很多人一上来就跑AC,波形乱成一团才开始怀疑人生。正确顺序是先做DC工作点分析。在ADE L里跑dc后,查看operating point:每个管的region必须是饱和区(一般显示为region=2,也就是saturation)。我这次遇到的第一个问题是M3/M4电流镜没有做好,两侧电流差了1.2μA,直接导致第一级输出共模点偏低,M6的Vgs被抬得很高,第二级电流偏离150μA。

排查方法是查看M1/M2/M3/M4的Vds、Vgs、Vov,一项项对照手算值。重点看两个地方:一是第一级输出节点电压,它应该让M6工作在饱和区,同时M4的Vds不能太低;二是M5尾电流管是否真的稳住了40μA,如果Vds5不够,尾电流源会变成一个电阻,CMRR会非常难看。我的做法是给M5的L留大一点,让它的输出阻抗更高,尾电流更稳。DC工作点正常了,后面所有仿真才有意义。

3.2 开环AC仿真:别直接开环,用Stb或大电感反馈

AC仿真的坑在于高增益运放开环时DC工作点根本稳不住,一个小偏置就把输出打到轨上。这里推荐用Cadence的stb仿真:在环路里插入iprobe,设好正负输入端,stb会直接给出环路增益和相位裕度曲线,不需要外接大电感反馈网络,特别省事。

如果还是习惯传统开环AC测试bench,可以用大电感把输出引回反相输入端,比如接一个1GH的理想电感,这样DC时是闭环,工作点稳定;AC下电感阻抗极高,等效于开环。再配合从同相输入端串一个大电容进去,保证共模点不被直流源拉偏。两种方法我都试过,stb的结果与理论值更直接,数值上也能对上。

AC仿真读三个数:低频增益、0dB带宽(也就是GBW)、0dB处的相位。我第一版仿真得到的低频增益是73dB,GBW约9.7MHz,PM约64°。这里多说一句:GBW和PM是工艺角变化的敏感项,前仿真阶段一定要在五个工艺角下都看一眼再往下走。

3.3 手算和仿真为什么对不上:误差来源与微调

手算增益73.9dB,仿真73dB,差距不大,但GBW比10MHz略低。主要原因是寄生电容:第一级输出节点的寄生电容和Cc并联,把主极点推得更低,且gm1受短沟道效应影响略低于手算。另外手算λ用的是经验值0.05/V,实际模型在L=1μm下的ro可能只有800kΩ~900kΩ,这会直接吃掉第一级增益。

所以手算的目的是找出"哪些参数对哪个指标最敏感",而不是追求精确预测。比如发现GBW低了,先看是不是gm1不足,再决定是加大尾电流还是减小Cc。仿真中出现10%~20%的偏差是正常的,不要急着大改架构。微调的优先级我一般这样定:先调Cc和Rz改善稳定性,再调M5电流调整SR和GBW,最后才动M6和第二级尺寸,因为动第二级会牵连摆幅和功耗,影响面最大。

3.4 CMRR与PSRR的仿真方法

共模抑制比的测法在单端输出运放上比较直接。差模增益Ad的测试:给同相输入端加ac=1,反相输入端ac=0,输出得到的Vout就是Ad。共模增益Ac的测试:把两个输入端短接,公共端加ac=1,输出得到的Vout就是Ac。CMRR=20log10(Ad/Ac)。注意这时候第一级尾电流源的输出阻抗起了决定性作用:M5的ro越大,CMRR越好。所以好一点的运放会把尾电流源做成Cascode。

我第一版仿真的CMRR只有62dB,明显偏低,原因就是M5沟道太短。把M5的L从1μm加到2μm、调整W保证Vov不变后,CMRR提升到78dB。另外电流镜M3/M4的失配也会直接贡献共模增益,版图阶段做共质心就是为这一步兜底。PSRR的仿真类似,把ac源加到VDD上,测输出到电源的小信号增益,再与Ad相比即可。我仿真得到的PSRR+约65dB,PSRR-约72dB,这个量级对教学流片而言够用。

3.5 全工艺角、全温度扫描:规范里的"装死时刻"

前仿真在TT角下PM=64°,我还挺高兴,切到FF(fast-fast)角后PM直接掉到58°,再叠加-40℃低温,某些情况下甚至跌到54°。这就是所谓"装死时刻":单点仿真过了,工艺角一跑就露馅。原因其实很清楚:FF角下gm普遍偏高,第二极点fp2=gm6/CL被推高,看起来是好事,但第一级零点、寄生极点也都在移动,Cc的绝对值却不随工艺变,旧零点抵消方案就失效了。

解决办法是把Rz从2.2kΩ调到2.0kΩ,让零点位置在整个工艺角范围内更居中,PM在FF/-40℃下恢复到62°。GBW在SS角会掉到8.2MHz左右,这通常可以接受,因为设计指标允许有10%的裕量。我的习惯是至少跑TT/FF/SS三个工艺角,每个角跑-40℃、27℃、85℃三档温度,共9个组合,确保PM最小值不低于55°。

3.6 瞬态仿真不收敛:一条完整的排错链路

这节对应很多人都会踩的坑:Tran analysis失败,或者仿真器把时间步长压到femtosecond级,跑一天都没结果。我第一次遇到时以为是电路哪里接错了,查了半小时schematic无果。后来总结出一套排查顺序,按这个顺序走基本都能定位。

第一,查DC工作点。瞬态仿真之前如果DC不收敛,transient一定不收敛。先跑dc,看看有没有节点悬空、环路没有直流路径、或者某个节点的初值处于两个稳定状态之间。运放接成闭环时如果输出级有较大失调,DC会硬把输出推到轨上,这时先查输入失调和环路极性。

第二,检查仿真算法和精度设置。把积分方法换成gear2或trbdf2,reltol从1e-3放宽到1e-4,有时候就能跳过仿真器内部的数值不连续。同时给tran设置合理的maxstep,比如1ns或者总仿真时间的1/1000,不要完全留给自适应步长处理。

第三,查是不是电路真在振荡。如果stb显示PM不足,tran在闭环接法下就会高频振荡,仿真器为了追踪振荡波形不断减小步长,表现为"不收敛"。我遇到过一次单位增益缓冲器接法下高频啸叫,后来发现是Cc取值过小导致PM只有35°,把Cc从1pF改成1.5pF后波形立刻干净。

第四,检查后仿真阶段是否引入了过大寄生电阻和电容。版图提取后某个节点的RC延迟会让环路在高频处多一个迟滞极点,瞬态时表现为振荡,这时要回到版图去缩短关键走线,而不是硬调电路参数。

4. 版图实现:共质心、隔离环和后仿真的真实挑战

4.1 差分对和电流镜的共质心布局

画到版图这一步,才算真正接触到模拟IC设计的"手艺活"。差分对M1/M2的匹配直接决定输入失调电压和CMRR。常规做法是把每个输入管拆成两个finger,按ABBA交叉排列,让它们共享中心的对称点。为什么要这么排?因为芯片制造过程中存在晶圆径向的梯度变化,比如氧化层厚度、掺杂浓度的缓慢渐变。如果两个管子一左一右分开很远,梯度差就会被转化成Vos;ABBA交叉之后,一阶梯度在质心处互相抵消,失调能减小一个数量级。

M3/M4电流镜也一样,必须保证两个管子的源端和漏端走线尽可能等长等宽,接触孔数量一致,四周摆放dummy管。我的具体操作是:所有匹配管的两侧各放一条不接线的dummy管,保证边缘刻蚀环境一致;金属走线尽量用同一层同方向,不要在匹配管之间穿插长距离的poly走线。这些看似琐碎的细节,对LVS不产生影响,但直接决定这颗运放流片回来能不能用。

4.2 大尺寸晶体管的拆指与布线

M6的W/L=38/1,M7的W/L=24/1,这种尺寸不能画成一个大方块。必须拆成多个finger,M6我拆成4指,每指约9.5μm;M7拆成4指,每指6μm。拆指有几个好处:栅极电阻变小,高频性能更好;每个finger的源漏共用,寄生结电容反而比单个大管子小;版图应力分布更均匀。

拆指后要注意栅极的poly连接方式。一般用金属从两端把poly栅接到一起,不要只在单侧接,否则远离接点那个finger的栅极信号会有明显延迟。源漏的金属接触孔要尽量多打几个,大电流下接触孔电阻和电流拥挤不可小视。M6在150μA下源漏电流密度不大,但输出节点的寄生电容会加大,所以输出走线尽量短,直接接到Cc和下一级,不要绕远路。

4.3 补偿电容和电阻的版图落地

Cc=1.5pF在0.35μm工艺下面积不小。如果用poly-poly电容,典型容值密度约1fF/μm²,需要大约1500μm²的面积,画成多个小方块并联,避免一个大方块产生过大的寄生底板电容。如果工艺提供MIM电容,密度类似,但MIM电容的电压系数更小,对线性度更友好。教学流片一般poly-poly电容就够了。

Rz=2.2kΩ用poly电阻实现,先查PDK里poly电阻的方块阻值和最小宽度。假设方块阻值200Ω/□,那么2.2kΩ需要11个方块,画成宽度2μm、总长22μm左右。电阻放在比较边缘的位置,远离输出功率管的发热区域,否则温度变化会让零点偏移。由于Rz精度要求不高,不需要特别匹配,但两端接触孔一定要打够,避免接触电阻产生额外误差。

4.4 隔离环和衬底接触:防止闩锁与噪声耦合

版图里隔离环不是装饰,是底线。NMOS管做在P型衬底上,周围必须打一圈P+衬底接触环并接到VSS,这圈保护环一方面为体内电流提供低阻路径,防止少子注入引发闩锁,另一方面吸收来自相邻模块的衬底噪声。PMOS管做在N阱里,N阱周围要打N+环并接到VDD,防止PNPN结构导通。

有一个细节很多初学者会漏:PMOS差分输入对和PMOS尾电流源如果放在同一个N阱里,且衬底电位都是VDD,那没问题,可以共用一个阱;但M5的源漏电压和M1/M2可能不同,这时候比较容易出现阱间通过衬底耦合的噪声。我的习惯是输入对单独放一个阱,尾电流管单独放一个阱,两个阱间距留够,中间打衬底接触环。另外,所有阱的potting越是干净,运放的CMRR在高频段就越不容易恶化。

4.5 DRC/LVS后仿真:一切重新来过

版图画完,用Calibre跑DRC,第一次必然报一堆错:最小间距、poly延伸、接触孔包覆、金属密度不够。修DRC的过程不涉及电路原理,但很消磨耐心。修完DRC跑LVS,它会比对schematic和layout的网表,检查每个管子的W/L、连接关系、端口定义。有一个常见问题是M6拆成4个finger后,LVS把它当成4个并联管子,如果schematic里M6是一个整体器件,两边就不匹配。解决方法是在schematic里也把M6定义成4个finger的multi-finger管,保持网表一致。

我还调整了走线以降低M6栅极到第一级输出节点的寄生电容,因为这个高阻节点的寄生电容直接与Cc并联,会让GBW再掉一点。重新做后仿真后发现增益变化不大,但PM从64°掉到57°,原因是输出节点寄生电容和负载电容叠加导致第二极点下移。最后通过把M7的W/L稍微加大一点,同时略微调整Rz,让后仿真PM回到61°。这就是带版图的运放设计和纯前仿真最大的区别:你调的不只是管子尺寸,还有寄生和布局。

一些真实体会

这次设计完整走下来,最大的体会是手算、前仿、后仿三套数据互相印证,任何一个环节脱节都是要返工的。手算阶段可以快速试错,前仿阶段磨合电路架构,后仿阶段才是真正检验你版图画得好不好的时候。我见过不少人前仿真数据漂亮,后仿真一塌糊涂,最后发现问题全出在匹配和寄生上——这恰恰是版图的价值所在。

最后分享一个小技巧:在开始画版图之前,先把所有要匹配的管子整理成一个表格,列清W/L、finger数量、是否需要dummy、放在哪个阱里。画图的时候按表格走,能少犯很多低级错误。模拟IC设计这份工作,大部分时间不是在搞脑子,而是在跟细节较劲。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询