2. 仿真收敛基础:收敛的定义、收敛失败的表现与 Newton-Raphson 迭代原理
在 SPICE 仿真中,收敛是求解电路直流工作点(DC Operating Point)或瞬态初始条件时,数值迭代算法能否在给定容差内找到满足电路方程组的解。收敛失败是仿真调试中最常见、最棘手的问题之一。本章从收敛的数学定义出发,分析收敛失败的表现形式,并深入剖析 Newton-Raphson 迭代法的核心原理。
2.1 收敛的数学定义
对于一个包含 \( N \) 个节点的电路,SPICE 建立的非线性方程组可写为:
\[ \mathbf{F}(\mathbf{V}) = \mathbf{0} \]其中 \(\mathbf{V} = [V_1, V_2, \dots, V_N]^T\) 为节点电压向量,\(\mathbf{F}\) 为节点电流残差向量。SPICE 的收敛标准通常包含以下两个条件:
| 收敛条件 | 数学表达式 | 典型容差(默认值) |
|---|---|---|
| 电压收敛 | \( |V_i^{(k+1)} - V_i^{(k)}| < \text{RELTOL} \cdot V_{\text{max}} + \text{VNTOL} \) | RELTOL = 0.001, VNTOL = 1 μV |
| 电流收敛 | \( |I_i^{(k+1)} - I_i^{(k)}| < \text{RELTOL} \cdot I_{\text{max}} + \text{ABSTOL} \) | RELTOL = 0.001, ABSTOL = 1 pA |
只有当所有节点电压和所有支路电流的迭代变化量同时小于各自容差时,SPICE 才判定为收敛。如果迭代次数超过 ITL1(DC 分析默认 100 次)或 ITL2(瞬态分析默认 50 次)仍未满足条件,则报出收敛失败。
2.2 收敛失败的表现
收敛失败在仿真输出和日志中有明确的特征信号。以下是两种最常见的表现形式:
2.2.1 时间步长崩溃(Time Step Collapse)
在瞬态分析中,SPICE 采用自适应时间步长控制。当某一步长下 Newton-Raphson 迭代无法收敛时,SPICE 会自动将步长减半并重试。如果连续多次(通常为 5~10 次)步长减半后仍无法收敛,步长会缩小到接近零,仿真终止。
- 典型日志输出:
Internal timestep too small in transient analysis - 根本原因: 电路存在强非线性(如 MOSFET 从截止区到饱和区的快速跳变)、寄生振荡或模型不连续。
- 调试方向: 检查电路中是否存在浮空节点、过大的 RC 时间常数或错误的模型参数。
2.2.2 节点电压振荡(Node Voltage Oscillation)
在迭代过程中,某些节点的电压值在两个或多个状态之间来回跳变,无法稳定收敛到固定值。这种现象通常发生在具有正反馈或双稳态特性的电路中。
- 典型日志输出:
Node X is oscillating between 1.2V and 3.8V - 根本原因: 电路方程在迭代点附近存在多个解,或 Newton-Raphson 迭代的初始猜测落在吸引域之外。
- 调试方向: 增加
.OPTIONS PIVTOL=1e-12或使用.NODESET语句为关键节点指定初始电压。
2.3 Newton-Raphson 迭代原理
SPICE 求解非线性方程组的核心算法是 Newton-Raphson(N-R)迭代法。其基本思想是将非线性方程在当前估计点处线性化,求解线性方程组得到修正量,然后更新估计值,反复迭代直至收敛。
2.3.1 单变量 N-R 迭代
对于单变量方程 \( f(v) = 0 \),N-R 迭代公式为:
\[ v^{(k+1)} = v^{(k)} - \frac{f(v^{(k)})}{f'(v^{(k)})} \]其中 \( f'(v^{(k)}) \) 是 \( f \) 在 \( v^{(k)} \) 处的导数。在 SPICE 中,\( f(v) \) 对应节点电流残差,\( f'(v) \) 对应等效电导(Gm)。
2.3.2 多变量 N-R 迭代(SPICE 实际实现)
对于 N 节点电路,N-R 迭代的矩阵形式为:
\[ \mathbf{J}(\mathbf{V}^{(k)}) \cdot \Delta \mathbf{V}^{(k)} = -\mathbf{F}(\mathbf{V}^{(k)}) \] \[ \mathbf{V}^{(k+1)} = \mathbf{V}^{(k)} + \Delta \mathbf{V}^{(k)} \]其中 \(\mathbf{J}\) 是 Jacobian 矩阵(雅可比矩阵),其元素为:
\[ J_{ij} = \frac{\partial F_i}{\partial V_j} \]在 SPICE 中,Jacobian 矩阵就是电路的导纳矩阵(Nodal Admittance Matrix),每个非线性器件贡献其线性化等效电导。
2.3.3 N-R 迭代的收敛条件
N-R 迭代的局部收敛性由以下定理保证:
| 条件 | 说明 | SPICE 中的对应措施 |
|---|---|---|
| Jacobian 非奇异 | 在解附近,\(\mathbf{J}\) 必须可逆 | 使用 PIVTOL 选项处理奇异矩阵 |
| 初始猜测足够接近 | 解必须在吸引域内 | 使用 .NODESET 或 .IC 提供初始条件 |
| 函数连续可微 | \( \mathbf{F} \) 必须有一阶连续偏导数 | 使用平滑模型(如 BSIM4 的连续 gm) |
2.4 N-R 迭代的收敛过程可视化
下图展示了单变量 N-R 迭代从初始猜测到收敛的完整路径,以及发散(振荡)的情况:
2.5 收敛调试的实用策略
基于上述原理,以下是收敛调试的优先级策略:
- 检查初始条件: 使用
.NODESET为电源轨、参考电压节点设置合理的初始电压。 - 调整仿真选项: 增加 ITL1=500、放宽 RELTOL=0.01、增加 PIVTOL=1e-12。
- 检查模型连续性: 确保 MOSFET 模型参数(如 VTH0、U0)在物理范围内,避免模型不连续。
- 分段调试: 先对子电路单独仿真,确认收敛后再集成到全电路。
- 使用 Source Stepping: 在
.TRAN分析中启用UIC或使用.DC扫描逐步建立工作点。
2.6 本章小结
| 核心概念 | 关键要点 |
|---|---|
| 收敛定义 | 电压和电流残差同时小于容差 |
| 时间步长崩溃 | 步长连续减半至零,通常由强非线性引起 |
| 节点电压振荡 | 迭代在两个状态间跳变,需改善初始猜测 |
| N-R 迭代 | 通过 Jacobian 矩阵线性化求解,收敛性依赖初始猜测 |
| 调试优先级 | 初始条件 > 仿真选项 > 模型连续性 > 分段调试 |