第14章 仿真分析:直流、交流与瞬态
在 Cadence ADE 界面里,初学者最常见的动作是到处点按钮,看哪个能跑出波形来。这种做法的问题在于:你跑出来的结果可能是错的,而你没有能力判断它错在哪里。仿真工具用于验证设计者的思考,而非替代思考。这一章把三种最基本的仿真分析讲透——直流工作点分析、交流小信号分析和瞬态分析。它们是 SPICE 类仿真器的基础,也是后续所有模拟电路设计工作的起点。
14.1 直流工作点分析
14.1.1 为什么要先看直流工作点
直流工作点是所有仿真的地基。交流小信号分析需要在工作点附近做线性化处理,瞬态分析的初始条件也来自直流解。工作点不对,后面的一切分析都没有意义。
打个比方。你想知道一个人跑步的速度,先得确认他是站着的还是已经摔倒了。如果他躺在地上,你测出来的“跑步速度”只能说明他爬得有多快。直流工作点分析就是确认“这个人站没站稳”。
SPICE 做直流工作点分析的原理很直接:把所有电容开路,所有电感短路,然后求解非线性电路的稳态解。这个过程本质上是解一组非线性代数方程,SPICE 用牛顿-拉夫逊迭代法完成。迭代从初始猜测值开始,逐步逼近真实解,每一步都涉及雅可比矩阵的求逆运算。如果初始猜测离真实解太远,迭代可能发散——这就是仿真报错“DC convergence failure”的由来。
图1:显示此时的节点电压和器件直流工作点的电路图
14.1.2 直流工作点分析能告诉我们什么
在 Cadence ADE 中运行直流分析后,可以获取以下信息:
- 每个节点的直流电压
- 每条支路的直流电流
- 晶体管的直流参数:\(V_{GS}\)、\(V_{DS}\)、\(I_D\)、跨导 \(g_m\)、输出电导 \(g_{ds}\) 等
- 电路的静态功耗
这些数据用于验证偏置点是否合理。举例来说,你设计了一个共源极放大器,期望 \(V_{OUT}\) 在电源电压中点附近。仿真发现输出节点电压只有 0.3V,说明管子可能进入了线性区,需要调整偏置。再比如,你手算了一个电阻分压器,输出应该是 0.9V,仿真跑出来 1.2V,那一定是哪里出了问题——网表接错、模型参数不对、或者电阻值设错。不要急着往下走,先把这个差异查清楚。
根据我的教学经验,仿真结果只是模型的计算结果,需要手算验证。模型有误差,设置可能出错,网表可能接错。你必须有足够的手算能力来判断仿真结果是否合理。一个简单的检查方法是:在电路里找一个你完全能手算的局部——比如某个电阻分压支路——看仿真值是否与手算一致。如果连这个都对不上,说明仿真环境本身有问题。
14.1.3 直流扫描分析
除了计算单点工作点,直流分析还可以做参数扫描。在 ADE 的 dc 分析设置中,可以选择扫描变量:
- Temperature:温度扫描。芯片工作温度范围通常是 \(-40^\circ C\) 到 \(125^\circ C\),电路需要在这个范围内都能正常工作。
- Design Variable:设计变量扫描。比如把电源电压设为变量,观察电路在不同供电电压下的表现。
- Component Parameter:器件参数扫描。比如扫描电阻值、晶体管宽长比等。
- Model Parameter:模型参数扫描。这个一般不用,因为工艺模型文件由晶圆厂提供,设计者不应该去动它。
温度扫描在实际工程中很重要。一个在 27°C 仿真正常的电路,可能在 \(-40^\circ C\) 时完全无法工作。MOSFET 的阈值电压随温度变化大约 \(-2\text{ mV}/^\circ C\),迁移率随温度按 \(T^{-1.5}\) 左右的比例变化。这两个效应叠加,可能让原本饱和区的管子进入线性区,或者让偏置电流漂移 30% 以上。用直流扫描功能把温度从低温扫到高温,可以快速看到哪些节点电压变化最大,从而定位对温度敏感的偏置支路。
14.2 交流小信号分析
14.2.1 从直流到交流:小信号线性化
交流小信号分析解决的是这样一个问题:在直流工作点附近,电路对微小信号的频率响应如何?
SPICE 的做法分三步。第一步,计算直流工作点。第二步,在工作点附近对非线性器件做线性化处理——把晶体管等效为小信号模型,包含跨导 \(g_m\)、输出电阻 \(r_o\)、各种寄生电容。第三步,把所有直流电源置零(电压源短路、电流源开路),对电路做频域分析。注意,这里的“小信号”意味着输入幅度趋近于零,电路被当作线性时不变系统处理。你关心的指标是:
- 低频增益 \(A_v(0)\)
- 3dB 带宽
- 单位增益带宽(GBW)
- 相位裕度
这些指标直接决定了放大器能否稳定工作、能处理多快的信号。
图2:设置交流小信号仿真
14.2.2 交流仿真的设置
在 ADE 中设置 AC 分析时,需要指定:
- 扫描类型:通常选“Logarithmic”,频率范围从 1Hz 或 10Hz 扫到 $10^9$Hz 甚至更高。对数扫描的好处是每个十倍频程内的点数均匀,画出的波特图在低频和高频段都有足够的分辨率。
- 输入信号源:AC 分析中,输入信号源的幅度设置为 1(单位可以是 V 或 A),这样输出直接就是增益值。AC 幅度和瞬态幅度是分开设置的——你在瞬态分析中设置的正弦波幅度不影响 AC 分析。
- 输出变量:选择你要观察的节点电压或支路电流。
一个常见的误区:AC 分析是线性分析,它不反映大信号行为。如果你的电路存在非线性失真,AC 分析是看不到的。它只告诉你小信号增益和相位,不告诉你输出摆幅能有多大。比如一个输出级在 1V 摆幅下已经严重失真,AC 分析显示的增益曲线仍然完美平滑——因为 AC 分析假设信号无穷小。
图3:进行交流小信号仿真的ADE环境
14.2.3 解读交流仿真结果
跑完 AC 分析后,你会得到增益-频率曲线和相位-频率曲线。看这两条曲线时,有几个关键点要检查。
低频增益是否与手算一致。 比如一个共源极放大器,手算增益约为 \(-g_m(r_o \parallel R_D)\)。仿真结果应该在这个值附近。如果差太多,检查管子是否真的工作在饱和区——直流工作点分析里可以看到 \(V_{DS}\) 和 \(V_{GS}-V_{TH}\) 的关系。另一个常见原因是模型参数与手算假设不一致,比如实际 \(V_{TH}\) 比教材典型值高 100mV,导致 \(g_m\) 偏离预期。
主极点位置。 从增益曲线上找到 -3dB 点对应的频率,这个频率由输出节点的等效电容和等效电阻决定。如果你设计的目标带宽是 100MHz,仿真显示 -3dB 点在 10MHz,说明输出节点电容太大或输出电阻太大。这时候可以用直流工作点分析查看 \(g_{ds}\) 的值,确认输出电阻是否符合预期,再检查负载电容是否设得过大。
相位裕度。 对于反馈放大器,你需要看增益降到 0dB 时(单位增益频率处)的相位余量。相位裕度小于 \(45^\circ\) 意味着电路可能振荡。一个实用的检查方法:在增益曲线上找到 0dB 点,然后在相位曲线上看同一频率处的相位值,用 \(-180^\circ\) 减去它,就是相位裕度。如果相位裕度不够,通常需要补偿——第 6 章讲的 Miller 补偿就是常见手段。
关于频率响应的详细分析,第 6 章已经讲过 Miller 效应、极点分裂等内容。仿真只是把这些理论计算结果用曲线呈现出来,帮你验证手算是否正确,或者在手算太复杂时直接给出答案。
14.3 瞬态分析
14.3.1 瞬态分析在做什么
如果说 AC 分析是给电路做“体检”,看它在各个频率下的反应,那么瞬态分析就是给电路“录像”,看它随时间如何变化。
瞬态分析求解的是电路的微分方程。SPICE 使用数值积分方法(如梯形法、Gear 法)在时间轴上逐步推进,每一步都解一个非线性方程组。这个过程计算量很大,也是仿真不收敛问题的高发区。具体来说,仿真器从 \(t=0\) 开始,以一定步长 \(\Delta t\) 向前推进。每一步都基于当前时刻的节点电压和电流,用数值积分公式预测下一时刻的状态,然后通过迭代求解非线性方程组来修正预测值。步长不是固定的——如果信号变化快,仿真器会自动缩小步长;如果信号平缓,步长会增大以节省时间。
瞬态分析能告诉你 AC 分析无法提供的信息:
- 大信号行为:输出摆幅、压摆率、建立时间
- 非线性失真:波形是否畸变、交越失真
- 启动过程:电路上电后多久进入稳定状态
- 稳定性:电路是否振荡、振铃
图4:放大器瞬态特性仿真结果
14.3.2 瞬态激励源设置
瞬态分析的第一步是设置输入信号。在 ADE 中,你需要为输入源指定瞬态波形。最常用的是正弦波和阶跃信号。
正弦波的参数包括:直流偏置、幅度、频率、相位延迟、阻尼因子。阻尼因子(Damping factor)的单位是 \(1/s\),它让正弦波的幅度随时间指数衰减。这个参数在测试电路稳定性时很有用——你可以施加一个衰减振荡信号,观察电路的响应是否也衰减,从而判断电路是否稳定。
图5:正弦信号是瞬态仿真中最常用的信号。在该信号的参数中,"Damping factor"的单位是1/s。正弦信号也是交流小信号分析(AC Analysis)中重要的激励源。设计者需要区别的是瞬态信号激励和交流小信号激励是两回事
瞬态信号和交流小信号激励不同。瞬态分析中,你给的是一个实际随时间变化的电压波形,它的幅度可以是 1V、2V,甚至更大,电路会表现出非线性行为。而 AC 分析中,输入信号的幅度被设置为 1(单位),这只是为了方便计算增益,不代表实际输入有 1V 那么大。举个例子:你给一个放大器加 1V 幅度的正弦波做瞬态分析,输出可能严重削顶;但同一电路做 AC 分析,增益曲线仍然显示 40dB——因为 AC 分析假设信号无穷小,削顶这种非线性现象根本不在它的视野内。
14.3.3 仿真精度与收敛性
瞬态分析的精度由三个参数控制:仿真步长、迭代容差、误差精度。在 ADE 中,你可以选择不同的精度档位:
- liberal:步长较大,速度快,精度低
- moderate:默认档位,速度和精度的折中
- conservative:步长小,精度高,速度慢
对于开关电容电路、振荡器等对精度敏感的电路,建议使用 conservative 档位。对于一般的放大器测试,moderate 就够了。判断精度是否足够的一个简单方法:把精度档位提高一档,重新仿真,对比两次结果。如果波形差异很小,说明原来的精度设置够用;如果差异明显,说明原来的设置不够。
仿真不收敛是瞬态分析最常见的问题。可能的原因包括:
- 电路存在不合理的节点:比如没有直流通路的电容节点,或者悬空节点。这类问题在直流工作点分析阶段就会暴露——如果直流分析不收敛,先查这个。
- 时间常数差异过大:电路同时包含极快和极慢的时间常数,导致数值积分困难。比如一个电路既有纳秒级的信号变化,又有毫秒级的偏置建立过程,仿真器需要在两种时间尺度之间切换,步长控制会很吃力。
- 模型参数问题:某些器件模型在特定偏置下数值不稳定。这种情况通常与工艺库的模型版本有关,可以尝试换一个模型版本。
- 步长过大:信号变化太快,仿真器无法捕捉细节。可以在瞬态设置中手动指定最大步长,限制仿真器不要跨过信号变化的细节。
遇到不收敛时,不要盲目改设置。先检查电路拓扑,确认没有悬空节点、没有不合理的连接。然后尝试减小最大步长、增加迭代次数上限。如果还不行,换一种积分方法试试——Gear 法对刚性系统(时间常数差异大的系统)通常比梯形法更稳定。
14.3.4 瞬态分析实例:观察放大器的动态行为
以第 13 章的共源极放大器为例。输入加一个 1MHz 的正弦波,幅度 1mV,直流偏置 1.65V。运行瞬态分析 10μs,观察输出波形。
图6:完整的仿真结果(Vout和Vin)
你会看到输出波形是放大了的正弦波,但可能伴有以下问题。
波形削顶。 如果输出摆幅接近电源轨或地,说明偏置点设置不当,或者输入信号太大。这时你需要调整直流工作点或减小输入幅度。具体做法:查看直流工作点,确认 \(V_{OUT}\) 的静态值在电源电压中点附近。如果偏置点偏低,输出正半周会先削顶;偏高则负半周先削顶。
波形不对称。 正半周和负半周的增益不一致,说明管子在大信号下进入了非线性区。这在 AC 分析中是看不到的,只有瞬态分析能暴露这个问题。一个典型场景:输出摆幅超过一定范围后,管子从饱和区进入线性区,增益骤降,波形被“压扁”。
建立时间过长。 如果输入是一个阶跃信号,输出需要很长时间才能稳定到最终值,说明电路带宽不够或者存在大电容负载。测量建立时间的方法是:在输出波形上找到最终值附近的一个误差带(比如 \(\pm 1\%\)),看波形从阶跃开始到进入误差带并保持不再超出,需要多长时间。
振铃现象。 输出在稳定之前出现振荡,说明相位裕度不足,电路接近不稳定。振铃的频率通常接近单位增益频率,幅度衰减的速度取决于相位裕度——裕度越小,衰减越慢。
图7:包络检波器 SPICE瞬态仿真结果
这些现象在教科书上都有描述,但亲眼在仿真波形中看到,你才能真正建立直觉。建议你刻意制造一些问题——比如把偏置电阻改小、把负载电容加大——然后观察波形如何变化。这种“故意搞坏”的练习比反复跑正常电路更能加深理解。具体操作:把偏置电阻从 10kΩ 改成 1kΩ,看 \(V_{OUT}\) 的静态值怎么移动,削顶从哪一侧开始;把负载电容从 1pF 加到 10pF,看带宽怎么下降,建立时间怎么变长。
14.3.5 瞬态分析的高级设置
在 ADE 的瞬态分析设置中,有几个选项值得了解:
strobing:在保存点之间设置时间间隔。仿真器计算了这些数据点,但不保存输出,可以减少数据量。比如你只需要每 10ns 保存一个点,而仿真器实际步长是 1ns,strobing 可以让你只保存 10ns 间隔的数据。
skip time point:控制仿真器保存的点的数量。这个选项与 strobing 类似,但控制方式不同——它直接指定跳过多少步保存一次。
compression:删除恒定信号的重复记录。如果某段时间内信号没有变化,仿真器只保存一个点。对于开关电源这类信号大部分时间平稳的电路,这个选项可以大幅减少数据量。
outputstart:设置从何时开始保存数据。如果你只关心稳定后的波形,可以把保存起始时间设在瞬态开始之后。比如电路上电后需要 1ms 才能稳定,你只关心稳定后的行为,就把 outputstart 设为 1ms。
infotimes:在自定义时刻保存工作点数据。如果需要多个时刻,用空格分隔填入时间矢量。这个功能在检查特定时刻的电路状态时有用——比如你想知道开关切换瞬间各节点的电压,可以在切换时刻前后各设几个点。
这些选项在简单电路上用不到,但当你仿真一个包含数百万晶体管的电路时,数据量会非常庞大,合理使用这些设置可以大幅减少存储和绘图的时间。一个实际的例子:全芯片仿真中,你只关心某个模块的输出波形,其他模块的信号可以完全不保存——用 outputstart 和 strobing 组合,把保存的数据量降到最低。
14.4 三种分析的配合使用
三种仿真分析不是孤立的,它们应该按顺序配合使用:
flowchart TD
A[直流工作点分析] --> B[检查工作点是否合理]
B -->|是| C[交流小信号分析]
B -->|否| D[调整偏置电路]
D --> A
C --> E[检查增益和带宽]
E -->|符合预期| F[瞬态分析]
E -->|不符合| G[修改电路参数]
G --> C
F --> H[观察大信号行为]
H -->|有问题| I[排查非线性失真<br>或稳定性问题]
I --> F
实际设计流程中,你会在三种分析之间反复迭代。直流工作点不对,交流分析的结果就是错的;交流指标不达标,瞬态行为大概率也有问题。不要指望一次仿真就能得到正确答案。
一个典型的设计迭代过程:先跑直流工作点,确认所有管子工作在饱和区,\(V_{OUT}\) 静态值在预期位置。然后跑 AC 分析,看增益和带宽是否达标。如果带宽不够,回到直流工作点,查看输出节点的等效电阻和电容,决定是减小输出电阻还是降低负载电容。改完参数后重新跑直流和 AC。最后跑瞬态,看大信号行为——如果有振铃,回到 AC 分析看相位裕度,决定是否需要补偿。
14.5 常见错误与调试技巧
14.5.1 仿真结果与手算不一致
这是最常见的问题。排查思路:
- 确认管子工作在正确的区域。 查看直流工作点,确认 \(V_{DS} > V_{GS} - V_{TH}\)(饱和区条件)。如果管子在线性区,\(g_m\) 和 \(r_o\) 的手算公式都不适用,增益自然对不上。
- 确认没有遗漏寄生参数。 比如晶体管的 \(C_{gd}\) 在高频下会引入 Miller 效应,你手算时可能忽略了。在低频下,\(C_{gd}\) 的影响可以忽略,但频率超过 1MHz 后,Miller 效应会把输入电容放大 \(1+A_v\) 倍,带宽可能比你手算的低很多。
- 确认模型参数与手算假设一致。 比如 \(V_{TH}\) 的实际值可能与教材上的典型值不同。查看模型文件中的 \(V_{TH0}\) 参数,确认你手算用的值是否合理。不同工艺角(TT、SS、FF)下 \(V_{TH}\) 的差异可能达到 100mV 以上。
14.5.2 仿真速度太慢
如果电路规模大或时间常数跨度大,瞬态分析可能非常慢。可以尝试:
- 使用 moderate 或 liberal 精度
- 增大最大步长
- 缩短仿真总时间
- 关闭不必要的输出保存
一个实际的例子:你要仿真一个上电过程,时间常数是 1ms,但信号频率是 1GHz。仿真器为了捕捉 1GHz 信号的细节,步长必须小于 1ns,而总仿真时间是 1ms,这意味着至少 100 万个时间步。这种情况下,先跑一个只包含慢时间常数的简化电路,确认偏置建立过程没问题,再跑完整电路,可以节省大量时间。
14.5.3 波形看起来“不对劲”
先不要怀疑仿真器,先检查你的电路。用直流工作点分析确认偏置,用 AC 分析确认小信号增益,再用瞬态分析看大信号行为。如果每一步都合理,那波形就是对的——只是你可能没预料到电路会这样表现。
一个具体的例子:你仿真一个两级放大器,瞬态输出波形在起始阶段有一个缓慢的爬升过程。这不是电路有问题,而是输入端的耦合电容在充电——时间常数由耦合电容和输入电阻决定。如果你没预料到这个现象,可能会误判为电路故障。用直流工作点分析查看输入端的静态电压,确认它最终稳定在预期值,就可以放心了。
14.6 本章小结
直流、交流、瞬态三种分析构成了模拟电路仿真的核心。直流分析告诉你电路“站在哪里”,交流分析告诉你电路“怎么响应小信号”,瞬态分析告诉你电路“怎么应对大信号”。三者按顺序配合使用,构成了一个完整的设计验证流程:先确认偏置点,再检查小信号指标,最后验证大信号行为。
仿真用于验证设计、发现问题、加速迭代。仿真结果需要设计者自行判断——它不会自动告诉你设计对不对。判断的依据是你对手算的掌握程度和对电路工作原理的理解。下一章我们进入 EDA 工具的更深层应用,包括参数扫描、蒙特卡罗分析、最坏情况分析等进阶仿真方法。这些工具能帮你评估工艺偏差对电路性能的影响,是在流片之前必须做的功课。