☰
PLL相位噪声仿真必备:HBnoise原理与实操全解析
2026/10/6 5:55:38 网站建设 项目流程

1. 为什么PLL相位噪声仿真非做HBnoise不可

做PLL的工程师应该都有过这种经历:瞬态仿真跑PLL锁定,动辄几个毫秒甚至几十毫秒的实际时间,仿真器一步一步迭代,跑完一个锁定过程可能要等半天。好不容易锁定了吧,想看看相位噪声,又不知道从哪儿下手。VCO单独的pss+pnoise仿真倒是会做,但放到整个PLL环路里,参考时钟、鉴频鉴相器、电荷泵、分频器这些模块的噪声怎么叠加?环路带宽内的噪声整形效应怎么体现?这些用传统的pnoise分析很难处理得干净利落。

HBnoise(Harmonic Balance Noise)就是用来解决这个问题的。它基于谐波平衡(Harmonic Balance)仿真器,在频域直接求解周期稳态工作点,然后在这个工作点上做小信号噪声分析。跟pnoise相比,HBnoise对强非线性电路的噪声分析更稳,尤其是在VCO这种振荡器场景下,收敛性和精度都有明显优势。更重要的是,在Cadence Virtuoso的SpectreRF环境里,HBnoise可以跟PLL的完整环路配合,一次性把整个环路的相位噪声谱算出来,省掉手动拼凑各个模块噪声的麻烦。

这篇文章我会完整走一遍流程:从PLL电路搭建、仿真设置、HBnoise运行,到结果怎么解读、怎么定位噪声瓶颈。针对的是已经在用Virtuoso画版图、做前仿的工程师,以及正在学习RFIC设计、对着PLL电路一头雾水的研究生。内容偏实战,原理部分只讲够用的深度,更多篇幅留给操作细节和踩坑经验。

2. HBnoise仿真的前置准备与原理扫盲

2.1 HBnoise到底在算什么

在动手点开仿真之前,先搞清楚HBnoise的工作机制,不然参数设置就是瞎填,报错了也不知道为什么。

HBnoise全称是Harmonic Balance Noise Analysis,它做的事情分两步。第一步,用谐波平衡法求电路的周期稳态解。所谓谐波平衡,就是把电路里的电压电流都展开成傅里叶级数,在频域里满足基尔霍夫定律,通过牛顿迭代求出一组谐波分量作为稳态工作点。这个思路跟瞬态仿真完全不同,瞬态是在时间域一步一步往前推,谐波平衡是直接在整个周期上寻找一个周期解,对振荡器、混频器这类强非线性电路来说效率高得多。

第二步,在这个周期稳态解上叠加小信号噪声源,计算每个噪声源(热噪声、闪烁噪声、散粒噪声)通过电路传输到输出端的贡献。因为工作点是周期时变的,所以噪声也会被周期调制,产生频移效果。HBnoise能够捕捉到这种时变效应,这是普通的AC分析做不到的。

对PLL来说,整个环路里的噪声源包括:

  • 参考时钟的相位噪声,它会被分频器分频(噪声也被分频)
  • PFD/CP带来的杂散和噪声,跟鉴相频率相关
  • 环路滤波器电阻的热噪声,这是带内噪声的重要来源
  • VCO自身的相位噪声,主要在环路带宽外起主导作用
  • 分频器数字电路的噪声

HBnoise可以把这些全都揉在一个仿真里算出来,只要电路模型足够完整。

2.2 为什么用HBnoise而不是直接用PSS+Pnoise

很多人会有疑问:VCO单测相位噪声用pss+pnoise不是挺好吗?为什么非要用HBnoise?

区别在这几个地方。第一,PLL是闭环系统,VCO的噪声会被环路抑制,在带内被环路整形压低,如果单独仿VCO的pnoise,得不到这种闭环效应。第二,PLL里每个模块的噪声贡献在输出端的权重不一样,取决于传输函数,手动算链路预算能做到,但模块一多就容易出错,尤其PFD/CP这种强非线性模块,噪声模型本身就很敏感。第三,proise对振荡器这种强非线性电路收敛性不太好,HBnoise的谐波平衡框架处理这类问题更稳。

当然,HBnoise也不是万能药,它要求电路有明确的周期稳态,对于还没lock住的PLL,得先确保环路已经锁定。还有,启动瞬态过程HBnoise是不管的,它只在稳态上做噪声分析。后面我会讲怎么验证PLL是否处于锁定状态。

