3. SPICE 模型基础

SPICE(Simulation Program with Integrated Circuit Emphasis)是集成电路设计领域最核心的仿真工具。在深亚微米 CMOS 工艺中,SPICE 模型是连接工艺制造与电路设计的桥梁。本章将系统介绍 SPICE 仿真器的工作原理、网表语法结构、模型语句定义以及子电路封装与调用方法,为后续 PDK 集成打下坚实基础。

学习目标:掌握 SPICE 网表的基本构成要素,能够独立编写 .MODEL 语句和 .SUBCKT 子电路,理解不同仿真器之间的语法差异。

3.1 SPICE 仿真器简介

SPICE 最初由加州大学伯克利分校开发,经过数十年发展,已成为业界标准。现代 EDA 工具中的 SPICE 仿真器主要分为以下几类:

仿真器类型 代表工具 特点 适用场景
传统 SPICE HSPICE、PSPICE 精度高、收敛性好 模拟电路精确仿真
FastSPICE Spectre、FineSim 速度快、容量大 大规模混合信号仿真
并行 SPICE HSPICE FX、CustomSim 多核加速、分布式计算 超大规模后仿验证

不同仿真器在语法细节上存在差异,但核心网表结构保持一致。下图展示了 SPICE 仿真器处理网表的完整流程:

SPICE 仿真器工作流程 输入网表 语法解析 模型加载 矩阵构建 迭代求解 输出结果 收敛判断反馈 关键说明 • 网表包含电路拓扑 • 模型描述器件特性 • 分析语句定义仿真 • 输出控制查看结果 • 收敛性决定成败
工程经验:在深亚微米工艺中,建议优先使用 HSPICE 或 Spectre 进行模拟电路仿真。FastSPICE 工具虽然速度快,但在弱信号、高精度场景下可能损失精度,需要谨慎选择。

3.2 SPICE 网表语法

SPICE 网表是描述电路拓扑结构和仿真条件的文本文件。一个完整的 SPICE 网表包含以下基本要素:

  • 标题行:网表的第一行,作为电路描述注释
  • 注释行:以 * 开头,用于添加说明信息
  • 器件语句:定义元器件类型、连接节点和参数
  • 模型语句:使用 .MODEL 定义器件物理参数
  • 分析语句:指定仿真类型(DC、AC、TRAN 等)
  • 输出语句:控制仿真结果的打印或绘图
  • 结束语句:以 .END 结束网表

下面是一个典型的 CMOS 反相器 SPICE 网表示例:

* CMOS Inverter Netlist
* VDD = 1.8V, L = 0.18um

* Power supply
VDD vdd 0 DC 1.8

* Input stimulus
VIN in 0 PULSE(0 1.8 0 0.1n 0.1n 5n 10n)

* MOSFET devices
M1 out in vdd vdd PMOS W=2u L=0.18u
M2 out in 0 0 NMOS W=1u L=0.18u

* Model definitions
.MODEL NMOS NMOS LEVEL=49 VERSION=3.3
+ TOX=4.0E-9 NCH=2.3549E17
+ U0=439.5 VSAT=1.07E5
+ VTH0=0.42 K1=0.59 K2=0.01

.MODEL PMOS PMOS LEVEL=49 VERSION=3.3
+ TOX=4.0E-9 NCH=4.1589E16
+ U0=185.2 VSAT=8.54E4
+ VTH0=-0.42 K1=0.52 K2=0.02

* Analysis commands
.TRAN 0.1n 20n
.PRINT TRAN V(in) V(out)

.END

器件语句的基本格式为:<器件名> <漏极> <栅极> <源极> <衬底> <模型名> [参数]。下表总结了常用器件语句的节点顺序:

器件类型 语句前缀 节点顺序 示例
MOSFET M D G S B M1 d g s b NMOS W=2u L=0.18u
电阻 R N+ N- R1 1 0 1k
电容 C N+ N- C1 1 0 1p
二极管 D A K D1 1 0 DIODE
独立电压源 V N+ N- VDD 1 0 DC 1.8
独立电流源 I N+ N- I1 1 0 DC 1m
常见错误:MOSFET 的衬底节点(B)不能省略。在深亚微米工艺中,衬底偏置效应(Body Effect)对阈值电压影响显著,必须正确连接衬底节点。

3.3 模型语句(.MODEL)

.MODEL 语句用于定义半导体器件的物理模型参数。其基本语法格式为:

.MODEL <模型名> <模型类型> [层级参数] [模型参数]

在深亚微米 CMOS 工艺中,最常用的 MOSFET 模型包括:

