1. SPICE 网表基础:网表结构、元件声明、节点编号规则、注释语法

SPICE 网表是描述电路拓扑与元件参数的文本化语言,是器件建模与仿真的核心输入。一个合法的网表必须遵循严格的语法规则,任何格式错误都会导致仿真中断或结果异常。本节将系统讲解网表的结构骨架、元件声明方式、节点编号约定以及注释语法,为后续的语法调试打下坚实基础。

1.1 网表结构:标题行、元件行、控制行、结束行

一个完整的 SPICE 网表由四个逻辑区域组成,顺序固定,缺一不可。下表总结了各区域的职责与语法要点:

区域 位置 语法要点 示例
标题行 第一行 任意字符串,不能以数字或点号开头;被仿真器忽略,仅作标识 CMOS Inverter Netlist
元件行 标题行之后 每行声明一个元件,格式:<类型> <节点1> <节点2> ... <模型名> <参数> M1 D G S B NMOS W=1u L=0.18u
控制行 元件行之后 以点号 . 开头,定义仿真类型、模型参数、分析指令等 .model NMOS NMOS (VTO=0.7 KP=200u)
结束行 最后一行 必须为 .END,表示网表结束 .END
调试要点: 标题行不能省略,否则仿真器会将第一行元件行误读为标题。结束行 .END 后不能有任何字符(包括空格和注释),否则部分仿真器会报“未识别语句”错误。

以下是一个完整的 SPICE 网表示例,展示了四个区域的衔接:

Simple NMOS I-V Curve Test
VDS D 0 DC 1.0
VGS G 0 DC 0.8
M1 D G 0 0 NMOS W=10u L=1u
.model NMOS NMOS (VTO=0.5 KP=120u GAMMA=0.4)
.dc VGS 0 1.2 0.05
.probe
.end

1.2 元件声明:类型前缀与节点顺序

SPICE 使用单字母前缀区分元件类型,每个元件行的节点顺序由元件类型决定,不可随意调换。下表列出了最常用的元件前缀及其节点连接规则:

前缀 元件类型 节点顺序(按网表书写顺序) 示例
R 电阻 正节点 负节点 阻值 R1 1 0 1k
C 电容 正节点 负节点 容值 C1 1 0 10p
L 电感 正节点 负节点 感值 L1 1 0 5n
D 二极管 阳极 阴极 模型名 D1 1 0 DIODE_MODEL
M MOSFET 漏极 栅极 源极 衬底 模型名 M1 D G S B NMOS_MODEL
Q BJT 集电极 基极 发射极 模型名 Q1 C B E NPN_MODEL
V 独立电压源 正节点 负节点 电压值/波形 VDD VDD 0 DC 3.3
I 独立电流源 正节点 负节点 电流值/波形 IIN 0 1 DC 1m
常见错误: MOSFET 的节点顺序是 漏-栅-源-衬,不是栅-漏-源-衬。初学者常将栅极和漏极位置互换,导致仿真结果完全错误。调试时请优先核对元件行的节点顺序。

1.3 节点编号规则:数字节点与命名节点

SPICE 中的节点用于连接元件,节点编号必须遵循以下规则:

  • 数字节点: 0 必须为地节点(全局参考点),不可用于其他连接。其他正整数(1, 2, 3, …)可作为内部节点。
  • 命名节点: 使用字母开头的字符串(如 VDD、OUT、CLK),长度不超过 1024 字符(视仿真器而定),不区分大小写。
  • 全局节点: 以 $G_ 或 $ 开头的节点名(如 $G_VDD)可在子电路间共享。
  • 节点命名限制: 不能以数字开头,不能包含空格、制表符、括号、等号等特殊字符。

下表对比了合法与不合法的节点命名:

