引言
在电子设计自动化(EDA)领域,SPICE(Simulation Program with Integrated Circuit Emphasis)无疑是最为重要和广泛应用的电路仿真工具之一。自诞生以来,它已成为模拟、验证和分析电子电路性能的基石。无论是简单的电阻电容网络,还是复杂的集成电路(IC),SPICE都能提供强大的仿真能力。本文将深入探讨SPICE模型的核心组成、仿真文件的格式与范例,并重点解析其核心求解器的工作原理,包括瞬态分析(Transient)、直流分析(DC)、交流分析(AC)和谐波平衡分析(Harmonic Balance),揭示其背后的数学原理和算法实现思路。
一、 SPICE模型详解
SPICE模型本质上是对实际电子元器件物理行为的数学描述。它定义了元器件在仿真中的电气特性(如电流、电压关系)以及相关的物理参数。SPICE仿真器通过读取这些模型和电路连接关系,构建方程组并求解,从而预测电路的行为。
-
核心器件模型: SPICE支持广泛的元器件模型,涵盖无源器件、半导体器件、电源和激励源等。以下是一些核心器件及其关键参数:
-
电阻 (R):
- 语法:
R<name> <node+> <node-> <value> [model_name] [params] - 参数:
value: 电阻值 (单位:欧姆 Ω)。model_name: 可选,指定电阻模型(用于温度系数、噪声等)。params: 可选,模型参数(如TC1,TC2温度系数)。
- 基本模型: 欧姆定律 $V = I \times R$。
- 语法:
-
电容 (C):
- 语法:
C<name> <node+> <node-> <value> [model_name] [IC=<initial_voltage>] - 参数:
value: 电容值 (单位:法拉 F)。model_name: 可选,指定电容模型。IC: 可选,初始电压条件。
- 基本模型: $I = C \frac{dV}{dt}$。
- 语法:
-
电感 (L):
- 语法:
L<name> <node+> <node-> <value> [model_name] [IC=<initial_current>] - 参数:
value: 电感值 (单位:亨利 H)。model_name: 可选,指定电感模型。IC: 可选,初始电流条件。
- 基本模型: $V = L \frac{dI}{dt}$。
- 语法:
-
二极管 (D):
- 语法:
D<name> <anode> <cathode> <model_name> [params] - 模型参数 (常见于
.model语句):IS:饱和电流 (Saturation current)。N:发射系数 (Emission coefficient)。BV:反向击穿电压 (Breakdown voltage)。IBV:反向击穿电流 (Breakdown current)。RS:串联电阻 (Series resistance)。TT:渡越时间 (Transit time)。CJO:零偏结电容 (Zero-bias junction capacitance)。
- 核心模型: 基于肖克利二极管方程,描述其非线性I-V特性: $$ I_D = I_S \left( e^{\frac{V_D}{n V_T}} - 1 \right) $$ 其中 $V_T = kT/q$ 是热电压。
- 语法:
-
双极结型晶体管 (BJT - Q):
- 语法:
Q<name> <collector> <base> <emitter> [substrate] <model_name> [params] - 模型参数 (Ebers-Moll, Gummel-Poon 等模型):
IS:饱和电流。BF:正向电流增益 (Forward beta)。BR:反向电流增益 (Reverse beta)。VAF:正向厄利电压 (Forward Early voltage)。VAR:反向厄利电压 (Reverse Early voltage)。CJE:B-E 结零偏电容。CJC:B-C 结零偏电容。TF:正向渡越时间。TR:反向渡越时间。
- 语法:
-
金属氧化物半导体场效应晶体管 (MOSFET - M):
- 语法:
M<name> <drain> <gate> <source> <bulk> <model_name> [L=<length>] [W=<width>] [params] - 模型参数 (Level 1, BSIM 系列等模型):
LEVEL:模型等级。VTO:阈值电压 (Threshold voltage)。KP:跨导参数 (Transconductance parameter)。LAMBDA:沟道长度调制系数 (Channel-length modulation)。GAMMA:体效应系数 (Body effect parameter)。PHI:表面电势 (Surface potential)。CBD:B-D 结电容。CBS:B-S 结电容。CGSO,CGDO:栅源/栅漏覆盖电容。TOX:栅氧厚度。
- 核心模型 (以 Level 1 为例): 在饱和区: $$ I_{DS} = \frac{KP}{2} \frac{W}{L} (V_{GS} - V_{TO})^2 (1 + \lambda V_{DS}) $$
- 语法:
-
电压源 (V):
- 语法:
V<name> <node+> <node-> <DC_value> [AC=<magnitude> [phase]] [transient_spec] - 类型:
- 恒定直流:
DC <value>。 - 交流小信号:
AC <magnitude> <phase>(用于AC分析)。 - 瞬态源:如正弦波
SIN(Voff Vampl Freq [Tdelay [Damping]]),脉冲PULSE(V1 V2 Tdelay Trise Tfall Ton Period),指数波EXP(...)等。
- 恒定直流:
- 语法:
-
电流源 (I):
- 语法:
I<name> <node+> <node-> <DC_value> [AC=<magnitude> [phase]] [transient_spec] - 参数定义与电压源类似。
- 语法:
-
子电路 (Subcircuit - .SUBCKT / .ENDS):
- 语法:
.SUBCKT <subckt_name> [node1] [node2] ... [nodeN] ... (内部元件、模型、连接) ... .ENDS [<subckt_name>] - 用途: 封装一组元件和连接,定义一个可复用的电路模块。通过
X<name> [external_node1] ... [external_nodeN] <subckt_name>调用。
- 语法:
-
-
模型定义 (.MODEL): 大多数半导体器件(D, Q, M)需要
.MODEL语句来定义其参数化的行为模型。- 语法:
.MODEL <model_name> <type> (<param1>=<value1> <param2>=<value2> ...) <type>:D(二极管),NPN/PNP(BJT),NMOS/PMOS(MOSFET) 等。- 示例:
.MODEL MyDiode D (IS=1e-14 N=1.5 BV=100 IBV=1e-10)
- 语法:
二、 SPICE仿真文件(Netlist)详解
SPICE仿真文件,通常称为网表(Netlist),是一个文本文件,包含以下关键部分:
- 标题: 通常以第一行作为标题或注释。
- 电路描述:
- 元件语句: 定义电路中所有元件的类型、连接节点和值/模型(如
R1 N1 N2 1k,D1 N2 0 MyDiode)。 - 模型语句 (.MODEL): 定义半导体器件的模型参数。
- 子电路定义 (.SUBCKT / .ENDS): 定义可复用的电路模块。
- 子电路调用 (X): 实例化子电路。
- 元件语句: 定义电路中所有元件的类型、连接节点和值/模型(如
- 分析控制: 指定要进行的仿真类型及其参数。
.TRAN <step> <final_time> [<start_time>] [UIC]: 瞬态分析。.DC <source_name> <start> <stop> <step> [<source2> ...]: 直流扫描分析。.AC <sweep_type> <num_points> <start_freq> <stop_freq>: 交流小信号分析。.HB ...(不同SPICE变种支持程度不同,语法可能差异较大):谐波平衡分析。
- 输出控制 (.PRINT, .PLOT, .PROBE): 指定仿真结果的输出方式(文本、绘图等)和需要输出的变量(节点电压、支路电流)。
- 初始条件 (.IC, .NODESET): 为节点设置初始电压或帮助收敛的初始猜测值。
- 选项 (.OPTIONS): 设置仿真器的各种控制选项(如精度
RELTO,ABSTOL,VNTOL,最大迭代次数ITL,方法METHOD)。 - 结束语句 (.END): 标记网表结束。
SPICE仿真文件范例:
下面是一个简单的RC电路瞬态分析的SPICE网表示例:
Simple RC Circuit Transient Analysis
V1 IN 0 PULSE(0 5 0 1n 1n 5u 10u) ; 脉冲电压源: Vlow=0, Vhigh=5, Tdelay=0, Trise=1ns, Tfall=1ns, Ton=5us, Period=10us
R1 IN OUT 1k ; 电阻连接 IN 和 OUT
C1 OUT 0 1u IC=0 ; 电容连接 OUT 和 地,初始电压0V
.TRAN 0.1u 20u UIC ; 瞬态分析: 步长0.1us, 总时间20us, 使用初始条件
.PLOT TRAN V(OUT) ; 绘制节点OUT的瞬态电压
.END
三、 SPICE仿真计算与核心求解器详解
SPICE仿真的核心是求解描述电路行为的非线性微分代数方程组(DAEs)。其基本形式可表示为:
$$ F(\dot{\mathbf{q}}(\mathbf{x}, t), \mathbf{x}, t) = 0 $$
其中 $\mathbf{x}$ 是节点电压和电感电流(或某些支路电流)组成的未知向量,$\mathbf{q}$ 是电荷和磁通链向量(电容和电感的贡献),$\dot{\mathbf{q}}$ 是其时间导数,$F$ 包含了基尔霍夫电流定律(KCL)、基尔霍夫电压定律(KVL)以及元件的特性方程。
求解过程通常分为以下步骤:
- 网络拓扑解析: 读入网表,建立元件连接关系。
- 方程组建模 (Modified Nodal Analysis - MNA): SPICE主要采用改进节点分析法(MNA)自动建立电路方程组。MNA将节点电压和某些电压源/电感电流作为未知量,系统地列出KCL和KVL方程。
- 非线性方程求解 (Newton-Raphson): 对于非线性电路(包含二极管、BJT、MOSFET等),在某个特定时间点或工作点,方程组是非线性的。SPICE使用牛顿-拉夫逊(Newton-Raphson)迭代法求解:
- 线性化非线性元件模型(计算雅可比矩阵)。
- 求解线性化后的方程组($J \Delta x = -F(x^{(k)})$)。
- 更新解向量 $x^{(k+1)} = x^{(k)} + \Delta x$。
- 检查收敛($\Delta x$ 足够小),若不收敛则继续迭代。
- 线性方程组求解: 牛顿迭代的每一步和纯线性电路的分析都需要求解大型线性方程组 $A x = b$。SPICE使用高效的稀疏矩阵技术(如LU分解结合部分主元选择)来求解。
- 时间积分 (瞬态分析): 对于瞬态分析,需要处理时间导数项。SPICE将微分方程通过数值积分方法(如梯形法则、Gear方法)离散化为一系列时间点上的非线性代数方程: $$ \frac{dq}{dt} + f(x(t)) = 0 \rightarrow F(\dot{q}{k}, q{k}, x_{k}, t_{k}) \approx G(q_{k}, q_{k-1}, ..., x_{k}, t_{k}) = 0 $$ 然后在每个时间点 $t_k$ 上使用牛顿法求解离散化后的方程 $G = 0$。
下面详细介绍几种核心分析类型:
-
直流分析 (DC Analysis):
- 计算什么: 计算电路在静态工作点(所有导数项 $\dot{q} = 0$)下的节点电压和支路电流。这是其他分析(如瞬态、AC)的起点。
- 原理: 求解简化后的非线性代数方程组 $F(0, \mathbf{x}, t) = 0$ (时间无关)。使用牛顿法迭代求解。
.DC命令可以扫描电源或参数,计算多个工作点。 - 应用举例: 计算放大器的偏置点(各点直流电压/电流);计算逻辑门的静态功耗;分析电路的直流传输特性(如 Vout vs Vin)。
- 实现思路:
- 建立静态MNA方程(忽略电容、电感导纳)。
- 应用牛顿法求解非线性方程组。
- (对于扫描)改变扫描变量值,重复求解过程。
-
瞬态分析 (Transient Analysis):
- 计算什么: 计算电路在时域内对任意输入信号(阶跃、脉冲、正弦等)的响应,得到节点电压和支路电流随时间变化的波形。
- 原理: 求解完整的DAE系统 $F(\dot{\mathbf{q}}, \mathbf{x}, t) = 0$。使用数值积分方法(如梯形法则)将连续时间离散化: $$ \dot{q}n \approx \frac{q_n - q{n-1}}{h} $$ 其中 $h$ 是时间步长。代入DAE得到一个在 $t_n$ 时刻的非线性代数方程 $G(\mathbf{x}_n) = 0$,再用牛顿法求解 $\mathbf{x}_n$。步长 $h$ 可自适应调整以平衡精度和效率。
- 应用举例: 观察数字电路的时序(信号传播延迟);模拟放大器对输入脉冲的响应;分析开关电源的启动过程;仿真振荡器的起振和稳态。
- 实现思路:
- 设置初始条件(
.IC,.NODESET或由DC分析提供)。 - 从 $t=0$ 开始,选择初始步长 $h$。
- 在 $t_n = t_{n-1} + h$ 时刻:
- 使用积分公式(如梯形法)将电容 $I_C = C dV/dt$、电感 $V_L = L dI/dt$ 近似表示为 $V_n$, $I_n$ 的代数关系。
- 将所有元件模型(线性、非线性)在 $t_n$ 时刻线性化或求值。
- 建立当前时刻的MNA线性方程组($A_n x_n = b_n$)。
- 求解 $x_n$。
- 检查局部截断误差(LTE),决定是否接受此步解。若误差过大,则减小 $h$ 重新计算此步。
- 若接受,则 $n = n+1$,并根据误差估计预测下一步长 $h_{new}$。
- 重复直到达到结束时间。
- 设置初始条件(
-
交流小信号分析 (AC Analysis):
- 计算什么: 计算电路在固定直流工作点附近,对频率变化的小幅度正弦输入的响应。输出通常是幅度(dB)和相位(度)随频率变化的曲线(伯德图)。
- 原理:
- 首先进行直流工作点分析,确定非线性元件在静态工作点 $Q$ 的线性化模型(小信号等效参数)。
- 假设在 $Q$ 点附近施加一个频率为 $\omega$ 的微小交流扰动 $\tilde{x}(t) = X e^{j\omega t}$。
- 将所有元件用其在 $Q$ 点的小信号等效模型代替(电阻不变,电容 $Y_C = j\omega C$,电感 $Y_L = 1/(j\omega L)$,非线性元件用其线性化导纳矩阵)。
- 建立复数形式的线性代数方程组 $(\mathbf{G} + j\omega \mathbf{C} + ...) \mathbf{\tilde{X}} = \mathbf{\tilde{B}}$ (其中 $\mathbf{G}$ 是导纳矩阵,$\mathbf{C}$ 是电容矩阵)。
- 在指定的频率点 $\omega_k$ 上求解该复数方程组,得到 $\mathbf{\tilde{X}}$,即节点电压和支路电流的交流小信号复振幅(包含幅度和相位)。
- 应用举例: 分析放大器的频率响应(增益带宽积);计算滤波器的传递函数(带通、低通特性);观察电路的输入/输出阻抗随频率变化;进行稳定性分析(奈奎斯特图、相位裕度)。
- 实现思路:
- 执行DC分析,获取工作点 $Q$。
- 在 $Q$ 点计算所有非线性元件的小信号参数(如MOSFET的 $g_m$, $g_{ds}$, $C_{gs}$ 等)。
- 构建复数形式的线性电路导纳矩阵 $\mathbf{Y}(j\omega)$。
- 对于频率扫描
.AC LIN 100 1Hz 10MegHz中的每个频率点 $\omega_k$:- 计算 $\mathbf{Y}(j\omega_k)$。
- 求解 $\mathbf{Y}(j\omega_k) \mathbf{\tilde{X}} = \mathbf{\tilde{B}}$ (复数线性方程组)。
- 输出 $\mathbf{\tilde{X}}$ 的幅度和相位(或实部和虚部)。
-
谐波平衡分析 (Harmonic Balance - HB):
- 计算什么: 计算非线性电路在周期性激励下的稳态响应(周期解)。它直接求解频域(傅里叶级数)表示的稳态解,避免了瞬态分析可能需要的漫长等待稳定时间,尤其适用于射频(RF)电路(如混频器、振荡器、功放)。
- 原理:
- 假设稳态响应 $\mathbf{x}(t)$ 和激励 $\mathbf{s}(t)$ 都是周期为 $T$ 的函数,可用傅里叶级数表示: $$ \mathbf{x}(t) = \sum_{k=-H}^{H} \mathbf{X}k e^{j k \omega_0 t}, \quad \mathbf{s}(t) = \sum{k=-H}^{H} \mathbf{S}_k e^{j k \omega_0 t} $$ 其中 $\omega_0 = 2\pi/T$, $H$ 是最高谐波次数。
- 将 $\mathbf{x}(t)$ 和 $\mathbf{s}(t)$ 代入电路DAE $F(\dot{\mathbf{q}}, \mathbf{x}, \mathbf{s}, t) = 0$。
- 利用时域微分对应频域乘以 $j k \omega_0$,非线性项在频域的表示需要使用时域采样和FFT/IFFT转换。
- 目标是找到一组傅里叶系数 $\mathbf{X}k$,使得在所有谐波频率 $k\omega_0$ 上,频域形式的KCL/KVL方程成立: $$ \mathbf{\Gamma}k (\mathbf{X}{-H}, ..., \mathbf{X}{H}) = \mathbf{Y}(j k \omega_0) \mathbf{X}k + \mathbf{F}{NL,k} (\mathbf{X}{-H}, ..., \mathbf{X}{H}) - \mathbf{S}k = 0 $$ 其中 $\mathbf{F}{NL,k}$ 是非线性器件在频域产生的第 $k$ 次谐波电流分量。
- 这形成了一个关于 $\mathbf{X}_k$ 的非线性代数方程组。使用牛顿法求解此大型方程组。
- 应用举例: 分析射频功率放大器的输出功率和效率;计算混频器的转换增益;仿真压控振荡器(VCO)的相位噪声;设计谐波滤波器。
- 实现思路:
- 设定基频 $\omega_0$ 和最大谐波次数 $H$。
- 初始化傅里叶系数 $\mathbf{X}_k$ (常从线性解或瞬态稳态解开始)。
- 使用牛顿法迭代:
- 对当前 $\mathbf{X}_k$,通过IFFT转换到时域 $\mathbf{x}(t)$。
- 在时域计算非线性器件电流 $\mathbf{i}{NL}(t) = f{NL}(\mathbf{x}(t), t)$。
- 通过FFT将 $\mathbf{i}{NL}(t)$ 转换回频域 $\mathbf{I}{NL,k}$。
- 计算残差 $\mathbf{\Gamma}_k = \mathbf{Y}(j k \omega_0) \mathbf{X}k + \mathbf{I}{NL,k} - \mathbf{S}_k$。
- 计算雅可比矩阵(涉及非线性器件小信号导纳的FFT)。
- 求解线性方程组 $J \Delta \mathbf{X} = -\mathbf{\Gamma}$。
- 更新 $\mathbf{X}_k$。
- 检查收敛。
- 输出稳态响应的傅里叶系数 $\mathbf{X}_k$,可重构时域波形或分析频域特性。
结论
SPICE作为电路仿真领域的标杆,其强大功能源于对电子元器件精确的物理建模(SPICE模型)和高效稳定的数值求解算法。通过对电阻、电容、电感、二极管、晶体管等基本元件的参数化描述(.MODEL),以及网表(Netlist)对电路拓扑和仿真指令的清晰定义,SPICE能够构建复杂的电路系统。其核心求解能力体现在:
- 直流分析 (DC) 奠定了静态工作点的基础,依赖于牛顿法求解非线性方程组。
- 瞬态分析 (TRAN) 揭示了电路的时域动态行为,核心在于数值积分方法(如梯形法)将微分方程离散化,并结合牛顿法迭代求解。
- 交流分析 (AC) 提供了电路的小信号频率响应特性,关键在于工作点线性化和复数线性方程组的求解。
- 谐波平衡分析 (HB) 高效地求解周期性激励下的稳态响应,通过频域建模和牛顿法处理非线性,特别适合射频应用。
理解SPICE模型的细节、网表的结构以及这些核心求解器背后的数学原理和算法思想(MNA、牛顿法、数值积分、FFT),对于有效利用SPICE进行电路设计、调试和性能验证至关重要。尽管现代商业SPICE工具包含更多高级功能和优化,但其核心仿真引擎仍然建立在这些经典而稳固的数值计算方法之上。

7万+

被折叠的 条评论
为什么被折叠?



