1. SPICE 仿真收敛概述
SPICE 仿真的核心是求解一组非线性微分代数方程。所谓收敛,是指迭代求解算法(如 Newton-Raphson 法)在给定的容差范围内,找到了满足电路方程组的数值解。当仿真器无法在最大迭代次数内找到这样的解时,即发生收敛失败。
核心观点:收敛是仿真成功的必要条件,而非充分条件。即使仿真报告“收敛”,结果也可能因模型参数边界设置不当而物理失真。
1.1 什么是收敛
在 SPICE 中,收敛通常指以下三个层面的数值稳定状态:
- 直流工作点收敛(.OP / .DC):所有节点电压和支路电流满足 KCL/KVL,且非线性器件模型方程在迭代误差容限内成立。
- 瞬态收敛(.TRAN):在每个时间步长内,直流收敛条件成立,且时间积分算法(如梯形法、Gear 法)的局部截断误差可控。
- 谐波平衡收敛(HB):在频域上,非线性器件的混频产物与线性子网络的频响达到自洽。
1.2 收敛失败的表现
收敛失败在仿真器输出中通常表现为以下典型症状:
| 症状 | 典型错误信息 | 出现场景 |
|---|---|---|
| 直流不收敛 | ** No convergence in DC analysis ** |
.OP、.DC 扫描起始点 |
| 瞬态时间步长坍缩 | Internal time step too small in transient analysis |
.TRAN 中器件进入强非线性区 |
| 迭代次数超限 | Too many iterations (ITL1/ITL2 exceeded) |
任何分析类型 |
| 奇异矩阵 | Singular matrix / Gmin stepping failed |
浮空节点、电压源短路 |
| 模型求值失败 | Model evaluation error at node xxx |
参数超出模型有效范围 |
实战警示:“Internal time step too small”是瞬态仿真中最常见的收敛失败信息,通常意味着模型参数边界设置导致器件进入非物理区域(如 Vds 超过击穿电压),仿真器被迫不断减小时步长直至崩溃。
1.3 收敛问题的常见原因分类
收敛问题的根源可以归纳为四大类。理解这些分类是后续参数边界设定与调试的基础。
1.4 各类原因的详细说明
① 电路拓扑与连接问题
这类问题通常由网表错误引起,是最容易排查的收敛问题:
- 浮空节点:节点未连接到任何对地通路,导致矩阵奇异。
- 电压源短路:两个理想电压源直接并联,或电压源与电容直接并联形成冲突回路。
- 悬空引脚:MOSFET 的衬底或 BJT 的基极未连接。
② 模型参数边界问题(本课程核心)
这是最隐蔽、最容易被忽视的收敛原因,也是本课程的重点:
- 参数超出物理范围:例如 MOSFET 的沟道长度 L 设为 0(或过小),导致模型方程中出现除以零或开根号负数。
- 模型方程在边界处奇异:BSIM4 模型中的
Vdsat计算在特定偏置下可能产生不连续导数。 - 参数组合冲突:例如
Vth0与Vbs的组合使阈值电压计算进入非单调区。
调试技巧:在 SPICE 网表中添加
.OPTIONS POST=2 可输出详细的模型参数求值中间变量,帮助定位是哪个参数在哪个偏置点导致收敛失败。
③ 仿真控制参数不当
仿真器的容差设置和迭代限制直接影响收敛行为:
| 参数 | 默认值 | 过严时的后果 | 推荐调整方向 |
|---|---|---|---|
RELTOL |
0.001 | 迭代难以满足相对误差 | 放宽至 0.01 或 0.005 |
ABSTOL |
1 pA | 小电流收敛困难 | 放宽至 10 pA 或 100 pA |
VNTOL |
1 μV | 电压迭代精度过高 | 放宽至 10 μV 或 100 μV |
ITL1 |
100 | 直流迭代次数不足 | 增大至 500 或 1000 |
ITL2 |
50 | 瞬态迭代次数不足 | 增大至 200 或 500 |
④ 数值算法局限性
即使电路和模型都正确,纯数值问题仍可能导致不收敛:
- 初始猜测不佳:Newton-Raphson 法对初始值敏感,尤其在双稳态电路(如触发器、锁存器)中。
- 雅可比矩阵病态:当电路增益极高(如运放开环增益 > 120 dB)时,矩阵条件数过大。
- 不连续模型:使用理想开关或分段线性模型时,导数不连续导致迭代振荡。