☰
两级CMOS运放设计全流程:从手算参数到版图后仿真
2026/9/25 5:11:02 网站建设 项目流程

1. 两级运放架构与设计指标确定

1.1 为什么选两级结构

做模拟CMOS集成电路设计,只要一谈到运放,大概率绕不开两级结构。我自己最早接触这个拓扑是在研究生第一年,当时导师直接扔过来一个任务:设计一款增益大于70dB、单位增益带宽10MHz、相位裕度不低于60度的两级运放,带版图。第一反应是"这不就是个Miller补偿运放吗",真正上手才发现,从预仿真到后仿真,坑多到可以写一本小册子。

先说清楚为什么选两级而不是单级或者三级。单级运放(比如折叠共源共栅结构)的优势是速度块、功耗低,但增益通常很难做到70dB以上,因为输出阻抗受限于单级增益表达式。折叠共源共栅在60-64dB附近基本是天花板,除非你有非常特殊的自举增益技术。而现成工艺库里的普通管子,本征增益A_v0大约在20-35之间,单级撑死也就60dB出头。两级结构的好处说穿了就是第一级吃增益,第二级扛摆幅:第一级提供高增益,第二级把输出摆幅做到接近电源轨。代价是多了一个极点,需要Miller补偿来分裂极点、稳住带宽。

那为什么不上三级?三级运放的稳定性问题是几何级数增长的,如果两级就能满足指标,完全没必要硬上三级。除非你要求增益超过100dB同时带宽还很大,这时候两级就不够用了。所以这个设计任务,两级是最合理的选择——这也是绝大多数模拟IC入门笔记里会选两级结构的原因。

1.2 架构选型:PMOS输入还是NMOS输入

两级运放的第一级输入对,到底是选PMOS还是NMOS,这个纠结几乎每次做新设计都要碰到。我的经验法则如下:如果你的共模输入范围需要覆盖到地(比如单电源低压系统、输入信号从0V开始摆),那第一级必须用PMOS输入对,因为PMOS输入对允许输入电压低到V_SS附近;反过来,如果输入需要覆盖到VDD,就选NMOS输入对。很多教科书喜欢说PMOS输入对噪声更小,这只是部分正确——PMOS的1/f噪声确实比NMOS低一个数量级以上,因为它的载流子在埋沟道里面跑。所以低噪声输入级,用PMOS几乎是行业惯例。

200mV的输入信号从地电位开始往上摆,第一级普通PMOS差分对就工作得很好,输入共模范围大概可以做到从V_SS到V_DD减去一个过驱动电压。我用的逻辑是把V_CM放到电源中点附近,给输入级和偏置级都留出余量。第一级PMOS差分对M1/M2、有源负载NMOS电流镜M3/M4;第二级NMOS共源管M5、PMOS有源负载M6。电流源偏置管M7/M8把整个运放的尾电流源和偏置网络串起来。这个基本结构符号表如下:

  • M1/M2:PMOS差分输入对管
  • M3/M4:NMOS有源负载(也可以做电流镜负载)
  • M5:NMOS第二级放大管
  • M6:PMOS第二级有源负载管
  • M7:第一级尾电流管
  • M8:偏置网络电流源

我用的偏置电流定为20µA。第一级尾电流20µA,差分对每边10µA;第二级工作电流我单独设成了200µA。为什么要差这么多?高速摆幅靠第二级推,它要带的是输出负载电容(我自己加到3pF,包含后级输入电容和测试负载),如果第二级电流太小,压摆率根本不够。压摆率SR约等于第二级电流除以补偿电容和负载电容的并联,20µA和200µA之间的差别,直接体现在瞬态仿真的大信号建立速度上。

2. 电路级参数计算与偏置设计

2.1 手算管子尺寸:从增益指标反推

拿到指标第一件事不能直接开Cadence画原理图,先在纸上把管子宽长比算出来再说。面向一个0.18µm CMOS工艺,阈值电压V_THN约0.45V、V_THP约-0.5V,这里给出我的完整计算过程,回头配仿真微调。

先看第二级。已知增益要求A_v2大约在40dB(100倍)左右,公式是:

