2. SPICE 模型入门:SPICE 语法基础、网表结构、元件声明

SPICE(Simulation Program with Integrated Circuit Emphasis)是集成电路仿真的事实标准。无论是提取 PN 结电容还是调试收敛问题,第一步都是读懂并编写正确的 SPICE 网表。本节从语法、网表结构和元件声明三个层面建立基础。

2.1 SPICE 网表结构

一个完整的 SPICE 网表由标题行、注释、元件声明、分析语句、控制语句和结束行组成。网表是纯文本文件,不区分大小写,但节点编号必须连续且唯一。

组成部分 说明 示例
标题行 网表第一行,任意字符串,被仿真器忽略 PN Junction Capacitance Extraction
注释 以 * 开头的行为注释 * This is a comment
元件声明 定义电路中的器件及其连接 D1 1 0 DIODE
分析语句 指定仿真类型(DC、AC、瞬态等) .DC VIN 0 5 0.1
控制语句 模型参数、选项、初始条件等 .MODEL DIODE D(IS=1e-14)
结束行 网表最后一行,必须是 .END .END
关键规则: 网表第一行不能是 .END 或空行;节点 0 固定为全局地(GND);每行最多 80 个字符(传统限制),续行使用 + 符号。

2.2 元件声明语法

SPICE 元件声明的通用格式为:

<元件名> <正节点> <负节点> <模型名> [参数值]

元件名第一个字母标识器件类型:

首字母 器件类型 示例
R 电阻 R1 1 0 1k
C 电容 C1 1 0 10p
D 二极管(PN 结) D1 1 0 DIODE
Q 双极型晶体管 Q1 1 2 0 NPN
M MOSFET M1 1 2 0 0 NMOS
V 独立电压源 VIN 1 0 DC 5
I 独立电流源 IIN 0 1 DC 1m
提示: 二极管(D)是 PN 结电容提取的核心器件。其模型参数 CJO(零偏结电容)、VJ(内建电势)、M(梯度因子)直接决定电容-电压特性。

2.3 模型参数声明

元件的行为由 .MODEL 语句定义。模型参数可以写在网表内,也可以引用外部库文件。

.MODEL <模型名> <类型>(<参数1>=<值1> <参数2>=<值2> ...)

以 PN 结二极管为例,关键模型参数如下:

参数 含义 典型值 单位
IS 饱和电流 1e-14 A
RS 串联电阻 10 Ω
CJO 零偏结电容 1e-12 F
VJ 内建电势 0.8 V
M 梯度因子(突变结 0.5,缓变结 0.33) 0.5 —
FC 正偏电容拟合系数 0.5 —

2.4 完整网表示例:PN 结电容提取

以下是一个用于提取 PN 结电容的 SPICE 网表,包含直流扫描和交流小信号分析:

PN Junction C-V Extraction
* 网表:提取二极管零偏和反偏电容
VBIAS 1 0 DC 0V
D1 1 0 DIODE
.MODEL DIODE D(
+ IS=1e-14
+ RS=10
+ CJO=1e-12
+ VJ=0.8
+ M=0.5
+ FC=0.5
)
* 直流扫描:从 -5V 到 0.5V,步长 0.1V
.DC VBIAS -5 0.5 0.1
* 交流小信号分析:频率 1MHz,幅度 1V
.AC DEC 10 1e6 1e6
* 输出电容(通过电流虚部计算)
.PROBE
.END
注意: 在 .AC 分析中,电容值通过 Imag(I(D1)) / (2 * π * freq) 计算。如果仿真不收敛,首先检查 RS 是否过小(导致电流过大)或 CJO 是否过大(导致时间常数异常)。

2.5 SPICE 网表结构图

下图展示了 SPICE 网表的完整结构层次,从标题行到结束行的数据流:

SPICE 网表结构图 SPICE 网表结构层次 标题行(任意文本) 注释行(* 开头) 元件声明(R/C/D/Q/M/V/I) D1 1 0 DIODE 模型声明(.MODEL) .MODEL DIODE D(CJO=1e-12 VJ=0.8 M=0.5) 分析语句(.DC / .AC / .TRAN) .DC VBIAS -5 0.5 0.1 结束行(.END) 网表顺序固定:标题 → 注释 → 元件 → 模型 → 分析 → .END

2.6 常见语法错误与避坑

  • 节点编号冲突: 节点 0 是全局地,不能用于其他连接;节点编号建议从 1 开始连续递增。
  • 模型名未定义: 元件声明引用的模型名必须在 .MODEL 语句中定义,否则仿真器报错。
  • 单位后缀错误: SPICE 使用标准后缀(k=1e3, m=1e-3, u=1e-6, n=1e-9, p=1e-12, f=1e-15)。注意 M 表示 1e6,m 表示 1e-3,大小写敏感。
  • 缺少 .END: 网表最后一行必须是 .END,否则仿真器无法识别结束位置。
  • 续行格式: 长语句换行时,续行行首必须使用 + 符号,且 + 前不能有空格。
调试建议: 当仿真不收敛时,首先检查网表语法。使用 .OPTIONS NOPAGE 关闭分页输出,使用 .OPTIONS RELTOL=1e-6 提高收敛精度。对于 PN 结电容提取,确保 CJO 和 RS 的乘积(时间常数)远小于仿真步长。