2.3 仿真前的电路模型准备

做HBnoise前,最好先把电路模型理清楚。我自己常用的做法是分成三层:行为级模型、晶体管级模型、混合模型。

行为级模型用Verilog-A/VAMS写PFD、CP、分频器,VCO用理想模型或者是基于SPICE网表的简化模型。这种模型仿真速度极快,适合做系统验证、环路参数扫描,但噪声结果参考意义有限,因为行为级模型的噪声建模通常偏理想。

晶体管级模型就是所有模块都用schematic或者netlist给到晶体管级,噪声会真实很多,但仿真时间也会显著增加。HBnoise在锁相环上跑一次,看电路复杂度和谐波数设置,从几分钟到几个小时都有可能。

混合模型是折中方案,也是我在实际项目里最常用的:VCO用自己的晶体管级电路(因为相位噪声最关键),其余模块用行为级或者直接用理想源替代。这样噪声结果有参考价值,仿真时间也能接受。

仿真前务必确认:

  • VCO是否自由振荡频率符合预期
  • PFD/CP的电荷泵充放电电流匹配性是否良好
  • 分频器输出频率是否跟参考频率对得上
  • 环路滤波器参数是否满足带宽和相位裕度要求

这些问题在瞬态里能看到,但HBnoise对稳态要求更严格,任何一个模块没进入稳态都会导致结果异常。

3. HBnoise仿真完整实操流程

3.1 建立仿真环境与测试台

在Virtuoso里新建cellview,通常用config或者直接打开schematic搭建测试台。PLL的HBnoise仿真测试台一般长这样:参考时钟源、PFD/CP、环路滤波器、VCO、分频器串成一个闭环,输出端接一个理想负载。

参考时钟源推荐用port加正弦源,或者用gnd和port配合设置频率。在SpectreRF里,时钟源的设置决定谐波平衡的基频基准。通常我会用一个理想的方波或正弦波做参考,频率设成PLL的鉴相频率,比如10MHz。

电荷泵输出到VCO之间的环路滤波器,最好用实际的RC网络,不要用理想传输函数。因为环路滤波器的热噪声是带内噪声的重要来源,换成理想模型就丢了这部分噪声,跟真实芯片差很多。

VCO部分,如果做晶体管级仿真,要注意给VCO一个初始条件,不然谐波平衡可能跑到不起振的解上。常见做法是在VCO的振荡节点加一个initial condition,或者在电源上做一个小的阶跃让VCO起振,再等它稳定。

分频器如果是数字电路,最好简化成理想分频模型(Verilog-A或者理想分频器库元件),全数字分频器在HB分析里会让矩阵规模膨胀,仿真时间翻好几倍还不一定收敛。

3.2 设置Harmonic Balance分析参数

在ADE L或者ADE XL里创建分析,选hbnoise。关键的参数有这么几个:

Beat Frequency(基频):这是最重要的参数。对PLL来说,基频应该设为鉴相频率,也就是参考频率。比如参考时钟10MHz,分频比N=100,VCO输出1GHz,那beat frequency就是10MHz。HB会把所有信号展开成这个频率的谐波组合。

Number of Harmonics(谐波数):这个参数决定谐波平衡展开的阶数。对PLL,VCO输出频率是基频的高次谐波(比如1GHz/10MHz=100次谐波),所以谐波数至少要大于分频比N。如果N=100,Number of Harmonics最低得设100,实际我一般设到120~150,留一点裕量。设得太小,VCO输出端的谐波被截断,能量泄漏会产生不准确的结果。设得太大,仿真时间跟谐波数的平方成正比涨,肉疼。

Max Sidebands(最大边带数):HBnoise计算噪声时要考虑每个谐波附近的边带,这个参数控制边带的数量。默认值通常在5左右,对PLL来说,如果参考频率远离关注频偏,5足够了。但如果关注低频偏移(比如1kHz乃至100Hz),Max Sidebands设大一点更稳,我一般设到5~7。

Noise Sweep(噪声扫描范围):HBnoise的输出是噪声谱,需要设置扫描范围。PLL相位噪声通常关注从10Hz到10MHz的偏移频率,我习惯设成1Hz到100MHz,对数扫描,每十倍频程点数为10或者20。扫描范围不宜过大,否则低频端收敛困难、高频端仿真时间浪费。

