SPICE 仿真器:在数值上解一张非线性动态电路(F1)
数字工具走布尔/静态分析,模拟工具回到物理方程。本篇讲 SPICE 类仿真器(Synopsys HSPICE/FineSim、Cadence Spectre、开源 ngspice/Xyce)内部在算什么、为什么会「不收敛」、怎么救。模拟概念见 混合信号边界常识,模拟版图/后仿是 F2。这是所有模拟与混合信号工程师的地基。
一、SPICE 到底在解什么
一张电路的物理行为由三类约束决定:
- 拓扑(KCL/KVL):每个节点电流守恒、每个回路电压守恒;
- 元件本构关系:电阻
V=IR、电容I=C·dV/dt、电感V=L·dI/dt; - 非线性器件模型:MOS 管的 BSIM/PSP 模型,漏电流是端电压的复杂非线性函数,先进节点还有几十上百个参数、binning、宏模型。
合起来是一组非线性微分代数方程组(DAE)。SPICE 的工作就是数值求解它。

二、改进节点法(MNA):怎么把电路变成矩阵
经典节点法对电压源、电感不好处理(它们不直接给出导纳)。**改进节点法(Modified Nodal Analysis)**在「节点电压」未知量之外,把电压源电流、电感电流等也加进未知向量,统一拼成:
G · x = sG:节点导纳矩阵(含为额外电流变量加的约束行),稀疏、每步随工作点变化;x:节点电压 + 附加支路电流;s:独立源/激励电流。
电阻/电导直接填导纳,电容在瞬态下被积分公式折算成「等效电导 + 历史电流源」,MOS 则在每个牛顿步用其小信号电导(gm/gds)线性化后填入。
三、牛顿-拉夫逊:处理非线性
MOS 的 I-V 是非线性的,方程组没有闭式解。牛顿-拉夫逊法从一个工作点猜测出发,反复「用当前点的切线(雅可比)线性化 → 解线性方程 → 跳到新点」,直到相邻两次的电压/电流差小于容差(收敛)。
风险点:
- 初值不好会发散或震荡:初始全节点电压为 0 对某些强非线性电路是糟糕起点;
- 器件模型在某些区域导数极陡或不连续,切线可能跳到物理上不合理的电压(负几十伏),下一步直接崩。
工程上用 gmin stepping(先在每个节点到地并大电导 gmin 求易解点,再逐步减小到真实极小值)、source stepping(电源从 0 缓升到额定值,沿解曲线走)、nodeset(给定关键节点初始电压,如带隙/偏置点)等「延拓法」帮牛顿法找到正确的收敛域。
四、瞬态分析:时间步进与截断误差
瞬态仿真在每个时间点求解,时间推进靠数值积分(后向欧拉 BE、梯形法、Gear/BDF),把电容/电感的微分关系离散:
- 每一步用积分公式把
dV/dt换成「本步电压 + 前几步历史」的代数关系,于是每个时间点仍是解一组(非线性)电阻网络,再走牛顿迭代; - 步长是自适应的:工具比较不同阶/不同步长的结果,估计局部截断误差(LTE),误差超容差就缩短步长重算,平滑区则放大步长提速。
- 高频振荡器、开关电源、强刚性(stiff,快慢时间常数差很多个量级)电路,步长会被压得极小,仿真极慢——这是 AMS/RNM(F3)想绕开的成本。
五、三类分析与常用容差
| 分析 | 在算什么 | 典型用途 |
|---|---|---|
| DC operating point(.OP) | 电容开路、电感短路下的静态工作点 | 偏置、增益起点,最常卡收敛 |
| DC sweep | 逐点求工作点 | 传输曲线、噪声裕量 |
| AC(.AC) | 工作点处线性化后的小信号频响 | 增益/相位/带宽/相位裕度 |
| 瞬态(.TRAN) | 时域 DAE 积分 | 启动、开关、抖动、大信号 |
容差旋钮:reltol(相对误差)、abstol/vntol(电流/电压绝对误差)、gmin(到地最小电导)、迭代次数上限 itl1/itl2/itl4。盲目放宽 reltol 换收敛等于让结果失真,是常见作弊手法。
六、不收敛的系统排查顺序
「no convergence in dc analysis」按从易到难:
- 看是哪一步炸的:DC 工作点 vs 瞬态某时刻——前者多是偏置/初值,后者多是模型/步长/刚性;
- 开诊断与降步长:输出失败节点(
.option node/list),瞬态加严trtol/限最大步长tmax,看卡在哪个节点/器件; - 给合理初值:用
nodeset/.ic指定偏置节点电压,或开 gmin/source stepping 帮它爬坡; - 查电路本身:悬空节点、零阻抗电压源环、理想开关/理想变压器、缺失直流通路的电容隔直节点(加极大泄放电阻)、模型参数越界/温度角缺失——很多「数值不收敛」其实是电路或模型错误;
- 核对模型与角:用的 BSIM/PDK 版本、corner(tt/ss/ff)、温度是否被该 deck 支持(F10 版本基线);
- 最后才动算法选项/换积分法(如刚性强用 Gear 替代梯形),并在收敛后回紧容差复核,确认不是靠放松蒙混。
相关与延伸
- 数据/库:F3 Liberty 模型、F10 PDK/版本。
- 同模块:模拟版图与后仿(F2)、混合信号协同(F3);数字视角对照 A1 数字仿真器内核。
- 设计侧:混合信号边界。
总结
SPICE 用改进节点法把「KCL/KVL + 元件本构 + 非线性器件模型」拼成稀疏非线性微分代数方程组,再用牛顿-拉夫逊线性化、自适应时间步进(BE/梯形/Gear 控制截断误差)和 LU 求解逐点逼近;它没有布尔世界的「一定出结果」,不收敛时应先分清是 DC 偏置还是瞬态刚性、开诊断定位失败节点、用 nodeset/gmin/source stepping 引导、再查悬空节点与模型角这些「真·电路错误」,最后才动算法与容差,并务必回紧容差复核——因为放宽 reltol 换来的收敛只是让错误看起来消失了。