节点名 合法性 说明
0 ✅ 合法 全局地节点,每个网表必须至少有一个 0 节点
VDD ✅ 合法 字母开头,无特殊字符
net_123 ✅ 合法 下划线允许使用
3V3 ❌ 非法 以数字开头,仿真器会解析为数字节点 3 和字符串 V3
VDD+OUT ❌ 非法 包含加号,被解析为表达式
CLK (1) ❌ 非法 包含空格和括号
调试技巧: 当仿真器报“Node not found”或“Invalid node name”时,首先检查节点名是否以数字开头或包含特殊字符。使用纯数字节点(如 1, 2, 3)可以避免命名冲突,但可读性较差,建议在小型测试电路中使用。

1.4 注释语法:行注释与行内注释

SPICE 支持两种注释方式,用于提高网表可读性:

  • 行注释: 以星号 * 开头,整行被仿真器忽略。通常用于文件头说明、版本信息、修改记录。
  • 行内注释: 以美元符号 $ 开头,从 $ 到行尾的内容被忽略。用于对单个元件或参数做简短说明。
* This is a full-line comment
* Netlist: NMOS I-V Curve, Rev 1.2
VDS D 0 DC 1.0   $ Drain voltage = 1.0V
VGS G 0 DC 0.8   $ Gate voltage = 0.8V
M1 D G 0 0 NMOS W=10u L=1u  $ NMOS transistor
.model NMOS NMOS (VTO=0.5 KP=120u)  $ Model definition
.dc VGS 0 1.2 0.05  $ DC sweep analysis
.end
注意: 部分 SPICE 变体(如 HSPICE)支持以 // 或 # 作为注释符,但标准 SPICE 只识别 * 和 $。跨平台调试时,建议仅使用标准注释语法,避免兼容性问题。

1.5 网表结构总览图

下图以 SVG 形式展示了 SPICE 网表的完整结构,从标题行到结束行的逻辑流向,以及各区域的典型内容:

SPICE 网表结构总览 SPICE 网表结构总览 标题行(第1行) 任意字符串,如 "CMOS Inverter Netlist" 元件行(主体) 格式:<前缀> <节点1> <节点2> ... <模型名> <参数> 示例:M1 D G S B NMOS W=10u L=1u 元件类型:R/C/L/D/M/Q/V/I 等 控制行(以 . 开头) .model — 模型参数定义 .dc / .ac / .tran — 仿真分析类型 .probe / .print — 输出控制 结束行(最后一行) .END — 必须独占一行,后面不能有任何字符 ⚠ 标题行不能省略 .END 后不能有空格 ⚠ 节点顺序不可调换 MOSFET: 漏-栅-源-衬 ⚠ 点号必须在行首 前面不能有空格

1.6 常见语法错误速查表

在编写 SPICE 网表时,以下语法错误最为高频。建议在调试时逐项排查:

错误类型 典型表现 排查方向
缺少标题行 仿真器将第一行元件行当作标题忽略 确保第一行是任意字符串,不是元件声明
缺少结束行 仿真器报 "Unexpected end of file" 在文件末尾添加 .END
节点名以数字开头 报 "Invalid node name" 或解析异常 将节点名改为字母开头,如 VDD 而非 3V3
MOSFET 节点顺序错误 仿真结果与预期完全不符 核对顺序:漏极 栅极 源极 衬底
控制行前有空格 控制行被当作元件行解析 确保 . 在行首,前面无空格
注释符使用不当 仿真器报 "Unrecognized statement" 使用 * 做行注释,$ 做行内注释
元件前缀错误 报 "Unknown device type" 检查前缀是否在支持列表中(R/C/L/D/M/Q/V/I)
调试工作流: 当仿真报错时,按以下顺序排查:① 检查 .END 是否存在且无多余字符;② 检查标题行是否存在;③ 检查所有控制行是否以 . 开头且无前导空格;④ 检查所有元件行的节点顺序是否与类型匹配;⑤ 检查节点名是否合法。按照这个流程,90% 的语法错误可以在 2 分钟内定位。