4. 收敛失败典型现象:节点电压震荡、时间步长崩溃、不收敛报错

在半导体器件SPICE仿真中,收敛失败并非单一表现,而是呈现为一系列可观测的数值异常。本章聚焦于三种最典型的收敛失败现象:节点电压震荡、时间步长崩溃以及DC分析不收敛报错。理解这些现象背后的数值机制,是进行高效调试的前提。

核心观点:收敛失败的本质是牛顿-拉夫森迭代法在非线性方程组求解过程中,无法找到满足误差容限的解。三种现象分别对应迭代发散、时间积分失效和初始条件错误。

4.1 节点电压震荡 (Node Voltage Oscillation)

节点电压震荡是DC分析中最常见的收敛失败前兆。当仿真器在迭代过程中,节点电压值在两个或多个状态之间来回跳跃,无法稳定收敛到单一解时,即发生震荡。

4.1.1 震荡的数值机理

在牛顿-拉夫森迭代中,第k+1步的节点电压更新公式为:

V(k+1) = V(k) - J⁻¹(V(k)) * F(V(k))

其中J为雅可比矩阵,F为节点电流残差向量。当模型方程在某个区间内具有强烈的非线性(如MOSFET的亚阈值区到强反型区的过渡、二极管的正向导通拐点),雅可比矩阵的条件数变差,导致迭代步长过大,越过真实解,从而引发相邻迭代步之间的电压值反复震荡。

调试线索:在SPICE的.lst输出文件中,若观察到某个节点电压在连续迭代步中呈现“0.8V → 1.2V → 0.7V → 1.3V”的交替模式,即可判定为节点电压震荡。
节点电压震荡迭代轨迹示意图 牛顿-拉夫森迭代在真实解上下交替穿越 真实解 V_true k=1 k=2 k=3 k=4 k=5 k=6 k=7 k=8 迭代步数 (k) 节点电压 (V) 节点电压在真实解上下反复穿越,无法收敛至单一稳定值 相邻迭代步交替跳变,电流残差 |F(V)| 无法单调下降

4.1.2 常见诱因与调试策略

诱因典型场景调试策略
模型导数不连续BSIM4模型在Vds=0附近的平滑过渡使用 .options gmindc=1e-12 增加最小电导
初始条件冲突PN结初始电压设置在击穿区使用 .nodeset 或 .ic 设置合理的初始猜测
反馈环路增益过高运算放大器开环仿真引入 .options srcsteps=10 逐步增加电源
收敛容限过严电流容限设置低于1e-15A适当放宽 reltol 或 abstol

4.2 时间步长崩溃 (Time Step Collapse)

时间步长崩溃是瞬态分析(TRAN)中的特有现象。当仿真器在某个时间点无法收敛时,会自动减小时间步长并重试。若步长持续减小至低于设定的最小步长(tmin),仿真即告失败。

4.2.1 崩溃过程的三阶段

  1. 初始步长缩减:仿真器检测到收敛失败,将步长减半(或按比例缩小)。
  2. 迭代重试:在缩小后的步长上重新进行牛顿-拉夫森迭代。若仍失败,继续缩减步长。
  3. 步长触底:当步长小于 tmin(通常为 1e-12 至 1e-15 秒),仿真器输出“Time step too small”错误并终止。
工程警示:时间步长崩溃往往意味着模型在某个工作点存在严重的数值奇异性,例如电容模型在电压突变时产生无限大的电流(dQ/dV → ∞),或电感模型在电流过零时产生无限大的电压(dΦ/dI → ∞)。
时间步长崩溃过程示意图 步长 1ns 0.5ns 0.25ns 0.125ns 62ps 初始步长 第1次失败 第2次失败 第3次失败 第4次失败 步长持续减半 → 低于 tmin(约1ps)→ 报错终止:Time step too small

4.2.2 步长崩溃的根因排查

  • 检查模型连续性:在崩溃时间点附近,对关键节点的电压波形进行小信号分析,查看是否存在电压跳变或斜率突变。
  • 检查电荷/磁通模型:对于电容和电感模型,确保其电荷q(v)和磁通φ(i)函数是连续且单调的。非单调的q-v曲线会导致负电容,直接引发步长崩溃。
  • 调整瞬态控制参数:使用 .options method=gear 或 .options method=trap 切换积分方法,有时可以缓解数值振荡。

4.3 不收敛报错 (No convergence in DC analysis)

这是SPICE仿真中最直接、最令人沮丧的错误信息。仿真器在完成最大迭代次数(itl1)后,节点电压残差仍未降至收敛容限以下,即输出此错误。

4.3.1 错误信息的解读

典型的SPICE错误输出如下:

** No convergence in DC analysis **

Last node voltages:

  V(1) =  1.2345e+00

  V(2) = -3.4567e-01

  V(3) =  2.3456e+03

  ...

Iteration count = 150 (max itl1 = 100)

关键信息包括:最后节点电压值(可发现异常高或负的电压)、迭代次数(已超过上限)、以及不收敛的节点列表(部分仿真器会输出)。

快速诊断:若某个节点电压达到电源电压的10倍以上(如VDD=5V时出现50V),通常意味着该节点连接的模型存在开路或负阻特性,导致雅可比矩阵奇异。

4.3.2 不收敛的三大类原因

类别具体原因典型报错特征
模型参数错误阈值电压VTO设置异常、结电容CJO为负值、击穿电压BV=0节点电压出现极端值(如1e+308)
电路拓扑问题浮空节点、电压源直接并联电容、电感串联开路DC操作点无法建立,迭代始终在初始值附近徘徊
数值设置不当itl1过小、abstol过于严格、gmindc=0迭代次数达到上限,但残差仍在缓慢下降

4.3.3 系统化调试流程

  1. 检查网表语法:确保所有器件引脚连接正确,无悬空节点。
  2. 简化电路:断开所有非线性器件(二极管、MOSFET),仅保留电阻和独立源,确认线性DC分析通过。
  3. 逐级恢复:每次恢复一个非线性器件,运行DC分析,定位第一个引发不收敛的器件。
  4. 调整仿真选项:依次尝试 .options itl1=500、.options gmindc=1e-12、.options srcsteps=20。
  5. 检查模型文件:确认模型参数在物理合理范围内,特别是与温度相关的参数。
DC不收敛系统化调试流程图 收到 DC 不收敛报错 步骤1: 检查网表语法与连接 步骤2: 简化至线性电路验证 步骤3: 逐级恢复非线性器件 步骤4: 调整仿真选项参数 步骤5: 检查模型参数物理合理性

4.4 三种现象的关联与对比

在实际工程中,三种现象往往相互关联。例如,节点电压震荡若未及时处理,在瞬态分析中会演变为时间步长崩溃;而DC分析的不收敛,则可能直接导致后续的TRAN分析无法启动。

现象分析类型核心数值问题最有效的单一调试手段
节点电压震荡DC / TRAN牛顿迭代步长过大,越过解增加 gmindc 或使用 .nodeset
时间步长崩溃TRAN时间积分不稳定,模型奇异性检查电荷/磁通模型连续性
DC不收敛报错DC雅可比矩阵奇异或迭代发散简化电路,逐级定位问题器件
经验法则:超过80%的收敛失败问题,可以通过“增加gmindc、放宽reltol、使用nodeset”这三个简单操作解决。如果这三个操作无效,则必须深入检查模型参数和电路拓扑。