模型层级 LEVEL 值 特点 适用工艺节点
BSIM3v3 49 / 8 物理模型、参数少、收敛性好 0.35μm ~ 0.13μm
BSIM4 54 / 14 支持应力效应、栅极漏电 90nm ~ 28nm
BSIM-BULK 72 统一模型、覆盖所有区域 16nm 及以下

BSIM4 模型参数按功能分组,下表列出了核心参数类别:

参数组 关键参数 物理含义
工艺参数 TOX、NCH、XJ 栅氧厚度、沟道掺杂、结深
阈值电压 VTH0、K1、K2 长沟道阈值、体效应系数
迁移率 U0、UA、UB、UC 低场迁移率、垂直场退化
速度饱和 VSAT、ESAT 饱和速度、临界电场
输出电阻 PCLM、DROUT、PSUB 沟道长度调制、DIBL 效应
寄生参数 RDSW、CJ、CJSW 源漏电阻、结电容

下面是一个完整的 BSIM4 NMOS 模型定义示例:

.MODEL NMOS_18 NMOS LEVEL=54
+ VERSION = 4.7
+ TOX = 4.0E-9          XJ = 1.5E-7
+ NCH = 2.3549E17       VTH0 = 0.42
+ K1 = 0.59             K2 = 0.01
+ K3 = 1.0              K3B = 0.0
+ W0 = 2.5E-6           DVT0 = 2.2
+ DVT1 = 0.53           DVT2 = -0.032
+ U0 = 439.5            UA = -1.4E-9
+ UB = 2.2E-18          UC = -5.6E-11
+ VSAT = 1.07E5         A0 = 1.0
+ AGS = 0.0             B0 = 0.0
+ B1 = 0.0              KETA = -0.047
+ A1 = 0.0              A2 = 0.99
+ RDSW = 150            PRWG = 0.5
+ PRWB = -0.2           WR = 1.0
+ WINT = 0.0            LINT = 1.0E-8
+ DLC = 1.0E-8          DWC = 0.0
+ VOFF = -0.08          NFACTOR = 2.5
+ CIT = 0.0             CDSC = 2.4E-4
+ CDSCD = 0.0           CDSCB = 0.0
+ ETA0 = 0.5            ETAB = -0.07
+ DSUB = 0.1            PCLM = 1.3
+ PDIBL1 = 0.39         PDIBL2 = 0.0
+ DROUT = 0.56          PSCBE1 = 8.14E8
+ PSCBE2 = 5.0E-5       PVAG = 0.0
+ DELTA = 0.01          MOBMOD = 1.0
+ PRT = 0.0             UTE = -1.5
+ KT1 = -0.11           KT1L = 0.0
+ KT2 = 0.022           UA1 = 4.31E-9
+ UB1 = -7.61E-18       UC1 = -5.6E-11
+ AT = 3.3E4            WL = 0.0
+ WLN = 1.0             WW = 0.0
+ WWN = 1.0             WWL = 0.0
+ LL = 0.0              LLN = 1.0
+ LW = 0.0              LWN = 1.0
+ LWL = 0.0             CAPMOD = 2
+ CGDO = 2.0E-10        CGSO = 2.0E-10
+ CGBO = 1.0E-9         CJ = 1.0E-3
+ PB = 0.8              MJ = 0.5
+ CJSW = 5.0E-10        PBSW = 0.8
+ MJSW = 0.33          CF = 0.0
+ PVTH0 = 0.0           PRDSW = 0.0
+ PK2 = 0.0             WKETA = 0.0
+ LKETA = 0.0
参数提取要点:PDK 提供的模型参数通常经过全局优化和统计建模。在实际使用中,不建议手动修改核心物理参数(如 TOX、VTH0),否则会导致仿真结果与工艺实际特性严重偏离。

3.4 子电路(.SUBCKT)定义与调用

子电路是 SPICE 中实现电路模块化和复用的核心机制。通过 .SUBCKT 和 .ENDS 语句,可以将复杂的电路块封装为可重复调用的单元。

子电路定义的基本语法:

.SUBCKT <子电路名> <端口节点列表>
  [内部电路描述]
  [内部模型定义]
.ENDS [子电路名]

子电路调用的基本语法:

X<实例名> <连接节点列表> <子电路名>

下面是一个 CMOS 运算放大器子电路的完整定义与调用示例:

* Subcircuit definition: Two-stage CMOS Op-Amp
.SUBCKT OPAMP VINP VINN VOUT VDD VSS
* Input differential pair
M1 V1 VINP V2 VSS NMOS_18 W=20u L=0.18u M=4
M2 V1 VINN V2 VSS NMOS_18 W=20u L=0.18u M=4
* Tail current source
M3 V2 VBIAS VSS VSS NMOS_18 W=10u L=0.5u M=2
* Active load (current mirror)
M4 V1 V1 VDD VDD PMOS_18 W=10u L=0.18u M=2
M5 VOUT V1 VDD VDD PMOS_18 W=10u L=0.18u M=2
* Second stage
M6 VOUT V1 VDD VDD PMOS_18 W=40u L=0.18u M=4
M7 VOUT VBIAS VSS VSS NMOS_18 W=20u L=0.5u M=2
* Compensation capacitor
CC VOUT V1 2p
* Bias voltage generation (internal)
VBIAS VBIAS 0 DC 0.9
.ENDS OPAMP

* Main circuit: Op-Amp in unity-gain configuration
X1 VIN VOUT VOUT VDD VSS OPAMP
VDD VDD 0 DC 1.8
VSS VSS 0 DC 0
VIN VIN 0 DC 0.9 AC 1
.AC DEC 100 1 100MEG
.PROBE
.END

子电路设计需要遵循以下最佳实践:

  • 端口命名:使用有意义的名称(如 VINP、VINN、VOUT),避免使用数字节点
  • 内部节点:子电路内部的节点名不会与外部冲突,但建议使用有意义的名称便于调试
  • 参数化:使用 .PARAM 语句定义可调参数,提高子电路灵活性
  • 层次化:子电路内部可以嵌套调用其他子电路,形成层次化设计

下图展示了子电路在 PDK 中的层次化调用关系:

PDK 子电路层次化调用结构 顶层电路 (TOP) OPAMP BIAS_GEN CMFB DIFF_PAIR ACTIVE_LOAD BIAS_CORE SENSOR ERROR_AMP M1~M4 M5~M8 R1,R2 C1,C2 M9~M12 X 前缀调用子电路 → 层次化展开 → 最终展开为基本器件(MOSFET、R、C)
PDK 集成技巧:在 PDK 中,标准单元库通常以子电路形式提供。建议将子电路文件组织为独立的 .lib 文件,通过 .LIB 语句统一调用,便于版本管理和工艺切换。

3.5 模型文件组织与调用

在实际 PDK 中,模型文件通常按照以下结构组织:

* PDK 模型文件组织结构
* 文件: pdk_models.lib

* 1. 工艺角定义
.LIB TT
* 典型工艺角模型
.INCLUDE "./models/nmos_tt.inc"
.INCLUDE "./models/pmos_tt.inc"
.INCLUDE "./models/res_tt.inc"
.INCLUDE "./models/cap_tt.inc"
.ENDL TT

.LIB FF
* 快工艺角模型
.INCLUDE "./models/nmos_ff.inc"
.INCLUDE "./models/pmos_ff.inc"
.INCLUDE "./models/res_ff.inc"
.INCLUDE "./models/cap_ff.inc"
.ENDL FF

.LIB SS
* 慢工艺角模型
.INCLUDE "./models/nmos_ss.inc"
.INCLUDE "./models/pmos_ss.inc"
.INCLUDE "./models/res_ss.inc"
.INCLUDE "./models/cap_ss.inc"
.ENDL SS

* 2. 子电路库
.LIB standard_cells
.SUBCKT INV A Z VDD VSS
M1 Z A VSS VSS NMOS_18 W=0.5u L=0.18u
M2 Z A VDD VDD PMOS_18 W=1.0u L=0.18u
.ENDS INV

.SUBCKT NAND2 A B Z VDD VSS
M1 Z A VSS VSS NMOS_18 W=0.5u L=0.18u
M2 Z B VSS VSS NMOS_18 W=0.5u L=0.18u
M3 Z A V1 VDD PMOS_18 W=1.0u L=0.18u
M4 V1 B VDD VDD PMOS_18 W=1.0u L=0.18u
.ENDS NAND2
.ENDL standard_cells

在仿真网表中通过 .LIB 语句调用:

* 调用 PDK 模型库
.LIB "./pdk_models.lib" TT
.LIB "./pdk_models.lib" standard_cells

* 使用标准单元
X1 A B Z VDD VSS NAND2
X2 Z Z_OUT VDD VSS INV
路径管理:在项目开发中,建议使用相对路径引用模型文件,避免使用路径。同时,在版本控制系统中,模型文件应作为二进制文件管理,防止文本转换导致格式损坏。

3.6 仿真分析与输出控制

SPICE 提供多种分析类型,下表总结了最常用的分析语句:

分析类型 语句格式 用途
DC 扫描