A_v2 = -g_m5 × (r_on5 || r_on6)

这里的g_m5是M5的跨导,r_on5、r_on6分别是M5和M6的输出电阻。为了给第一级分担增益压力,第二级必须做到40dB以上。假设第二级输出点等效电阻R_out2约200kΩ,那么g_m5 = A_v2 / R_out2 = 100 / 200k = 500µS。再根据过驱动电压算宽长比:

g_m = 2 × I_D / V_ov

我取M5的过驱动电压V_ov=200mV,I_D=200µA,那么g_m = 2×200µA / 0.2V = 2mS,比刚才算的500µS宽裕不少,那就说明M5的尺寸可以做得相对小一点,或者我更该考虑的是保证第二级输出摆幅足够。反向推W/L:

W/L = 2 × I_D / (µ_n × C_ox × V_ov²)

µ_n×C_ox在0.18µm工艺下通常取190µA/V²(这是典型值,实际要看工艺角)。代入:W/L = 2×200 / (190×0.04) ≈ 52.6。取整数50,在最小L=0.18µm下,W=9µm。但我不会把L设最小,因为最小沟道长度管子输出电阻太差,直接把Av拖垮。我选L=0.5µm(约大于最小2.5倍),W调整到15µm,这样W/L=30,输出阻抗会好很多。完整计算里这一步我反复看了很久,实际我用了L=0.6µm的M5。

再看第一级增益。第一级增益A_v1 = g_m1/(g_ds2 + g_ds4),目标是做到60dB(1000倍),这样总增益Av = Av1×Av2≈1000×100=100000,即100dB,留出覆盖率。管子的r_out在0.5µm L条件下,PMOS大约80kΩ,NMOS大约60kΩ,并联后等效约34kΩ。要求1000倍增益,g_m1 = 1000 × (g_ds2+g_ds4),其实就是1/R_out,算出来g_m1 ≈ 29.4mA/V,这太大了。原因是我刚才把输出阻抗低估了或者增益要求对第一级过严。简单做法:第一级分担50dB(316倍),第二级40dB(100倍),总增益还是80dB以上,足够满足70dB指标。这样g_m1 = 316 / 34k ≈ 9.3mA/V。PMOS的µ_p×C_ox约50µA/V²,取V_ov1 = 150mV,W/L = 2×10µA /(50×0.0225) ≈ 17.8。考虑第一级尾电流10µA每边,我初始设为W/L=20,W=4µm,L=0.2µm,后调至W=5µm、L=0.25µm,匹配工艺。这里注意:输入对管L稍微加长可以显著改善匹配和1/f噪声,代价是带宽下降。我自己后仿对比过L=0.22和L=0.5的1/f噪声拐点,后者能低一半。

2.2 米勒补偿:不要只想着Cc,零点消除很关键

两级运放的稳定性核心就是米勒电容Cc。教科书里的传函表达式很干净,但实际设计时有个隐藏的杀手——右半平面零点。第二级增益级(M5的源极是地)会通过Cc引入一个RHP零点,频率大约是:

z = g_m5 / (2π × Cc)

如果不消除这个零点,它会严重恶化相位裕度。我做设计时把g_m5设计在2mS,Cc选在2pF,那么零点频率就是2mS/(2π×2pF)≈159MHz。这时候GBW大约在10MHz左右,零点比GBW高15倍,说实在话影响不明显,但如果你的带宽要求推到30MHz以上,零点就会在GBW附近晃悠,相位裕度直接掉到30度。我当时为了凑带宽把第二级电流提到300µA,g_m5增大到3mS,Cc不变的话零点到了238MHz,倒是安全了,功耗代价也上去了。功耗和稳定性就是这种互相打架的关系。

