第二讲:基本器件与模型语句——从电阻到MOS管,手把手教你搭对模型
各位同学,欢迎来到第二讲。上一讲我们聊了SPICE的基本语法和网表结构,今天咱们来点实在的——把电路里最常用的那几个元器件,一个一个说清楚。
电阻、电容、电感、独立源、受控源,还有MOS管。这些家伙你天天见,但真到了仿真收敛出问题的时候,往往就是它们没写对。我这些年调试过的仿真,少说有一半的收敛失败,根源都在器件模型调用上。
好,咱们开始。
2.1 电阻、电容、电感——最基础,也最容易翻车
先看电阻。SPICE里电阻的语法很简单:
R<name> <+节点> <-节点> <阻值>
举个例子:
R1 1 0 1k
这就表示一个1kΩ的电阻,接在节点1和地之间。嗯,这里要注意——节点编号别搞反了,虽然电阻是双向器件,但后续你挂探针、看波形的时候,电流方向默认是从正节点流向负节点。
电容和电感也类似:
C<name> <+节点> <-节点> <容值>
L<name> <+节点> <-节点> <感值>
比如:
C1 1 0 10p
L1 2 3 100n
我个人习惯,电容值用pF、nF,电感用nH、uH,这样数值比较干净,不容易看错。
避坑指南:我曾经在一个LDO项目里,电容值写成了10m(毫法),仿真直接崩了。SPICE里默认单位是F、H、Ω,m表示毫,不是兆。兆要用MEG。这个坑我踩过,你们别踩。
另外,电阻、电容、电感都支持模型调用。比如你想模拟一个实际电容的ESR和ESL:
.MODEL CAP_MOD C
+ C=10u
+ ESR=0.1
+ ESL=1n
然后调用:
C1 1 0 CAP_MOD
这样仿真出来的结果,才更接近真实情况。
2.2 独立源——V源和I源,别搞混了
独立源分两种:电压源(V)和电流源(I)。语法如下:
V<name> <+节点> <-节点> <值>
I<name> <+节点> <-节点> <值>
比如:
VDD 1 0 3.3
IREF 2 0 10u
这里有个关键点——电压源的正节点是电流流入端,电流源的正节点是电流流出端。你想想看,如果搞反了,整个电路的偏置就全错了。
独立源还支持多种波形,比如脉冲、正弦、分段线性等。我常用的PULSE:
VCLK 3 0 PULSE(0 3.3 0 1n 1n 50n 100n)
参数依次是:初始值、峰值、延迟时间、上升时间、下降时间、脉宽、周期。这个顺序我背了十年,还是得查手册确认——别笑,老工程师也这样。
小技巧:调试时,我习惯先用DC源把静态工作点调好,再换成瞬态源。这样收敛问题能隔离一半。
2.3 受控源——模拟IC的灵魂
受控源有四种:VCVS(压控压源)、VCCS(压控流源)、CCVS(流控压源)、CCCS(流控流源)。
语法格式统一为:
E<name> <输出+> <输出-> <控制+> <控制-> <增益> ; VCVS
G<name> <输出+> <输出-> <控制+> <控制-> <跨导> ; VCCS
H<name> <输出+> <输出-> <控制源名> <增益> ; CCVS
F<name> <输出+> <输出-> <控制源名> <增益> ; CCCS
举个例子,一个增益为10的VCVS:
EAMP 3 0 1 2 10
这就表示V(3,0) = 10 * V(1,2)。
VCCS更常用,比如用Gm单元模拟OTA:
GOTA 4 0 1 2 1m
输出电流I(4,0) = 1mS * V(1,2)。
流控源需要先定义一个独立电压源作为电流传感器:
VSENSE 5 6 DC 0
F1 7 0 VSENSE 100
这里VSENSE是0V电压源,只用来测电流。F1输出电流是VSENSE电流的100倍。
重点:流控源的控制源必须是独立电压源(Vxxx),不能直接写节点名。这个我见过太多新手写错了,仿真报错还不知道为什么。
2.4 MOS管——NMOS与PMOS的模型调用
MOS管是模拟IC的核心器件。SPICE里基本语法:
M<name> <漏极> <栅极> <源极> <衬底> <模型名> [W=<宽> L=<长>]
比如:
M1 2 1 0 0 NMOS_WML W=10u L=0.18u
这里漏极接2,栅极接1,源极和衬底都接地,模型名叫NMOS_WML,宽10μm,长0.18μm。
PMOS类似,只是衬底通常接最高电位:
M2 4 3 5 5 PMOS_WML W=20u L=0.18u
源极和衬底都接节点5(通常是VDD)。
模型定义一般在网表开头或单独的模型文件里:
.MODEL NMOS_WML NMOS
+ VTO=0.7
+ KP=200u
+ GAMMA=0.5
+ LAMBDA=0.01
+ ...
这里VTO是阈值电压,KP是跨导系数,GAMMA是体效应系数,LAMBDA是沟道长度调制系数。不同工艺节点,这些参数差异很大。
注意:MOS管的衬底节点不能悬空。我曾经在仿真一个差分对时,忘了接衬底,结果共模抑制比仿真结果完全不对,查了两天才发现是衬底浮空了。
另外,MOS管的宽长比(W/L)直接影响电流能力。我建议在原理图阶段就把W/L算好,别指望仿真时随便填——那样收敛会很痛苦。
2.5 知识结构总览
下面这张图,把本章的核心器件和它们的关系画出来了。你可以把它当作一个快速参考。
2.6 模型调用对比表
为了方便你快速查阅,我把这几种器件的模型调用方式整理成了表格:
| 器件类型 | SPICE关键字 | 基本语法示例 | 模型调用方式 | 常见坑点 |
|---|---|---|---|---|
| 电阻 | R | R1 1 0 1k | .MODEL RMOD R ... | 单位混淆(m vs MEG) |
| 电容 | C | C1 1 0 10p | .MODEL CMOD C ... | 初始条件未设置 |
| 电感 | L | L1 2 3 100n | .MODEL LMOD L ... | 直流短路未处理 |
| 电压源 | V | VDD 1 0 3.3 | 不支持模型(直接赋值) | 正负节点接反 |
| 电流源 | I | IREF 2 0 10u | 不支持模型(直接赋值) | 电流方向搞错 |
| VCVS | E | E1 3 0 1 2 10 | 不支持模型 | 增益过大导致收敛失败 |
| VCCS | G | G1 4 0 1 2 1m | 不支持模型 | 跨导单位写错 |
| CCVS | H | H1 5 0 VSENSE 100 | 不支持模型 | 控制源必须是Vxxx |
| CCCS | F | F1 6 0 VSENSE 100 | 不支持模型 | 控制源必须是Vxxx |
| NMOS | M | M1 2 1 0 0 NMOD W=10u L=0.18u | .MODEL NMOD NMOS ... | 衬底悬空 |
| PMOS | M | M2 4 3 5 5 PMOD W=20u L=0.18u | .MODEL PMOD PMOS ... | 衬底未接最高电位 |
我的习惯:每次新建仿真,我都会先写一个最简单的测试网表,只放一个电阻和一个电压源,跑DC看看结果对不对。这叫「冒烟测试」。通过了再往上加东西。别一上来就搭几百个器件的电路,收敛问题会让你怀疑人生。