1. SPICE 模型概述

SPICE(Simulation Program with Integrated Circuit Emphasis)是集成电路设计领域最核心的电路仿真标准。理解 SPICE 的历史、模型卡的作用以及模型文件的基本结构,是掌握模型卡生成与格式标准化的前提。本章从这三个维度建立知识框架。

1.1 SPICE 仿真器发展简史

SPICE 诞生于 20 世纪 70 年代初,由加州大学伯克利分校的 Laurence Nagel 和 Donald Pederson 团队开发。其发展历程可划分为四个关键阶段:

阶段 时间 标志性版本/事件 核心贡献
起源期 1971–1975 SPICE 1 / SPICE 2 首次将 Gummel-Poon 双极型模型、Shichman-Hodges MOS 模型集成到开源仿真器中
标准化期 1980–1990 SPICE 3 / HSPICE / PSPICE 引入 BSIM1/BSIM2 MOS 模型,商业仿真器开始主导 EDA 生态
模型精细化期 1995–2010 BSIM3v3 / BSIM4 / PSP 短沟道效应、量子效应、射频建模进入标准模型库
开放标准化期 2010–至今 Verilog-A / 紧凑模型联盟(CMC) 模型卡格式标准化,跨仿真器兼容性成为行业刚需
关键认知: 现代 SPICE 仿真器(如 HSPICE、Spectre、ngspice、SmartSpice)均遵循 CMC 标准模型卡格式。模型卡(.lib / .mdl 文件)的语法一致性,直接决定了仿真结果的可复现性。
SPICE 仿真器历史演进时间线 起源期 (1971) SPICE 1 / 2 标准化期 (1985) HSPICE / PSPICE 精细化期 (2000) BSIM3v3 / BSIM4 开放标准化期 (2010+) Verilog-A / CMC ▲ 每个阶段都推动了模型卡语法的演进,当前标准以 CMC 发布的 BSIM/PSP 模型卡格式为基准

1.2 模型卡在电路仿真中的作用

模型卡(Model Card)是 SPICE 仿真中描述半导体器件电学行为的参数集合。它位于电路网表(Netlist)与仿真内核之间,承担三项核心职能:

  • 参数化器件行为: 将物理效应(迁移率退化、速度饱和、沟道长度调制等)映射为 SPICE 可解析的数学方程系数。
  • 工艺-设计桥接: 代工厂(Foundry)通过模型卡将工艺角(TT/FF/SS/FS/SF)和统计波动信息传递给设计工程师。
  • 仿真收敛保障: 模型卡中的平滑参数、结电容模型、噪声模型直接影响 DC/AC/瞬态仿真的收敛性和精度。
工程事实: 在 28nm 及以下节点,模型卡参数数量已超过 500 个。一个错误的模型卡参数(如 TOX 或 VTH0 偏差 5%)可能导致电路功耗或时序仿真结果偏离 30% 以上。
模型卡在电路仿真流程中的位置与内部结构 电路网表 Netlist .cir / .sp 模型卡 .lib / .mdl SPICE 仿真器 HSPICE / Spectre 引用模型卡 提供模型参数 模型卡内部结构 .MODEL NMOS1 NMOS ( + VTH0 = 0.35 + TOX = 2.2e-9 + U0 = 0.045 + VSAT = 1.2e5 ... ) 网表引用模型卡 .LIB / .INCLUDE 仿真器解析模型卡 生成器件方程并求解

1.3 模型文件的基本结构

一个标准的 SPICE 模型文件(通常以 .lib 或 .mdl 为扩展名)遵循层级化组织方式。以下是一个典型 NMOS BSIM4 模型文件的骨架:

*------------------------------------------------------------

* 模型文件: nch_28nm.lib

* 工艺: 28nm LP CMOS

* 版本: v1.2

*------------------------------------------------------------

.LIB 'nch_28nm' TT