更常用的做法是给Cc串一个调零电阻Rz。我自己的方案是用一个工作在深线性区的PMOS管做有源电阻。Rz约等于1/g_m5时可以把RHP零点推到无穷远甚至移到左半平面,前提是Rz稍微大于1/g_m5。参考公式:如果忽略寄生,消除零点的条件是Rz = (C_L+C_c)/(g_m5×C_c),我们这里C_L=3pF、Cc=2pF、g_m5=2mS,插入公式Rz≈1.25kΩ。实际上这个条件对工艺角非常敏感,我一般取Rz在1.2k到1.8k之间可调,用并行连接的PMOS管搭配一组外部符号扫描,找到最优值。真正做流片时这个Rz也是trimming候选——因为poly电阻绝对值偏差可能到±20%,不做校准就只能靠设计余量扛。

Cc本身我是用MIM电容实现的,2pF在0.18µm工艺下大概需要多少面积?MIM电容密度通常1fF/µm²,所以2pF就是2000µm²,大约45µm×45µm的一块。这不是个小面积,版图里它会影响很大一块布局。有些先进工艺用金属叉指,但0.18µm还是MIM划算、匹配也稳定。后仿真时MIM电容的寄生底板电容大约占10%,会轻微影响Miller效应,不影响功能。

3. 仿真验证:Cadence环境下从DC到AC的完整流程

3.1 仿真环境搭建与DC工作点检查

按我在Cadence Virtuoso IC6.1.8环境里跑这个电路的顺序来说。选择的就是CMOS 0.18µm工艺库。启动后流程:新建library、绑定工艺库、建schematic、调用analogLib里的nmos4/pmos4管,然后挨个把宽长比填进去。很多刚入门的朋友习惯直接开ADE L就点仿真,但第一件事我强烈建议先跑一个DC operating point,把所有管子的region检查一遍。我设计的偏置条件是:所有管子都应该工作在饱和区,V_DS大于V_DSAT,差分对管在正常工作共模下也要避开线性区。

DC仿真设置如下:电源电压VDD=3.3V,VSS接地,共模输入VC=1.65V,差分输入瞬时设成0.5V,在ADE L里把"Save DC Operating Point"勾上,跑完用results直接看每个管子的g_m和V_ov。实际第一版仿真就发现M5的V_DS不够,原因是我给的M6偏置电压太高,M5被压到线性区边缘,输出摆幅上段已经削顶了。遇到这种问题,最先怀疑的是偏置网络和M6的栅压分配。我把偏置级的M8宽长比调大了一些,电流镜比例重新分配,使M6的V_SG变小一点,V_DS,M5从90mV拉到了250mV,输出摆幅恢复正常。这里可以分享一个排查技巧:如果输出波形出现明显非对称变形,优先怀疑尾电流源或者负载管进入了线性区,而不是怀疑差分对。

3.2 AC仿真与相位裕度判断

AC分析是验证小信号增益和稳定性最重要的手段。在Cadence里我直接在激励源上给"ac=1V"的交流和直流偏置1.65V,然后AC扫描从10Hz到100MHz,20个点每十倍频程,得到增益-频率曲线和相位曲线。第一版跑完,低频增益有82dB(约1.2万倍),单位增益带宽GBW大约8.9MHz,相位裕度只有48度——不足60度。第一反应就是Miller补偿不足或者输出负载太大,我不急着去动Cc,先看零极点报告。Virtuoso的Results里面有pole-zero分析功能,跑一下PZ分析,能看到一个低频极点对(主极点约15kHz)和一个大约180MHz附近的零极点对。右半平面零点就藏在这组零极点中。

按之前算的该加调零电阻,我把Rz加上再扫值,从500Ω到2kΩ,相位裕度从43度一路上升到67度。在1.5kΩ附近相位裕度达到最佳约66度,再往上又开始回落,因为Rz过大把零点移到了左半平面太近的位置,又引入了额外的相位滞后。最后锁定Rz=1.5kΩ,Cc=2pF。这里要强调,相位裕度不是越大越好,超过75度会牺牲带宽和建立速度,66度是个兼顾稳定性和建立性能的折中。

3.3 瞬态仿真与压摆率实测

交流特性只是半张脸,运放在时域的行为才是实际电路里你真正关心的。瞬态仿真我给输入加了一个1MHz的方波,幅度1V,从一个单位增益缓冲结构上测输出电压变化速率。压摆率的仿真方法:输入一个大摆幅阶跃(比如从0V推到1V),看输出从10%到90%的上升时间,用ΔV/Δt算出SR。

