1. SPICE 基础:从历史到核心原理

SPICE,全称 Simulation Program with Integrated Circuit Emphasis。说白了,就是专门为集成电路仿真而生的程序。我入行那会儿,前辈们还在用纸带打孔跑仿真,现在想想真是不可思议。

1.1 SPICE 的历史:一段传奇

SPICE 的故事要从 1970 年代说起。当时加州大学伯克利分校的 Laurence Nagel 和 Donald Pederson 团队,开发出了这个工具。初衷很简单——让 IC 设计者能在流片前,先看看电路能不能正常工作。

我记得第一次读到这段历史时,最让我惊讶的是:SPICE 居然是开源的。没错,伯克利把源代码公开了。这直接催生了后来的 HSPICE、PSPICE、LTspice 等商业版本。可以说,今天你能用到的所有电路仿真器,骨子里都流着 SPICE 的血。

核心事实: 1975 年 SPICE 2G6 版本发布,成为业界标准。至今几乎所有 EDA 工具的仿真引擎,都基于这个版本的核心算法。

3.2 核心原理:到底在算什么?

SPICE 的核心,说白了就是解方程组。你画一个电路图,它把它翻译成数学问题,然后让计算机去算。

具体来说,分三步:

  1. 建立节点方程——基于基尔霍夫电流定律(KCL),每个节点列一个方程
  2. 代入器件模型——把晶体管、电阻、电容的行为用数学公式描述
  3. 迭代求解——用牛顿-拉夫逊法(Newton-Raphson)反复逼近,直到收敛

为什么会需要迭代?因为晶体管是非线性的。你想想看,一个 MOS 管的电流和电压关系是平方律,不是简单的直线。SPICE 得先猜一个初始值,算一遍,看误差多大,再修正,再算……直到误差小到可以接受。

我的经验: 仿真不收敛,十有八九是初始条件设得不对。我习惯在 .IC 语句里给关键节点一个合理的初值,能省很多调试时间。

1.3 网表结构:SPICE 的语言

网表(Netlist)就是 SPICE 能读懂的语言。你画的原理图,最终都要翻译成网表才能跑仿真。

一个最基本的网表长这样:

* 这是一个简单的 RC 低通滤波器
V1 1 0 DC 5V
R1 1 2 1k
C1 2 0 1u
.TRAN 1m 10m
.PROBE
.END

我来拆解一下:

  • 第一行:以 * 开头的是注释,SPICE 会忽略
  • V1 1 0 DC 5V:在节点 1 和地(0)之间,加一个 5V 直流电压源
  • R1 1 2 1k:在节点 1 和 2 之间,放一个 1kΩ 电阻
  • C1 2 0 1u:在节点 2 和地之间,放一个 1μF 电容
  • .TRAN 1m 10m:做瞬态分析,步长 1ms,总时长 10ms
  • .PROBE:告诉 SPICE 输出波形数据
  • .END:网表结束

嗯,这里要注意:节点 0 是固定的地节点,不能改。其他节点编号你可以随便起,但建议用有意义的数字或名字,方便调试。

避坑指南: 我曾经犯过一个低级错误——把两个不同电压的源直接并联。SPICE 直接报错 "Singular matrix"。后来养成了习惯,每次写网表前先检查拓扑结构,确保没有短路或悬空节点。

1.4 分析类型概览:SPICE 能做什么?

SPICE 不是只能做一种仿真。它提供了多种分析类型,每种解决不同的问题。我把最常用的几种整理成了表格:

分析类型 命令 用途 典型场景
直流分析 .DC 扫描直流工作点 看传输特性、找静态偏置
瞬态分析 .TRAN 时域波形仿真 看开关波形、建立时间
交流分析 .AC 小信号频率响应 看增益、带宽、相位裕度
直流工作点 .OP 计算静态工作点 确认晶体管是否工作在饱和区
噪声分析 .NOISE 输出噪声谱密度 评估信噪比、低噪声设计
参数扫描 .STEP 改变参数看变化 工艺角仿真、温度扫描

我个人最常用的是 .TRAN 和 .AC。做模拟电路,时域和频域是两大基本视角。你想想看,一个运放,时域看它能不能稳定建立,频域看它增益够不够、相位裕度好不好——两个维度缺一不可。

1.5 SPICE 仿真流程:一张图说清楚

下面这张图,是我自己总结的 SPICE 仿真标准流程。每次做新电路,我都会按这个步骤走一遍:

SPICE 仿真标准流程 1. 电路描述 2. 网表生成 3. 选择分析类型 DC / OP 直流分析 TRAN 瞬态分析 AC 交流分析 4. 运行仿真 5. 结果分析 不收敛?检查初始条件或 调整迭代参数(.OPTIONS)

这个流程看起来简单,但每一步都有坑。比如第 3 步选分析类型,很多人上来就跑 .TRAN,结果仿真跑半天出不来。我建议先跑 .OP 确认直流工作点正确,再跑 .AC 看小信号特性,最后才跑 .TRAN 看大信号行为——顺序对了,效率翻倍。

我的习惯: 每次新建仿真,我都会先写一个 .OP 语句。花 1 秒钟确认工作点,能省后面 10 分钟的 debug 时间。

1.6 本章小结

这一章我们聊了 SPICE 的起源、核心原理、网表结构,以及五种基本分析类型。说白了,SPICE 就是一个把电路问题变成数学问题,然后让计算机去解的引擎。你掌握了网表怎么写、分析类型怎么选,就已经迈出了第一步。