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 仿真器的核心软件架构与数据流:
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 迭代流程(直流分析)
- 初始化: 读入网表,设置节点电压初值(通常为 0 或 .IC 指定值)。
- 模型求值: 调用每个器件的模型子程序,计算电流 I(x) 和导数 ∂I/∂V。
- 矩阵填充: 将 I(x) 和 ∂I/∂V 填入 MNA 矩阵的右端项和雅可比矩阵。
- 求解线性系统: 使用 LU 分解求解 Δx = -J⁻¹·F。
- 更新解: x = x + Δx。
- 收敛检查: 若满足判据则输出结果;否则返回步骤 2,直到最大迭代次数(ITL1=100)。
下图展示了 NR 迭代在单变量非线性方程中的几何意义:
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 执行:
- 时间步预测: 根据局部截断误差(LTE)估算下一步步长。
- 内层 NR 迭代: 在当前时间点求解非线性代数方程(含离散化后的动态元件等效电路)。
- 收敛判断: 若 NR 不收敛,则减小步长 h 并重试(步长回退)。
- LTE 检查: 若 LTE 超标,拒绝当前步并缩小步长。
瞬态收敛失败常见原因: 模型在快速开关过程中产生电荷不守恒(如 BSIM3 的电荷分配问题)、或时间步长过大导致 NR 迭代初始猜测远离真实解。此时可尝试
.OPTIONS METHOD=GEAR 或限制最大步长 .TRAN TSTEP=1e-12。
下图总结了直流分析与瞬态分析在 SPICE 中的完整求解流程:
1.5 本章小结
- SPICE 的核心求解引擎是 牛顿-拉夫逊迭代,其收敛性直接受模型导数连续性和初始猜测影响。
- 直流分析 是纯代数求解,收敛失败时优先检查
.NODESET和Gmin选项。 - 瞬态分析 在时间步内嵌套 NR 迭代,步长控制与积分方法选择(TRAP vs GEAR)对收敛性至关重要。
- 理解这些基础原理,是后续章节中调试模型收敛失败案例的 必要前提。