1. SPICE 网表基础回顾
SPICE 网表是电路仿真领域的通用语言。无论是经典 SPICE、HSPICE、PSPICE 还是 LTspice,其网表核心结构都遵循一套相似的语法规则。掌握网表的基本结构、元件定义格式和节点命名规则,是编写跨平台兼容网表的第一步。
核心要点: 网表本质是文本文件,由标题行、注释、元件语句、控制语句、模型语句和结束行构成。节点是连接元件的“电气点”,元件通过节点和参数定义其行为。
1.1 网表的基本结构
一个标准的 SPICE 网表由以下六个部分组成,顺序固定,缺一不可:
| 序号 | 部分 | 说明 | 示例 |
|---|---|---|---|
| 1 | 标题行 | 网表的第一行,通常为电路名称或描述,被 SPICE 忽略但必须存在 | Simple RC Circuit |
| 2 | 注释 | 以 * 开头,用于说明电路功能、作者、日期等 |
* Author: EDA Lab |
| 3 | 元件语句 | 定义电路中的元器件及其连接关系 | R1 1 0 1k |
| 4 | 控制语句 | 以 . 开头,设置仿真类型、模型参数、输出指令等 |
.TRAN 1u 10m |
| 5 | 模型语句 | 定义半导体器件的工艺参数模型 | .MODEL NMOS1 NMOS ... |
| 6 | 结束行 | 以 .END 结尾,标志网表结束 |
.END |
跨平台提示: 所有主流 SPICE 变体都要求标题行和
.END 行。缺少标题行会导致某些仿真器报错,而缺少 .END 行则可能使仿真器读取到网表文件末尾的无关数据。
下面是一个完整的网表示例,展示各部分如何组合:
RC Low-Pass Filter
* 设计者:张三,日期:2025-01-15
* 用途:演示网表基本结构
V1 1 0 DC 5V
R1 1 2 1k
C1 2 0 1uF
.TRAN 1u 5m
.PRINT TRAN V(2)
.END
1.2 元件定义格式
SPICE 中每个元件都由一行语句定义,其通用格式为:
<元件名称> <正节点> <负节点> <参数值>
元件名称的第一个字母决定了元件类型,这是 SPICE 语法中最严格的规则之一。下表列出了常见元件类型及其名称前缀:
| 元件类型 | 名称前缀 | 语法示例 | 说明 |
|---|---|---|---|
| 电阻 | R | R1 1 0 10k |
节点1到地,阻值10kΩ |
| 电容 | C | C1 1 0 1uF |
节点1到地,容值1μF |
| 电感 | L | L1 1 2 100uH |
节点1到2,感值100μH |
| 独立电压源 | V | V1 1 0 DC 5V |
节点1到地,直流5V |
| 独立电流源 | I | I1 1 0 DC 1mA |
节点1到地,直流1mA |
| 二极管 | D | D1 1 0 DIODE1 |
阳极节点1,阴极接地,模型DIODE1 |
| NMOS 晶体管 | M | M1 D G S B NMOS1 |
漏极D,栅极G,源极S,衬底B,模型NMOS1 |
| 受控源 | E/F/G/H | E1 3 0 1 2 10 |
VCVS,增益10 |
常见错误: 元件名称不能以数字开头,且不能与关键字(如
VCC、GND)冲突。例如 1R1 1 0 1k 是非法的,应改为 R1 1 0 1k。
参数值支持科学记数法和工程后缀,下表列出了常用后缀及其换算关系:
| 后缀 | 含义 | 数值 | 示例 |
|---|---|---|---|
| F | 飞(femto) | 10⁻¹⁵ | 1fF = 1×10⁻¹⁵ F |
| P | 皮(pico) | 10⁻¹² | 10pF = 10×10⁻¹² F |
| N | 纳(nano) | 10⁻⁹ | 100nH = 100×10⁻⁹ H |
| U | 微(micro) | 10⁻⁶ | 1uF = 1×10⁻⁶ F |
| M | 毫(milli) | 10⁻³ | 1mA = 1×10⁻³ A |
| K | 千(kilo) | 10³ | 10k = 10×10³ Ω |
| MEG | 兆(mega) | 10⁶ | 1MEG = 1×10⁶ Ω |
| G | 吉(giga) | 10⁹ | 1G = 1×10⁹ Hz |
跨平台提示: HSPICE 和 LTspice 都支持
MEG 表示兆欧,但部分旧版 SPICE 只认 MEG 而不认 M(因为 M 在早期版本中代表毫)。为兼容性考虑,建议使用 MEG 表示 10⁶,使用 M 表示 10⁻³。
1.3 节点命名规则
节点是网表中连接元件的关键点。SPICE 对节点命名有明确的规则,不同仿真器之间存在细微差异:
- 数字节点: 节点名可以是数字(如
1、2、100),但0被保留为全局地节点(GND)。 - 字母节点: 节点名可以是字母或字母数字组合(如
VCC、CLK、NODE_A)。 - 大小写敏感: HSPICE 默认大小写不敏感(
VCC和vcc相同),而 LTspice 和 NGSPICE 默认大小写敏感。 - 特殊字符: 大多数仿真器允许使用
_和$,但不建议使用.、+、-等运算符字符。 - 全局节点:
0或GND是唯一的全局地节点,所有仿真器都将其视为参考电位。
下表总结了不同仿真器在节点命名上的兼容性差异:
| 特性 | HSPICE | LTspice | PSPICE | NGSPICE |
|---|---|---|---|---|
| 大小写敏感 | 否 | 是 | 否 | 是 |
| 数字节点 | 支持 | 支持 | 支持 | 支持 |
| 字母节点 | 支持 | 支持 | 支持 | 支持 |
下划线 _ |
支持 | 支持 | 支持 | 支持 |
点号 . |
不支持 | 不支持 | 不支持 | 不支持 |
方括号 [] |
支持(总线) | 不支持 | 支持(总线) | 不支持 |
| 最大长度 | 1024 字符 | 无明确限制 | 131 字符 | 无明确限制 |
跨平台避坑: 如果网表需要在 HSPICE 和 LTspice 之间共享,建议统一使用大写字母节点名(如
VCC、GND),避免使用方括号 [] 表示总线,因为 LTspice 不支持该语法。使用 _ 分隔单词(如 CLK_IN)是最安全的选择。
下面通过一个 SVG 图来直观展示网表结构与节点连接关系:
上图左侧展示了网表的六层结构,右侧展示了对应的电路拓扑。节点 1、2 和 0 将电压源 V1、电阻 R1 和电容 C1 连接成一个完整的回路。理解这种从文本到拓扑的映射关系,是编写正确网表的基础。
1.4 节点命名最佳实践
为了确保网表在不同 SPICE 平台之间具有良好的兼容性,建议遵循以下节点命名规则:
- 使用有意义的名称: 用
VDD、VSS、CLK代替1、2、3,提高可读性。 - 统一大小写: 全部使用大写字母,避免因大小写敏感导致的连接错误。
- 避免特殊字符: 只使用字母、数字和下划线
_,不使用.、+、-、[]。 - 保留节点 0: 始终使用
0作为地节点,不要使用GND替代(部分仿真器不识别GND)。 - 避免数字开头: 节点名不要以数字开头(如
1NODE),某些仿真器会将其解析为数字节点。