Reference Sideband(参考边带):这个选项跟计算相位噪声的参考边带有关。对PLL,一般选0,表示以载波为中心的上下边带叠加贡献。

参数填错了,HBnoise最常见的报错是"The beat frequency is not consistent with the periodic steady state"这类提示,意思是基频设置跟电路实际周期对不上。这时候先回去检查PLL是否锁定,参考频率、分频比、VCO频率三者是否满足关系。还有一种情况是"Failed to converge",一般是谐波数太少或者初始条件不好,可以试着加大谐波数或者调整VCO的tstab。

3.3 设置噪声源与输出变量

在hbnoise分析的Noise选项卡里,可以指定要包含的噪声源。SpectreRF默认会包含电路里所有器件的噪声,但如果想看某个模块的单独贡献,可以在这里把想排除的源exclude掉。

实际仿真时,我会分几次跑:

  • 第一次,所有噪声源全开,得到总相位噪声
  • 第二次,排除VCO噪声(可以在VCO器件上设为noiseless,或者用noiseless属性),得到除VCO外其他模块的噪声贡献
  • 第三次,只看参考时钟的噪声贡献

这样三次结果一对比,就能看出带内噪声是谁在主导,VCO噪声在哪个频段起决定作用。

输出变量方面,hbnoise的输出通常是输出节点的电压噪声谱密度(V^2/Hz),对PLL来说我们要的是相位噪声,所以需要换算。SpectreRF可以设置Output为phase noise,在hbnoise分析里指定输出为PLL的最终输出节点(比如VCO的输出),再在结果浏览器里直接看phaseNoise曲线。如果版本支持,也可以直接用port的S参数看相位噪声,但最直观的还是plot phaseNoise。

有一点要特别注意:相位噪声不是在所有节点都能直接获得的。在Virtuoso中,相位噪声的计算一般是对某个周期性信号的相位进行提取,如果输出节点上没有明显的周期信号(比如你在环路滤波器输出端看),算出来的phaseNoise是没有物理意义的。所以一定要在VCO的输出端看相位噪声。

3.4 跑仿真的时间预估与资源控制

HBnoise仿真时间取决于:

  • 谐波波数与边带数
  • 电路晶体管数量
  • 噪声扫描点数量
  • 服务器CPU核数

以一个标准的CMOS PLL为例,VCO是晶体管级的LC振荡器或者环形振荡器,PFD/CP/分频器都是行为级模型,谐波数设120,Max Sidebands=5,噪声扫频从1Hz到100MHz,一百个频点。在8核的服务器上,这个配置大概要跑20到40分钟。如果全部模块都上晶体管,时间可能飙到2小时以上。

跑批量扫描(比如扫描电荷泵电流、环路带宽)时,建议用ADE XL的corner或者sweep功能并行跑,比在ADE L里一个个跑要快得多。另外,不要开太多并行任务把服务器CPU完全占满,HB仿真本身吃内存,同时跑四五个任务很容易内存溢出。

4. 相位噪声结果解读与瓶颈定位

4.1 怎么看相位噪声曲线

HBnoise跑完,在ADE的Results菜单里打开Direct Plot,选Main Form,在Analysis里选hbnoise,然后Phase Noise,点选VCO输出节点,会得到一条相位噪声曲线。横轴是Offset Frequency(偏移频率),纵轴是dBc/Hz。

典型的PLL相位噪声曲线有三个区域:

  • 带内平坦区:从极低偏移频率到环路带宽附近,主要由参考时钟、PFD/CP、分频器贡献,曲线相对平坦或者微降。这个平台的噪声水平取决于电荷泵噪声电流和PFD的噪声底。
  • 带宽附近峰区:在环路带宽处,由于环路增益开始下降,噪声会出现一个峰,峰高跟环路阻尼系数、相位裕度直接相关。这个峰如果太高,说明环路稳定性不好,这个在时域瞬态里往往看不明显,但噪声谱上一眼就看出问题。
  • 带外滚降区:高于环路带宽后,VCO自由振荡的相位噪声起主导,曲线以-20dB/dec(对LC-VCO)或者-30dB/dec乃至更陡(对环振)的斜率滚降。

