2. 噪声模型:电阻、MOS管、BJT管的噪声模型建立与参数提取
噪声建模这事儿,说白了就是给电路里的“捣乱分子”画个像。你想想看,一个理想电阻只发热,但实际电阻会贡献热噪声;一个理想MOS管只放大信号,但实际MOS管会贡献闪烁噪声和沟道热噪声。搞不清楚这些噪声源长什么样,低噪声设计就是空中楼阁。
我个人习惯,拿到一个工艺的第一件事,不是跑DC仿真,而是先把无源器件和有源器件的噪声模型过一遍。为什么?因为后仿真发现噪声超标再回头改版,那代价就太大了。我在项目中遇到过好几次,明明前仿噪声指标过了,流片回来测试却差了3dB——最后查出来是电阻模型里的噪声参数没设对。
2.1 电阻的噪声模型
电阻的噪声模型是最基础的,也是最容易被忽视的。很多新手觉得电阻嘛,给个阻值就行了。其实不然。
2.1.1 热噪声模型
电阻的热噪声,也叫约翰逊噪声。它的功率谱密度是:
S_v(f) = 4kTR
其中k是玻尔兹曼常数,T是绝对温度,R是电阻值。这个公式看着简单,但有几个坑要注意。
关键点:热噪声是白噪声,频谱平坦。但实际电阻在高频会有寄生效应,导致噪声谱在高频段滚降。仿真时如果用了理想电阻模型,高频噪声会被低估。
我曾经在一个2.4GHz LNA的设计中,用了理想电阻模型做前仿,结果后仿发现NF比预期高了0.8dB。查了半天,发现是电阻的寄生电容在高频形成了低通滤波,把信号衰减了,但噪声却没同步衰减。从那以后,我所有的高频设计都用带寄生参数的电阻模型。
2.1.2 闪烁噪声模型
很多人以为只有有源器件才有闪烁噪声。其实某些薄膜电阻、多晶硅电阻也有闪烁噪声,尤其是当有直流电流流过时。
电阻的闪烁噪声模型通常用经验公式:
S_v(f) = (K_f * I^AF) / (f^EF * W * L)
参数说明:
| 参数 | 含义 | 典型值范围 |
|---|---|---|
| K_f | 闪烁噪声系数 | 10^-24 ~ 10^-28 |
| AF | 电流依赖指数 | 0.5 ~ 2.0 |
| EF | 频率依赖指数 | 0.8 ~ 1.2 |
| W, L | 电阻的几何尺寸 | 由工艺决定 |
小技巧:在Spectre中,电阻的闪烁噪声模型默认是关闭的。你需要手动在模型文件中设置flicker_noise_model = 1才能激活。很多PDK的默认设置都不开这个,不注意就会漏掉。
2.2 MOS管的噪声模型
MOS管的噪声模型比电阻复杂得多。它包含沟道热噪声、闪烁噪声,还有栅极感应噪声。我刚开始做模拟IC的时候,总觉得MOS管的噪声模型就是几个公式往里套,后来发现参数提取才是真正的技术活。
2.2.1 沟道热噪声
长沟道MOS管的沟道热噪声模型是:
S_id(f) = 4kT * γ * gm
γ是噪声系数,长沟道器件γ=2/3,短沟道器件γ会增大到1~2。为什么?因为短沟道器件有速度饱和效应和热载流子效应,沟道不再是均匀电阻。
我记得有一次做65nm工艺的LNA,用长沟道模型算出来的NF比实测低了1.2dB。后来查文献才发现,短沟道器件的γ因子需要根据偏置电压修正。我建议大家在0.18μm以下的工艺中,直接用BSIM4模型里的tnoimod参数来控制沟道热噪声模型。
2.2.2 闪烁噪声模型
MOS管的闪烁噪声,也就是1/f噪声,是低频设计的主要限制因素。它的模型是:
S_vg(f) = K_f / (W * L * Cox * f^EF)
或者用电流形式:
S_id(f) = (K_f * gm^2) / (W * L * Cox * f^EF)
注意:闪烁噪声的K_f参数在不同工艺、不同器件类型(NMOS vs PMOS)之间差异很大。PMOS的闪烁噪声通常比NMOS小1~2个数量级。如果你做的是低频低噪声设计,比如生物电信号放大器,建议优先用PMOS做输入对管。
2.2.3 栅极感应噪声
高频下,栅极的分布电阻和沟道噪声会通过栅氧电容耦合到栅极,产生栅极感应噪声。这个噪声在射频设计中不可忽略。
栅极感应噪声的功率谱密度:
S_ig(f) = 4kT * δ * (ω^2 * Cgs^2) / (5 * gm)
δ是栅极噪声系数,长沟道器件δ=4/3。这个噪声和频率的平方成正比,所以在GHz频段会变得非常显著。
我在设计一个5GHz的VCO时,就吃过栅极感应噪声的亏。当时只考虑了沟道热噪声和闪烁噪声,结果相位噪声仿真始终比实测低3dB。后来在模型里加入了栅极感应噪声,仿真才和测试对得上。
2.3 BJT管的噪声模型
BJT管的噪声模型相对成熟,但参数提取的细节很多。BJT的主要噪声源包括:基极电阻热噪声、散粒噪声、闪烁噪声。
2.3.1 基极电阻热噪声
基极电阻rbb'是BJT的一个寄生参数,它产生的热噪声为:
S_vb(f) = 4kTrbb'
这个噪声在BJT的输入回路中串联,会直接放大到输出端。我建议大家在设计低噪声BJT放大器时,优先选择rbb'小的器件。通常,多指条结构的BJT比单指条的rbb'小很多。
2.3.2 散粒噪声
散粒噪声是BJT的主要噪声源,来源于载流子穿越PN结的随机性。它包括基极散粒噪声和集电极散粒噪声:
S_ib(f) = 2qIB
S_ic(f) = 2qIC
其中q是电子电荷,IB是基极电流,IC是集电极电流。散粒噪声是白噪声,频谱平坦。
重要结论:BJT的噪声系数在某个偏置电流下存在最小值。这个最优偏置电流可以通过噪声模型推导出来。我一般会在仿真中扫描IC,找到NF最小的偏置点,然后在这个点附近做设计。
2.3.3 闪烁噪声
BJT的闪烁噪声主要来自基极电流的波动,模型为:
S_ib(f) = (K_f * IB^AF) / f^EF
BJT的闪烁噪声转折频率通常在1kHz~100kHz之间,比MOS管低很多。所以BJT在低频低噪声应用中仍然有优势。
2.4 噪声参数提取方法
模型建好了,参数怎么提?我分享几个实战中常用的方法。
2.4.1 从PDK模型文件中提取
最直接的方法是从PDK的模型文件中读取噪声参数。以BSIM4模型为例,噪声相关的参数包括:
// 沟道热噪声参数
tnoimod = 1 // 0: 长沟道模型, 1: 短沟道模型
tnoia = 1.5 // 噪声系数修正参数
tnoib = 3.5 // 噪声系数修正参数
// 闪烁噪声参数
fnoimod = 1 // 0: 关闭闪烁噪声, 1: 开启闪烁噪声
noia = 1e-20 // 闪烁噪声系数K_f
noib = 5e-5 // 闪烁噪声指数AF
noic = 0.8 // 闪烁噪声频率指数EF
实战经验:PDK给的参数不一定准确。我习惯先跑一个简单的噪声仿真,和测试数据对比。如果偏差超过10%,就需要自己提取参数。提取方法是用不同偏置、不同尺寸的器件做噪声测试,然后用最小二乘法拟合模型参数。
2.4.2 通过仿真提取
如果你没有测试数据,也可以通过仿真来验证噪声参数。步骤是:
- 搭建一个简单的共源放大器或共射放大器
- 设置好偏置点
- 运行noise仿真,得到输入参考噪声谱
- 对比理论计算值和仿真值
- 如果偏差大,检查模型参数设置
我曾经用这个方法发现一个0.18μm PDK的闪烁噪声参数设错了。那个PDK的NMOS闪烁噪声K_f设成了1e-24,但实际测试值是5e-24。如果不修正,低频噪声仿真会偏小7dB。
2.5 本章知识体系
下面这张图总结了本章的噪声模型体系,方便大家对照学习:
嗯,这张图把本章的知识结构串起来了。从上到下,先分清楚三类器件的噪声模型,再掌握参数提取的方法。你可以在学习每个小节时,对照这张图看看自己处在哪个位置。
最后提醒一句:噪声模型再漂亮,如果参数提取不准,仿真结果就是废纸。我见过太多人花大量时间优化电路,结果发现是模型参数设错了。所以,拿到一个新工艺,先花半天时间把噪声模型和参数验证一遍,这比什么都重要。