☰
VCO相位噪声仿真实战:Cadence ADE中PSS+Pnoise设置与排查
2026/10/6 11:10:33 网站建设 项目流程

做模拟电路的人,迟早会跟相位噪声打交道,尤其是做PLL、时钟、射频收发机这类方向。VCO作为PLL里最核心的模拟模块,它的相位噪声指标基本直接决定了整个系统的抖动和噪声底。很多刚接触Cadence Virtuoso ADE的同学,在跑VCO相位噪声仿真时,最典型的困惑就是:我知道要用PSS+Pnoise,但Beat频率到底填多少?PSS的精度设多大才够?Pnoise里参考源选什么?怎么看曲线才能得到准确的相位噪声数值?这篇文章我不打算做那种“点哪里、填什么”的填鸭式教程,而是把整套仿真流程背后的逻辑、参数选择的理由、实际踩过的坑,完完整整讲一遍,让你看完之后不仅能跑通,还能自己判断结果可不可信。

这套内容适合正在做VCO设计、准备流片前需要完整验证相位噪声指标的工程师,也适合研究生刚接触PLL项目、对着ADE界面一脸懵的同学。我会从概念梳理讲到参数设置,再讲常见报错和曲线异常的排查方法,尽量让你少走弯路。

1. 仿真前的概念梳理与方案选型

1.1 VCO相位噪声究竟在测什么

相位噪声描述的是振荡器输出信号在频域上的纯度。理想振荡器的频谱应该是一根无限窄的谱线,能量全部集中在载波频率上,但实际振荡器由于晶体管噪声、电源噪声、衬底耦合等因素,会在载波附近产生连续的相位扰动,表现在频谱上就是载波两侧的噪声裙边。

在Cadence ADE里,我们用的是Spectre仿真器,通过PSS(Periodic Steady-State,周期稳态)+ Pnoise(Periodic Noise,周期噪声)两种分析方式来获得VCO的相位噪声曲线。PSS负责计算振荡器在正常起振之后的稳态波形以及稳态工作点,Pnoise则在这个稳态基础上,把电路中的噪声源线性化,然后计算这些噪声源如何调制到载波附近,最终给出以dBc/Hz为单位的相位噪声曲线。

有一点要提前说清楚:VCO的Pnoise仿真结果,在偏离载波比较近的频率点(比如1kHz以内),仿真器给出的曲线往往会受到仿真器数值噪声和PSS收敛残差的影响,不一定完全准确。真正流片前的关键指标,更多看重中频偏和远频偏的相噪值,比如1MHz偏移、10MHz偏移。近载波区域的相噪,通常需要靠PLL环路带宽内的抖动计算来换算验证。

1.2 为什么要用PSS+Pnoise而不是直接瞬态

很多人刚接触时有疑问:我用tran仿真跑完时域波形,再用FFT看频谱,不也能看相位噪声吗?理论上可以,但实际工程中极少这么干,原因有两点。

第一,瞬态FFT的频率分辨率受限于仿真时长。你想看1kHz频偏处的相噪,就需要至少1ms的时域数据,采样率还得满足奈奎斯特条件,这会带来巨大的仿真代价,而且数值误差会淹没真实噪声。

第二,瞬态仿真难以将相位波动和幅度波动分离。Pnoise分析的强大之处在于,它会在振荡器的稳态轨迹上做线性周期时变(LPTV)分析,把噪声扰动分解成沿振荡轨迹方向的相位变化和垂直于轨迹的幅度变化,专门提取相位那部分贡献。这个机制保证了我们看到的曲线是“纯”相位噪声,而不是包含了AM噪声和电路其他非理想效应的混合结果。

所以说,PSS+Pnoise是Cadence ADE中做VCO相位噪声仿真唯一的标准做法,没有之一。你只要跑PLL类项目,这套流程迟早要烂熟于心。

1.3 仿真前的环境检查清单

在正式动手设置仿真之前,有几项检查值得先做一遍。这些检查不花多少时间,却能省下后面很多排查问题的精力。