对照着这三个区域的形状,基本能判断PLL环路的带宽和稳定性是否合理。三条线对应三次仿真(总噪声、无VCO噪声、仅参考噪声),可以拖到同一个坐标里对比。

4.2 带内噪声瓶颈判断

带内噪声如果偏高,得判断是谁的锅。用上一节说的排除法,基本能定位:

  • 去掉VCO噪声后,曲线几乎没变,说明VCO噪声在带内本来就不起主导,瓶颈在带外
  • 只看参考时钟贡献,如果带内平台跟参考噪声曲线重合,说明参考路径是瓶颈
  • PFD/CP的贡献可以用排除法反推:总噪声减去参考贡献、减去VCO贡献,剩下的就是PFD/CP的

带内噪声的理论下限是参考时钟相位噪声加上20logN(N是分频比),这个可以作为参考基准。比如参考时钟的相位噪声是-150dBc/Hz@10kHz,N=100,带内平台的极限就是-150+40=-110dBc/Hz。实测HBnoise结果高于这个值,说明PFD/CP或者VCO的带内噪声贡献超标了。

电荷泵的噪声贡献跟充放电电流直接相关。理论上电荷泵噪声电流会随着电流增大而噪声谱密度降低(相对噪声下降),所以电荷泵电流设置偏小的时候,带内噪声会明显恶化。如果你扫描电荷泵电流从50uA到200uA,带内噪声平台下降,说明PFD/CP是瓶颈,得加大电流或者优化电荷泵结构。

4.3 带外噪声与VCO设计验证

带外区域主要看VCO的相位噪声。HBnoise算出来的带外曲线跟你单独跑VCO的pnoise结果应该是一致的,如果偏差超过几个dB,要先怀疑是不是HBnoise的谐波数不够,VCO输出端的谐波截断导致能量计算不准确。

LC-VCO的相位噪声理论上遵循Lesson's公式,在1/f^2区域按-20dB/dec下降,在1/f^3区域(闪烁噪声上变频主导)按-30dB/dec下降。如果你的曲线在低频端斜率过陡,可能是VCO的闪烁噪声上变频太严重,常见原因有:尾电流源尺寸太小、谐振腔的二次谐波阻抗未优化、偏置电路引入的噪声。

环形振荡器的相位噪声比LC-VCO差很多,但功耗和面积有优势。HBnoise跑环振一样能用,但环振的实现频率通常较低,分频比N更大,带内噪声倍增效应更严重。如果PLL用的是环振,带内噪声极限会被20logN推高,这时候更需要在PFD/CP上想办法压低噪声底。

4.4 通过噪声谱反推环路带宽

有一个很实用的技巧:从总相位噪声曲线上的拐点可以直接读出环路带宽。带内平坦区和带外滚降区的交点在X轴上的位置,就是环路带宽的近似值。比如曲线在300kHz处开始转折,环路带宽大概就在300kHz附近。

我经常用这个方法来验证HBnoise结果跟设计值是否吻合。如果环路带宽设计值是500kHz,但噪声曲线显示转折点在200kHz,说明环路滤波器的RC参数可能设置错了,或者是VCO的增益Kvco跟模型不一致(HB仿真里用真实KVCO,实际控制电压跟理想计算差别较大)。这里也是排查环路稳定性的一个重要窗口。

相位裕度不足的时候,噪声曲线在带宽附近会有一个明显的高峰(峰值超过带内平台3dB以上),说明环路的阻尼系数偏低。为了量化这个峰,可以在噪声曲线上读出带宽处峰值和带内平台的差值。阻尼系数约为0.5时,峰值大约比平台高2~3dB;如果峰值差了5dB以上,环路基本处于欠阻尼状态,时域里锁定过程可能有大过冲。

5. 常见报错与仿真排查实录

5.1 "器件未定义"与模型库缺失

HBnoise仿真一开始就可能遇到Error found by spectre in...``,后面的提示往往是某个器件类型未定义。这个在Cadence里非常常见,原因基本是model library没加载完整。Virtuoso里跑仿真前要在ADE的Setup->Model Libraries里把工艺厂提供的mos模型、resistor模型、cap模型、inductor模型全部加进去。很多时候你单独跑DC能过,但一上HB就报器件未定义,大概率是那些用于射频仿真的无源器件模型(比如rf resistor、rf inductor)没添加。

