4. SPICE建模基础:SPICE仿真器工作原理、网表语法、模型语句(.MODEL)、子电路(.SUBCKT)定义
SPICE(Simulation Program with Integrated Circuit Emphasis)是集成电路设计中最核心的仿真工具。对于SOI器件的建模,理解SPICE仿真器的工作原理、掌握网表语法、熟练使用.MODEL语句和.SUBCKT定义,是构建精确小信号等效电路的基础。本章将系统讲解这些核心概念,为后续的工程案例调试打下坚实基础。
4.1 SPICE仿真器工作原理
SPICE仿真器的核心是一个非线性直流与瞬态电路求解器。其工作流程可以概括为“读入-解析-迭代-输出”四个阶段。理解这一流程有助于诊断仿真不收敛或结果异常的问题。
核心工作流程:
- 网表解析:读取文本网表文件,识别元件、模型、连接关系与控制语句。
- 拓扑构建:建立节点导纳矩阵(G矩阵)与节点电流向量(I向量),形成电路方程 G·V = I。
- 非线性迭代:对于MOSFET等非线性器件,采用Newton-Raphson算法迭代求解,直到节点电压收敛。
- 瞬态积分:在瞬态分析(.TRAN)中,使用数值积分(如梯形法、Gear法)将微分方程转化为代数方程,在每个时间步重复步骤3。
- 结果输出:将节点电压、支路电流等数据写入输出文件或进行后处理。
4.2 网表语法基础
SPICE网表是一种基于文本的电路描述语言。一个完整的网表由标题行、注释、元件语句、模型语句、分析控制语句和结束语句组成。以下是一个简单的SOI MOSFET直流分析网表示例:
SOI NMOS DC Analysis Example
* 标题行:必须以非数字、非注释符开头
* 注释行:以 * 开头
* 电源与偏置
VDS 1 0 DC 1.0V
VGS 2 0 DC 0.8V
VSUB 3 0 DC 0V
* SOI MOSFET 实例化(调用子电路)
X1 1 2 0 3 SOI_NMOS W=1u L=0.18u
* 分析控制
.DC VDS 0 1.2 0.01
.PRINT DC I(VDS)
* 模型与子电路包含
.LIB './soi_model.lib' SOI_NMOS
.END
网表编写规范:
- 第一行必须是标题行,不能以
*或数字开头。 - 元件名称的第一个字母表示元件类型(如 R=电阻,C=电容,M=MOSFET,X=子电路调用)。
- 节点编号必须为整数,0 节点固定为地(GND)。
- 语句不区分大小写,但建议保持一致性以提高可读性。
4.3 模型语句(.MODEL)
.MODEL 语句用于定义一组工艺参数,这些参数被一个或多个同类型器件共享。对于SOI MOSFET,通常使用BSIM-SOI模型(如BSIM3SOI或BSIM4SOI)。
语法格式:
.MODEL <model_name> <model_type> (<param1>=<value1> <param2>=<value2> ...)
参数说明:
| 参数 | 说明 | 示例值 |
|---|---|---|
model_name |
模型名称,在元件语句中引用 | SOI_NMOS |
model_type |
模型类型关键字 | NMOS, PMOS, NPN |
VTO |
零偏阈值电压 | 0.35 |
U0 |
低场迁移率 | 450 |
TOX |
栅氧化层厚度 | 2.5e-9 |
TSOI |
SOI体硅层厚度(SOI特有) | 1e-7 |
BSIM-SOI模型示例:
.MODEL SOI_NMOS NMOS (
+ LEVEL = 57 * BSIM3SOI 模型级别
+ VTO = 0.35 * 阈值电压
+ U0 = 450 * 迁移率
+ TOX = 2.5E-9 * 栅氧厚度
+ TSOI = 1.0E-7 * SOI层厚度
+ NCH = 2.0E17 * 沟道掺杂浓度
+ LINT = 0.0 * 沟道长度偏移
+ WINT = 0.0 * 沟道宽度偏移
+ VOFF = -0.1 * 偏移电压
+ NFACTOR= 1.0 * 亚阈值因子
+ CGDO = 2.0E-10 * 栅漏交叠电容
+ CGSO = 2.0E-10 * 栅源交叠电容
+ CGBO = 1.0E-12 * 栅体交叠电容
+ XJ = 1.0E-7 * 结深
+ VSAT = 1.2E5 * 饱和速度
+ A0 = 1.0 * 沟道长度调制系数
+ K1 = 0.5 * 体效应系数
+ K2 = 0.1 * 体效应系数2
)
SOI建模特别提示:BSIM-SOI模型包含大量与浮体效应、自热效应相关的参数。在工程调试中,
TSOI(体硅厚度)和RBODY(体电阻)对浮体效应模拟至关重要,务必根据工艺实际值进行校准。
4.4 子电路定义(.SUBCKT)
.SUBCKT 允许用户将一组元件封装成一个可复用的模块,非常适合构建SOI器件的小信号等效电路模型。子电路可以包含电阻、电容、受控源,甚至嵌套其他子电路。
语法格式:
.SUBCKT <subckt_name> <node1> <node2> ... <nodeN>
* 内部元件语句
* 内部 .MODEL 语句(可选)
.ENDS <subckt_name>
SOI小信号等效电路子电路示例:
* SOI NMOS 小信号等效电路子电路
.SUBCKT SOI_SS_NMOS D G S B W=1u L=0.18u
* 外部节点:D(漏), G(栅), S(源), B(体)
* 参数:W(沟道宽度), L(沟道长度)
* 本征MOSFET(调用BSIM模型)
M1 D G S B SOI_NMOS W={W} L={L}
* 浮体效应网络:体节点B到内部体节点Bi
RBODY B Bi 1K
CBODY Bi 0 1E-15
* 自热效应网络(简化)
RTH Bi TH 1K
CTH TH 0 1E-12
* 栅漏交叠电容
CGD D G 1E-15
* 栅源交叠电容
CGS S G 1E-15
* 漏体结电容
CBD D B 2E-15
* 源体结电容
CBS S B 2E-15
.ENDS SOI_SS_NMOS
4.5 子电路调用与参数传递
在顶层网表中,使用 X 开头的元件名调用子电路,并通过节点顺序和参数列表传递信息。
调用语法:
X<name> <node1> <node2> ... <nodeN> <subckt_name> <param1>=<value1> ...
示例:
* 调用SOI小信号子电路
X1 1 2 0 3 SOI_SS_NMOS W=10u L=0.18u
* 节点映射:D=1, G=2, S=0(GND), B=3
* 参数传递:W=10u, L=0.18u
参数传递规则:
- 子电路内部使用
{参数名}引用传递进来的参数。 - 参数可以设置默认值,如
.SUBCKT SOI_SS_NMOS D G S B W=1u L=0.18u。 - 支持表达式计算,如
W={W*2}。
4.6 模型与子电路的工程应用对比
| 特性 | .MODEL 模型语句 | .SUBCKT 子电路 |
|---|---|---|
| 抽象层级 | 工艺参数级(物理模型) | 电路级(结构模型) |
| 复用方式 | 被元件语句直接引用 | 被 X 元件调用 |
| 内部结构 | 不可见(黑盒) | 可见(白盒,可包含多个元件) |
| 参数类型 | 工艺参数(VTO, TOX等) | 几何参数(W, L)或电路参数 |
| 典型用途 | 定义BSIM、BJT等标准模型 | 构建小信号等效电路、宏模型 |
| SOI建模优势 | 提供精确的物理效应描述 | 灵活添加浮体、自热等外围网络 |
4.7 工程调试要点
常见网表错误与排查:
- 节点悬空:所有节点必须至少连接两个元件,否则仿真器会报“floating node”错误。
- 模型未定义:确保
.MODEL或.LIB语句在调用之前被解析。 - 子电路端口不匹配:调用时的节点顺序必须与
.SUBCKT定义完全一致。 - 参数未传递:子电路内部使用
{W}而非W,否则参数不会被替换。 - 收敛失败:SOI浮体效应可能导致直流不收敛,尝试增加
.OPTIONS ITL1=500或GMIN=1E-12。
掌握SPICE网表语法、.MODEL 与 .SUBCKT 的定义与调用,是进行SOI器件SPICE建模的必备技能。在下一阶段的工程案例中,我们将基于这些基础,构建完整的小信号等效电路并进行参数提取与验证。