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 生态。
SPICE 发展时间线 CANCER (1971) SPICE 1 (1972) SPICE 2 (1975) SPICE 3 (1985) BSIM 时代 开源 → 工业标准 → 持续演进: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 参数以及收敛算法上存在差异。跨平台移植网表时,务必检查仿真器特定的扩展语法。
SPICE 生态架构 Berkeley SPICE 核心 HSPICE Spectre Eldo LTspice 应用:模拟 IC 设计 / 数字 Sign-off / 电源仿真 / 混合信号验证

2.3 SPICE 标准语法基础

SPICE 网表(Netlist)是描述电路拓扑、元件参数和分析指令的文本文件。所有 SPICE 变体都遵循一套核心语法规则。

2.3.1 网表基本结构

一个标准的 SPICE 网表由以下几个部分组成:

  1. 标题行: 第一行必须是注释或标题,通常以 * 开头。
  2. 电路描述: 定义元件(R、C、Q、M 等)及其连接节点。
  3. 模型定义: 使用 .model 语句定义器件参数。
  4. 分析指令: 使用 .DC、.AC、.TRAN 等指定仿真类型。
  5. 控制语句与输出: 使用 .PRINT、.PLOT、.PROBE 等控制输出。
  6. 结束语句: 以 .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 核心语法的兼容性,以便于网表在不同平台间的迁移。