排查方法很直接:看spectre的输出log,它会明确指出是哪个subckt或者哪个model名字未定义,到model library里搜索对应的模型名,确认加载路径对不对。还有一个坑是版本的兼容性:有些老模型的binning参数格式跟新版本spectre不兼容,会直接报不收敛或者模型解析错误。遇到这种情况只能换用新模型或者把仿真器版本回退。

5.2 HB不收敛的典型场景与处理手段

HB仿真不收敛是家常便饭,报错信息形如"Harmonic balance did not converge...。我遇到的场景分为几类。

第一类是VCO无法起振到周期稳态。前面说过,给VCO起始条件非常重要。如果在瞬态仿真里VCO能正常起振,但在HB里不收敛,通常是初始猜测值离稳态解太远。解决办法是在hbnoise前面加一段tstab(transient stabilization)时间,让电路先瞬态跑一段再切换到HB。tstab的时间一般设为几百纳秒到几微秒,取决于环路锁定时间。锁定时间跟环路带宽成反比,环路带宽如果太窄,tstab要得很长。

第二类是电荷泵的非理想效应导致波形不满足周期条件。理想的电荷泵输出在三态之间切换,在HB的傅里叶展开里会产生很高阶的谐波。如果Number of Harmonics不够,这些高阶分量被截断,残差太大导致不收敛。简单办法是加大谐波数,或者给开关管加上小的rc snubber电路抑制毛刺。

第三类是PFD的死区设置跟仿真步长不匹配。死区太小或者根本没有死区,PFD的输出脉冲宽度极小,谐波分量极其丰富,HB收敛会非常痛苦。合理设置几十皮秒到几百皮秒的死区,不但让电路工作更现实,还能帮助收敛。

5.3 瞬态仿真不收敛跟HB不收敛的区别

热词里有人提到"cadence瞬态仿真不收敛",这跟HB不收敛的原因和排查方向不太一样。瞬态不收敛通常表现为时间步长越切越小,最终报错。常见原因有:

  • 电路里有理想电压源直接并联电容(无限大电流尖峰)
  • 模型里存在不连续函数(比如某些行为级模型用了if语句导致导数不连续)
  • 节点悬空成浮置节点

排查手段通常是给有问题的节点并联一个大电阻到地(比如1GΩ),或者给理想源串一个小电阻(几Ω)。但HB不收敛更多是频域截断问题,不是时域步长问题,所以方法对不上。做PLL仿真时,如果瞬态跑得好好的,一上HB就挂,优先检查谐波数和tstab,而不是去加什么收敛辅助电阻。

5.4 波形显示为红线的含义与解决

在Virtuoso的Waveform窗口里,有些信号画出来是红色,表示这个信号数据异常或者不可用。常见于HB分析后的噪声数据:你试图在非周期输出节点上直接plot phaseNoise,系统没算出该节点的有效相位数据,波形就是红的。

解决方法是确保plot的是周期信号的节点。如果是想plot某个中间节点的噪声电压谱密度(比如VCO控制电压端的噪声),应该plotoutput noise voltage而不是phase noise,前者在任意节点都能算出来,后者专门针对周期性大信号。

还有个情况是波形窗口里曲线全是红的或者数值全是NaN,大概率是hbnoise计算发散或者出现非物理结果(比如噪声功率为负)。这时候回到log文件,看有没有报某个器件的噪声贡献异常大,或者提示"negative noise contribution detected"。这种现象在理想模型和平常模型混用时偶发,通常要把理想源里的Noise参数显式设置为0或者noiseless。

6. 提升仿真效率与精度的进阶经验

6.1 善用分步仿真策略

HBnoise全链路仿真虽然好,但不是每次都要从零开始跑。实际项目里我习惯这样分阶段:

第一阶段,在系统设计初期,全用行为级模型跑HBnoise,验证环路带宽、相位裕度、带内噪声水平是否符合spec。这个阶段仿真几分钟就能完成,重点在于快速迭代参数。

第二阶段,把关键模块换成晶体管级,逐个验证噪声贡献跟行为级模型是否吻合。这个阶段要重点对比VCO单独仿真的Phase Noise曲线,确认晶体管级模型的噪声特性。

第三阶段,全部模块晶体管级,做signoff级别的hbnoise仿真,获得最精确的总相位噪声曲线。这个阶段跑得慢,但结果最可信。

