SPICE 仿真器核心:MNA 处理电压源与非线性元件的 2 类方程分组策略

SPICE 仿真器核心:MNA 处理电压源与非线性元件的 2 类方程分组策略

在电路仿真领域,SPICE(Simulation Program with Integrated Circuit Emphasis)作为工业标准工具链的核心,其底层数学模型的稳健性直接决定了仿真结果的可靠性。而支撑这一体系的改进节点分析法(Modified Nodal Analysis, MNA),通过独特的元器件分组策略,成功解决了传统节点分析法(Nodal Analysis, NA)在处理理想电压源和非线性元件时的固有缺陷。本文将深入解析MNA如何将电路元件划分为Group 1与Group 2两类,并通过实际网表示例展示其矩阵方程的构建逻辑。

1. 传统节点分析法的局限性

节点分析法(NA)作为电路仿真的基础方法,其核心思想是通过节点电压这一单一变量来描述电路状态。对于包含n个节点的电路,NA会建立n-1个独立方程(参考节点电压默认为0)。这些方程来源于基尔霍夫电流定律(KCL),其矩阵形式可表示为:

G * v = i

其中:

  • G为节点导纳矩阵(nodal admittance matrix),维度 (n-1)×(n-1)
  • v为待求节点电压向量,维度 (n-1)×1
  • i为注入电流向量,维度 (n-1)×1

NA的致命缺陷在于其无法直接处理以下两类元件:

  1. 理想电压源:其支路电流无法通过元件方程表示为节点电压的函数
  2. 非线性元件:如二极管、晶体管等,其电流-电压关系无法用线性方程描述

以一个包含理想电压源的简单电路为例:

[节点1]---[电阻R1]---[节点2]---[电压源Vs]---[地]

NA无法为电压源支路建立有效的方程,导致方程组欠定(unknown branch current)。

2. MNA的分组策略与方程构建

MNA通过引入电流变量保留机制,将电路元件划分为两类:

2.1 Group 1:电流可消去的元件

这类元件的支路电流可以完全表示为节点电压的函数,包括:

  • 线性电阻
  • 独立电流源
  • 压控电流源(VCCS)
  • 流控电流源(CCCS)

它们的元件方程统一表示为:

i = Y * u + s

其中:

  • Y为元件导纳参数
  • u为元件两端电压差
  • s为激励源项

2.2 Group 2:需保留电流变量的元件

这类元件需要显式保留其支路电流作为独立变量,包括:

  • 理想电压源(独立/受控)
  • 电感
  • 非线性元件(如二极管)

它们的元件方程形式为:

Z * i + Y * u = s

其中参数矩阵ZY的具体形式取决于元件类型。

2.3 MNA矩阵方程的标准形式

通过这种分组,MNA建立的混合变量方程组可表示为分块矩阵形式:

| G B | | v | | i | | | | | = | | | C D | | j | | e |

各子矩阵的物理意义如下表所示:

子矩阵维度描述填充规则
G(n-1)×(n-1)Group 1元件的导纳贡献同NA的节点导纳矩阵
B(n-1)×mGroup 2元件与节点的连接关系关联矩阵(+1/-1表示方向)
Cm×(n-1)Group 2元件的电压约束方程通常为B的转置
Dm×mGroup 2元件的参数矩阵元件特定方程决定
v(n-1)×1节点电压向量待求解量
jm×1Group 2元件的支路电流向量待求解量
i(n-1)×1注入电流向量已知量(电流源贡献)
em×1Group 2元件的激励项已知量(电压源值等)

3. 实例解析:含电压源与非线性的电路

考虑以下电路:

[节点1]---[电阻R1]---[节点2]---[二极管D1]---[地] [节点1]---[电压源Vs]---[地]

3.1 元件分组

  • Group 1:电阻R1
  • Group 2:电压源Vs、二极管D1

3.2 MNA方程构建

设节点1电压为v1,节点2电压为v2,电压源电流为j1,二极管电流为j2:

  1. KCL方程

    • 节点1:(v1-v2)/R1 + j1 = 0
    • 节点2:(v2-v1)/R1 + j2 = 0
  2. Group 2元件方程

    • 电压源Vs:v1 = Vs
    • 二极管D1(Shockley方程):j2 = Is*(exp(v2/(n*Vt)) - 1)

最终矩阵形式(线性化后):

| 1/R1 -1/R1 1 0 | | v1 | | 0 | | -1/R1 1/R1 0 1 | | v2 | = | 0 | | 1 0 0 0 | | j1 | | Vs | | 0 1 0 -rd| | j2 | | -I0|

其中rd = n*Vt/(Is*exp(v2/(n*Vt)))为二极管动态电阻,I0为线性化偏移项。

4. 数值求解的工程实现

在实际SPICE仿真器中,MNA方程组的求解需要处理以下关键问题:

4.1 非线性处理

对于Group 2中的非线性元件(如二极管),采用牛顿-拉夫逊迭代法

  1. 在操作点附近线性化非线性方程
  2. 求解线性化系统
  3. 更新变量值并检查收敛
  4. 重复直至满足误差容限

典型迭代步骤:

def newton_raphson(v_guess, max_iter=100, tol=1e-6): for i in range(max_iter): # 计算残差和雅可比矩阵 F, J = evaluate_system(v_guess) # 求解线性系统 delta = -np.linalg.solve(J, F) # 更新变量 v_guess += delta # 检查收敛 if np.linalg.norm(delta) < tol: break return v_guess

4.2 稀疏矩阵优化

实际电路生成的MNA矩阵通常具有高度稀疏性。现代SPICE实现采用以下加速技术:

技术描述典型加速比
符号分解(Symbolic LU)预处理确定非零元素位置3-5x
超节点法(Supernodal)合并相似矩阵结构块2-3x
多线程分解并行化数值计算1.5-2x
// 典型稀疏矩阵存储结构(CSR格式) typedef struct { int* row_ptr; // 行指针数组 int* col_idx; // 列索引数组 double* values; // 非零值数组 int nnz; // 非零元素总数 } SparseMatrix;

5. 分组策略的扩展应用

MNA的分组思想也被延伸应用到更复杂的仿真场景中:

5.1 频域分析

对于交流小信号分析,Group 2元件的阻抗参数需转换为频域形式:

  • 电感:Z = jωL
  • 电容:Y = jωC

5.2 器件模型集成

现代SPICE工具通过模型描述语言自动生成Group分类:

.model NMOS_LEVEL1 NMOS ( LEVEL=1 KP=20e-6 VTO=0.7 LAMBDA=0.01 )

编译器会自动将MOSFET的沟道电流识别为Group 2方程。

5.3 多物理场耦合

在芯片-封装协同仿真中,分组策略可扩展为:

  • Group 1:纯电气互连
  • Group 2:热-电耦合元件(如功率MOSFET)
  • Group 3:机械应力敏感器件

这种分层处理显著提升了大规模系统的仿真效率。