1. SPICE 仿真基础:历史、核心算法与分析方法

SPICE(Simulation Program with Integrated Circuit Emphasis)是集成电路与半导体器件仿真领域的事实标准。理解其发展脉络、数学内核与分析流程,是后续调试模型收敛性的前提。本节从三个维度展开:SPICE 的历史演进、牛顿-拉夫逊(Newton-Raphson, NR)非线性求解算法、瞬态与直流分析的核心原理。

1.1 SPICE 发展简史与架构

SPICE 诞生于 20 世纪 70 年代初的加州大学伯克利分校,由 Laurence Nagel 和 Donald Pederson 主导开发。其设计目标是以可接受的精度快速求解大规模非线性电路方程。

年代 版本/事件 关键特征
1972 CANCER SPICE 前身,仅支持直流与瞬态分析
1975 SPICE 1 引入改进节点法(MNA),支持非线性器件
1981 SPICE 2G.6 成为工业标准,加入 BSIM 模型接口
1990s SPICE 3 / HSPICE / Spectre 开源与商业分支,收敛算法大幅增强
2000s–今 多物理域 / 并行 SPICE 支持 EM、热、统计仿真,GPU 加速
核心启示: SPICE 的每一次版本迭代都围绕“收敛性”与“速度”展开。现代 SPICE 引擎在 NR 迭代中加入了阻尼、源步进、Gmin 步进等技巧,这些正是收敛性调试的底层工具。

下图展示了 SPICE 仿真器的核心软件架构与数据流:

SPICE 仿真器核心架构与数据流 网表输入 → 模型求值 → NR 迭代求解 → 结果输出 网表解析器 模型参数库 分析类型控制 非线性求解引擎(NR 迭代) MNA 矩阵构建 LU 分解 收敛判断 → → 直流工作点 瞬态波形 小信号参数 收敛失败 · 步进/阻尼 每步迭代:器件求值 → 矩阵填充 → LU 求解 Δx = -J⁻¹F → 收敛判据(电压误差 + 电流残差)

1.2 核心算法:牛顿-拉夫逊法(NR)

SPICE 中所有非线性方程(如二极管 I-V、MOSFET 饱和电流)均通过 NR 迭代线性化求解。其本质是在每个迭代步将非线性问题转化为线性问题,直到残差收敛。

1.2.1 NR 迭代数学形式

对于非线性方程组 F(x) = 0,NR 迭代公式为:

x^(k+1) = x^(k) - [J(x^(k))]^(-1) · F(x^(k))

其中 J 为雅可比矩阵,包含所有偏导数 ∂Fᵢ/∂xⱼ。在 SPICE 中,J 的元素由器件模型的导数(如 gm、gds)填充。

1.2.2 NR 收敛判据

SPICE 使用两种收敛判据(需同时满足):

判据类型 数学表达式 典型默认值 物理含义
电压/电流误差 |v^(k+1) - v^(k)| < RELTOL · max(|v|, VNTOL) RELTOL=1e-3, VNTOL=1μV 节点电位变化足够小
电荷/电流残差 |F(x^(k))| < RELTOL · I_ref + ABSTOL ABSTOL=1pA KCL 方程近似满足
收敛失败典型场景: 当器件模型在某个偏置点导数不连续(如 BSIM 的过渡区)、或初始猜测远离真实解时,NR 迭代可能发散或陷入振荡。此时需要检查 .OPTIONS RELTOL=1e-6 或启用 Gmin=1e-12 步进。

1.2.3 NR 迭代流程(直流分析)

  1. 初始化: 读入网表,设置节点电压初值(通常为 0 或 .IC 指定值)。
  2. 模型求值: 调用每个器件的模型子程序,计算电流 I(x) 和导数 ∂I/∂V。
  3. 矩阵填充: 将 I(x) 和 ∂I/∂V 填入 MNA 矩阵的右端项和雅可比矩阵。
  4. 求解线性系统: 使用 LU 分解求解 Δx = -J⁻¹·F。
  5. 更新解: x = x + Δx。
  6. 收敛检查: 若满足判据则输出结果;否则返回步骤 2,直到最大迭代次数(ITL1=100)。

下图展示了 NR 迭代在单变量非线性方程中的几何意义:

牛顿-拉夫逊迭代几何示意(单变量) F(x) x O x⁰ x¹ x² x* 切线斜率 J(x⁰) • 每次迭代在曲线当前点作切线 • 切线斜率 = 雅可比 J(xᵏ) • 切线与 F(x)=0 的交点即下一猜测值

1.3 直流分析(DC Analysis)原理

直流分析是 SPICE 所有分析的基础。其核心任务是求解电路在稳态(所有电容开路、电感短路)下的节点电压与支路电流。

  • 方程形式: F(v) = 0,其中 F 为 KCL 方程,v 为节点电压向量。
  • 求解方法: 直接调用 NR 迭代,无时间步进。
  • 典型应用: 确定晶体管偏置点、功耗计算、小信号模型参数提取。
  • 收敛难点: 电路含正反馈(如锁存器)、或模型在特定偏置下导数异常(如二极管反向击穿区)。
调试技巧: 当 DC 分析不收敛时,尝试 .NODESET 指定关键节点初值,或使用 .DC 扫描电源从 0 缓慢上升(Source Stepping),这能显著改善 NR 迭代的初始猜测质量。

1.4 瞬态分析(Transient Analysis)原理

瞬态分析在直流工作点基础上,求解包含动态元件的微分方程。其核心是数值积分与 NR 迭代的嵌套循环。

1.4.1 数值积分方法

SPICE 将电容/电感的微分方程离散化为差分方程。常用方法包括:

方法 公式(以电容为例) 阶数 稳定性 SPICE 默认
向后欧拉(BE) I = C · (V(t) - V(t-h)) / h 1 阶 A-稳定 否
梯形法(TRAP) I = C · (2/h · (V(t) - V(t-h)) - I(t-h)) 2 阶 A-稳定(有振荡风险) 是(精度优先)
Gear 2 阶 I = C · (3V(t) - 4V(t-h) + V(t-2h)) / (2h) 2 阶 L-稳定(强阻尼) 是(鲁棒性优先)

1.4.2 瞬态分析的双层循环

每个时间步 h 内,SPICE 执行:

  1. 时间步预测: 根据局部截断误差(LTE)估算下一步步长。
  2. 内层 NR 迭代: 在当前时间点求解非线性代数方程(含离散化后的动态元件等效电路)。
  3. 收敛判断: 若 NR 不收敛,则减小步长 h 并重试(步长回退)。
  4. LTE 检查: 若 LTE 超标,拒绝当前步并缩小步长。
瞬态收敛失败常见原因: 模型在快速开关过程中产生电荷不守恒(如 BSIM3 的电荷分配问题)、或时间步长过大导致 NR 迭代初始猜测远离真实解。此时可尝试 .OPTIONS METHOD=GEAR 或限制最大步长 .TRAN TSTEP=1e-12。

下图总结了直流分析与瞬态分析在 SPICE 中的完整求解流程:

SPICE 直流与瞬态分析求解流程 DC 纯代数 NR 求解 / 瞬态时间步内嵌套 NR 迭代,含失败回退重试路径 开始分析 DC? 直流分析 瞬态分析 直流 NR 迭代 求解 F(v) = 0 收敛? 否 步进 / 阻尼 调整后重试 是 输出 DC 结果 工作点电压 / 支路电流 瞬态时间步循环 t = t + h 内层 NR 迭代 求解离散化方程 收敛? 否 步长回退 减小 h 重试 是 LTE 合格? 否 拒绝当前步 缩小 h 重试 是 输出波形 时域节点电压 / 电流 收敛失败调试要点 • DC:.NODESET 指定关键节点初值 • DC:Source Stepping 电源缓慢上升 • DC:Gmin 步进,Gmin = 1e-12 正常流程 失败回退重试路径

1.5 本章小结

  • SPICE 的核心求解引擎是 牛顿-拉夫逊迭代,其收敛性直接受模型导数连续性和初始猜测影响。
  • 直流分析 是纯代数求解,收敛失败时优先检查 .NODESET 和 Gmin 选项。
  • 瞬态分析 在时间步内嵌套 NR 迭代,步长控制与积分方法选择(TRAP vs GEAR)对收敛性至关重要。
  • 理解这些基础原理,是后续章节中调试模型收敛失败案例的 必要前提。