3. 模型文件通用结构:文件头、模型定义、子电路、参数声明、注释规范

SPICE 模型文件的结构化程度直接决定了 PDK 兼容性测试的效率与准确性。一个标准化的模型文件应遵循“文件头 → 全局参数 → 子电路/模型定义 → 注释”的层次化布局。本章将逐一拆解各组成部分的格式规范与常见陷阱。

核心原则:模型文件应具备“自描述性”——任何具备 SPICE 基础的工程师无需额外文档即可理解模型用途、适用范围与调用方式。

3.1 文件头(File Header)—— 模型的“身份证”

文件头位于模型文件最顶部,通常包含工艺信息、版本号、创建日期、版权声明以及关键使用约束。标准化文件头应包含以下字段:

字段 必选/可选 内容示例 说明
工艺名称 必选 TSMC 28nm HPC+ 明确标识工艺节点与变种
模型版本 必选 v1.2.3 遵循语义化版本号(主版本.次版本.修订)
创建/修订日期 必选 2025-03-15 ISO 8601 格式
适用范围 必选 TT / FF / SS corner 列出支持的工艺角
版权/保密声明 可选 Confidential – XYZ Corp. 法律合规要求
仿真器兼容性 推荐 HSPICE / Spectre / ngspice 避免用户误用不兼容仿真器

标准文件头示例(使用注释块):

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


* PDK:          TSMC_28HPC+


* Model File:   nmos_rvt.scs


* Version:      1.2.3


* Date:         2025-03-15


* Corner:       TT (Typical-Typical)


* Simulator:    HSPICE P-2019.06 / Spectre 20.1


* Description:  NMOS RVT (Regular Vt) SPICE model for digital core


* Copyright:    (c) 2025 XYZ Semiconductor, All Rights Reserved.


*----------------------------------------------------------------------------
兼容性提示:部分仿真器(如 ngspice)对注释行首字符有严格限制。建议统一使用 * 作为注释行起始符,避免使用 $ 或 // 等非标准符号。
文件头标准结构层次 文件头 (Header) 工艺标识与版本 TSMC 28HPC+ · v1.2.3 日期与版权 2025-03-15 · 版权声明 适用范围与角 TT / FF / SS · 仿真器 文件头缺失或信息不全 → 模型溯源困难,兼容性测试无法自动匹配工艺角

3.2 模型定义(Model Definition)—— 核心器件行为

模型定义是 SPICE 文件的核心,使用 .MODEL 语句描述单个器件的电学行为。标准化要求模型定义必须包含:模型名称、类型关键字、层级参数列表。

标准语法格式:

.MODEL <model_name> <type> [<param_name>=<value> ...]

典型示例(NMOS 器件):

.MODEL nmos_rvt_tt NMOS (


+ VERSION = 1.2.3


+ LEVEL  = 54


+ TNOM   = 25.0


+ TOX    = 1.85E-9


+ VTH0   = 0.35


+ U0     = 4.5E-2


+ K1     = 0.45


+ K2     = 0.08


+ LINT   = 1.2E-8


+ WINT   = 5.0E-9


+ RSH    = 7.5


+ CJ     = 1.2E-3


+ CJSW   = 4.5E-10


+ )
常见兼容性问题:
  • 模型名称冲突:不同工艺角使用相同模型名(如 nmos),导致仿真器加载顺序错误。
  • LEVEL 值不匹配:BSIM4 模型在 HSPICE 中为 LEVEL=54,在 Spectre 中可能需指定 model=bsim4。
  • 参数单位歧义:未显式标注单位(如 TOX=1.85e-9 默认米,但部分旧工艺使用埃)。
模型定义参数分类(BSIM4 示例) .MODEL 定义 工艺参数 TOX, VTH0, U0 几何参数 LINT, WINT, RSH 寄生参数 CJ, CJSW, PB 标准化要求:每个 .MODEL 必须包含 VERSION 参数, 且工艺参数、几何参数、寄生参数分组排列,便于自动化脚本解析

3.3 子电路(Subcircuit)—— 复杂器件的封装

子电路使用 .SUBCKT / .ENDS 结构封装多器件组合(如 RF 器件、ESD 结构、I/O 缓冲器)。标准化子电路必须明确定义端口顺序、内部节点命名规则以及寄生参数。

标准语法格式:

.SUBCKT <subckt_name> <port1> <port2> ... [PARAMS: <param_list>]


  [内部器件与模型实例化]


.ENDS <subckt_name>

典型示例(RF NMOS 带寄生子电路):

.SUBCKT rf_nmos_tt D G S B W=1e-6 L=30e-9 NF=1


* 端口顺序:漏极 栅极 源极 衬底


M1 D G S B nmos_rvt_tt W='W/NF' L=L M=NF


* 寄生电阻


RD D D_int 10


RS S S_int 5


* 寄生电容


CGS G S_int 1e-15


CGD G D_int 1e-15


.ENDS rf_nmos_tt
命名规范:子电路名称建议采用 <器件类型>_<工艺角>_<变种> 格式(如 rf_nmos_tt),避免使用纯数字或特殊字符开头。内部节点建议以 _int 或 _x 后缀标识,防止与顶层节点冲突。