通过这种分层策略,能避免在初期就陷入慢速仿真,也能在后期快速定位哪里有偏差。

6.2 用PSS+Pnoise做VCO单独验证

在做PLL全链路HBnoise前,强烈建议先把VCO单独仿一遍pss+pnoise,确认VCO本身的相位噪声能达到预期。这里有一个细节:VCO的pss仿真里,beat frequency要设置成VCO的振荡频率,而不是控制电压信号的频率。如果你设错了,pss会直接不收敛。

VCO的pnoise设置里,Noise Type选modulated(或者叫timedomain,取决于版本),因为振荡器的噪声是周期时变的,用sources模式会忽略噪声的周期调制效应。Output选相位噪声,Sweep里设置最大边带数MaxSideband,对振荡器我一般设5~7。VCO的自由振荡相位噪声结果,就是PLL带外噪声的形状。

如果在VCO单独的pnoise里发现相位噪声已经超标,那PLL全链路的带外噪声一定超标,没有必要急着跑HBnoise,先回头改VCO的电路。

6.3 设置合理的电路初始条件和扫描策略

HBnoise的初始条件设置很有讲究。对于带反馈环路的PLL,如果VCO的初始相位是随机的,跟参考时钟的相位差不为零,PFD会产生一个较长的校正脉冲,环路需要一段时间来锁定。这段时间如果超过tstab,HB分析就无法在正确的稳态上展开。

解决方案是给PFD的输入信号(参考时钟和分频器输出)设置合理的初始相位差,让初始状态下PFD已经处于锁定附近的相位差状态。在理想源里设置phase参数,或者给PFD的D触发器设置初始Q值,都能做到。我一般先把PLL在瞬态里跑到锁定,记录下关键节点的初始状态,再把这些状态作为HB仿真的初始条件。Cadence支持在ADE里设置init文件或者IC(Initial Condition),这样能大幅提升收敛速度。

另一个技巧是扫描策略。比如第一次跑HBnoise用了比较保守的谐波数(比如N=100),跑通了,后面想提高精度,把谐波数增加到150,这时候可以继续用之前收敛结果作为初始猜测,在ADE XL的Initial Condition选项里选上一轮的结果。这种方法叫continuation method(延拓法),能显著减少重复收敛的迭代次数。

6.4 结果后处理与报告自动生成

HBnoise跑完,结果后处理也有一套讲究。除了直接看phaseNoise曲线,还可以利用Calculator做以下操作:

  • 积分相位噪声(Integrated Phase Noise):在一定频带内对phaseNoise做积分,得到RMS相位抖动(jitter)。在Calculator里输入integ($phaseNoise, 1k, 10M)可以得到从1kHz到10MHz的积分噪声功率,除以载波幅度后开方就是RMS抖动。PLL设计里经常有jitter的spec,这个计算几乎必做。
  • 换算成时间抖动:rmsJitter = sqrt(2 * integratedPhaseNoise) / (2 * pi * f_carrier),这个公式要把积分噪声换算成弧度,再除以角频率得到时间。我做PLL的时候,经常在Calculator里直接建一个表达式,一次把dBc/Hz积分换算成fs级别的rms jitter,省得每次手动算。
  • 对比曲线:多跑几个corner(ss、tt、ff),把它们的phaseNoise曲线叠加,能直观看到工艺角对环路带宽和噪声峰值的影响。如果ff跟ss的带内噪声差超过3dB,说明模块对偏置电流的敏感性太高,需要检查电路有没有做恒gm偏置。

7. 一个完整实例:10MHz参考、1GHz输出的PLL相位噪声仿真

7.1 实例参数设定

用一个实际例子把整个流程串起来。假设PLL指标如下:

  • 参考频率:10MHz
  • 输出频率:1GHz
  • 分频比N:100
  • 环路带宽:约300kHz
  • VCO:LC振荡器,工作在1GHz,KVCO约50MHz/V
  • 电荷泵电流:100uA
  • 环路滤波器:三阶无源RC

HBnoise设置:

  • Beat Frequency:10MHz
  • Number of Harmonics:120
  • Max Sidebands:5
  • Noise Sweep:1Hz~100MHz,每十倍频程20个点
  • tstab:2us

7.2 仿真结果宏观分析