我在1pF轻载下测到的SR约42V/µs,换到3pF满载时降到15V/µs。两者差距就是我前面说过的第二级电流决定SR的直接体现:SR≈I_5/(Cc+C_L),用200µA去除以2pF+3pF得到40V/µs,和仿真基本吻合。这部分对应设计指标没有什么严格约束,但如果你后面要驱动ADC的采样保持电路,SR不够会导致大信号建立误差直接变成转换误差。

瞬态仿真还有一个很多新手忽略的操作——检查建立时间。用0.1%精度判据,从阶跃开始到输出稳定在终值0.1%以内,我在3pF负载下测试结果约为180ns,还算可以。如果这个值太大,多半是Cc取值偏大、GBW太低所致。关于建立时间的快速定位办法:把瞬态曲线的尾部指数拟合,时间常数τ=1/(2π×GBW),若GBW=10MHz,τ约16ns,五倍τ约80ns应该稳定,但实际180ns说明有一个低频极点拖尾,指向输出级电流不够,不是Cc的问题。

3.4 共模抑制比CMRR与噪声仿真

共模抑制比这个指标在带版图以后表现会明显变化,但前仿真也要先测。方法是输入共模电压扫描从0.2V到3.1V,观察输出变化,计算ΔV_out/ΔV_CM,再除以运放增益,倒过来得到CMRR。前仿真在1.65V共模点附近CMRR约85dB,还算不错。但注意,这个数字在没有版图失配的前提下不可全信——版图引入的不对称会让CMRR掉20dB以上,这也是后面版图部分必须做匹配的原因。

噪声仿真用noise分析,给一个10Hz到100kHz的积分带宽。PMOS输入对的1/f噪声在100Hz处约500nV/√Hz,热噪声底约15nV/√Hz。这个结果在我的应用场景里合格。如果你需要更低噪声,可以通过增大输入对管面积来摊薄1/f噪声,噪声-面积是一个典型的反比例关系。

4. 版图设计:两级运放的匹配与防身术

4.1 电流镜匹配与差分对的共质心布局

版图阶段才是真正拉开差距的地方。前仿80dB的CMRR和增益,画完版图如果乱摆一通,后仿能给你掉到50dB。核心原因就是版图的失配:多晶硅栅刻蚀不均匀、STI应力的影响、金属走线电阻压降不对称。我是这样布局的:

输入差分对M1/M2必须用共质心(Common-Centroid)结构。我把两个管子的栅交叉指状排列,每根叉指宽度2µm,一共10根叉指,A管占奇数组、B管占偶数组,外围加上一圈Dummy管(源漏都短接的假管子),保证刻蚀环境一致。版图设计时我在每一根指周围都放了同样的poly环,这样边界效应被Dummy吸收。实测这种共质心+DUMMY做下来的失调电压能控制在1mV以内,如果是普通并列排布,失调可能到5mV——后者对高精度运放就是致命伤。

电流镜M3/M4、M7/M8也一样,采用共质心还是平行互锁取决于尺寸大小,M3/M4尺寸不大,我用平行互锁加两侧Dummy。栅的方向必须全部一致,这听起来像是小事,但如果一个栅横着走一个竖着走,多晶硅刻蚀的CD偏差和氧化层厚度差异会带来巨大的失配。一条经验法则:所有匹配管的有源区朝向保持一致,最好用LAYOUT XL从原理图映射参数生成初始结构,再手动调整。

4.2 隔离环、衬底噪声与电源布线

模拟版图最忌讳的就是把自己放在数字噪声的炮口下。我虽然在单独做运放版图,没有数字模块在旁边,但隔离环仍然是必备动作。差分输入对和偏置电路周围我加了两圈隔离环:内环是P+注入加接触孔的P型环,接VSS,用来吸收衬底噪声;外环是N阱环,接VDD,用来防止附近模块的少子注入跑到我的有源区。隔离环的宽度至少要去到1.5µm以上,否则衬底噪声在高频下会透过很薄的环直接穿进来。