第一,确认测试电路结构完整。VCO振荡核心、尾电流源、输出缓冲级、偏置电路都要接好,电源和地网络要正确。很多初学者在测试台里只放了VCO核心,没有加输出缓冲,结果Pnoise仿真时输出节点直接接到振荡器内部高阻节点,后级负载影响振荡频率和噪声特性,得到的结果根本不反映真实应用场景。

第二,确认模型库和工艺角配置正确。在ADE里选中正确的模型库,确认真实模型(不是ideal模型)被加载。跑相位噪声仿真必须用带有噪声模型的器件模型,如果拿理想模型跑,Pnoise分析得到的噪声几乎为零,毫无意义。

第三,确认VCO能正常起振。先跑一个简单的瞬态仿真,看几百纳秒内波形是否起振、振幅是否稳定、频率是否符合预期。如果连起振都起不来,PSS分析会直接报收敛失败,这个后面专门展开讲。

2. PSS分析的关键设置与实操细节

2.1 PSS的基本配置流程

在ADE L(或者ADE XL、ADE Explorer,原理一致)中,选择 Analyses,然后选择 pss。PSS的核心参数有四组:Fundamental Tones、Beat Frequency、Number of Harmonics、Accuracy Defaults。

其中Beat Frequency是整个PSS设置里最关键的参数。对VCO来说,Beat Frequency应该设为VCO的振荡频率。比如你的VCO设计目标频率是5GHz,那Beat Frequency就填5GHz。注意这里需要填的是实际振荡频率,不是理想计算值。我在工程里习惯先跑一次瞬态,用计算器量出实际振荡周期,再取倒数作为Beat Frequency,这样能最大程度避免因为频率偏差导致PSS不收敛。

Number of Harmonics一般设置为9到11之间比较合适。这个参数表示仿真器计算到多少次谐波,通常取10上下就够用。设得太小,谐波截断误差会影响Pnoise近载波区域的精度;设得太大,仿真矩阵规模成倍增加,收敛变慢,收益却很小。

Accuracy Defaults里有不同的精度档位,从liberal到moderate,再到conservative。初次尝试建议用moderate,如果遇到收敛问题再调到conservative。注意,精度档位放得太松可能导致PSS结果不收敛,但放得太紧也会让仿真时间暴涨,属于典型的“过犹不及”。

2.2 Beat Frequency与谐波数的内在逻辑

很多人不理解为什么Beat Frequency设置不对,PSS就会报错或者收敛缓慢。这里值得多讲几句。

PSS本质上是找电路在周期激励下达到稳态的周期解。对VCO而言,激励就是它自身的振荡,电路在无外部输入的情况下也存在周期性稳态。仿真器会根据你给的Beat Frequency去构造一个周期,然后用牛顿迭代法在这个周期内寻找满足周期性边界条件的解。

如果你给的频率和实际振荡频率偏差很大,相当于你强迫仿真器在错误的周期窗口里去凑一个稳态波形。这个波形在周期边界处会有很大的跳变,迭代过程很难收敛,或者即使收敛,输出的振荡频率也会被“拉”到你设置的频率上,得到完全错误的振荡结果。

我在实际中遇到过最典型的情况是:原理图里定了LC-VCO,后仿加了寄生电容,实际频率从5.2GHz掉到了4.8GHz,但我忘了同步修改Beat Frequency,结果PSS跑完之后输出的频率显示为5.2GHz,振荡幅度却低得离谱,相位噪声曲线整个偏平。这就是Beat Frequency设置不当导致的结果失真。

所以每次修改电路版图或者加寄生参数之后,先跑一个短瞬态确认实际频率,再改PSS里的Beat Frequency,是必须养成的习惯。

2.3 PSS收敛性调优

PSS不收敛是相位噪声仿真里最常见的报错,尤其后仿阶段。遇到“pss did not converge”或者“found no periodic steady-state solution”这类错误,我的排查顺序是固定的。

