先说明白一件事:用Cadence Virtuoso做LNA仿真,本质上就是在SpectreRF这个引擎上做几件固定的事——S参数、噪声、大信号周期分析、线性度,外加稳定性。很多人手边就有SpectreRF手册,翻起来里面每个分析都有大段公式说明,但照着跑一遍还是容易卡壳:有的是仿出来NF完全不对,有的是PSS不收敛,有的是IIP3提出来负十几dBm,怎么看都像是在凑数据。这篇帖子就当我把你从手册的坑里拽出来,把LNA从DC到流片前需要跑的仿真串起来,讲清楚每个仿真要设什么、结果怎么看、坑在哪。内容全部基于我在Virtuoso上做射频前端的实际操作,适合正在调LNA或者准备把混频器前端整套仿真跑起来的人参考。
1. 先把LNA仿真这件事拆明白
1.1 为什么跑LNA要同时看小信号和大信号
不少新手一开始就在ADE里直接铺一个SP分析,拿到S11和S21就以为完事了。其实LNA作为接收链路第一级有源器件,需要盯住的指标至少有五个:增益、噪声系数、输入匹配、线性度、稳定性。这里面S参数和噪声属于小信号范畴,P1dB和IIP3属于大信号范畴,稳定性则是所有频点、所有偏置条件下的底线检查。缺一个,都不能叫"全套仿真"。
为什么要同时看小信号和大信号?你可以把LNA理解成小区门口的保安:平时送来的快递(有用信号)很小,他要能听清楚(低噪声、合适增益);但偶尔有人开着扩音器路过(强干扰),他不能被震得当场失聪(压缩),更不能和旁边另一个扩音器凑出奇怪的节拍(三阶互调)。小信号仿真解决"听不听得清",大信号仿真解决"扛不扛得住噪声和失真",两者缺一不可。
1.2 一套完整的LNA仿真应该包含什么
我习惯把LNA仿真按"从小到大"分四步走:先DC确认工作点,再小信号拿增益和噪声,再大信号看压缩和交调,最后所有频点查稳定性。放到Virtuoso的ADE里,对应的就是以下几个分析:
| 仿真目标 | 使用的分析类型 | 直接拿到的指标 | 注意点 |
|---|---|---|---|
| 静态工作点 | dc/op | 过驱电压、Id、gm、工作区 | 先保证管子饱和,否则后面全白搭 |
| 小信号增益和匹配 | sp | S11、S22、S21 | 端口参考阻抗必须对 |
| 噪声系数 | noise | NF、输出噪声谱、输入等效噪声 | 输入源要用port并设好50欧姆 |
| 大信号增益压缩 | pss/hb 扫输入功率 | P1dB | beat频率/fundamental tone别设错 |
| 三阶交调 | hb 双音或pdisto | IIP3/OIP3 | 谐波阶数要覆盖IM3分量 |
| 稳定性 | sp/stb | K因子、μ因子、环路增益 | 必须看截止带外,不能只看带内 |
| 变频场景 | pss + pnoise | SSB/DSB噪声系数 | 混频器链路才需要 |
这张表基本就是一份自检清单,每个分析之间是有依赖关系的。DC没跑对,后面不管用什么分析算出来的NF和增益都是错的;SP里的端口参考阻抗设错,噪声系数也会错得莫名其妙。所以我建议每次做项目都在同一个testbench里把以上分析全部搭好,用变量统一控制频率和功率,后面跑corner和参数扫描就方便得多。
2. 仿真环境的搭建与DC工作点检查
2.1 测试台的搭建细节:Port怎么加、参考地怎么处理
在Virtuoso里搭LNA测试台,最基础也最关键的东西是analogLib里的port器件。很多人在输入端放一个vdc加vsine,再串个电容,这种做法用来做瞬态可以,但做RF小信号仿真不推荐。port器件内置了源电阻,你能直接设参考阻抗(默认50Ω),在SP、noise这些分析里它是被当作真实信号源对待的。输入端口的源电阻会影响NF计算,也会影响S11的定义;输出端口则决定了负载是50Ω,S22才有意义。
具体设置时我会把输入port的端口号设为1,输出port设为2,阻抗都填50Ω。如果被测LNA是输入输出本来就要做片外匹配到50Ω,这样设完全没有问题;如果是片内直接连到混频器,那输出端就要用实际负载阻抗建模,不能机械地默认50Ω。
测试台里另一个容易翻车的点是射频地和电源的分离。我见过有人直接把理想电源接到LNA的漏极电感上,仿出来S21虚高,NF又低得离谱,原因就是电源作为理想的交流地,把射频信号短路掉了。正确做法是给每个DC偏置节点串一个大电感隔交通直,或者用PDK里提供的RFC模型。同理,衬底和地引用要明确,不要把悬空节点留在网表里,否则SpectreRF解矩阵时很容易出现奇异的警告。
最后说一下PDK库路径。经常有人遇到"仿真器件未定义"或者"model not found"这类报错,十有八九是hierarchy editor里某个cellview没能正确解析到PDK模型。跑仿真之前,先在ADE的Setup->Library Paths里确认PDK路径在最前面,然后跑一次dc看模型是否被正确调用。别小看这一步,我接手过好几个卡在这儿的项目,问题都不是电路设计,纯粹是环境路径没配好。
2.2 DC仿真:先确认管子是不是真的在"干活"
很多LNA的仿真结果一塌糊涂,根因都是偏置点根本不对。所以我的第一项仿真永远是DC,而不是SP。在ADE里跑一次dc,然后打开Results->Print->DC Operating Point,逐项检查关键晶体管的vgs、vds、ids、gm,以及最重要的工作区。
以最常见的共源共栅电感退化LNA为例,输入管和共栅都要工作在饱和区,也就是region显示等于 3 或者类似"Sat"的标识。共栅管的Vds其实很小,如果没把电流镜像设计好,它很容易掉进线性区;输入管的过驱电压太高也会让NF明显变差。还有一种情况是工艺角偏置,比如TT下Ids是5mA,到了FF变成9mA,这时候如果后级混频器电流镜像扛不住,也要在设计阶段就做下限流。
顺便说一个经验:DC跑完顺手把gm和ft(截止频率)打印出来看一眼。输入管的目标ft一般要大于工作频率的5到10倍,如果ft只比工作频率高两三倍,后面噪声和增益都会很难看,那就不该继续调匹配,而是回去把管子尺寸和电流密度改掉。DC这一步花不了两分钟,却能省下后面排查SP结果的一大堆时间。
3. 小信号仿真:S参数与增益
3.1 S参数仿真设置:端口阻抗与频率扫描
SP分析在ADE里就是sp,需要设置起始频率、截止频率和扫描点数。起始频率我一般不会从0Hz开始,因为很多电感模型在0Hz附近数值条件很差,容易产生矩阵奇异;通常从几十MHz起步,往上扫到工作频率的3~5倍,这个范围足够看S11的谐振谷和S21的增益带外滚降。
扫描点数要看你的精度需求。观察窄带匹配时,我习惯用线性扫描、1000点以上,比如2.4GHz的LNA,从100MHz扫到10GHz,1000个点足够把谐振峰画圆滑了。点数太少会导致S11的极小值被漏掉,你看到的最低点未必是真的最低点,后续根据这个去调电感自然就偏了。
端口这块再强调一遍:input port和output port的参考阻抗一定要和系统特征阻抗一致。在50Ω系统里就老老实实用50Ω,100Ω差分系统就改成100Ω。参考阻抗一旦改错,S参数和噪声系数都会连带出错,而这两个又是LNA最核心的指标,错一个就等于整个仿真白做。
SP跑完,plot S11、S21和S22。S11看输入匹配,S21的dB值是正向增益,S22看输出匹配。对源极电感退化的LNA来说,输入阻抗的实部主要由源极退化电感Ls决定,虚部由栅极电感Lg谐振掉Cgs。所以调试顺序是:先调Ls把实部拉到接近50Ω,再调Lg让虚部归零,这两个动作是正交的,效率很高。
3.2 从仿真结果反推匹配网络怎么调
举个例子,有个2.4GHz的LNA,初始S11只有-6dB,带内S21是14dB。打开S11的Smith图,如果看到输入阻抗落在20+j30Ω的位置,那就说明实部偏低、容性虚部偏大。做法是先增大源极退化电感Ls,让实部从20往50走;再把栅极电感Lg加大一点,把虚部从-j30往0拉。每改一次参数跑一次SP,大概两三轮就能收敛到S11小于-15dB。
我调试匹配时习惯用param变量把Lg、Ls、甚至管子的finger数量做成变量,然后在ADE XL里做参数扫描,一次性把S11的谷底和S21的峰值扫出来。这样比手工一个个改值试快得多,而且在corner仿真时,可以直接复用同一套扫描区间。
还有一个很容易忽略的地方:S21的带内平坦度。窄带LNA可能看不太出来,宽带LNA如果谐振点太多,S21会在带内出现抖动。调匹配时别只盯着S11,要把S21和S11合在一起看,它们的相对关系直接影响后级链路预算。
4. 噪声仿真与噪声匹配的实操
4.1 Spectre的noise分析到底在算什么
noise分析在SpectreRF里算的是器件噪声到输出端的传递,然后反推输入等效噪声。具体设置时,在noise分析窗里要指定输入端口的源(比如输入port)和输出节点,再选"noise type = sources"来考虑所有半导体器件噪声源。跑完之后,你会拿到输出噪声谱密度和等效输入噪声谱密度,NF则由输出端的总输出噪声除以源电阻单独贡献的那部分噪声得到,等于实际噪声系数。
对LNA来说,噪声贡献最大的一般是输入管的沟道热噪声和栅电阻热噪声,共栅管虽然在通路上但通常贡献较小。所以如果发现NF偏高,我第一反应不是去改无源匹配,而是检查输入管的电流密度和栅极导出方式。在这个环节,Spectre会按器件逐一报告每个噪声源的贡献占比,在results里选noise contribution图,一眼就能看出是谁在拖后腿。
需要提醒的是,噪声分析的频率扫描和SP分析最好一致,不然你在2.4GHz看NF,结果扫描点里根本没有这个频点的准确值,曲线是插值出来的,误差会很大。
4.2 噪声匹配做不下去的时候怎么办
LNA设计里有个老生常谈的矛盾:功率匹配和噪声匹配往往不在一个点。50Ω源阻抗下,输入管的最佳噪声源阻抗Zopt通常不等于50Ω,直接做共轭匹配得到的NF往往不是最优,最优NF的点又会让S11很差。工程上常规做法是用源极电感负反馈,让Zopt和Zin在Smith图上尽量靠近。具体操作是调Ls和Lg,同时观察NF和S11两条曲线:加Ls会改变输入阻抗实部,也会影响最佳噪声阻抗;调到二者差别不大时,S11仍然能接受,NF接近最优。
如果调了半天NF还是压不下去,就要去看是不是管子尺寸太极端。输入管太宽,gm是大了,但栅电阻和噪声电流也大;太窄,NFmin下不来。这个权衡没有公式可以一步到位,只能做电流密度扫描。我在实际项目里一般把输入管的单位管子宽度控制在2~5μm范围,finger数量再用模拟结果微调,不要一上来就把宽度拉到几十微米。
另外,很多PDK在噪声模型里会包含栅噪声模型,版本和模型参数不一定准。仿出来的NFmin如果比量产测试低太多,就要怀疑是不是模型对该工艺的栅噪声建模偏乐观。这种时候可以把模型里的相关噪声系数设为默认,再和实测数据对比一次。
5. 大信号仿真:PSS/Pnoise与HB
5.1 PSS设置里的几个关键参数
PSS在SpectreRF里是做周期稳态分析,把电路在某个基频下的大信号工作点解出来,相当于给电路拍一张"大信号照片"。LNA本身是线性放大器,理论上不需要PSS,但只要你后面要做Pnoise,或者电路里有周期性开关动作、自动增益控制切换,就必须先跑PSS。就算只看P1dB,也需要用PSS或HB把大信号状态算准。
PSS的设置里最容易错的是beat频率。对单音情况,beat frequency必须等于输入信号频率,比如2.4GHz。谐波次数(number of harmonics)我一般设5~9,太少则非线性产物算不准,太多则仿真时间暴涨。误差控制参数先选"moderate",如果跑不收敛再降到"conservative",但不要一上来就用最保守档,否则一个PSS跑半小时很常见。
碰到收敛困难的电路,我通常按这个顺序调:先确认仿真前DC是收敛的,再检查有没有不明原因的高Q谐振节点,然后在PSS里打开"homotopy"并把方法设为gear2only或srcstep,最后加大"maxac"和"maxstep"的尝试次数。90%的PSS不收敛问题,都能在DC或者测试台结构上找到根源,剩下10%才真是数值算法的事。
5.2 Pnoise处理变频噪声的思路
Pnoise,全称Periodic Noise分析,解决的是大信号工作点下噪声如何周期变化并变频的问题。最常见的应用是混频器:RF输入频率fRF,本振频率fLO,输出在中频fIF。这时需要先跑PSS(以fLO为beat频率),再做Pnoise,把输入端口和输出端口设置好,sweep type选择"relative harmonic",通常看-1次边带,也就是fIF处由fLO混频下来的那部分噪声。测出来的就是SSB噪声系数。
你可能想问,LNA单独仿真时有必要跑Pnoise吗?我的看法是:如果只仿LNA本身,用普通noise分析就够了;但如果LNA和混频器已经做成一个模块,或者LNA偏置里有时变开关,就必须用PSS+Pnoise把整个链路的噪声算准。否则你用LNA单独NF和混频器单独NF手算级联,往往和实测对不上,就是因为没考虑周期时变噪声的相关性。
Pnoise里还有一个容易踩的点:noise type的选项,sources和timeAverage两种方法在不同场景下结果会有差异。对混频器链路,我习惯用timeAverage去得到更接近物理的等效噪声功率;如果只是验证LNA的大信号噪声特性,用sources算起来更快。建议同一个电路两种模式都跑一遍,如果差别超过0.2dB,就要回头检查PSS是否收敛。
6. 线性度仿真:P1dB与IIP3的提取
6.1 用HB扫功率画P1dB
P1dB的定义很直白:增益比理想线性曲线下降1dB时的输入功率。用SpectreRF实现时,我通常用hb分析,基频设为工作频率,然后对这个输入信号源的功率做参数扫描。在ADE里把输入功率设成变量prf,扫描范围从-20dBm到+5dBm看电路承受能力,步长2dB,特殊时候用1dB步长。
跑完之后打开输出端的基波功率,横轴是输入功率、纵轴是输出基波功率,把理想斜率为1的参考线和实际曲线画在一起,找它们相差1dB的点。这个点对应的输入功率就是输入P1dB,输出功率再加1dB就是输出P1dB。注意实际项目中还会看"IP1dB"和"OP1dB"的区别,前者看你输入的承受能力,后者看输出到后级的最大可用线性功率。
P1dB这个指标和偏置关系很大。把电流调大通常能改善P1dB,但会牺牲功耗和NF;所以一个LNA的P1dB到底要多少,取决于后级ADC对最小无杂散动态范围的要求,千万别脱离系统指标单独追求高线性度。
6.2 双音测试提IIP3,避开那几个坑
IIP3标准做法是双音测试:两个频率非常接近的输入信号,比如2.400GHz和2.401GHz,经过LNA后产生2.399GHz和2.402GHz的三阶互调分量。用hb分析时,要在分析窗口里设置两个fundamental tones,并且让谐波阶数覆盖到至少3阶,我一般把每个音的maxsideband设成5甚至7,确保三阶分量不会被数值截断吞掉。
然后同样对输入功率扫描,分别画出基波分量(比如2.400GHz)和IM3分量(2.399GHz或2.402GHz)的输出功率,它们是两条不同斜率的直线——基波斜率1,IM3斜率3。延长相交处对应的输入功率就是IIP3。我不太依赖自动化工具读数,一般直接用Calculator里的x_y取点做两条斜率线,这样对异常数据看得更清楚。
双音测试有几个经验坑。第一,两音频率间隔要合理,太近时低中频附近电源噪声会影响IM3,太远则不能代表带内真实互调,一般取工作频率的0.1%~0.5%。第二,输入功率起点不能太低,不然IM3被数值噪声淹掉,提出来的IIP3会漂得离谱,最好从-30dBm左右起步。第三,输出端保真度很关键,IM3功率本来就小,如果负载或探针加得不干净,会被寄生抵消掉,导致"IIP3无穷大"这种假象。
如果你只是想快速预估,也可以用pdisto做单音失真分析,它对仿真资源的要求低很多,可以作为最终双音验证前的一个粗筛参照。
7. 稳定性检查:别等流片回来才发现
7.1 从SP结果算稳定性因子
LNA稳定性问题上,最常见的一句话叫"无条件稳定"。判据有两个:一个是Rollett稳定性因子K要大于1,另一个是辅助条件|Δ|<1,其中Δ=S11S22-S12S21。也有一部分人更喜欢看μ因子,它同时包含了K和Δ两个条件,μ>1就无条件稳定。在Cadence的Calculator里,选定SP结果后可以直接调kf和b1f这俩函数画K和B1曲线,省去手算。
这里我特别提醒:稳定性必须看整个扫频范围,不能只盯工作频段。很多LNA在带外某个频点K小于1,看起来好像没影响,但只要源端或负载端有一点失配反射,就可能自激。我带过的项目里,LNA低频段自激的概率其实比带内高得多,原因往往是偏置网络或者扼流电感和片内电容组成了谐振回路。所以SP扫频范围一定要宽,至少从100MHz扫到10GHz,低频段扫到低至10MHz也不嫌多。
7.2 特殊情况:带增益开关/旁路模式的LNA
如果LNA内部有增益档位切换、旁路模式或者ATT衰减网络,稳定性必须对每个模式分别检查。同一颗管子在不同栅压下S参数变化很大,K因子的曲线也完全不同。有的模式带内正常,低增益模式下却振荡了,这种问题在仿真阶段很容易被漏掉,因为很多人只仿一个默认模式。
另外,封装寄生和板级寄生对稳定性影响巨大。金丝键合电感、引脚电容一加进去,带外S参数就会变;所以我一般会准备两个版本的testbench,一个不带任何寄生看理想性能,一个在输入输出串联等效键合电感后看真实条件下的稳定性。如果后者K因子出现低于1的频段,就在版图和封装上想办法,同时尽量保证源端和负载端的驻波比在极限情况下也不会触发自激。稳定性这个指标不像增益和NF那样能直观看到收益,但它是流片回来之后最让人头疼的问题,前期多花半小时检查,能省下后面几天调试台架的功夫。
8. 常见问题与排查实录
8.1 仿真不收敛怎么办
我先给一个排查顺序表,这些都是我实际处理过的场景:
| 现象 | 排查方向 | 常用解决办法 |
|---|---|---|
| PSS不收敛,报"Newton iterations failed" | 先查DC和模型 | 打开homotopy选srcstep或gear2only,加大maxacceps |
| SP分析在低频频点报奇异 | 电感模型或浮空节点配合问题 | 起始频率从100MHz起步,或加入有限串联电阻 |
| noise分析报"input source not found" | 输入源没用port,用了vsin | 把输入源换成analogLib里的port,指定r=50Ω |
| 仿真结果发散成NaN | 理想电感并联理想电容成LC储能回路 | 给电感串一个小电阻,或用RFC模型 |
| 器件未定义/model not found | PDK库路径或模型调用错误 | 检查Library Paths,确认模型文件被正确include |
PSS不收敛还有一个常见原因是输入信号的"大信号"标记得不对。SpectreRF里不是每个源都是大信号,只有被标记为large的源才参与PSS的稳态求解;如果你发现自己设了PSS但损耗分布都不对,去direct plot里检查一下源的属性,大概率是源被当成了小信号处理。
8.2 结果明显不对时的定位思路
仿真结果"一看就不对"的时候,最忌无头苍蝇式地乱改参数。我一般按这个思路定位:先确认DC偏置和原始意图一致,再检查测试台有没有把RF接地搞错,然后确认端口参考阻抗和分析频率范围,最后才怀疑匹配元件值。
举个例子,有一次S11在2.4GHz附近一直平着,没有谐振谷,查了半天发现输入port的参考地悬空了,信号压根没进到管子栅极。还有一次NF跑出负值,后来发现noise分析的输入源选错了对象,算法把输出噪声除到了一个不存在的源阻抗上。这些都不是稀罕事,所以你别太信任仿真软件的输出,尤其是数值特别"完美"的时候,先回头查一遍测试台。
9. 最后再分享一点实操心得
我这几年用Cadence Virtuoso做LNA和射频前端的体会,可以归结成一句话:仿真规范比仿真操作更重要。同样的电路,有人一小时能跑出全部指标,有人折腾一下午还在跟PSS的报错较劲,差别往往就在有没有一套固定的testbench模板、有没有把频率和功率都做成变量、有没有在跑大仿真之前先跑一遍小仿真确认环境没问题。
另外我一直习惯把SP、noise、PSS、hb这些分析放在同一个ADE State里保存,每次只改变量不改配置,这样corner扫描和参数扫描都能复用同一套分析设置。等到你要画Gain、NF、IIP3随温度或者电源电压变化的曲线时,就知道这个习惯能省多少事了。最后说个小技巧:如果你在做宽带LNA,记得在SP分析之外再单独跑一次跨频段的K因子扫描,宽带电路的自激风险比窄带高得多,这颗雷越早排越安心。