电源走线单独说。M6和M7分别连接模拟VDD和VSS,走线时我不能直接从电源pad拉一条细线绕半圈过来,那样金属电阻会造成电源压降,不同管子看到的VDD不一致。我在版图里把电源干线做成"梳子"形状,让每一个需要电源的管子都从最近的电源梳齿取电,并且电源线宽度至少3µm,金属层选高层(M3/M4)走长距离、低层(M1/M2)做局部互联。这样做以后,IR-drop仿真结果显示M6源端和M7源端的压差从原来的45mV降到8mV,这个改进对整个差分级的对称性帮助极大。

4.3 DRC、LVS与后仿真流程

画完版图不能直接就提交流片,先过DRC和LVS。DRC(设计规则检查)直接跑Calibre,最常见的问题是有源区间距不够、金属最小宽度不满足、多晶硅栅延伸长度不够。我第一遍DRC报出来37个错误,大部分是由MIM电容的周围空间要求和电源金属宽度不够引起的。改起来不复杂但要细心。Calibre修改时不要靠DRC报告逐个点,应该分区域人手过一遍,把金属线换层连到MIM电容时,MIM上下极板的连接关系和通孔阵列位置看清楚。MIM电容底极板连接衬底会引起寄生,我的做法是底极板接VSS、顶极板接输出节点,让底板寄生被吸收到交流地。

LVS检查是把版图的器件和电路原理图做一致性比对。第一次LVS就报了M1/M2的W/L不匹配——因为共质心布局里我把两个管子的叉指分组后,源漏合并方式让LVS提取出的M1实际W/L跟原理图不一致。这类问题常见,解决办法是在XL环境下把M1/M2的叉指合并选项设置清楚,不要让LVS把A、B管的手指识别成单独的器件。LVS通过后才是后仿真(Post-layout Simulation)。我在连接版图提取出的calibre view之后,单独提了寄生参数,用RC提取模式(R+C+CC),提取结果带回到ADE里再跑一遍AC和瞬态。

我第一次后仿结果真的很打击人:GBW从8.9MHz掉到了6.8MHz,相位裕度从66度掉到了53度。仔细对比前后仿的寄生参数表,发现输出节点多出了约0.9pF的寄生电容,Cc的顶板寄生也有0.4pF。这意味着实际等效Cc接近2.4pF,C_L变成3.9pF,GBW下降完全符合预期。解决方案不是缩小寄生——那是改版图,而是给后仿真留余量:前仿真就把GBW目标定为12MHz,后仿衰减后还有8-9MHz。这是一个很实用的设计策略:前仿指标往高做1.2-1.5倍,给版图寄生留出余量。

5. 常见问题与排查技巧实录

5.1 仿真发散的常见原因

Cadence里跑AC或瞬态仿真出现"convergence failure"或者"time step too small"是新手最容易撞到的墙。我遇到最多次的原因有三个:第一,初始工作点不收敛,多半是电路中存在高增益环路,DC扫描时解算器找不到解。解决方法是把"DC Operating Point"部分里的迭代次数从默认50调高到500,同时在电路的某个高阻节点并联一个大电阻1GΩ到VSS,作为"启动辅助",仿真收敛后再移除。注意这只是辅助手段,不是正经设计。

第二个原因是器件模型带来的寄生振荡。有些工艺库的管子模型在某些偏置区有很陡的g_m变化,瞬态仿真容易在亚阈值区和饱和区边界震荡。解决办法是在Cadence瞬态选项里选择"gear2only",它比默认的trap方法更稳定,不会因为数值阻尼产生寄生振荡;代价是仿真时间变长。如果你用spectre跑,把"strobing"关掉也能减少一些奇怪的数值问题。

第三类则是电路本身存在不稳定低频极点,让我把补偿电容调大一点试到2.5pF,相位裕度上去了,瞬态就不再出现振铃。振铃不是数值问题而是电路真实响应,这是需要区别的关键。判断方法是看波形频率是否和环路增益带宽一致,如果振铃频率在GBW附近,那一定是稳定性问题;如果波形呈随机噪声状、节点电压任意跳跃,才更可能是数值发散。

