1. 从“看不懂Sansen”到动手搭电路:这页书到底在讲什么
很多人第一次翻开 Sansen 那本《Analog Design Essentials》,都会在 Class AB 输出级示意图前卡住:纸上一个圆圈写着“floating voltage source”,两端引出两条线分别接到上管和下管的栅极,旁边配了一段“保证 VGS 之和恒定”的说明。你觉得你懂了,但下一页突然开始推环路增益、输出阻抗、偏置电流对失真的影响,公式越堆越多,你反而开始怀疑自己刚才到底懂了什么。
我当年也是这么卡住的。后来因为要做一个低压差 buffer,被逼着亲手把“浮动电压源”用电路实现出来,再回头翻 Sansen 的那几页,才觉得这本书终于“通”了。这篇复盘就是记录这个过程:从教材符号到可仿真的 Class AB 输出级,每一步怎么想、怎么算、怎么搭、怎么调试。
这篇文章适合两类人:一类是正在啃模拟 IC 教材、对输出级偏置似懂非懂的初学者;另一类是已经会搭基本运放,但一碰到 Class AB 输出级就不知道静态电流怎么控、浮动电压源怎么生成的老老实实工程师。我把整个设计过程拆成“原理理解—电路选型—参数计算—仿真调试”四个阶段,你可以直接照着搭。
1.1 输出级的核心矛盾:静态功耗、驱动能力与交越失真的三角关系
先搞清楚一个最基本的问题:输出级到底在解决什么?
一个运放或者 buffer,前级负责高增益和小信号处理,最后一定要有一个能对外输出电流的级,也就是输出级。这个输出级的负载可能是电容、电阻,也可能是下一级电路的输入管栅极。它要做的事情很简单:在输入信号变化时,把输出电压尽快拉到目标值,并且在整个输出范围内保持足够的环路增益。
但这里有一个天生的矛盾。
如果输出级用 Class A,两个输出管永远处于导通状态,静态电流很大,好处是不会有交越失真,坏处是静态功耗高得离谱。我做过的很多低功耗项目里,Class A 输出级光静态电流就能吃掉整个芯片一半的电流预算,这在电池供电场景下根本没法用。
如果输出级用 Class B,两个输出管一个在正半周工作,一个在负半周工作,静态电流理论上为零,功耗很低。但问题随之而来:当输入信号从正半周切换到负半周时,两个管子都处在截止边缘,输出电压会出现一段“死区”,也就是交越失真。在音频电路里,这种失真听起来非常难听,波形上直接能看到输出电压在零点附近被“切”了一刀。
Class AB 就是取中间路线:两个输出管在静态时保持一个很小的导通电流,比如几百微安到几毫安,这样既不会出现完全截止的死区,静态功耗又远小于 Class A。信号一大,上管或者下管自然进入更强的导通状态,输出电流可以很大。可以说,Class AB 是用“一点点静态电流”换来了“几乎没有交越失真”和“低静态功耗”的双重优势。
但这里藏着一个关键点:要让两个输出管在静态时都导通,并且导通电流精确可控,你必须给它们的栅极之间提供一个合适的电压差。这个电压差就是浮动电压源的核心作用。
1.2 Sansen 书里最劝退的地方:浮动源不是一个“源”,而是一种约束
Sansen 在讲输出级的时候,喜欢用理想浮动电压源来简化模型:它画成一个圆圈,两端没有接地,强调“两端之间的电压是恒定的”。这个表述让很多人觉得莫名其妙——电压源的“地”在哪里?如果不接地,那它的参考点是什么?
我后来想明白了一件事:Sansen 画这个浮动源的真正意图,不是让你去“生成一个电压”,而是让你理解输出级两个输出管栅极之间必须存在一个“电压约束”。
以最常见的互补推挽输出级为例:上管是 PMOS,下管是 NMOS,两个管的源极共同接到输出节点 Vout。PMOS 的栅极电压记为 VGP,NMOS 的栅极电压记为 VGN。要保证两个管子都在导通状态,需要满足:
- 对于 NMOS:VGN 要比 Vout 高一个 VGS(N),也就是 VGN = Vout + VGS(N)。
- 对于 PMOS:VGP 要比 Vout 低一个 VSG(P),也就是 VGP = Vout - VSG(P)。
把两式相减,可以得到:
VGP - VGN = -(VSG(P) + VGS(N))
也就是说,两个栅极之间的电压差,必须刚好等于上管的 VSG 加上下管的 VGS。这个差值不变,两个管子的静态电流就不会乱跑。Sansen 把这个差值画成一个“浮动的电压源”,是为了强调:这个电压源不接地,它的两端电压恒定,但两端对地的绝对电压会随着 Vout 一起上下移动。
当年我没想通的就是这里。我总觉得电压源要有一个固定的地,看到浮动源第一反应是“这东西怎么产生?”,然后就卡住了,后面那些推导全都没看进去。
1.3 看懂了符号,为什么还是搭不出来
现在回头看,真正阻碍我动手的,不是公式太难,而是缺少一个“从符号到电路”的翻译过程。
书里的浮动电压源是理想器件,它可以帮助你快速分析输出级的大信号行为和小信号行为,但在实际芯片里,你得用晶体管和电阻把它搭出来。问题来了:到底用什么结构去实现一个浮动电压源?它的电压值怎么设定?温度变化时怎么保持稳定?和主运放的环路怎么衔接?
这些问题,教材里往往只给出几种偏置结构示意图,比如二极管连接的 MOS 管串联、VGS 倍乘器、浮空电流源,但不会告诉你“到底先用哪一个”“参数怎么算”“仿真里怎么验证”。
我的经验是,正确顺序应该是:先把理想浮动源放进输出级,把整体环路跑通;然后再把理想源替换成真实偏置电路;最后再做温度和工艺角扫描。这个顺序看起来多了一步,实际上能帮你把“电路结构问题”和“偏置电路问题”分开排查。后文我会详细展开这个过程。
2. 浮动电压源:不只是“两个VGS之和”那么简单
2.1 “浮动”到底浮在哪:一个接地电池解决不了的问题
先说一个直观的类比。想象两个工人搬一块长木板,一个在左边抬,一个在右边抬。如果两个工人之间有一根固定长度的绳子连着,那么无论木板怎么上下移动,两个工人的手始终保持在同一个相对距离上。浮动电压源就是那根绳子:它不关心木板离地面多高,只保证两个手之间的间距不变。
对应到电路上:PMOS 栅极 VGP 和 NMOS 栅极 VGN 的差值恒定,但它们各自的绝对电压是随着 Vout 变化的。信号摆动时,Vout 往上走,VGN 和 VGP 也必须跟着往上移;Vout 往下走,两者一起往下移。如果你用一个普通的接地电池放在 VGP 和 VGN 之间,电池正极接了 VGP,负极必须接 VGN,但电池的“地”参考是固定不动的,这就会导致 VGP 或者 VGN 其中一个无法跟随输出信号摆动,最终把输出级直接压死。
所以“浮动”二字的本质是:这个电压源的参考点不是地,而是另一端的电位。它两端之间的压差恒定,但对地的绝对电平由外部节点决定。这也是为什么你在仿真里不能简单地把一个 vdc 电池一端接地——你必须让它浮在两个栅极节点之间。
理解了这一点,后面看任何浮动偏置结构都会轻松很多。
2.2 二极管串联偏置为什么不够好
最朴素的想法是:既然需要固定 VGS(N)+VSG(P) 的和,那干脆用一个二极管连接的 NMOS 串联一个二极管连接的 PMOS,放在两个栅极之间,让它们各自提供一路 VGS。
这个结构在很多书里出现,也确实能工作,但你实际用起来会发现三个问题。
第一,电压不可调。二极管连接管的 VGS 由管子尺寸和流过它的电流决定。如果你想调整静态电流,只能改管子尺寸或者注入电流,自由度很小。而且两个 VGS 是“各自为政”的,很难精确地让上管的 VSG 和下管的 VGS 按你想要的数值配合。
第二,温度漂移不匹配。输出管的温度特性和偏置二极管的温度特性可能不一致。如果偏置二极管和输出管没有做很好的版图匹配,温度变化时,两个 VGS 之和的变化趋势和输出管需要的趋势对不上,静态电流就会随温度明显漂移。
第三,电流变化会卡住工作点。二极管连接的管子两端电压会随流过的电流变化。当输出级大信号动作时,如果浮动偏置路径上的电流被信号调制,偏置电压就会跟着抖动,导致输出级静态工作点不稳定,甚至引起失真。
我说“不够好”,不是说它完全不能用。在一些对静态电流精度要求不高的简单电路里,二极管串联也可以凑合。但如果你要做的是正经运放输出级、LDO 调整管驱动级,或者音频 buffer,我建议直接上 VGS 倍乘器。
2.3 VGS倍乘器:一个管子+两个电阻调出精确浮动电压
VGS 倍乘器的电路结构非常经典:一个工作在饱和区的 MOS 管,加上两个电阻 R1 和 R2,就能生成一个可编程的浮动电压。它之所以叫“倍乘器”,是因为它把一个 MOS 管的 VGS 电压“放大”成任意倍数的电压差。
具体接法是这样的:参考管 MN_ref 的漏极接到浮动电压源的上端 A,源极接到下端 B;电阻 R1 跨接在 A 和 MN_ref 的栅极之间,电阻 R2 跨接在 MN_ref 的栅极和源极(B)之间。也就是说,从 A 到 B 看进去,上面是 MN_ref 的漏源通路,下面由 R1 和 R2 串联分压。
推导很简单。MN_ref 的栅源电压等于 VGS_ref,因此 R2 两端的电压就是 VGS_ref。忽略栅极漏电流,流过 R2 的电流为 VGS_ref / R2,这个电流也必然流过 R1,所以 R1 上的压降是:
VR1 = (VGS_ref / R2) × R1
那么从 A 到 B 的总电压:
VFLT = VGS_ref + VR1 = VGS_ref × (1 + R1 / R2)
这个公式就是整个倍乘器的核心。你只需要调整 R1/R2 的比例,就能把参考管的 VGS 放大到一个任意需要的浮动电压值。
需要说明一点:上面推倒中忽略了 MN_ref 本身漏极流向源极的电流。严格来说,流过 MN_ref 的电流由外部偏置电流决定,它会略微影响 VGS_ref 的数值。但在大多数情况下,只要参考管的尺寸和电流选择合理,VGS_ref 基本稳定在阈值电压附近的一个较小过驱动电压上,上述公式作为设计初值完全够用。
相比二极管串联,VGS 倍乘器最大的优势在于:输出电压可以连续调节,而且只依赖一个参考管的 VGS,温度跟踪性更好。你甚至可以把参考管做成和输出管同类型的管子,让它的阈值电压和输出管一起漂移,从而在宽温度范围内稳住静态电流。
2.4 从理想源到实际电路:先跑通理想源,再换倍乘器
这里给一个我自己的设计习惯:不管最终方案选什么偏置结构,第一版仿真一定先用理想电压源代替浮动源。
很多新手一上来就画完整电路,结果 DC 仿真不收敛,或者工作点完全不对,根本分不清是输出级的问题还是偏置电路的问题。先用理想源,你只需要设定一个常数 VFLT,就能把输出级的行为验证干净。
具体做法是在 Spectre 里用 analogLib 的 vdc 元件,正端接 VGP,负端接 VGN,设初始电压为你要的浮动电压值。跑 DC 和瞬态,确认输出级本身没问题,比如静态电流符合预期、没有交越失真、环路相位裕度够。然后再把理想源删掉,换上 VGS 倍乘器,重新仿真。这样如果出了问题,几乎可以断定是倍乘器接错了,排查范围小很多。
等一会儿到第三章,我会给你一组具体的管子尺寸和电阻值,你直接抄作业就行。
3. 保姆级实操:亲手搭一个能跑的Class AB输出级
3.1 先定设计指标再算尺寸:一个0.18μm工艺的算例
做设计的第一步永远是定指标,没有指标就谈不上选型。我这里用一个典型的片内 buffer 输出级作为例子,指标如下:
- 电源电压 VDD = 3.3V,地 GND = 0V
- 输出静态电压 Vout_DC = 1.65V(也就是 VDD/2)
- 峰值输出驱动电流 ±30mA
- 负载电容 CL = 50pF,负载电阻 RL = 1kΩ
- 目标静态电流 IQ = 1mA(两个输出管各取 1mA)
- 输入信号为 1MHz 正弦波
先验证一下驱动能力需求是否和解题目标匹配。输出级驱动 50pF 电容,在 1MHz、0.5V 峰值正弦下的压摆率大概是:
SR = 2π × f × Vpeak = 2 × 3.14 × 1e6 × 0.5 ≈ 3.14 V/μs
需要的电流为:
I = CL × SR = 50e-12 × 3.14e6 ≈ 157μA
这个值其实很小,30mA 的峰值驱动能力完全绰绰有余。之所以把峰值定到 30mA,是为了应对更恶劣的瞬态,比如方波边沿或者负载突变。实际工程里,你也会为了这种“瞬时冲击”预留出足够余量。
接下来确定管子尺寸。假设工艺是 0.18μm,取最小的输出管沟道长度 L = 0.5μm(比工艺最小 L 稍大一些,主要为了得到更高的输出阻抗和更好的匹配)。已知:
- NMOS 的 μnCox ≈ 200μA/V²
- PMOS 的 μpCox ≈ 80μA/V²
- NMOS 阈值 VTHN ≈ 0.5V
- PMOS 阈值 |VTHP| ≈ 0.5V
用平方律公式估算静态导通电流:
ID = (1/2) × μCox × (W/L) × VOV²
我们先把目标静态电流 1mA 定下来,再反推过驱动电压 VOV。这里有个折中:VOV 太小,管子会进入亚阈值区,匹配变差;VOV 太大,要达到同样的 ID 就需要更大 W/L,版图面积暴涨。我一般喜欢把静态 VOV 控制在 0.1V 到 0.2V 之间。
先试一组尺寸:NMOS 取 W/L = 400/0.5,也就是 W = 200μm,L = 0.5μm。代入计算:
ID_N = 0.5 × 200μA/V² × 400 × VOV_N² = 40000μA × VOV_N² = 0.04A × VOV_N²
要让 ID_N = 1mA,得到 VOV_N² = 0.001 / 0.04 = 0.025,VOV_N ≈ 0.158V。这个值在我的目标范围内,比较合适。
PMOS 因为迁移率低,需要更大的 W/L。取 W/L = 1000/0.5,W = 500μm:
ID_P = 0.5 × 80μA/V² × 1000 × VOV_P² = 0.04A × VOV_P²
同样得到 VOV_P ≈ 0.158V。这样上下两管的静态 VOV 几乎一样,浮动电压算起来非常舒服。
有人会问,为什么我刻意让 NMOS 和 PMOS 的 μCox×W/L 相等?因为这样在同样 VOV 下,两个管的电流能力一致,输出级的正负向驱动能力对称,交越失真的优化也更好做。
3.2 设定浮动电压与倍乘器参数:手把手算给你看
输出管的 VOV 定了,VGS 也就定了:
VGS_N = VTHN + VOV_N = 0.5 + 0.158 = 0.658V
VSG_P = |VTHP| + VOV_P = 0.5 + 0.158 = 0.658V
所以浮动电压源的设定值:
VFLT = VGS_N + VSG_P = 0.658 + 0.658 = 1.316V
这个值非常合理:VDD 是 3.3V,输出静态点 1.65V。NMOS 栅极 VGN = Vout + VGS_N = 1.65 + 0.658 = 2.308V,离 VDD 还有 0.992V;PMOS 栅极 VGP = Vout - VSG_P = 1.65 - 0.658 = 0.992V,离地也还有 0.992V。这意味着两个输出管在静态时都有充足的 VDS 余量,不会掉进线性区。
然后计算 VGS 倍乘器的参数。我选择 NMOS 作为参考管 MN_ref,设它的 W/L = 20/1,工作在饱和区。假设 VTH 约 0.5V,VOV 设 0.15V,则 VGS_ref ≈ 0.65V。要输出 VFLT = 1.316V,根据倍乘器公式:
1.316 = 0.65 × (1 + R1/R2)
1 + R1/R2 = 2.025
R1/R2 ≈ 1.025
这个比例非常友好,直接取 R1 = R2 = 50kΩ 即可,实际算出来 VFLT = 0.65 × 2 = 1.30V,和目标的 1.316V 误差不到 1.5%。这个误差主要来自 VGS_ref 的估算偏差,电平可以在仿真里微调 R1/R2 的比例来修正。
倍乘器自身的功耗也可以算一下。R2 上的电流约等于 VGS_ref / R2 = 0.65 / 50k ≈ 13μA,R1 上的电流也一样,总的偏置功耗大约 13μA × 1.3V ≈ 17μW,对整体功耗影响可以忽略。
还有一点,MN_ref 本身的漏源通路会提供一个额外的并联电流路径。为了让 MN_ref 的工作点稳定,通常需要在浮动源两端注入一个偏置电流,这个电流可以从主运放的尾电流源镜像过来。具体电流大小取决于 MN_ref 的 VOV 和尺寸,一般取几十微安到几百微安即可,实际以仿真工作点为准。
3.3 把环路接起来:浮动源两端的“绝对位置”由谁决定
理想浮动源好理解,但一旦把它接进真实环路,问题就来了:两端的压差是定了,但两端的绝对电压到底由谁决定?
答案是由前级的输出节点决定。通常做法是,将浮动电压源的下端(原来接 NMOS 栅极的一端)接到前级放大器的输出节点,也就是高阻抗节点;上端接 PMOS 的栅极。这样,前级输出节点的电压高低变化,会同步带着两个输出管的栅极上下移动,而浮动源则保证两者之间的压差恒定。
用前面的数值举例。前级输出节点(也就是 VGN)在静态时被输入共模和反馈环路锁定在 2.308V。因为浮动电压源两端差值是 1.316V,所以 VGP = VGN - 1.316 = 0.992V。这个绝对位置是由前级输出节点的直流电平决定的,而不是由浮动源自己决定的。这一点特别重要,很多新手自己画电路时,把浮动源接上之后发现两个管子都不导通,就是因为前级输出节点的直流电平根本不在合理范围。
在仿真里,你可以用一个电压源给前级电路提供输入共模,然后用反馈把输出静态点锁定到 VDD/2,再检查 VGN 和 VGP 的工作点。如果 VGN 太低,NMOS 可能截止;如果 VGP 太高,PMOS 可能截止。这两种情况在 DC 工作点表里一眼就能看出来。
3.4 Spectre仿真流程与结果判读:DC、瞬态、STB一个都不能少
电路图画完之后,仿真顺序不要乱。我一般按三步走:先 DC 工作点,再瞬态,最后做环路稳定性。
第一步,DC 仿真。用 Cadence 的 dc 分析,输出 op point 信息,重点看:
- 两个输出管的漏极电流是否都接近 1mA;
- 两个输出管是否都工作在饱和区;
- 浮动电压源两端实际压差是否为 1.3V 左右;
- 输出静态点是否在 1.65V。
如果这些不对,先不要碰其他参数,把浮动电压和输入共模调好再说。
以下是一段简化版的 Ocean 脚本,可以直接在 Spectre 里跑基础仿真:
simulator( 'spectre ) design( "my_classab_output.scs" ) analysis('dc ?save "all") analysis('tran ?stop "10u" ?strobeperiod "10n") analysis('stb ?start "1" ?stop "1G") run()第二步,瞬态仿真。输入一个 1MHz、幅度 0.5V 的正弦波,观察输出 Vout。如果输入信号从负半周切换到正半周的瞬间,输出波形出现明显的“台阶”或者斜率变平,说明交越失真没有消除。此时可以检查瞬间的 ID(MP) 和 ID(MN) 波形:正常情况下,一个管子的电流减小,另一个管子的电流应该平滑增加,中间不应有某一小段两个管子电流都接近零的死区。
第三步,STB 稳定性仿真。在输出级环路中打断环路的合适位置,插入 stb 探针,看环路增益曲线和相位曲线。一个常见的指标是 60 度左右的相位裕度。Class AB 输出级因为有两个输出管和浮动源节点,寄生极点比较多,相位裕度很容易掉到 40 度以下。遇到这种情况,我会先在浮动源两端并联一个小电容,比如 1pF 到 2pF,看看高频段好不好压下去。这个方法不总是最优的,但作为首次调环路,能让你快速判断问题是不是出在浮动源节点的寄生极点。
4. 仿真踩坑实录与排查速查表
4.1 静态电流突然飙高:先别怀疑模型,量一下浮动电压
我第一次把 VGS 倍乘器替换理想浮动源之后,DC 仿真直接出来 20mA 的静态电流,吓了我一跳。当时第一反应是模型有问题,后来量了一下倍乘器两端的电压,发现 VFLT 高达 1.9V,比设计值 1.3V 高出一大截。
原因很简单:I 参考电流给大了,MN_ref 的 VGS 变大,VOV 不再是 0.15V,而是被抬到了 0.5V 以上。所以倍乘器的输出电压整体升高,两个输出管的 VOV 之和跟着变大,静态电流自然爆炸。
排查思路:先把参考电流 I_REF 调到设计值,再打开 DC op point,反过来确认 MN_ref 的 VGS 和 VOV,看看和手算的差距。如果 VGS 偏差太大,就要重新调整 R1/R2 的比例,而不是盲目改参考电流。我后来的习惯是根据仿真结果把设计公式反过来用:直接按照 VFLT_sim 调整 R1/R2,让倍乘器输出电压精确落回目标值。
4.2 交越失真还在:浮动电压源可能根本没把电流“托住”
另一种常见情况是,静态电流看起来没问题,1mA,很漂亮,但瞬态波形还是有交越失真。这时候不要只盯着静态点数,要去查信号变化过程中浮动源两端电压是否仍然恒定。
用瞬态仿真画出 VGP 和 VGN 的差值波形。如果这个差值在信号摆动时出现明显波动,说明你的浮动源“浮不住”,被信号电流调制了。最常见的罪魁祸首是倍乘器支路的偏置电流不够,导致倍乘器在大信号时退出正常工作区;或者是浮动源两端没有接任何电容,节点寄生电容太小,高频时电压被拉偏。
解决办法有两个,一是增大参考电流,让倍乘器支路有更强的“刚性”;二是在浮动源两端并联一个 0.5pF 到 2pF 的电容,帮助稳定高频时的压差。后者对高频性能有帮助,但注意不要加太大,否则会拖慢输出级的压摆率。
4.3 高频振铃:浮动源节点的高阻抗是元凶
Class AB 输出级的浮动电压源节点通常是一个高阻抗节点,原因是倍乘器的参考管漏极输出电阻和偏置电流源输出电阻并联在一起,等效阻抗可能有几百千欧甚至几兆欧。这个高阻抗节点引入了一个零点或非主极点,会和主放大器的增益路径耦合,形成高频振铃。
现象是在方波瞬态仿真里,输出波形过冲之后出现持续的振荡;或者在 STB 仿真里,相位裕度只有 20 度。
我的处理顺序是:先在浮动源两端并联一个小电容,观察振铃是否被抑制;如果抑制不明显,再去调整主环路的米勒补偿电容,把主极点压得更低一些。还有一个常被忽略的点:输出级两个管子栅极之间的寄生电容是有限的,过大的管子尺寸会让这个节点的等效电容增大,从而影响回路的零极点位置。所以,如果你发现振铃怎么压都压不掉,回头看一下输出管的 W/L 是不是取得太大了,也许需要缩小尺寸。
4.4 PTAT还是CTAT?温度扫描下静态电流为什么不可控
做完 tt 角 27 度仿真很顺利,但跑一遍温度扫描就露馅了:从 -40 度到 125 度,静态电流从 0.6mA 飙到 3mA。这是很多偏置结构都会有的温度漂移问题。
根本原因在于,VGS 倍乘器的基准电压由 MN_ref 的 VGS 决定,而 MN_ref 的阈值电压随温度下降约 -0.5 到 -1mV/°C。与此同时,输出管的阈值电压也在随温度变化,如果两者的温度系数不匹配,那么浮动源提供的电压差就不够“跟随”输出管需求的变化,静态电流就会漂移。
解决办法是在版图上把 MN_ref 放置在靠近输出管的位置,让它们感受到相同的衬底温度。同时在设计时,尽量让 MN_ref 的器件类型和输出管一致,比如你的输出管是 NMOS,参考管也选 NMOS,这样阈值电压的温度系数天然接近。更进一步,有些人会用“偏置补偿”结构把参考电流做成与温度相关的,但这就太深了,初版设计不用一上来就追求完美。
4.5 一场仿真不收敛事故:浮动源缺了启动
最后分享一个非常真实的教训:第一次搭完整输出级时,DC 仿真直接报“no convergence”,我把所有参数翻了个遍,最后发现是偏置电流源没有启动电路。
VGS 倍乘器的参考管需要一个直流偏置电流才能工作,但在仿真启动的瞬间,如果这个电流源处于不稳定状态,倍乘器可能停在零电流态,输出管全都截止,整个电路就没有一个合理的 DC 工作点,Spectre 自然不收敛。
解决方法很朴素:给参考电流源加一个简单的启动管,或者用 DC 扫描的方式,把电源电压从 0V 慢慢扫到 3.3V,观察偏置电流是否能正常建立。在 Spectre 里做一个 0 到 3.3V 的 DC sweep,看到电流曲线在某个电压点突然跳变到目标值,才说明启动是可靠的。
下面整理一份速查表,方便你以后遇到类似问题直接对号入座:
| 现象 | 可能原因 | 排查方法 | 解决方向 |
|---|---|---|---|
| 静态电流过大 | 浮动电压设置太高;参考电流过大 | 看 DC op point 里的 VFLT 和 VOV | 调小 R1/R2 比值;降低参考电流 |
| 交越失真 | 静态电流太小;浮动源电压被信号调制 | 瞬态看 VGP-VGN 波形 | 增大 IQ;加强倍乘器偏置;并联小电容 |
| 高频振铃 | 浮动源节点高阻抗引发非主极点 | STB 看相位裕度 | 浮动源并联电容;调整米勒补偿 |
| 温度漂移大 | 参考管与输出管温度系数不匹配 | 跑温度角扫描 | 版图匹配;参考管类型与输出管一致 |
| DC 不收敛 | 偏置无启动电路 | DC sweep 看启动过程 | 加启动电路;用扫描法辅助定位 |
这些坑我基本都踩过一轮,每次踩完都觉得“要是早有人告诉我这个就好了”。所以我把它们原原本本写在复盘里,希望你能少绕几圈。
最后再分享一个个人体会:Sansen 的书不用反复硬啃,你真正搭过一个 Class AB 输出级之后,再回去翻那几页,会发现所有符号都有物理意义了。我现在遇到输出级相关的设计,第一反应不是翻书,而是先想清楚静态电流要多少、浮动电压要多少、两个输出管的 VOV 怎么分配,然后直接开仿真验证。这个方法比看书高效得多,也踏实得多。
还有一个我很喜欢的小技巧:在 Spectre 里把浮动电压源的电压设成一个参数,比如 vflt,然后对 vflt 做 DC 扫描,同时输出两个输出管的静态电流曲线。这条曲线会告诉你,交越失真区域和直通电流区域分别在哪个电压点上,一眼就能找到静态电流的“甜点区”。这个操作我在每次新电路上都会做一遍,几分钟就能把偏置电压定得明明白白。