4. 交流扫描分析
上一讲我们把瞬态、直流和交流分析聊透了。今天要讲的这四种分析,说实话,在常规仿真里用得没那么频繁。但一旦你碰到高性能模拟电路——比如低噪声放大器、高精度基准源、锁相环——它们就是绕不开的坎。
我个人习惯把这四种分析归为「进阶四件套」。噪声分析管信号质量,零极点分析管稳定性,灵敏度分析管工艺偏差,蒙特卡洛分析管良率。咱们一个一个来。
4.1 噪声分析(.noise)—— 信号链的「底噪」到底有多低?
噪声分析,说白了就是算电路输出端的噪声功率谱密度。你想想看,一个放大器增益再高,如果输出噪声比信号还大,那这放大器就没用了。
.noise 语句的基本语法:
.noise V(out) Vsrc dec 100 1k 1G
参数含义:
V(out):输出节点(电压噪声)Vsrc:输入信号源(用于归一化)dec 100 1k 1G:频率扫描范围 1kHz ~ 1GHz,每十倍频 100 个点
我在项目中遇到过一件事:一个运放仿真噪声只有 5 nV/√Hz,但流片回来实测有 12 nV/√Hz。查了半天,发现是仿真时没加封装寄生电阻的热噪声。嗯,这里要注意——.noise 只算器件本身的噪声,封装、走线、焊盘的寄生电阻噪声它不管。你需要在网表里手动加这些寄生电阻。
.print noise 或 .plot noise 看输出噪声曲线。我习惯同时看 onoise(输出噪声)和 inoise(等效输入噪声),两者关系是:onoise = inoise × 增益。如果 inoise 比理论值大,说明前级噪声贡献过多。
噪声分析的工程应用场景:
- 低噪声放大器(LNA)的噪声系数优化
- 基准源的噪声抑制比(PSRR)仿真
- 锁相环(PLL)的带内相位噪声估算
- 比较器的输入参考噪声评估
reltol=1e-3 改成 reltol=1e-6 后尖峰消失了。噪声仿真对精度很敏感,建议用 .options reltol=1e-6。
4.2 零极点分析(.pz)—— 稳定性好不好,看极点就知道
零极点分析,说白了就是找传递函数的极点和零点。为什么重要?因为极点决定稳定性,零点决定带宽。
.pz 语句的基本语法:
.pz V(out) Vsrc
这会输出所有极点和零点的实部、虚部、频率和 Q 值。我一般重点关注:
- 主极点:最低频率的极点,决定带宽
- 次主极点:第二低频率的极点,决定相位裕度
- 右半平面零点:如果有,稳定性会变差
我记得有一次调一个三级运放,交流仿真看相位裕度有 60°,但瞬态仿真就是振。用 .pz 一查,发现有一个共轭极点对的 Q 值高达 5。Q 值大于 0.707 就会有尖峰,大于 1 就可能振荡。所以只看相位裕度是不够的,极点 Q 值也要盯。
零极点分析的工程应用场景:
- 运放、LDO、比较器的稳定性评估
- 滤波器(有源/无源)的频率响应分析
- 锁相环的环路稳定性判断
- 振荡器的起振条件分析
.pz V(out) Vsrc pol 只算极点,或者用 .pz V(out) Vsrc pz 同时算极点和零点。我习惯用后者,因为零点对稳定性同样重要。
4.3 灵敏度分析(.sens)—— 哪个器件最「敏感」?
灵敏度分析,说白了就是看某个参数变化对输出影响有多大。比如,一个电阻值变化 1%,输出电压变化多少?这就是灵敏度。
.sens 语句的基本语法:
.sens V(out)
这会输出每个器件参数(电阻值、MOS 管宽长比、电容值等)对输出 V(out) 的归一化灵敏度。数值越大,说明这个器件越「敏感」。
我在项目中遇到过一件事:一个带隙基准源,仿真温度系数很好,但流片回来发现不同芯片的基准电压偏差很大。用 .sens 一跑,发现两个匹配电阻的灵敏度最高。后来我把这两个电阻的版图改成共质心匹配,失配问题就解决了。
.sens 配合 .dc 扫描。我曾经犯过这个错,以为 .sens 能覆盖所有情况,结果仿真结果和实测对不上。
灵敏度分析的工程应用场景:
- 带隙基准源的电阻匹配优化
- ADC/DAC 的电容失配分析
- 运放输入对管的匹配要求确定
- 滤波器中心频率的温度漂移评估
4.4 蒙特卡洛分析(.mc)—— 流片良率到底行不行?
蒙特卡洛分析,说白了就是模拟工艺偏差。每次仿真随机取一组工艺参数(比如阈值电压、电阻值、电容值),跑 N 次后看输出分布。如果分布太宽,说明良率堪忧。
.mc 语句的基本语法:
.mc 1000 tran 10u
.measure tran vout_avg AVG V(out)
.measure tran vout_std STD V(out)
这会跑 1000 次瞬态仿真,每次随机取工艺参数,然后统计 V(out) 的平均值和标准差。
我一般跑 200 次做初步评估,1000 次做最终验证。为什么?因为 200 次能看出趋势,但标准差误差大约 ±10%;1000 次能把误差降到 ±3% 左右。
.sens 找出敏感器件,然后只对这些器件做蒙特卡洛,其他用典型值。这样可以节省 80% 的仿真时间。
蒙特卡洛分析的工程应用场景:
- 基准源的输出电压分布评估
- 比较器的失调电压分布
- ADC 的 DNL/INL 良率预测
- 振荡器的频率偏差范围
seed=12345,问题就解决了。建议所有蒙特卡洛分析都固定种子,方便 debug。
4.5 四种分析的对比与选择
这四种分析各有各的用途,但很多新手会搞混。我整理了一个对比表:
| 分析类型 | 核心问题 | 输出结果 | 典型应用 | 仿真时间 |
|---|---|---|---|---|
| .noise | 噪声有多大? | 噪声功率谱密度 | LNA、基准源 | 中等 |
| .pz | 稳定性如何? | 极点/零点位置 | 运放、LDO | 快 |
| .sens | 哪个器件最敏感? | 归一化灵敏度 | 匹配优化 | 快 |
| .mc | 良率够不够? | 统计分布 | 量产评估 | 很慢 |
我的建议是:先跑 .pz 看稳定性,再跑 .noise 看噪声,然后用 .sens 找敏感点,最后用 .mc 评估良率。这个顺序能帮你快速定位问题,避免浪费时间。
4.6 本章知识体系
下面这张图总结了四种分析的核心逻辑和工程应用:
这张图把四种分析的核心逻辑串起来了。你从「电路性能评估」出发,根据需求选择对应的分析类型,然后看输出结果和应用场景。记住这个框架,以后遇到问题就知道该用哪种分析了。