第一次用ADS做振荡器仿真的人,十有八九会在第一步就卡住——明明照着别人的电路图摆了一堆电感电容和管子,跑瞬态,波形却是一条死寂的平线;你以为是自己原理图错了,折腾半天发现人家在关键节点藏了一个“启动脉冲”,而这个细节从来没人写进教程。交叉耦合VCO是锁相环和频率源里绕不开的经典拓扑,ADS2020的谐波平衡仿真又是验证它的标准流程,我在这套链路里前前后后踩了无数坑,今天把从原理图搭建到相位噪声分析的完整流程和排查思路一次讲清楚。这篇东西适合刚接触射频仿真、准备做PLL或者频率源的工程师,也适合已经调了几版电路但相位噪声始终下不去的朋友对照自查。
1. 交叉耦合VCO到底赢在哪里:负阻补偿、差分抑制与相噪公式
1.1 负阻的直觉理解:不是“制造能量”,而是“抵消损耗”
很多教程一上来就堆公式,把交叉耦合说得神乎其神。我的理解很简单:LC谐振腔本身是有损耗的,等效成一个并联电阻,这个电阻在不停地消耗能量。普通放大器要维持振荡,得靠正反馈不断补能量;交叉耦合对则是呈现出一个“负电阻”,从数学上把谐振腔里的正电阻抵消掉,能量损耗变小了,振荡自然就维持住了。
为什么说交叉耦合对的输入阻抗是负的?你看M1、M2两个管子,M1栅极接M2漏极,M2栅极接M1漏极,交叉一接,差模信号看到的跨导是正的,但反馈到输入端时相位反了,就等效成一个负阻。理想情况下差模输入阻抗的实部约等于-2/gm。负阻绝对值越大,“抵消损耗”的能力越强,起振就越容易。
用大白话打比方:LC槽路像一辆在平路上滑行的自行车,轴承摩擦和风阻一直在让它减速,这就是损耗电阻;交叉耦合管像是每隔几秒在背后轻轻推一把的人,只要你推的力比摩擦耗掉的力大,车速就不会掉下来,甚至越跑越快直到非线性能量平衡。
1.2 差分结构为什么对相位噪声友好
单管共栅或者共基振荡器不是不能用,但交叉耦合VCO在高性能锁相环里能笑到最后,靠的是差分架构带来的两个收益。
第一是共模抑制。电源线上的噪声、地弹、衬底耦合噪声,在完全对称的差分电路里会以共模形式出现,理论上不会转换成差模信号,也就不会直接注入振荡回路。ADS仿真里你常常能看到:单端考毕兹振荡器在1MHz频偏处可能是-95dBc/Hz,而同样的谐振腔和电流预算,对称交叉耦合VCO能做到-105dBc/Hz左右,差出来的这10dB,很大一部分就是差分结构对共模噪声压制的功劳。
第二是波形对称性。完全对称的差分输出,其波形正半周和负半周几乎完全一致,偶次谐波分量极小。而相位噪声跟波形在过零点附近的变化速率直接相关——波形边沿越陡,相同的噪声电压扰动造成的时域抖动就越小。交叉耦合对的尾电流源一旦进入电压限制区,管子相当于工作在开关状态,输出摆幅可以做得接近电源电压甚至更大,波形边沿自然更陡。玩过时域波形的人都懂:谐振腔Q值决定波形正弦度,交叉耦合对决定边沿速率,两者一个管频谱纯度,一个管相位抖动。
1.3 用Leeson公式反推低相噪设计准则
相位噪声绕不开Leeson模型,虽然它是经验公式,但用来指导设计非常好用:
L(fm) = 10log10( (FkT / 2Psig) × (1 + (f0 / (2Q·fm))²) )
其中F是噪声系数,Psig是谐振回路的信号功率,Q是谐振腔有载品质因数,fm是频偏。这个公式给出三条低相噪设计路径:提高谐振腔Q值,提高振荡信号功率,降低电路噪声系数。但工程上这三条路全都不是免费的——提高Q值往往意味着牺牲调谐范围,提高功率就要增加功耗,降低F则要优化管子的尺寸和偏置。交叉耦合结构能成为主流,也是因为它能同时在这三条路径上都做到不错的平衡。
还有一个常被忽略的点:这个公式里的F不是单一管子的噪声系数,而是整个环路所有噪声源折算到谐振腔上的等效值。所以交叉耦合对管子的闪烁噪声、尾电流源的噪声、变容管的噪声,最后都会叠加到相位噪声曲线上。这也是为什么后文做ADS相位噪声仿真时,你不能只看总曲线,还要学会拆噪声源贡献。
2. ADS2020工程环境准备:模型库、单位、变量面板一个都不能少
2.1 新建工程时的单位问题,比你想的更阴险
打开ADS2020,第一步File → New → Workspace,很多人顺手就点了确定,结果画版图时发现所有尺寸都是mil(密尔),只能自己把单位改回mm或者um。ADS的Workspace单位是全局的,影响原理图、版图、EM仿真所有环节,最稳妥的做法是在新建时直接选mm,或者干脆在创建完成后进入File → Design Parameters里把Unit改成millimeter/um。这个问题在原理图仿真阶段还不容易暴露,等你把电路倒进版图再想改单位,所有坐标全部错乱,那个酸爽谁试谁知道。
另一个容易被忽略的是仿真控制器里的时间单位和频偏单位。瞬态仿真TRAN控制器的StopTime默认单位可能是nsec,而HB控制器的噪声频偏点默认是Hz,如果你填了个频率数组却忘了写单位后缀,ADS会按默认单位解析,最后出来的相位噪声曲线可能整体漂移。我的习惯是:所有参数不管默认值是什么,一律把单位后缀写全,比如2n、4m、5GHz、1MHz,宁可啰嗦也不要让它猜。
2.2 没有PDK工艺库,这套流程能不能跑?
能,而且新手我很建议先不急着装PDK,先用模型库自带的MOS管把流程跑通,再切换到实际工艺库。ADS里如果没有外部的TSMC、UMC等PDK,可以在Component Library里搜索NMOS,会找到一种理想/通用MOS模型,给它填上模型参数就能当普通NMOS用。不过你需要知道这种理想模型没有噪声参数,相位噪声仿真的绝对值参考意义不大,但流程验证和相对对比完全够用。
如果你的PDK是像TSMC0.18um RF工艺,安装时最容易踩的坑是工艺库路径没有加入ADS的配置文件里。正常流程是把PDK解压后,在ADS里通过 DesignKit → Manage Design Kit 添加,指定到含有lib.defs的目录。很多人在这一步直接指定到最外层,导致打开原理图时所有器件图标都是红色不可用的状态。记得一定要指定到真正包含lib.defs的那一层目录。
我见过不少人在没装PDK之前就硬着头皮用理想模型搭电路,等PDK装好以后重新调管子尺寸,结果之前调优的参数全部作废。正确做法是:先把理想模型的拓扑和仿真链路跑通,确认起振条件和相位噪声仿真流程都正常,再花时间装PDK、迁移器件模型。这样分工明确,排错也容易。
2.3 用VAR参数面板管理设计变量
ADS里要把一个电感值、一个电流值改来改去扫描的时候,如果每次都在元件参数里手动改,效率非常低。标准做法是拖一个VAR元件到原理图上,把所有关键设计变量集中定义:
VDD=1.8 I_tail=4m Ld=2n Cfix=300f Cvar0=500f Wn=20u Ln=0.18u然后在具体元件参数里填变量名,比如电感值填Ld,管子的Width填Wn。这样做的好处不仅仅是方便扫描,更重要的是ADS在谐波平衡仿真里需要有一个明确的参数空间做变量扫描,你后续想跑Vtune从0到1.8V的相噪曲线,只要在HB控制器里设置Vtune为扫描变量就行。变量名最好用有意义的英文加单位前缀,比如Ld代表Drain端的电感,Cv代表Varactor电容,不要用a、b、c这种名字,等一个星期后回来看仿真文件时你会感激自己当时用了可读的命名。
3. 原理图搭建和瞬态起振验证:连线顺序与启动激励是关键
3.1 一个可复现的5GHz交叉耦合VCO初始参数表
下面这组参数是我在0.18um CMOS工艺下调出来的起点,你可以直接抄进ADS跑第一版,然后再根据实际仿真结果调整:
| 器件 | 参数 | 初始值 | 备注 |
|---|---|---|---|
| M1/M2(交叉耦合对) | W/L/m | 20um/0.18um/8 | 计算负阻的关键 |
| Mtail(尾电流源) | W/L/m | 30um/0.18um/4 | 决定总电流 |
| L1/L2(漏极电感) | L | 2nH | 差分对称放置,中央抽头接VDD |
| Cfix(谐振固定电容) | C | 300fF | 并联在谐振腔两端 |
| Cvar1/Cvar2(变容管) | C | 200fF~1pF,Vtune=0.6V时约500fF | 用可变电容模型或变容二极管 |
| Vtune(调谐电压) | V | 0.6V | 起振验证阶段固定 |
| VDD | V | 1.8V | 电源 |
| R_iso(Vtune隔离电阻) | R | 10kΩ | 防止调谐电压从电感端漏进去 |
谐振频率的估算很简单:f ≈ 1/(2π√(Leq·Ceq))。以2nH电感和总谐振电容约500fF为例,f约等于5.03GHz,刚好落在5GHz附近。这里的Ceq是Cfix、变容管Cvar、管子寄生电容三者的并联值,实际仿真时你会发现管子寄生电容会把频率往下拉,所以原理图初值通常都不准,需要根据瞬态仿真跑出来的实际频率回推再修正。
功耗端先算一笔账:VDD=1.8V,I_tail=4mA,静态功耗7.2mW,在5GHz频段这是不奢侈的预算。尾电流源Mtail的栅压需要单独偏置,可以通过一个电流镜或者直接给一个理想的Vbias=0.8V来设置。相位噪声仿真阶段,如果尾电流源的噪声贡献太大,还得在源级和地之间加去耦电容,或者在Mtail栅极加RC滤波,这些后文再说。
3.2 连线顺序:先把电源偏置打通,再搭谐振腔,最后交叉耦合
很多新手喜欢从输出端开始往前反推连线,结果电源和地经常接错。我自己的习惯是按照信号流顺序分步搭:
第一步,放置所有有源器件和电源/地符号。把M1、M2、Mtail放上去,先别急着交叉连线。给M1、M2的栅极接上各自的漏极再交叉,这句话念起来简单,但ADS原理图上很多新手会把栅极接到对面管子漏极这一步漏掉,导致变成两个独立的共源放大器,跑出来的波形自然不对。M1的栅极接M2的漏极,M2的栅极接M1的漏极,源极在节点S汇合接到Mtail的漏极。
第二步,搭谐振腔。把L1、L2对称放置在左右两臂,一端接输出节点,另一端通过一个理想扼流电感或直接接VDD。在ADS里,直接用大电感代替射频扼流圈是常见做法,比如RFC=100nH;如果你后续要用EM联合仿真,这个理想RFC最终要靠实际电感或者有源电感替代。在差分两侧各并联Cfix和Cvar,Vtune通过10k欧姆的R_iso接到变容管控制端,避免调谐电压被谐振腔射频信号干扰。
第三步,验证偏置点。先在原理图上加一个DC仿真控制器,跑一遍直流通路。重点检查Mtail的VDS是否足够大,M1/M2是否工作在饱和区。如果Mtail的宽长比太大导致压降太小,管子进入线性区,尾电流源就不是理想电流源,共模抑制能力会大幅下降。
3.3 瞬态仿真验证起振:为什么必须给一个启动激励
理论完美的LC振荡器在没有任何初始扰动时,输出是恒定的直流,永远不会起振。真实电路里有热噪声可以作为启动源,但ADS瞬态仿真的默认噪声模型通常不会自动注入随机扰动,所以你必须手动打破这个平衡。这是“不起振”最最常见的原因。
在原理图上找一个谐振节点,并联一个脉冲电流源I_Pulse,幅度设10mA,脉宽设几十皮秒,延时可设为0。这个脉冲相当于用手推了一下秋千,给谐振腔注入一个初始能量,之后脉冲源就退出了,振荡器靠负阻维持稳态。脉冲电流源的方向、幅度都不需要太精确,但脉宽一定要远小于振荡周期,否则会产生额外的频谱分量污染起振过程。
TRAN控制器的设置我给一组实践值:
- StopTime = 200ns
- MaxStep = 5ps
- Initial Step = 1ps
200ns在5GHz下是1000个振荡周期,足以判断振荡幅度是否稳定到稳态。MaxStep取振荡周期的四十分之一左右,5ps在5GHz下大概是周期的四十分之一,基本够用,如果你要观察波形的过零点细节,可以再加密到2ps。仿真跑完以后,看输出节点out_p和out_n的时域波形。
起振正确的波形应该是一个幅度从小变大、最后进入稳态限幅状态的正弦波。振荡幅度稳定的判据:后50ns的峰值包络不再明显增长,说明已经进入稳态。如果你的波形是衰减的正弦波,先别急着改电路,很可能是仿真时长不够,谐振腔Q太高导致起振过程太慢。可以尝试延长StopTime到500ns看看趋势;如果还是衰减,才需要回过去检查负阻裕量。
我在调第一版电路时,波形一直是衰减的,加了脉冲也没用,排查了很久。最后发现是M1/M2的W/L取太小,gm不够,负阻绝对值小于谐振腔等效并联电阻,振荡器相当于一个阻尼很高的谐振电路,能量每次振荡都在净损耗。把W从10um加到20um之后,波形立刻从衰减变成起振。这个经验告诉你:起振验证阶段,宁可把W/L调大一点,先确认拓扑和仿真流程没问题,再回过头来做功耗和相噪的折中。
4. 相位噪声仿真:为什么必须用谐波平衡,HB参数如何设
4.1 AC噪声分析为什么测不了振荡器的相位噪声
很多从低频电路转过来的工程师第一次做振荡器,下意识会用AC小信号分析去看噪声,结果发现完全得不到有意义的相位噪声曲线。原因不复杂:AC噪声分析假设电路工作在线性时不变状态,把所有噪声源在一个固定直流工作点上做小信号泰勒展开。可振荡器的工作点是周期时变的,它的输出幅度远大于小信号范围,并且相位噪声本质上是一种非线性特有现象——幅度扰动会被限制,相位扰动却会随机游走。你没法在直流工作点周围用一次线性化去描述振荡器对噪声的响应,所以必须用周期稳态仿真,把电路的大信号周期解求出来,再在这个周期解上做噪声分析。
ADS里承担这个任务的是Harmonic Balance(谐波平衡)仿真。谐波平衡把电路分成线性部分和非线性部分,线性部分在频域求解,非线性部分在时域求解,再通过傅里叶变换沟通两个域,迭代出一个完整的大信号周期稳态解。这个稳态解本身就包含各次谐波分量,适合描述振荡器非线性限幅后的行为。
4.2 从瞬态转HB:把时域结果翻译成频域条件
当你用瞬态仿真确认起振且幅度稳定之后,下一步就是建立HB仿真。我的建议是不要跳步,一定要先用瞬态看实际振荡频率,再把这个频率写进HB,否则HB控制器里给的初始频率偏差太远,收敛会很痛苦。
一个完整的HB振荡器仿真是这样安排的:在原理图里添加HB1Tone控制器,把Fundamental频率设为你从瞬态波形FFT里读到的实际振荡频率附近,比如5.0GHz。在振荡节点放置OscPort(Oscillator元件库里的特殊端口),它会在你设定的频率范围内自动搜索满足振荡条件的自激频率。OscPort本质上是一个虚拟的测试端口,它会向电路注入一个微小的试探信号,然后判断这个信号在同频点有没有被环路增益放大到可以自持,如果满足就迭代出稳态解。
HB控制器的关键参数我给了这样一套起步值:
| 参数 | 起步值 | 作用 |
|---|---|---|
| Freq[1] | 5GHz | 基波频率,接近实际振荡频率 |
| Order | 7 | 谐波阶数,振荡器需要3~11阶左右 |
| MaxIterations | 500 | 收敛迭代上限,不够再加 |
| Oversample | 2 | 提高频域离散精度,抑制混叠 |
| UseOscPort | Yes | 自动搜索振荡频率 |
| Calculate Noise | Yes | 计算噪声数据 |
| NoiseCons 频偏点 | [10kHz, 100kHz, 1MHz, 10MHz] | 输出相位噪声的频偏列表 |
Order取7的意思是谐波平衡会计算到基波的7次谐波。对LC振荡器来说,5次到7次足够描述非线性削波过程,太高会显著拖慢仿真速度。如果你用了C类偏置或者波形特别尖锐的电路,可以试着把Order加到9或11,观察相位噪声结果有没有明显变化,如果没有,说明谐波阶数已经够了。
NoiseCons的频偏点一般按对数间隔设四五个点就够了,从10kHz到几十MHz,够看到1/f^3和1/f^2两个主要区段。如果后续要做PLL瞬态仿真提取相噪拟合参数,最好把频偏点加密,尤其在100kHz到1MHz之间加几个点,这对锁相环带宽附近的噪声贡献很重要。
4.3 相位噪声曲线怎么看:识别1/f^3区、1/f^2区和平底
HB仿真跑完后,在数据显示窗口里新建一个曲线图,把数据集中pnmx相关的量拖出来,横轴用噪声频偏nmx,纵轴单位dBc/Hz。ADS在新版本里一般可以直接看到Phase Noise绘图选项,或者用表达式phase_noise(hb)来调用。如果你像我一样习惯手动控制,在数据显示窗口里新建一个表达式:
pnmx(hb, "pnmx", 1)这是一条以频偏为横轴的相位噪声曲线。正常LC交叉耦合VCO的相位噪声曲线应该长这样:
- 频偏10kHz以内:斜率大约-30dB/dec。这是闪烁噪声(1/f噪声)上变频主导的区域,对应Leeson公式里的(1/fm)^3项。
- 频偏100kHz到几MHz:斜率大约-20dB/dec。这是器件热噪声通过相位调制机制形成的区域,对应(1/fm)^2项,也是评估VCO相噪的常用指标区间。
- 更远频偏:曲线会慢慢被仿真器的数值底噪或者相噪平台的某个边界拉平,比如-150dBc/Hz以下。如果你看到曲线在高频偏处还是持续-20dB/dec下滑,可以怀疑仿真设置有问题,或者有个强噪声源泄漏到了输出端。
给你一组0.18um工艺5GHz交叉耦合VCO的参考值:在I_tail=4mA、VDD=1.8V、Q≈15的谐振腔下,1MHz频偏处做到-105到-115dBc/Hz是比较合理的结果。如果实测下来差太多,比如只有-90dBc/Hz,先不要急着怀疑工艺库,大概率是谐振腔Q值太低或者波形削波太严重导致的。
4.4 一个常见的HB收敛技巧:先用瞬态结果“喂”HB
HB不收敛是最常见的现象,报错信息往往是一堆电气值没有在误差允许范围内闭合。我自己的经验是按照下面顺序推进:
先把瞬态仿真得到的输出波形保存下来,然后回到HB控制器,在Initial condition或者Node Initial Guess里把瞬态最后几个周期的电压值作为初值。ADS里可以通过在HB控制器里指定Transient Initial Condition,或者直接用瞬态输出数据集作为初始猜测。更粗暴一点的操作是:先把Order降到3算一个宽松解,让HB先有个稳定的周期解,再把Order升到7重新计算。实测下来这个“先低阶找解、再高阶精算”的方法比直接硬算高阶收敛快得多。
5. 避坑清单:五类高频翻车现场的完整排查链路
5.1 瞬态仿真永远不起振:从输出平线到起振的完整排查
现象就是开头说的,输出是一条平线。完整的排查链路我建议按这个顺序走:
第一步,确认加过启动脉冲。没有脉冲源的热噪声启动在ADS瞬态里通常等于没启动,先把I_Pulse放上去再说。
第二步,看工作点。在DC仿真里查Mtail的VDS和M1/M2的VGS。如果Mtail没工作在饱和区,电流源变成电阻源,交叉耦合对的偏置点会偏到线性区,负阻消失。测出来Mtail的VDS小于0.1V的话,把Mtail宽长比稍微降低或者提高栅压,让VDS至少大于0.2V。
第三步,算负阻裕量。用你实际的W/L和偏置估算gm,再看谐振腔有载并联等效电阻Rp。起振条件是gm至少大于2/Rp,工程上留2到3倍裕量。Rp没法一眼看出来,你可以在瞬态仿真里给谐振腔单独串一个小电阻测衰减,或者用S参数仿真看Zin的实部。经验做法是:先把W加大一倍,如果波形开始起振,说明原来在负阻裕量边界上。
第四步,排查仿真时间。高Q谐振腔起振可能很慢,200ns不起来就试500ns,再看波形趋势。原则上起振速度与负阻裕量正相关,与Q值负相关,如果波形一直微幅增长但始终没到稳态,大概率是仿真时间不够,不是电路问题。
5.2 HB相位噪声全NaN:不收敛的常见原因和解决顺序
频谱曲线出得来,但相位噪声区域全是NaN,或者HB直接报不收敛。我自己遇到的情况基本跑不出这三类:基波频率给太偏、谐波阶数不够、没有用OscPort。
排查链路第一条:确认HB的Freq[1]和瞬态实际振荡频率的偏差不超过10%。交叉耦合VCO的频率受寄生电容影响很大,原理图估算的5GHz跟实际振荡频率经常差几百万赫兹到几十兆赫兹,你直接写5GHz可能就在收敛边界上。先用瞬态波形做FFT,把峰值频率读出来,再更新到HB里,这是最有效的收敛技巧。
第二条:把MaxOrder从3试到7再到11,观察相位噪声是否稳定。如果高阶时曲线出现剧烈跳变,说明某个谐波分量触发了混叠,可以把Oversample设成2或4再跑。
第三条:确认OscPort的方向和位置。OscPort要放在振荡回路上,并且从它到地之间必须有一条完整的交流回路。如果放在输出缓冲放大器的后面,HB会试图让整个缓冲链路自激,收敛就会很痛苦。正确做法是放在谐振腔主节点上,缓冲电路单独用S参数或者双端口HB验证。
5.3 相位噪声曲线在中频带鼓起一个包:从频谱底噪找线索
有个现象特别让人困惑:相位噪声曲线在100kHz到1MHz之间不是平滑的-20dB/dec下降,而是鼓出来一个包。一开始我以为是电路里某个偏置网络产生了谐振峰,排查了一圈发现是HB仿真的混叠效应。
排查链路:把HB仿真的谐波频谱打开,看基波附近是否有异常边带。如果某个边带幅度异常高,说明频域的离散化点数不够,噪声边带发生了混叠折叠。解决方法是把HB控制器里的Oversample加倍,或者把MaxSideBand调大。ADS里如果默认只计算到某个阶数的边带,超出部分的噪声就会折叠回来,形成曲线上的假凸起。还有一种情况是RETune端口或者NoiseCons的频率列表没有覆盖到包的位置,导致插值失真,这时候把频偏列表加密就能解决。
如果调整完仿真设置后发现包还在,才需要考虑真实电路问题:比如变容管在特定Vtune下和固定电容构成高阻谐振节点,把电源或衬底噪声耦合进了振荡回路。这种时候回到瞬态仿真,用不同Vtune跑频谱,观察边带是否随Vtune漂移,能帮你确认是不是真实效应。
5.4 调谐范围增大后相位噪声急剧恶化:KVCO和Q值的博弈
还有一个非常经典的设计冲突:为了把VCO调谐范围做大,把变容管面积加大,结果相位噪声掉了10dB。这件事的原理不难理解:变容管本质上是一个带损耗的可变电容,面积越大电容越大,但等效串联电阻也在增加,Q值随之下降。相位噪声对Q值极其敏感,从Leeson公式看相噪跟Q的平方成反比,Q从15掉到10,相噪就会恶化3.5dB左右。
更隐蔽的是KVCO变大带来的噪声放大效应。调谐范围变大意味着控制电压到频率的增益(KVCO)变大,Vtune上的任何噪声电压、甚至电源上的噪声,都会以更大的比例转换成频率噪声。排查时你看相位噪声曲线在低频偏处变化最明显,往往就是KVCO效应的体现。
解决思路不是不用大调谐范围,而是把范围分成多个子带:用开关电容阵列做粗调,用变容管做细调。ADS里可以搭一个简单的开关电容组,由外部控制位切换,让每个子带的KVCO保持在合理范围内。仿真时先把每个子带的KVCO打印出来,看Vtune从0到1.8V扫出的频率曲线斜率,如果斜率在某个区段明显变陡,就要重新分配粗调和细调的电容比例。
5.5 从原理图到版图EM联合仿真相噪恶化:绕不过的Q值变化
很多朋友做完原理图仿真兴奋得不行:相位噪声指标优秀,结果把版图画完倒进ADS做EM联合仿真,发现相噪恶化了好几dB,甚至振荡器都不起振了。这个坑我踩过两次,现在几乎成了肌肉记忆:只要进入版图阶段,先把无源器件单独提出来做一遍EM仿真,对比原理图里理想电感的Q值。
排查链路分三步。第一步,对比电感Q值。版图EM原生的差分电感和理想电感之间,Q值可能差了5到10,这直接决定相位噪声极限。第二步,检查走线寄生。差分输出到负载的走线如果不对称,或者跨层走线引入额外串联电感,都会打破差分平衡,让偶次谐波泄漏到地,等效于压低了谐振腔的Q值。第三步,检查电源去耦。版图里的VDD走线和电感中心抽头之间,会因为寄生电感形成一个高频谐振点,如果落在振荡频率附近,电源上的噪声就会灌进主谐振腔,让相噪曲线出现尖峰。
现在ADS2020里做EMCosim联合仿真已经比较成熟,你可以用EMModel在原理图里替换关键电感,其他部分保留在原理图层面做谐波平衡。经EM替换后,如果1MHz频偏处的相噪从-115dBc/Hz恶化到-107dBc/Hz,不要觉得是仿真出错了,这就是真实版图的代价。解决办法无非是老几样:电感用最高层金属加宽金属布线,地环路尽量对称,VDD到电感中心抽头之间加足够的去耦电容。
最后再分享一个我自己一直在用的工作习惯:把整套仿真链路保存成ADS模板,包括VAR参数面板、TRAN控制器、HB控制器、数据显示窗口的相位噪声坐标设置。下次拿到一个新工艺或者新指标,我只改参数,不重新搭电路,前前后后能省一两天时间。交叉耦合VCO属于射频设计里最经典的电路之一,把这个过程吃透以后,再做Colpitts、Class-C VCO甚至毫米波振荡器,核心思路都是同一套——先起振、再稳幅、最后用谐波平衡看噪声,所有坑都在这个过程中等着你依次踩平。