4、SPICE模型深入:SPICE网表结构、MOS管模型(BSIM3/4)、无源器件模型、子电路调用

好,咱们今天聊点硬核的。SPICE模型,说白了就是电路仿真里的“演员”。你搭了个电路,给它什么模型,它就演什么戏。模型不准,仿真结果就是瞎扯。我早年吃过这个亏,一个LDO的负载瞬态仿真怎么调都不对,折腾了两天,最后发现是MOS管的BSIM3模型参数里,有一个沟道长度调制系数设成了默认值。嗯,从那以后,我对模型参数的检查就格外上心。

4.1 SPICE网表结构:电路的语言

SPICE网表,就是描述电路的“语法”。你想想看,你要告诉仿真器:这里有个电阻,阻值1k;那里有个MOS管,宽长比是10/0.18。网表就是干这个的。

一个基本的网表行,格式大概是这样的:

<元件名> <正节点> <负节点> <模型名> <参数>

举个例子:

R1 1 0 1k
M1 2 3 0 0 NMOS W=10u L=0.18u

第一行:R1是电阻名字,接在节点1和地(0)之间,阻值1kΩ。
第二行:M1是NMOS管,漏极接节点2,栅极接节点3,源极和衬底都接地。模型名叫NMOS,宽10微米,长0.18微米。

个人习惯: 我写网表时,喜欢把节点名起得有意义,比如VDD、VOUT、FB。别用一堆数字,不然调试时自己都看不懂。你想想看,三个月后回头再看,'N12'和'VOUT'哪个一目了然?

4.2 MOS管模型:BSIM3与BSIM4

MOS管模型是SPICE仿真的灵魂。早期用Level 1、Level 2模型,简单但不准。现在主流是BSIM3和BSIM4。

BSIM3(Berkeley Short-channel IGFET Model 3),是0.35微米到0.13微米工艺的主力。它考虑了短沟道效应、迁移率退化、速度饱和等。我在一个0.18微米的项目中用过,仿真结果和硅片实测的误差在5%以内,相当靠谱。

BSIM4 是BSIM3的升级版,主要针对90纳米及以下的工艺。它加入了更多物理效应,比如:

  • 栅极漏电流:沟道变薄后,栅氧隧穿电流不可忽略。
  • 应力效应:STI(浅槽隔离)对载流子迁移率的影响。
  • 噪声模型:更精确的1/f噪声和热噪声。

BSIM4的模型参数多到吓人,光一个MOS管就有上百个参数。但别怕,晶圆厂提供的PDK(工艺设计套件)里都配好了,你直接调用就行。

避坑指南: 我曾经在仿真一个高速比较器时,发现延迟时间比预期大了30%。查了半天,原来是BSIM4模型里的一个参数RDSW(单位宽度源漏电阻)设成了0。晶圆厂给的模型库版本不对,换了一个版本就好了。所以,拿到PDK后,先跑个简单的反相器链,验证一下模型的基本行为。

4.3 无源器件模型:电阻、电容、电感

无源器件看着简单,但高频下就复杂了。你以为是个电阻,其实它还有寄生电感和电容。

电阻模型:

  • 理想电阻:直接写阻值,比如 R=1k
  • 实际电阻:用子电路表示,包含寄生串联电感(Lser)和并联电容(Cpar)。
.SUBCKT R_POLY 1 2
R1 1 2 1k
Lser 1 3 1nH
Cpar 2 0 0.1pF
.ENDS R_POLY

电容模型:

  • 理想电容:C=10p
  • 实际电容:考虑ESR(等效串联电阻)和ESL(等效串联电感)。
.SUBCKT C_MLCC 1 2
C1 1 2 10u
Rser 1 3 10m
Lser 3 2 1nH
.ENDS C_MLCC

电感模型:

  • 理想电感:L=10u
  • 实际电感:包含DCR(直流电阻)和寄生电容。
注意: 在DC-DC转换器仿真中,电感的DCR直接影响效率。我见过有人用理想电感仿真,效率99%,实际做出来只有85%。所以,无源器件的寄生参数一定要加,尤其是高频或大电流场景。

4.4 子电路调用:模块化设计

子电路(Subcircuit)是SPICE里的“函数”。你把一个功能模块封装起来,然后到处调用。比如运放、比较器、带隙基准,都可以做成子电路。

定义子电路用 .SUBCKT.ENDS

.SUBCKT OPAMP VINP VINN VOUT VDD VSS
M1 VOUT VINP VTAIL VSS NMOS W=20u L=0.5u
M2 VTAIL VINN VTAIL VSS NMOS W=20u L=0.5u
... (内部电路)
.ENDS OPAMP

调用子电路用 X 开头:

X1 VINP VINN VOUT VDD VSS OPAMP

这里 X1 是实例名,后面跟着节点连接顺序,最后是子电路名 OPAMP

我的建议: 子电路命名要有层次。比如 OPAMP_LOWPOWERCOMP_FAST。别用 OP1OP2,不然项目大了根本分不清。另外,子电路内部节点名要加下划线或前缀,避免和顶层网表冲突。比如内部节点叫 _VTAIL,而不是 VTAIL

4.5 实战:一个完整的SPICE网表

咱们来个完整的例子:一个共源极放大器,用BSIM3模型,负载是理想电阻。

* 共源极放大器网表
.OPTIONS POST=2
.TEMP 25

* 电源和输入
VDD VDD 0 1.8
VIN VIN 0 0.9 AC 1

* MOS管
M1 VOUT VIN 0 0 NMOS W=10u L=0.18u

* 负载电阻
RL VOUT VDD 10k

* 模型定义
.MODEL NMOS NMOS LEVEL=49
+ VTH0=0.5 U0=400 TOX=4e-9
+ LINT=0.02u WINT=0.05u
+ ... (其他BSIM3参数)

* 分析
.AC DEC 100 1 1e9
.PROBE
.END

这个网表里,LEVEL=49 就是BSIM3模型。你跑一下AC分析,就能看到增益和带宽。

好了,这一章的内容就到这儿。SPICE模型这东西,多练多用才能熟。下次你遇到仿真不收敛,先别急着改电路,回头看看模型参数对不对。很多时候,问题就出在模型上。