第一步,回到瞬态仿真,确认电路起振正常。如果瞬态在几百纳秒内波形正常、幅度稳定,说明问题不在电路本身,而在PSS设置或者数值算法。

第二步,修改PSS的收敛控制参数。在PSS Analysis的Configuration选项里,有一个Parameters标签页,可以设置Iteration Limit(迭代次数上限),默认一般是50次,可以提高到200次。另外可以设置Error Tolerance为相对误差或者绝对误差,比如相对误差设为1e-5,绝对误差设为1e-8,这些都需要根据工艺节点的电压量级来调整。

第三步,尝试在PSS之前先跑一个瞬态作为初值。在PSS窗口里,可以勾选Use Initial Condition from Transient,让PSS从瞬态解的终点开始迭代。这个办法对LC-VCO这类高Q值振荡器尤其有效,因为它本身起振慢,如果你从零开始做PSS,可能很长时间都在做无用功。但要注意,这个瞬态仿真时长要足够让VCO达到稳态振荡,否则初值本身就不准。

3. Pnoise分析:从相位噪声曲线到指标提取

3.1 Pnoise设置要点

PSS跑通之后,就可以添加Pnoise分析。Pnoise的设置在ADE中同样位于Analyses里,选择pnoise。

Pnoise的分析类型需要选为“jitter”或者“phase noise”,这是两个不同的计算模式。对于VCO应用,通常我们关注的是相位噪声,所以选择phase noise模式。如果后续要提取抖动指标,比如积分均方根抖动,可以改用jitter模式直接得到从指定频偏范围积分出来的抖动值。

Reference Sidebands这个参数一般设为1到3之间。它的意思是考虑多少次边带的噪声,默认值1通常就够。设得过高会增加计算量,对结果改善甚微。Noise Type选为sources,明确表示我们要考虑所有噪声源。Output可以选择电压输出,指定要观察的节点,我习惯在缓冲级输出端测试,而不是直接在振荡核心节点,因为这样包含了缓冲级自身的噪声贡献,更贴近实际。

有个小细节值得注意:Pnoise的输出节点需要是一个单端节点,如果是差分输出,需要手动在Output Differential Pair里指定正负两个节点。很多同学漏掉这一步,导致输出的相噪曲线看起来一切正常,但数值明显比预期大很多,原因就是差分节点的噪声计算方式不同。

3.2 Sweep范围和参考源选择的经验

Pnoise的Sweep Type通常选择Logarithmic,从1kHz扫到100MHz,或者从10kHz扫到1GHz,根据你要关注的指标来定。做PLL集成验证时,我们更关心近载波到环路带宽范围内的相噪,sweep起始点可以是100Hz;如果只看射频系统带外指标,10kHz到10MHz就够。

Sweep点数选择50到100点之间比较合适,点数太少曲线不光滑,点数太多仿真时间增加。实际上相位噪声曲线本身就比较光滑,50个点足够描述。

参考源在Pnoise里一般不需要特别指定,因为是振荡器自激,参考边带默认设计值与载波频率绑定。但在特定配置下,如果Pnoise要求指定Reference Source,需要指定为PSS的fundamental tone。我自己见过一个案例,同学在Pnoise设置里把Reference选成了外部理想时钟源,结果仿真出来的相位噪声曲线异常尖锐且数值低得离谱,折腾很久才发现是参考源选错了。

3.3 从曲线中提取关键指标

仿真跑完之后,结果会以曲线形式显示在ADE的Direct Plot窗口里。选择main form,然后选择phase noise,就能画出相噪曲线。

我会在得到的曲线上标记几个关键频偏点:1kHz、10kHz、100kHz、1MHz。如果曲线在1MHz处表现出较好的滚降特性(通常接近-20dB/dec或更陡),说明VCO的噪声源主导机制以热噪声为主;如果近载波区域1/f噪声比较严重,1kHz处的相噪会明显抬高,这对PLL带内噪声是致命的。

