2. SPICE 历史与标准:SPICE 的起源与发展、Berkeley SPICE、商业 SPICE 变体、标准语法基础
SPICE(Simulation Program with Integrated Circuit Emphasis)是集成电路仿真领域的事实标准。理解其历史沿革、标准体系以及语法基础,是配置现代 EDA 工具链和进行高效仿真的前提。本章将梳理 SPICE 从学术工具到行业标准的演进路径,并解析其核心语法结构。
2.1 SPICE 的起源与发展
SPICE 诞生于 20 世纪 70 年代初的加州大学伯克利分校(UC Berkeley)。其发展历程可划分为以下几个关键阶段:
| 年代 | 版本/事件 | 核心贡献与特点 |
|---|---|---|
| 1971 | CANCER | SPICE 的前身,由 Laurence Nagel 开发,专注于非线性直流分析。 |
| 1972 | SPICE 1 | 正式发布,引入暂态分析和改进的电路描述语言。 |
| 1975 | SPICE 2 | 重大重写,采用 Fortran 语言,引入改进的数值积分算法和 MOSFET 模型(Level 1/2/3),成为学术和工业界主流。 |
| 1985 | SPICE 3 | 使用 C 语言重写,引入更灵活的 BSIM 模型接口、图形化交互(nutmeg)和多平台支持。 |
| 1990s 至今 | BSIM 系列 | BSIM3/4 成为行业标准模型,SPICE 仿真器持续集成新物理效应(如应力、量子效应)。 |
关键里程碑: SPICE 2 的发布奠定了现代电路仿真的基础。其开源的特性使得全球的研究者和工程师能够共同改进算法和模型,最终形成了庞大的 SPICE 生态。
2.2 Berkeley SPICE 与商业 SPICE 变体
Berkeley SPICE 作为开源参考实现,催生了众多商业变体。这些变体在保持核心语法兼容的同时,在性能、收敛性、模型支持和功能扩展上各有侧重。
2.2.1 Berkeley SPICE 的地位
- 参考标准: 所有商业 SPICE 均以 Berkeley SPICE 3 的语法和算法为基准。
- 模型验证: 新的半导体模型(如 BSIM-CMG、PSP)通常先在 Berkeley SPICE 中验证。
- 教育用途: 适合教学和基础研究,但缺乏大规模电路仿真所需的优化。
2.2.2 主流商业 SPICE 变体对比
| 仿真器名称 | 开发商 | 核心特点 | 典型应用场景 |
|---|---|---|---|
| HSPICE | Synopsys | 高精度、强收敛性、丰富的工艺模型库 | 数字/模拟电路 sign-off 验证 |
| Spectre | Cadence | 与 Virtuoso 平台深度集成、支持多模式仿真 | 模拟/混合信号 IC 设计 |
| Eldo | Mentor (Siemens) | 快速 SPICE、支持行为级建模 | 大规模 SoC 仿真 |
| SmartSpice | Silvaco | 与 TCAD 工具链紧密耦合 | 功率器件、光电器件仿真 |
| LTspice | Analog Devices | 免费、轻量、易于上手 | 电源设计、通用电路仿真 |
兼容性注意: 虽然商业 SPICE 都宣称兼容 Berkeley SPICE 语法,但在 .options、.model 参数以及收敛算法上存在差异。跨平台移植网表时,务必检查仿真器特定的扩展语法。
2.3 SPICE 标准语法基础
SPICE 网表(Netlist)是描述电路拓扑、元件参数和分析指令的文本文件。所有 SPICE 变体都遵循一套核心语法规则。
2.3.1 网表基本结构
一个标准的 SPICE 网表由以下几个部分组成:
- 标题行: 第一行必须是注释或标题,通常以
*开头。 - 电路描述: 定义元件(R、C、Q、M 等)及其连接节点。
- 模型定义: 使用
.model语句定义器件参数。 - 分析指令: 使用
.DC、.AC、.TRAN等指定仿真类型。 - 控制语句与输出: 使用
.PRINT、.PLOT、.PROBE等控制输出。 - 结束语句: 以
.END结尾。
2.3.2 核心语法示例
以下是一个简单的 CMOS 反相器 SPICE 网表示例:
* CMOS Inverter Netlist
* VDD = 5V, W/L = 2/1 for NMOS, 4/1 for PMOS
VDD vdd 0 DC 5
VIN vin 0 DC 0 PULSE(0 5 0 1n 1n 10n 20n)
M1 vout vin vdd vdd PMOS W=4u L=1u
M2 vout vin 0 0 NMOS W=2u L=1u
CL vout 0 10f
.model NMOS NMOS (VTO=0.7 KP=120u LAMBDA=0.01)
.model PMOS PMOS (VTO=-0.7 KP=40u LAMBDA=0.02)
.TRAN 0.1n 40n
.PRINT TRAN V(vin) V(vout)
.END
2.3.3 关键语法规则
| 语法元素 | 规则说明 | 示例 |
|---|---|---|
| 节点命名 | 节点名可以是数字或字符串,0 或 GND 代表地节点。 | vdd, vin, 0 |
| 元件前缀 | 每个元件类型有固定前缀:R(电阻)、C(电容)、Q(BJT)、M(MOSFET)、D(二极管)。 | R1, M1, Q2 |
| 模型引用 | 元件通过 .model 语句引用模型名称。 |
M1 ... NMOS |
| 单位后缀 | 支持工程单位:F(fF)、P(pF)、N(nF)、U(uF)、M(mF)、K(kΩ)、MEG(MΩ)、G(GΩ)。 | 10f, 1u, 5K |
| 注释 | 以 * 开头的行为注释行。 |
* This is a comment |
| 续行符 | 使用 + 在行首表示续行。 |
+ LAMBDA=0.01 |
实践要点:
- 网表必须严格区分大小写(通常不区分,但建议统一小写)。
- 节点 0 是全局地参考点,所有电压测量均相对于地。
- 模型参数的单位制必须与仿真器默认单位一致(通常为 V、A、Ω、F、H)。
2.4 标准语法与扩展的边界
尽管 SPICE 语法有核心标准,但各商业变体引入了大量扩展:
- HSPICE 扩展:
.OPTIONS POST、.MEASURE语句、.SUBCKT参数传递。 - Spectre 扩展:
ahdl_include、parameters语句、struct类型。 - LTspice 扩展:
.IC初始条件、.STEP参数扫描、专有二极管模型。
在进行工具链配置时,建议以目标仿真器的用户手册为准,同时保持对 Berkeley SPICE 核心语法的兼容性,以便于网表在不同平台间的迁移。