3. 仿真器设置:Cadence Spectre与HSPICE中噪声分析的参数配置与仿真控制语句
噪声仿真,说白了就是看你的电路到底有多“吵”。
很多新手觉得把仿真跑通就行,结果流片回来发现信噪比差得一塌糊涂。我早年就吃过这个亏——一个LNA设计,Spectre仿真显示NF只有1.2 dB,结果实测飙到1.8 dB。后来一查,是仿真器设置里漏了某个关键参数。
所以这一章,咱们把Spectre和HSPICE的噪声仿真设置掰开揉碎讲清楚。你想想看,工具用不对,再好的电路也是白搭。
3.1 噪声分析的核心参数
不管用哪个仿真器,噪声分析都绕不开这几个参数:
| 参数 | 含义 | 典型值 |
|---|---|---|
| fstart | 起始频率 | 1 Hz ~ 10 Hz |
| fstop | 截止频率 | 电路带宽的3~5倍 |
| sweeptype | 扫描方式 | logarithmic / linear |
| npoints | 扫描点数 | 100 ~ 1000 |
| noisetype | 噪声类型 | sources / timeaverage |
3.2 Cadence Spectre中的噪声仿真配置
Spectre的噪声分析,我一般用两种方式:图形界面和命令行。图形界面适合新手,命令行适合批量跑仿真。
3.2.1 图形界面设置(ADE L/XL)
在ADE中,选择 Analyses → Choose → noise,然后填参数:
- Sweep Type:选
logarithmic,点数设200。线性扫描在低频段浪费点数,高频段又不够密。 - Frequency Range:Start = 1 Hz,Stop = 10 GHz(根据你的电路带宽调整)。
- Output Noise:选
voltage或current,指定输出节点。 - Input Noise:选
voltage或current,指定输入源。
3.2.2 命令行设置(netlist)
如果你用Ocean脚本或直接写netlist,噪声分析语句长这样:
// Spectre netlist 噪声分析示例
simulator( 'spectre )
design( "./my_amplifier.scs" )
analysis( 'noise ?start "1" ?stop "10G" ?sweeptype "log" ?npoints 200
?noisetype "sources" ?outprobe "VOUT" ?inprobe "VIN" )
// 可选:指定噪声贡献
noiseContrib( ?type "device" ?devices "M1 M2 R1 R2" )
这里有个细节:?noisetype "sources" 表示只考虑独立噪声源(电阻、晶体管沟道噪声等)。如果你用 "timeaverage",它会计算周期性稳态噪声,适合开关电容电路。
3.3 HSPICE中的噪声仿真配置
HSPICE的噪声分析,语法上比Spectre更“老派”一些,但功能一点不弱。
3.3.1 基本噪声分析语句
*** HSPICE 噪声分析示例 ***
.AC DEC 200 1 10G
.NOISE V(VOUT) VIN 20
*** 可选:打印噪声贡献 ***
.PRINT NOISE ONOISE INOISE
解释一下:
.AC DEC 200 1 10G:先做AC分析,200点/十倍频,从1 Hz到10 GHz。.NOISE V(VOUT) VIN 20:输出噪声在VOUT,输入源是VIN,20表示每十倍频采样20个点。ONOISE:输出噪声谱密度。INOISE:等效输入噪声谱密度。
?npoints 是总点数,HSPICE的 20 是每十倍频的点数。如果你仿真1 Hz到10 GHz(10个十倍频),总点数就是20×10=200点。
3.3.2 噪声贡献分析
HSPICE里想看每个器件贡献了多少噪声,用 .NOISECONTRIB:
.NOISECONTRIB M1 M2 R1 R2
仿真完后,在输出文件里找 NOISE CONTRIBUTION SUMMARY 表格。我习惯把这个数据导出来,画成饼图,一眼就能看出哪个器件是“噪声大户”。
3.4 两种仿真器的关键差异
| 对比项 | Cadence Spectre | HSPICE |
|---|---|---|
| 扫描方式 | ?sweeptype "log" |
DEC / LIN |
| 点数定义 | 总点数(如200) | 每十倍频点数(如20) |
| 输出噪声 | ?outprobe |
V(节点) |
| 输入噪声 | ?inprobe |
直接指定源名 |
| 噪声贡献 | noiseContrib() |
.NOISECONTRIB |
| 1/f噪声模型 | 默认包含(需确认工艺文件) | 需显式开启 NOISEF |
.OPTION NOISEF=1 没加。
3.5 噪声仿真流程总览
下面这张图,是我自己总结的噪声仿真标准流程。每次跑仿真前,我都会过一遍:
3.6 常见问题与避坑指南
我曾经遇到一个运放,噪声仿真一直不收敛。折腾了两天,最后发现是偏置电路没启动。
解决办法:先跑DC仿真,确认所有管子都在饱和区。DC不收敛,噪声仿真肯定挂。
仿真出来的1/f拐点在100 kHz,但工艺文档写的是1 kHz。这通常是因为模型参数没设对。
解决办法:检查BSIM模型中的
NOIA、NOIB、NOIC 参数。Spectre里可以用 print noise 看每个器件的噪声贡献。
3.7 总结
噪声仿真器的设置,说白了就是三件事:频率范围、输入输出节点、扫描点数。Spectre和HSPICE的语法不同,但核心逻辑一样。
嗯,这里要注意:别迷信默认设置。每个工艺的噪声模型都不一样,跑仿真前一定要确认工艺文件里的噪声参数是开启的。
我个人习惯,每次跑完噪声仿真,都会把结果和理论计算对比一下。如果差太多,先别急着调电路,回头检查仿真设置——八成是哪里设错了。