3.4 参数声明(Parameter Declaration)—— 灵活性与可配置性

参数声明允许用户在调用模型或子电路时动态调整关键参数,是 PDK 兼容性测试中最重要的灵活性来源。标准化参数声明应遵循以下规则:

  • 默认值必须合理:参数声明必须提供默认值,且默认值对应典型工艺角(TT)。
  • 参数类型显式化:使用 PARAMS: 关键字声明参数列表,避免隐式参数传递。
  • 单位与缩放因子:参数值应使用 SI 单位制,必要时附加缩放因子(如 W=1e-6 表示 1μm)。
  • 参数范围约束:在注释中标注参数的有效范围,防止用户设置超出模型拟合区间的值。

参数声明示例:

.SUBCKT nmos_var D G S B PARAMS:


+ W    = 1e-6   * 沟道宽度 (m),范围: 0.1e-6 ~ 10e-6


+ L    = 30e-9  * 沟道长度 (m),范围: 20e-9 ~ 100e-9


+ NF   = 1      * 叉指数,范围: 1 ~ 64


+ M    = 1      * 并联倍数,范围: 1 ~ 100


+ TEMP = 25.0   * 工作温度 (°C)


* 内部实例化


M1 D G S B nmos_rvt_tt W='W/NF' L=L M=NF*M


.ENDS nmos_var
参数名 类型 默认值 典型范围 单位
W 实数 1e-6 0.1e-6 ~ 10e-6 米 (m)
L 实数 30e-9 20e-9 ~ 100e-9 米 (m)
NF 整数 1 1 ~ 64 无
TEMP 实数 25.0 -40 ~ 150 °C
参数声明与传递流程 PARAMS: 声明 默认值赋值 实例化替换 兼容性测试要点:检查参数默认值是否与工艺角 TT 一致, 以及参数范围注释是否与实际模型拟合区间匹配

3.5 注释规范(Comment Convention)—— 可读性与可维护性

注释是模型文件中最容易被忽视但最重要的部分。标准化注释规范确保模型文件在团队协作、版本迁移和 PDK 兼容性测试中保持可读性。

注释规范核心要求:

  • 注释行首符统一:使用 * 作为行注释起始符(兼容所有 SPICE 变种),避免使用 $(仅 HSPICE 支持)或 //(仅 Spectre 支持)。
  • 块注释与行内注释结合:文件头使用块注释,参数行使用行内注释说明单位与范围。
  • 变更历史记录:在文件头或模型定义前记录每次修改的日期、作者与变更内容。
  • 废弃模型标记:使用 * OBSOLETE 或 * DEPRECATED 标记不再推荐使用的模型。

注释规范示例:

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


* 变更历史


* 2025-03-15  v1.2.3  ZhangSan  - 修正 VTH0 温度系数


* 2025-01-10  v1.2.2  LiSi     - 添加 FF/SS 工艺角


* 2024-11-01  v1.2.1  WangWu   - 初始版本


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





* OBSOLETE: 旧版模型,请使用 nmos_rvt_tt 替代


* .MODEL nmos_old NMOS ( ... )
兼容性测试陷阱:部分自动化测试脚本会解析注释中的 OBSOLETE 或 DEPRECATED 关键字来跳过废弃模型。如果注释格式不统一(如使用 // OBSOLETE 而非 * OBSOLETE),脚本可能无法正确识别,导致测试失败。
注释规范分类与作用 注释规范 统一以 * 作为起始符 文件头注释 工艺 / 版本 / 版权 块注释置于文件顶部 * PDK: TSMC_28HPC+ 行内注释 参数单位 / 有效范围 追加于参数行尾 TOX=1.85E-9 * (m) 变更历史 日期 / 作者 / 内容 逐条记录每次修订 * 2025-03-15 v1.2.3 废弃标记 OBSOLETE / DEPRECATED 测试脚本据此跳过 * OBSOLETE: nmos_old 标准化注释是 PDK 兼容性测试自动化解析的基础 统一使用 * 作为注释起始符(兼容 HSPICE / Spectre / ngspice),避免跨仿真器兼容性问题

3.6 通用结构完整性检查清单

在 PDK 兼容性测试中,可使用以下清单快速验证模型文件的结构完整性:

检查项 标准要求 检查方法
文件头完整性 包含工艺、版本、日期、角 grep 扫描前 20 行
模型名称唯一性 同一文件内无重复 .MODEL 名 awk 统计 .MODEL 行
子电路端口匹配 .SUBCKT 与 .ENDS 名称一致 脚本校验配对
参数默认值合理性 默认值对应 TT 工艺角 与 PDK 文档交叉验证
注释起始符统一 全部使用 * grep -n '^[^ *]' 检查异常行
废弃模型标记 使用 * OBSOLETE 前缀 grep -i obsolete
最佳实践:建议在 PDK 发布流程中集成自动化结构检查脚本,在模型文件提交时自动执行上述清单检查,从源头杜绝格式不一致问题。