3. SPICE网表基础:网表基本结构、元件定义与节点命名
各位同学,今天我们来聊聊SPICE网表。这东西说白了就是电路仿真界的“通用语言”。你设计再牛的电路,最终都得翻译成网表,仿真器才能读懂。我刚开始学的时候也觉得这玩意儿枯燥,不就是列清单嘛。但后来发现,网表写得好不好,直接决定了仿真能不能跑通、调试顺不顺手。
3.1 网表的基本结构——一张电路“购物清单”
一个完整的SPICE网表,其实就像你去超市买东西列的单子。你得告诉收银员(仿真器):买了什么元件(电阻、电容、MOS管),这些元件长什么样(参数),它们之间怎么连接的(节点编号)。
网表文件通常以 .cir 或 .sp 结尾。它的骨架是这样的:
标题行(必须,但仿真器会忽略)
电路描述(元件定义、模型定义、分析语句)
.END(结束语句,可选但建议加)
嗯,这里有个坑。标题行虽然会被忽略,但我建议你写清楚项目名和版本号。有一次我调试一个老项目,打开网表一看标题行是空的,翻了半天才知道这是哪个版本的电路,浪费了不少时间。
3.2 元件定义——电阻、电容、电感
无源元件是网表里最基础的。它们的格式非常统一:
R<名字> <正节点> <负节点> <阻值>
C<名字> <正节点> <负节点> <容值>
L<名字> <正节点> <负节点> <感值>
举个例子:
R1 1 0 10k ; 10kΩ电阻,接在节点1和地之间
C_load 3 0 1pF ; 1pF负载电容
L_choke 2 4 10uH ; 10μH扼流电感
你想想看,为什么电阻名字是R开头?因为SPICE里元件类型就是靠第一个字母区分的。R是电阻,C是电容,L是电感。这个规则贯穿始终,千万别写错。我见过有人把电阻写成“RES1”,仿真器直接报错——它不认识“RES”这个前缀。
| 元件类型 | 前缀 | 示例 | 说明 |
|---|---|---|---|
| 电阻 | R | R1 1 0 1k | 正负节点无极性 |
| 电容 | C | C1 2 0 10p | 注意极性电容的方向 |
| 电感 | L | L1 3 4 100n | 初始电流可设置 |
3.3 有源器件——MOS管与BJT
有源器件比无源元件复杂一些,因为它们需要模型来定义物理特性。我们先看MOS管:
M<名字> <漏极> <栅极> <源极> <衬底> <模型名> [模型参数]
实际例子:
M1 3 2 0 0 NMOS_WIDE L=0.18u W=10u
M2 4 1 5 5 PMOS_SWITCH L=0.35u W=20u M=2
这里要注意:MOS管的四个端口顺序是固定的——漏、栅、源、衬底。我刚开始做设计时总记混,后来自己编了个口诀:“大(Drain)哥(Gate)来(Source)找(Bulk)我”。虽然土了点,但再也没错过。
BJT的格式类似:
Q<名字> <集电极> <基极> <发射极> [衬底] <模型名> [面积因子]
Q1 3 2 0 NPN_5V AREA=2
Q2 4 1 5 PNP_10V
BJT的衬底是可选的,不写的话默认接地。但如果你做BiCMOS工艺,衬底连接一定要写对,否则衬底漏电流会让你怀疑人生。
3.4 节点命名规则——别让节点编号坑了你
节点是网表的“神经”,连接错了整个电路就废了。SPICE的节点命名有几个硬规矩:
- 节点0(GND):全局唯一的地节点,必须存在。
- 正整数:如1、2、3,最常用。
- 字符串:如VDD、VOUT、CLK,可读性好。
- 不能以数字开头:比如“1VDD”是非法节点名。
我个人强烈建议:关键节点用名字,内部节点用数字。比如电源叫VDD,输出叫VOUT,但两个电阻之间的连接点用10、11这样的数字。为什么?因为调试时你一眼就能看出哪个是重要节点。
3.5 分析语句——.DC、.AC、.TRAN
网表写完了,怎么让仿真器干活?靠分析语句。这三种是最常用的:
.DC —— 直流扫描分析
用来观察电路在直流条件下的行为,比如传输曲线、阈值电压。
.DC VIN 0 5 0.01 ; 扫描VIN从0V到5V,步长10mV
.DC VDD 2.5 3.3 0.05 SWEEP TEMP -40 125 10 ; 双变量扫描
你想想看,为什么要做DC扫描?说白了就是看你的电路在电源变化、输入变化时能不能正常工作。我设计LDO时,第一件事就是跑DC扫描看线性调整率。
.AC —— 小信号交流分析
分析电路的频率响应——增益、带宽、相位裕度。
.AC DEC 10 1 1G ; 从1Hz到1GHz,每十倍频10个点
.AC LIN 100 1k 10k ; 从1kHz到10kHz,线性取100个点
AC分析是模拟IC设计的“照妖镜”。你的运放到底能跑多快?相位裕度够不够?跑一次AC就全知道了。我习惯先跑AC看开环增益,再跑TRAN看瞬态响应,两者结合才能判断电路是否稳定。
.TRAN —— 瞬态分析
模拟电路在时间域的行为——上电、下电、信号跳变。
.TRAN 1n 1u ; 总时长1μs,步长1ns
.TRAN 0.1n 10u UIC ; 带初始条件仿真
这里有个关键参数:UIC(Use Initial Conditions)。如果你不加UIC,仿真器会先算直流工作点再开始瞬态。但有些电路(比如振荡器)必须从初始状态开始跑,这时候UIC就派上用场了。
| 分析类型 | 关键词 | 典型应用 | 输出变量 |
|---|---|---|---|
| 直流扫描 | .DC | 传输曲线、阈值电压 | 节点电压、支路电流 |
| 交流小信号 | .AC | 频率响应、稳定性 | 增益、相位、阻抗 |
| 瞬态 | .TRAN | 时域波形、建立时间 | 电压/电流随时间变化 |
3.6 知识体系总览
下面这张图帮你把本章的知识点串起来。网表就像一棵树:根是基本结构,主干是元件定义,枝叶是分析语句。
这张图把网表的三大块——元件定义、节点命名、分析语句——都串起来了。你写网表时,心里要有这个框架:先搭结构,再填元件,最后加分析。顺序别搞反了。
3.7 一个完整的网表示例
说了这么多,不如看个完整的例子。这是一个简单的共源放大器:
Common_Source_Amp_v1
VDD 1 0 DC 3.3
VIN 2 0 DC 1.2 AC 1
M1 3 2 0 0 NMOS_18 L=0.18u W=10u
RD 1 3 5k
CL 3 0 1pF
.DC VIN 0 3.3 0.01
.AC DEC 10 1 1G
.TRAN 1n 10u
.END
你看,这个网表里:
- VDD和VIN是电源和输入,用了名字节点
- M1是NMOS管,漏极接3,栅极接2,源极和衬底都接地
- RD是5kΩ负载电阻,CL是1pF负载电容
- 三条分析语句覆盖了DC、AC、TRAN
好了,网表基础就讲到这里。你可能会觉得这些规则有点琐碎,但相信我,写多了就成肌肉记忆了。下次你打开一个网表,一眼就能看出它写得规不规范、有没有潜在问题。这就是基本功的价值。