曲线的纵轴单位是dBc/Hz,这是归一化到载波功率的噪声功率密度。举个例子,曲线在1MHz频偏处显示-110dBc/Hz,意味着在距离载波1MHz的1Hz带宽内,噪声功率比载波功率低110dB。这个数值越大表示噪声越大,越小表示信号越纯。

还有一种常见的做法是把相位噪声曲线积分,得到RMS jitter。用计算器里的积分函数,从某个频率积分到另一个频率,然后除以载波频率换算成秒。这个数值对数字接口的时序裕量分析很有用,我在做高速接口电路时经常要同时输出相位噪声曲线和积分抖动两个结果。

4. 实战中的常见问题与排查记录

4.1 瞬态不收敛与PSS不收敛

这里先区分两种不收敛,它们的表现和处理方式不同。

瞬态不收敛通常表现为仿真器报错“time step too small”或者波形发散。造成这个问题的原因比较集中:电路存在高频极点或正反馈回路,导致仿真器在数值积分时步长被压缩到极小但还是满足不了精度要求。VCO本身就包含高增益正反馈回路,容易触发这个问题。

我的经验是先检查电路是否存在由寄生电容和电感形成的高频谐振点,这个谐振点的频率可能远超振荡频率,导致仿真器必须用极小的步长去解析。解法是在不影响电路性能的前提下,适当增大寄生电阻,或者调整仿真器的reltol参数,从默认的1e-3放松到1e-2。有些情况下,仿真误差控制方法(errpreset=moderate或liberal)也可以缓解瞬态不收敛。

PSS不收敛的原因相对复杂一些。除了前面提到的Beat Frequency设置错误,常见原因还有谐波数设置不足、电路存在多个稳态解、振荡器起振慢等。我在做Ring VCO时经常遇到一种情况:理论上Ring VCO一定起振,但电路初始条件处于完全平衡状态,各节点电压完全相等,正反馈没有初始扰动,PSS反复迭代都停在零解上。解决这个问题的办法是给电路一个不对称的初始条件,比如在某个节点设置一个initial condition,或者把某个电源电压稍微拉偏一点。

4.2 相位噪声曲线异常

仿真跑完,结果曲线的形态也会暴露问题。我把常见异常情况整理成一张速查表,方便排查:

异常现象可能原因检查方向
曲线整体平坦、无滚降Pnoise参考源设置错误,或测试节点选在纯数字缓冲输出检查输出节点是否位于模拟振荡信号路径
近载波区域垂直上升近载波相噪受仿真器数值噪声主导提高PSS精度档位,增加迭代次数和收敛精度
曲线出现周期性毛刺Oscillator的谐波与外部参考耦合,或输出节点串扰检查输出缓冲级和电源去耦是否合理
曲线数值异常低噪声类型选了ignore,或器件模型被换成ideal检查Pnoise噪声源设置和模型加载情况
1MHz后曲线回升PSS谐波截断导致的混叠误差增加Number of Harmonics重新跑PSS

对于曲线异常,我有个习惯:先用中等精度快速跑一遍,看趋势,确认电路行为基本正常之后,再提高精度做详细验证。这样可以避免因为单一参数设置问题浪费大量仿真时间。

4.3 仿真资源与时间控制经验

相位噪声仿真尤其是PSS分析,是整个模拟电路仿真里最耗费计算资源的几种分析之一。LC-VCO加上后仿寄生,PSS跑十几个小时的情况并不少见。所以在工程实践中,时间预算是必须提前考虑的。

第一个技巧是在前仿阶段尽早把VCO的相位噪声行为摸清,后仿阶段尽量不要反复跑PSS。前仿阶段的电路干净,收敛快,适合做参数扫描和趋势验证。后仿阶段寄生参数会明显增加仿真负担,这时候主要是做终值验证,而不是做设计探索。