跑完之后,phaseNoise曲线大概长这样:

  • 带内(10Hz~100kHz),大约-110dBc/Hz,轻微下倾
  • 带宽附近(300kHz),有一个小峰,比带内高约2dB
  • 带外(1MHz~10MHz),从-125dBc/Hz滚降到-150dBc/Hz左右

带内-110dBc/Hz的水平,跟参考时钟-150dBc/Hz+N倍增20log100=40dB的极限值对比,有0dB的裕量?实际上如果电荷泵不理想,带内平台会高于极限值。假设参考时钟自身在10kHz是-145dBc/Hz,则理论上限是-105dBc/Hz,实测-110dBc/Hz比理论上限还好,这看似不太可能。出现这种情况时,要检查是否把参考噪声源给exclude了,或者参考源的noise参数没有正确设置。正常情况,带内噪声永远大于等于参考噪声+N倍增的理论下限。如果仿真结果突破了这个下限,一定是仿真设置有误,比如参考源被设成了noiseless,或者VCO的噪声没有正确包含。

7.3 瓶颈定位实战

用排除法:

  • 全噪声源仿真:带内-110dBc/Hz
  • 排除VCO噪声后:带内-110dBc/Hz(几乎没变化),说明带内瓶颈不是VCO
  • 仅参考噪声源:带内-112dBc/Hz,说明参考路径贡献在-112dBc/Hz

根据噪声功率叠加的关系: 总噪声线性值 = 参考贡献 + PFD/CP贡献 + VCO贡献 如果总噪声 = -110dBc/Hz,参考贡献 = -112dBc/Hz,两者线性功率相差约1.6dB,说明PFD/CP贡献跟参考贡献相当甚至稍大。

进一步扫描电荷泵电流:从100uA加到200uA,带内平台下降1dB以上,说明PFD/CP是重要瓶颈之一。这时优化方向有两个:一是加大电荷泵电流,二是优化PFD/CP电路降低噪声底。电荷泵的噪声电流谱密度表达式大致是S_i = 4kTγgm,加大电流在一个程度上会降低相对噪声,但功耗会上升,需要权衡。

7.4 环路带宽的验证

从噪声曲线读取转折点在300kHz附近,跟设计值吻合。带宽处峰值比带内平台高约2dB,折算阻尼系数约为0.5~0.7之间,稳定性可接受。如果希望在带宽处压低峰值,可以把相位裕度往75度方向调,但代价是锁定时间变长。实际项目中这个要在jitter和锁定时间之间找平衡。

积分抖动计算:对1kHz~10MHz积分相位噪声,假设积分结果是-40dBc(线性功率1e-4 rad^2),RMS相位抖动就是0.01rad,换算到1GHz载波上,时间抖动RMS = 0.01/(2π*1e9) ≈ 1.6ps。这个指标对很多无线通信系统(比如蓝牙、Zigbee)是够用的。如果系统要求更低的抖动,就得从参考时钟跟带内噪声两块一起优化。

8. 写在最后的经验与建议

HBnoise在PLL相位噪声分析上的确是目前最实用的手段,但它的上限取决于你有多少耐心去抠细节。从电路搭建到仿真完成的每个环节,都比单纯跑个瞬态要更精细。我的经验是:第一次做PLL的HBnoise仿真,不要太追求一次成功,先跑通流程,再逐一优化精度。多跑几次,记录下各种参数对结果的影响趋势,你就能建立属于自己的仿真直觉。

有一点特别想强调:仿真结果里的"好"和"坏"必须跟测试对标才有意义。很多工程师只看仿真曲线很漂亮就送出去流片,回来测出来相位噪声差了好几dB,回过头来才发现是模型不准、寄生没提,或者是仿真里某个模块被理想化过头了。HBnoise算的是你给的电路模型下的理论值,它不等于芯片实测值。做设计判断时,请时刻记住这一点。

如果你手头正在做一个PLL项目,这套流程建议从头到尾走一遍。用A-B对比的方式记录每一步的相位噪声变化,你会比直接看总曲线更清楚每个模块的贡献和优化空间。等你积累了两三个项目的经验,HBnoise参数设置就会变成肌肉记忆,新项目第一次跑通的时间能缩短到半天以内。我身边不少做射频的同事一开始也觉得HBnoise复杂,熟练之后都离不开它,主要原因是它能把闭环系统的噪声算得明明白白,这是手算链路预算和Simplorer类软件完全比不上的。

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

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

立即咨询