.MODEL nch_28nm_tt NMOS (

+ VERSION = 4.7.0

+ TNOM    = 25

+ TOX     = 2.2e-9

+ XJ      = 1.4e-7

+ NCH     = 2.3549e17

+ VTH0    = 0.35

+ U0      = 0.045

+ VSAT    = 1.2e5

+ A0      = 1.0

+ K1      = 0.45

+ K2      = 0.05

+ WINT    = 5e-9

+ LINT    = 3e-9

+ ...     * 其余参数省略

)



.ENDL nch_28nm

*------------------------------------------------------------

模型文件的基本结构包含以下要素:

结构要素 语法标记 说明
注释行 * 或 $ 文件头注释、版本信息、工艺角说明
库声明 .LIB <库名> <工艺角> 定义模型库名称和工艺角(TT/FF/SS 等)
模型卡定义 .MODEL <模型名> <类型> ( <参数列表> ) 核心部分,指定器件类型(NMOS/PMOS/NPN/PNP)和所有模型参数
库结束 .ENDL <库名> 与 .LIB 配对,标识库定义结束
包含指令 .INCLUDE <文件名> 引用外部模型文件或子电路(可选)
常见陷阱: 模型卡参数的单位制必须与仿真器默认单位一致。例如,BSIM4 中 TOX 的单位是米(m),而某些旧版模型可能使用埃(Å)。单位不匹配会导致仿真结果完全错误,且难以排查。
模型文件 (.lib) .LIB 库声明 .MODEL 模型卡 几何参数 TOX · L · WINT 阈值参数 VTH0 · K1 · K2 迁移率参数 U0 · VSAT · A0 噪声 / 温度 TNOM · NOIA · AF .ENDL 库结束(与 .LIB 配对闭合)

1.4 模型卡与仿真器的交互机制

SPICE 仿真器在读取模型文件时,遵循以下解析与实例化流程:

SPICE 仿真器解析模型文件的四步流程 模型文件 → 模型索引表 → 参数绑定 → 器件实例 → DC / AC / 瞬态求值 1 词法分析 输入 nch_28nm.lib .LIB 'nch_28nm' TT 处理 扫描 .LIB / .MODEL / .ENDL 逐行切分 token 建立模型索引表 输出 模型索引表 nch_28nm_tt → NMOS 2 参数绑定 输入 VTH0 = 0.35 TOX = 2.2e-9 U0 = 0.045 处理 参数名 ↔ 内置方程参数 类型检查(数值 / 整型) 范围检查(TOX > 0 等) 输出 绑定完成的模型卡 类型 / 范围校验通过 3 实例化 输入 M1 D G S B nch_28nm_tt W=1u L=0.1u 处理 按模型名查找 nch_28nm_tt 合并几何尺寸 W / L 生成器件实例 M1 输出 可求解的器件实例 M1 (W=1u, L=0.1u) 4 运行时求值 输入 DC / AC / TRAN Vgs / Vds / Vbs 偏置 处理 按偏置调用模型方程 每时间步迭代求解 计算电流 / 电容 / 噪声 输出 仿真结果 I_D · C_gs · 噪声谱 仿真准备阶段 · 一次性完成 解析 · 绑定 · 实例化 —— 在仿真开始前完成 运行时循环 每个时间步重复求值
  1. 词法分析: 扫描 .LIB / .MODEL / .ENDL 等关键字,建立模型索引表。
  2. 参数绑定: 将模型卡中的参数名与仿真器内置的模型方程参数一一对应,检查参数范围与类型。
  3. 实例化: 当网表中出现 M1 D G S B nch_28nm_tt W=1u L=0.1u 时,仿真器将模型卡参数与几何尺寸(W/L)合并,生成具体的器件实例。
  4. 运行时求值: 在 DC/AC/瞬态分析中,仿真器根据偏置条件调用模型方程,计算电流、电容、噪声等特性。
标准化意义: CMC 标准模型卡格式要求所有参数使用统一的命名规则(如 VTH0 而非 vth0 或 Vt),并且参数单位必须遵循 SI 制。这确保了模型卡可以在 HSPICE、Spectre、ngspice 等不同仿真器之间直接复用,无需手动转换。