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 网表的完整结构层次,从标题行到结束行的数据流:
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 的乘积(时间常数)远小于仿真步长。