第三章 仿真工具介绍与设置:Cadence Spectre/ADS仿真环境搭建
做LNA的1dB压缩点仿真,工具选对只是第一步。怎么搭环境、怎么设参数,才是真正拉开工程师差距的地方。我见过太多人拿着最新的PDK,却因为仿真器设置不对,折腾一整天都跑不出一个靠谱的P1dB曲线。
这一章,咱们就聊聊Cadence Spectre和ADS这两大主流工具的环境搭建,以及PSS与PAC分析的核心要点。嗯,都是实战中反复踩坑后总结出来的东西。
3.1 Cadence Spectre仿真环境搭建
Spectre在RFIC领域算是老大哥了。我个人习惯用IC617或IC618搭配MMSIM15.1以上的版本。版本太老的话,PSS收敛性会差很多。
3.1.1 基础环境配置
先说说最基础的——PDK加载。很多新手上来就报错,十有八九是PDK路径没指对。
# 在.cdsinit或.bashrc中设置
setenv PDK_DIR /home/design/PDK/TSMC65nm
setenv MMSIM_HOME /opt/cadence/MMSIM151
setenv CDS_Netlisting_Mode Analog
# 启动命令
virtuoso &
这里有个坑:CDS_Netlisting_Mode一定要设成Analog。我曾经因为忘了设这个,结果Spectre把数字网表也带进来了,仿真速度慢得离谱。
3.1.2 ADE L/XL/GXL选择
做P1dB仿真,我建议直接用ADE XL。为什么?因为要扫输入功率,ADE L每次都要手动改参数,太累了。XL可以一次设好扫描范围,跑完还能直接看结果。
| 工具 | 适用场景 | 我的建议 |
|---|---|---|
| ADE L | 单点验证、快速调试 | 只适合看DC或小信号 |
| ADE XL | 参数扫描、P1dB仿真 | 主力工具,强烈推荐 |
| ADE GXL | 多目标优化、良率分析 | 进阶使用,新手慎入 |
3.1.3 Spectre仿真器参数设置
跑PSS之前,有几个关键参数必须调。默认值往往不够用。
核心参数清单:
- tstab(稳定时间):设为载波周期的50-100倍。比如2.4GHz,tstab至少设到50ns。
- maxperiods(最大周期数):默认4,我一般设到8-12,收敛性会好很多。
- oversample(过采样率):默认1,建议设成4或8,谐波精度更高。
- reltol(相对误差):默认1e-3,做P1dB时我习惯收紧到1e-4。
为什么tstab要设这么大?因为LNA的偏置电路有RC滤波,建立时间很长。如果稳定时间不够,PSS算出来的工作点就是错的,后面的PAC结果全废了。我吃过这个亏,那次整整浪费了两天。
3.2 ADS仿真环境搭建
ADS在射频系统级仿真上有天然优势。如果你做的是模块级LNA,Spectre更合适;但要是做系统级链路预算,ADS是首选。
3.2.1 原理图与仿真控制器
ADS里做P1dB仿真,核心是HB(谐波平衡)仿真器。不是SPICE,也不是AC。
// 在ADS原理图中放置以下控件
HB1: HARMONIC_BALANCE
MaxOrder=5
Freq[1]=2.4 GHz
Order[1]=5
SweepVar="Pin"
Start=-30
Stop=0
Step=0.5
// 测量公式
Pout_dBm = dBm(HB.Vout[1])
Pin_dBm = dBm(Pin)
P1dB = p1dB(Pout_dBm, Pin_dBm)
这里要注意MaxOrder。做LNA时,非线性主要来自三次谐波,所以Order设到5就够用了。设太大反而会让仿真变慢,而且容易不收敛。
3.2.2 仿真器参数对比
| 参数 | Spectre PSS | ADS HB |
|---|---|---|
| 核心算法 | 时域打靶法 | 频域谐波平衡 |
| 收敛性 | 强非线性时易发散 | 对强非线性更鲁棒 |
| 谐波数量 | 自动截断 | 手动设置Order |
| 仿真速度 | 中等 | 谐波多时慢 |
说白了,Spectre的PSS适合弱非线性(LNA正好属于这一类),ADS的HB更适合PA那种强非线性场景。但如果你做的是LNA的P1dB仿真,两个工具都能用,看个人习惯。
3.3 PSS与PAC分析简介
这两个分析是1dB压缩点仿真的核心。很多教材讲得云里雾里,我试着用大白话解释一下。
3.3.1 PSS(周期性稳态分析)
PSS要解决的问题很简单:电路在周期性大信号驱动下,最终稳定下来的工作点是什么?
你想想看,LNA的输入信号是正弦波,幅度很大时,晶体管的工作点会随着信号摆动。传统的DC分析只能算静态偏置,算不了这种动态情况。PSS就是干这个的。
我的经验:PSS收敛失败时,别急着改算法。先检查tstab够不够,再看输入功率是不是设得太大了。有一次我直接把Pin设到+10dBm,PSS死活不收敛——后来才意识到,LNA在这么大输入下已经饱和了,PSS当然算不出来。
3.3.2 PAC(周期性AC分析)
PAC是在PSS算出的稳态工作点上,叠加一个小信号扰动,然后计算电路的线性响应。说白了,就是“大信号下的AC分析”。
为什么不能用普通AC?因为普通AC假设电路是时不变的。但LNA在大信号下,晶体管跨导是随时间变化的。PAC能捕捉到这种时变效应,算出来的增益才是真实的。
3.3.3 PSS+PAC联合仿真流程
做P1dB仿真时,标准流程是这样的:
- 设置PSS:指定频率、tstab、maxperiods
- 扫描输入功率:从-30dBm到0dBm,步长0.5dB
- 在每个功率点跑PSS:得到稳态工作点
- 在每个功率点跑PAC:得到小信号增益
- 绘制增益 vs 输入功率曲线:找到增益下降1dB的点
注意:PSS和PAC必须用同一个仿真器实例。很多人分开跑,结果PSS的工作点和PAC对不上,P1dB算出来完全是错的。
3.4 知识体系结构图
下面这张图把本章的核心逻辑串起来了。从工具选择到参数设置,再到PSS/PAC的配合关系,一目了然。
3.5 避坑指南与个人经验
最后分享几个实战中容易踩的坑:
- tstab设得太短:PSS收敛了,但工作点不对。检查方法:看PSS输出的DC电压是否和预期一致。
- oversample设成1:谐波精度不够,P1dB可能差2-3dB。我一般设4起步。
- PAC频率点太少:只扫基频是不够的。至少要包含二次和三次谐波,才能准确反映非线性。
- 忘记设Port阻抗:Spectre里Port默认50Ω,但ADS里要手动设。不设的话,增益和P1dB全不对。
一句话总结:PSS算稳态,PAC算增益,两者配合才能得到真实的P1dB。工具只是手段,理解背后的物理才是关键。