5.2 相位裕度不足怎么快速补

相位裕度不足有几个特征表现:瞬态仿真里阶跃响应出现持续振荡,AC频率响应在0dB附近出现明显峰化(peaking超过2dB)。我从多个设计里总结了一个快速排查顺序:

  • 先看Cc是否过小。在先进工艺里,寄生电容可能让实际补偿比预期小20%-30%,所以Cc标称值要预留余量。
  • 再看输出负载是否比预期大。后仿真在输出端看到0.5-1pF寄生完全正常,如果负载指标要求3pF,那么实际已经接近4pF,主极点移动会压缩PM。
  • 再看零点是否偏移。Rz电阻值浮动超过±30%可能让RHP零点移到GBW附近。
  • 最后看第二级电流是否偏小。如果M5的g_m不足,零点频率会下移到危险区。

这套排查顺序在实际操作中帮我节省了大量时间。有一次一个运放后仿真PM只有42度,我按顺序逐步排查,最后发现是M5的L太长、g_m不足导致零点下移。把M5的L从0.6µm缩回0.45µm并增加微量电流,PM回升到61度。很多人第一反应就是加大Cc,其实在这个案例里加大Cc只会让GBW掉得更厉害,问题根源没解决。

5.3 版图后仿比前仿性能差太多?

后仿性能退化有一个非常典型的分布规律:GBW掉20%-30%是正常的,低频增益掉3-6dB也是可以理解的,但如果掉到一半以上就要怀疑版图出了问题。我碰到过一个极端案例:后仿GBW从前仿的10MHz掉到2MHz,几乎没法用了。最后定位原因是有源区附近的金属密度填充让M1/M2的源漏寄生电容翻了数倍,再加上我输出导线走了很长一段M1,线电容就有0.8pF。解决方法是把输出导线改走M3/M4高层金属,并在版图里手动添加金属密度填充guard ring,把寄生拉回正常水平。

层次化排布也很关键:输入级和输出级不要隔得太远,否则两者间长走线的寄生就把高频性能摧毁了。我自己一般把输入差分对放在整个版图中心,第二级和补偿电容紧贴第一级,输出级靠近右侧Pad。这样寄生电容集中在局部,走线也短。远程走线一律高层金属。

5.4 直流失调和共模抑制比变差

版图之前CMRR能到80多dB,后仿真却只有55dB,这就是版图不对称惹的祸。最典型的原因就是差分对管的共质心做得不够干净或者Dummy缺失。如果一个管子的栅漏有源区比另一个多0.1µm的偏差,等效到输入端就是零点几毫伏×增益倍数的失调,映射到CMRR就是灾难。另外电流镜M3/M4如果不做匹配,电流比例误差会直接破坏第一级的对称性,CMRR和PSRR同时恶化。排查时先用LVS确保电路一致性,然后在版图里打开"interconnect stress"选项,检查差分路径上的金属走线电阻是否相等。我试过输入对到电流镜负载之间的金属走线,一边走了M1一边走了M2,结果完全不可接受——差分会增加至少2mV。修正为同层金属等长布线后,CMRR后仿恢复到72dB。

一点实操心得

这次两级运放的项目做下来,我最大的体会是:前仿真指标定得太勉强,后仿真一定会被寄生拖垮。给版图寄生留余量这件事看起来是浪费性能,实际上是在量产可靠性上花钱买保险。另一个体会是手算的重要性——仿真工具能帮你验证设计,但它不会替你做设计决策。遇到指标不满足时,先回到纸面上推一遍公式,往往比盲目扫参数更快。如果你也要做带版图的两级运放,建议按这样的顺序推进:手算确定尺寸→前仿真验证DC/AC/瞬态→加冗余调整→版图匹配→后仿收敛。整个过程正常在一到两周内能完成,但如果中间反复在版图上栽跟头,时间就不好说了。后面我还想把噪声分析、电源抑制比和温度特性这些再单独细聊,那些更考验对器件物理的理解。

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

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

立即咨询