第二个技巧是利用ADE的Retain PSS Solution选项。当你在同一测试台做PSS+Pnoise联合仿真时,仿真器可以复用PSS的解,之后调整Pnoise的扫描范围或者输出节点,就不需要重新跑PSS。这对调试特别有用,省下的时间不是一点半点。

第三个技巧是并行仿真。把不同PVT条件的PSS+Pnoise任务并发跑在多个CPU上,可以显著缩短整体验证周期。我习惯用ADE XL来管理多工艺角多温度的批量仿真,它对任务调度的控制比ADE L手动切换要高效得多。

5. 操作心得与进阶建议

5.1 工具版本与平台差异

Cadence Virtuoso版本从IC6.1.8到IC23.1,以及SPB系列的对应版本,ADE的界面风格差异还是挺大的。IC6.1.8之后ADE L和ADE XL合流趋势明显,IC23.1里已经统一为ADE Explorer/ADE XL的框架。不过PSS和Pnoise分析的底层选项卡逻辑基本一致,主要是界面位置不同。如果你用的版本界面和我描述的不完全一样,优先找“Analyses”按钮,或者直接在ADE菜单栏选择“Launch”,再选“ADE Explorer”,里面的分析类型配置都差不多。

另外,Spectre版本对PSS的算法实现也有差异。老版本Spectre的PSS只有shooting方法可选,新版本普遍支持harmonic balance(HB)方法。Harmonic balance法在LC-VCO这类高Q振荡器上收敛性更好,但内存占用大。遇到PSS不收敛时,可以尝试在PSS的Engine选项里切换数值方法,有时候会有惊喜。

5.2 开关电容场景下的仿真策略

如果你的VCO是数字调谐结构,比如用开关电容阵列实现频带覆盖,那么相位噪声仿真需要额外注意一个问题:开关管的状态切换是否完整反映在实际工作状态中。如果在测试台里把开关管设为全开或全关,那对应的电容值就了固定值,PSS扫描的是单一频点的相噪。要做全频段的相噪验证,需要把每个调谐字都跑一遍PSS+Pnoise,工作量大,但从流片角度来看非常必要。

对于这类场景,我的建议是建立一个参数化的调谐字变量,比如tune[3:0],然后通过ADE XL的parameter sweep功能批量运行所有调谐组合。这样既能完整覆盖,又能把结果整理成表格做交叉对比,效率比手动改一次跑一次高得多。

5.3 与Spectre-RF其他分析的衔接

相位噪声仿真并不是孤立的,它和瞬态仿真、起振时间分析、Q值提取等都有内在联系。我在实际项目里通常先做瞬态确认起振正常,再做PSS确认稳态频率和振荡幅度,最后做Pnoise提取相噪曲线。有时候还需要用sp分析来做环路稳定性验证,用stb分析来做PLL开环传递函数的相位裕度检查。这一整套流程下来,形成了一个完整的VCO行为描述。

尤其要注意的是PSS的稳态频率和后仿的真实振荡频率之间的一致性。如果你在PSS里看到的振荡频率和瞬态里量到的频率相差超过0.1%,通常意味着PSS结果没有完全收敛,或者Beat Frequency设置偏差过大。这时候返回去改设置,比硬着头皮读后面的Pnoise结果要靠谱得多。

从我自己这些年跑过的项目来看,Cadence ADE里VCO相位噪声仿真这套流程,真正难的不是按钮怎么点,而是参数选择背后的理解和各类异常的排查。PSS的收敛性、Pnoise的边界条件、谐波数对精度的影响,这些东西只有踩过坑才能真正理解。希望这篇内容能让你在面对VCO相位噪声仿真时,不再只停留在“能跑通”的阶段,而是能真正判断结果可不可信、怎么改参数能更快更准。最后建议你拿一个简单的Ring VCO练手,把PSS、Pnoise、输出曲线这三个环节完整走几遍,然后再换LC-VCO对比着看,你会发现工具层面的东西很快就能熟练,真正值钱的是你对着曲线能讲清楚电路噪声来源的那份判断力。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询