公司动态

可编程振荡器在下一代网络系统中的应用与设计要点

📅 2026/8/31 23:32:25
可编程振荡器在下一代网络系统中的应用与设计要点
最近在调一块800G交换板的参考时钟被固定频率晶振的备货周期折磨得够呛。后来把手里的几块子卡统一换成新一代可编程振荡器Programmable Oscillators才真正体会到这类器件在Next-Gen Networking Systems里为什么越来越吃香。这篇文章不聊PPT上的宣传词就按我一个硬件工程师的实际使用过程把这类器件的原理、选型、配置、验证和踩坑记录全部拆开聊一遍。如果你正在做数据中心交换机、路由器、5G前传、或者各种基于高速SerDes的板卡设计这篇应该能帮你省下不少查资料的时间。1. 下一代网络系统为什么盯上了可编程振荡器1.1 网络速率演进背后的时钟困境先说一个最直接的矛盾网络设备速率迭代太快传统固定频率晶体振荡器快跟不上了。100G时代一个交换机里常见的参考时钟还是125MHz、156.25MHz这种“标准频点”。到了400G、800GSerDes速率来到56Gbps、112GbpsMAC/PCS层处理用的参考频率开始出现一堆奇奇怪怪的值比如156.25MHz、312.5MHz、644.53125MHz甚至更高阶的分数频率。你没法保证每颗ASIC、每个PHY、每个Retimer都只要那几种传统晶振频率。更麻烦的是网络系统的研发周期已经从一年以上压缩到半年甚至三个月。芯片选型一变时钟频率就得跟着变。如果按照老路子每种频率都单独去定做一颗晶振光交期就能拖垮整个项目进度。我遇到过最夸张的情况是一块板卡上同时需要5种不同频率的参考源而其中两种还是非标频点原厂报价周期直接是9到12周。那种时候你就会特别理解为什么“可编程”三个字在时钟领域会变成刚需。所以可编程振荡器解决的第一个问题就是用一颗器件、一个料号覆盖从几十MHz到几GHz的任意频点。研发阶段可以自己烧录验证不用等定制周期量产阶段则可以统一采购、按订单烧录把备货风险降到非常低。1.2 同步功能让时钟变成了系统级问题除了纯速率演进下一代网络系统还有一个绕不开的强需求时间同步。无论是移动前传的同步以太网SyncE还是数据中心里做分布式计算用的IEEE 1588精确时间协议PTP本质上都在要求每个网络节点的时钟不仅频率要准相位和绝对时间也要对得上。传统固定频率晶振不是不能做同步而是缺乏灵活性。同步系统里下游节点需要从上游恢复时钟再用本地PLL重生成各种工作频率。如果本地的参考源本身只能产生固定频率那整个时钟树的扩展性就大打折扣。可编程振荡器则可以在设计阶段就预留出频率调整空间甚至部分器件支持在运行中通过I2C/SPI改频配合DPLL芯片做动态频率跟踪与相位调整。对做系统的人来说这意味着同一块硬件可以同时支持同步模式和非同步模式走不同的配置就行。这一点在灵活组网、CPE设备、边缘网关这类产品上尤其重要因为你不可能为每个运营商的同步方案单独设计一个硬件版本。1.3 可编程振荡器到底解决了什么总结下来可编程振荡器在下一代网络系统里解决的其实是三件事第一频率灵活性一颗料覆盖多频点不再为每个频点单独备货也不再被非标频率的交期绑架。第二研发速度评估板或样机上用一片可编程器件模拟最终频率所有信号完整性测试、系统联调都能提前推进。第三供应链统一把几十个晶振料号压缩成几个可编程料号采购和库存管理轻松不少。当然代价也有比如单颗物料成本比普通晶振高一点、相位噪声也可能比顶级专用晶振差一点。但在绝大多数网络系统场景下只要选型得当这两点代价完全可以通过PCB设计、电源处理和系统级PLL来弥补。这也是我写这篇文章最想传达的一个观点可编程振荡器不是玄学它就是一颗“频率可配的晶振”关键看你懂不懂怎么用。2. 可编程振荡器的核心技术与选型拆解2.1 架构原理从固定晶体到PLL合成可编程振荡器内部通常有一颗小体积的参考晶体比如25MHz或40MHz然后通过片上PLL把参考频率合成到目标频率。核心模块包括参考晶体振荡电路、锁相环PLL、可编程分频器整数或分数以及输出驱动器。这里面的关键点在于PLL。为了保证输出频率足够灵活主流方案都采用分数分频架构用一个高分辨率的分数分频器来实现“任意频率”。比如我要输出156.25MHz参考25MHz分频比就是6.25。如果只支持整数分频只能输出150MHz或175MHz根本没法用。分数分频器则能精确产生0.25这种小数部分。分数分频的代价是可能会带来小数杂散Fractional Spur。好的器件会通过数字Delta-Sigma调制器来噪声整形把杂散推高到远离载波的频段再配合环路滤波器压掉。所以选型时不要只看能不能输出目标频率还要看分数模式下相位噪声和杂散指标有没有明显恶化。有些廉价方案在整数频点相噪不错一进分数模式相噪就飙升这种料在12kHz到20MHz抖动积分区间里会直接把你整个时钟树的抖动预算拖垮。2.2 关键参数怎么看抖动、相噪、稳定度很多人选振荡器只盯着“频率对不对”这是远远不够的。在高速网络系统里参考时钟的抖动直接影响SerDes的误码率。一个112Gbps SerDes的参考时钟积分抖动通常要求在几百飞秒fs级别甚至更低。这里的积分区间一般参考芯片手册常用的有12kHz到20MHz也有更严苛的比如10kHz到1MHz。我给一个比较实用的筛选顺序第一看随机抖动RJ这是SerDes误码率的主要贡献者。第二看相位噪声曲线特别是10kHz到1MHz的近端相噪这部分会影响CDR的跟踪能力。第三看频率稳定度包括温度稳定度和老化网络设备一般要求±25ppm到±50ppm如果做SyncE同步源可能要±1ppm到±4.5ppm这时就要选择带温度补偿TCXO等级的可编程振荡器。第四看电源敏感性PSNR网络板卡电源噪声很大如果振荡器对电源纹波太敏感实测相噪会明显劣化。有的工程师会直接看数据手册上的“typ”值下单这是很冒险的。数据手册的相噪曲线都是在理想测试板上测的你板上的电源纹波、PCB叠层、串扰都会影响最终结果。所以我在选型阶段一定会先申请几片样片放到自己的板子上实测而不是只看纸面指标。2.3 选型流程与对照表我一般把选型拆成四步。第一步列出所有需求频点以及每个频点对应芯片的参考时钟输入电平标准。比如FPGA的差分时钟是LVDS还是LVPECL交换芯片是HCSL还是CML不同标准电气电平不一样直接影响输出引脚选择和端接设计。第二步确认相位噪声与抖动预算。从下游芯片手册里找到参考时钟的最大RMS抖动要求留出20%到30%的余量再去对照振荡器数据手册的积分抖动。第三步确认工作温度范围与稳定度要求。室内设备用商业级0到70摄氏度就够室外设备要工业级-40到85摄氏度如果做同步源还要考虑TCXO或者OCXO级别。第四步确认封装、引脚以及供货渠道。尽量选标准封装比如3225、2520引脚兼容多家厂商的型号这样设计冻结后即便原厂断供也能找到替代料。下面这张表是我在几个实际项目里做的对照列了一下不同需求环境下的选型倾向仅供参考需求场景频率个数稳定度要求抖动要求推荐方案普通商城板、入门交换1-2个±50ppm1ps RMS普通可编程XO数据中心交换机3-5个±25ppm300fs-600fs RMS低相噪可编程XO差分输出同步以太网节点1-3个±4.5ppm以下依PLL而定TCXO等级可编程振荡器高频振荡器作精密时基1个ppb级极低相噪可编程OCXO看系统预算3. 设计落地从原理图到PCB布线的实操要点3.1 输出电平标准与端接匹配可编程振荡器通常会提供多种输出格式比如LVCMOS、LVDS、LVPECL、HCSL、CML。在下一代网络系统里参考时钟基本都是差分信号因为差分对共模抗扰能力强而且能直接驱动高速SerDes的参考输入。设计中最容易出现问题的就是对差分信号“想当然”。以LVDS为例它的输出共模电压大约在1.2V左右摆幅约350mV接收端需要跨接100Ω电阻做终端匹配。有的芯片内部已经有端接有的没有这时就要仔细看数据手册的Termination Table。LVPECL更常见也更容易踩坑它需要直流偏置直接用终端电阻接到地是不行的必须按手册里的Thevenin等效网络来设计否则输出摆幅会不对甚至器件发热。HCSL常见于PCIe和部分交换芯片。HCSL输出是电流源型通常需要50Ω到地端接并在正负端之间留100Ω差分电阻。不同厂家的HCSL实现细节略有差异建议直接把参考电路从振荡器数据手册里复制不要自己发明。我遇到过最典型的问题是把一个LVPECL输出的振荡器接到HCSL输入的FPGA差分时钟端口忘记调整端接网络结果高速眼图直接烂掉。后来用示波器量引脚上的直流电平才发现共模电压差了整整0.5V。这种问题在原理图评审时很难发现因为仿真模型不会把每个端接细节都建进去只能靠经验把关。3.2 电源滤波与相位噪声风险控制可编程振荡器通常是模拟器件它对电源噪声的敏感程度远高于数字芯片。很多工程师把振荡器的电源脚直接接到数字电源平面结果测出来的相位噪声比数据手册标称值差了一截。我现在的标准做法是给每个振荡器单独加一只磁珠或者小电感和一组去耦电容。磁珠选择100MHz阻抗300Ω到600Ω的规格电容配置按照10uF0.1uF0.01uF组合放在器件引脚旁边其中0.1uF必须靠引脚最近。如果板子里有多个振荡器还要注意避免它们互相干扰最好的方式是把每个时钟的电源域隔离开。如果器件支持独立的模拟电源和数字电源引脚一定要按手册要求分别滤波。不要图省事直接短接。虽然短接也能工作但在EMC测试和相噪表现上差距很大。我做过一组对比实验同一颗可编程振荡器同一频点直接接LDO输出时积分抖动约650fs RMS串入磁珠并完善滤波后降到450fs RMS左右这个改善非常可观。3.3 布局布线与信号完整性时钟电路布局布线的核心原则就一句话参考时钟是整个系统的心跳必须像对待高速信号一样对待它甚至更严格。差分时钟线要尽量短从振荡器输出到接收芯片输入走线长度一般控制在10mm到20mm以内超过这个长度就开始需要特别处理比如更严格的等长和阻抗控制。差分阻抗按100Ω设计单端阻抗按50Ω设计叠层上要有连续的参考地平面绝对不能跨分割。另一个容易忽略的点是时钟线与其他信号线的间距。我在高密度板卡里一般把时钟差分对和其他信号线拉开至少3倍线宽的距离。如果实在排不开就在中间加一条地线隔离。还要避免时钟线穿过电感、磁珠等磁性元件下方这些都会引入不必要的耦合。时钟芯片底下要保证有完整的地平面不要把地挖空。上拉电阻、串阻这些周边元件就近放置串阻一般预留在输出走线靠近振荡器的一端初始可以贴0Ω等SI测试后再根据振铃情况调整为22Ω或33Ω。4. 亲手配置一颗可编程振荡器寄存器与验证过程4.1 把目标频率换算成寄存器值可编程振荡器的配置本质就是把“目标频率”翻译成PLL分频比寄存器的值。不同厂家的寄存器格式千差万别但底层逻辑基本一致。大多数器件会有一个参考频率Fref比如25MHz然后通过一个分频比M把Fout计算出来Fout Fref × M。M既可以是整数也可以是分数。如果M是分数比如要输出156.25MHzFref25MHz那么M156.25/256.25。这里整数部分是6分数部分是0.25。分数部分怎么表示呢常见做法是把它换算为分数的分子比如用分子/分母表示分母可以取一个很大的数比如2^28。那么0.25×2^28就等于67108864。在寄存器里写入分子值就可以。我建议在烧录前用Python或者Excel做一个频率换算表格把所有需要用的频点全部算好避免现场手工换算出错。要特别注意参考频率本身会有偏差如果振荡器内置晶体标称25MHz实际在常温下可能是25.0001MHz那么最终输出也会有同样比例的偏差。当系统要求高精度频率时就需要选择带温度补偿功能的可编程振荡器或者配合PLL芯片做闭环校准。4.2 用I2C/SPI完成配置的完整流程以最常见的I2C接口可编程振荡器为例配置流程是这样的第一步上电后先通过I2C地址读寄存器确认器件能正常应答。如果无应答检查I2C上拉电阻、器件地址位和电源是否就绪。第二步写频率配置寄存器。不同器件会让用户分别写整数分频、分数分频、输出电平选择、扩频使能等寄存器。按数据手册逐项写写完后最好回读校验。第三步写控制寄存器触发PLL重新锁定。有些器件写频率后即时生效有些要额外写一个“update”位。我会在代码里加上等待PLL Lock指示位的轮询确保锁定完成再让下游芯片开始接收时钟。第四步如果器件支持OTP在完成所有验证后可以把配置一次性烧录到OTP区让它上电就按这个频率输出。这一步务必谨慎因为OTP是一次性可编程烧错了就废了。我的习惯是先用普通RAM模式反复验证再留一片样品做OTP小批量试烧最后确认无误才进入量产流程。整个配置代码并不复杂核心就是I2C写一组寄存器。但工程上真正要花时间的地方是验证配置是否正确而不是写代码本身。4.3 上板验证示波器、频谱仪、相噪仪怎么看配置完成后验证环节分为三个层级。第一层示波器验证。用示波器确认输出频率是否准确波形幅度、上升下降时间是否达标。建议把示波器的带宽设为1GHz以上采样率至少10GSa/s否则上升沿会被滤得太平看不出问题。测差分信号时用差分探头不要随便用两个单端探头做数学运算替代那会引入很大测量误差。第二层频谱仪验证。看输出频谱上有没有明显的杂散。分数分频器工作的时候如果杂散出现在环路带宽内会在频谱上看到突出的尖峰这些杂散可能被下游CDR判定为抖动影响误码率。比较关键的是看主频附近100kHz以内的近端杂散和远端宽带杂散。第三层相噪仪验证。这是最严格的一步直接测相位噪声曲线并且按系统要求的积分区间算RMS抖动。我通常会把振荡器放在自己的板子上测并且测试时整板跑一套基础业务模拟真实工作状态。这里有个重要经验相噪测试结果与电源和测试环境关系极大如果在屏蔽房里测数据会很漂亮放在真实机箱里测可能多出一点电源相关杂散。所以我的标准是以实际机箱环境测试结果为准。5. 常见问题与排查技巧实录5.1 配置与频率相关问题我在多个项目里遇到过下面的问题频率配置完成后输出频率不对差一点或者完全没输出。这里整理成一张速查表。现象可能原因排查思路解决方法输出完全无信号使能引脚拉低、电源没起来、I2C配置没生效查使能脚电平量电源电压和电流回读寄存器拉高使能、修电源重新配置输出频率差一点参考晶体频率与计算值不符、寄存器分子位宽被截断查参考晶体标称查寄存器位宽按实际Fref重算分频比改用RAM配置输出频率对但抖动大配置时无意开启了扩频或PLL环路带宽配置不对读寄存器确认扩频关闭查环路带宽设置关闭Spread Spectrum调整环路参数I2C写操作没反应器件地址、上拉电阻、速率、电平不匹配用I2C扫描找地址查上拉电阻和速率修正地址降速至400kHz或100kHz很多可编程振荡器都内置有扩频功能做EMC改善用的。如果你不需要扩频一定要确认它默认关闭否则参考时钟的RMS抖动量直接翻倍SerDes误码率立刻飙升。这个问题在项目里出现过两次最后都是因为软件在初始化时把配置寄存器当成默认值写了一遍意外开启了扩频。5.2 信号完整性与抖动问题抖动超标是最难排查的问题因为它可能来自振荡器本身、电源、周边耦合、甚至测量方法。如果是示波器眼图闭合先做“换源实验”把同一路时钟拆出来给另一个干净测试板如果相噪变好了那问题大概率出在PCB布局或电源上。如果换板后仍然差再看器件本身。PCB布局引起抖动超标的典型案例是时钟线旁边走过一条大电流电源线开关电源的纹波直接通过寄生电容耦合到时钟线上。这种问题在时域上表现为输出波形上叠加了固定的毛刺在频域上表现为相噪曲线在开关频率处出现突然的凸起。排查时可以先关掉周边大电流负载再逐个恢复观察相噪变化。另一种常见情况是输出走线过长导致振铃振铃会造成波形过冲进而让接收芯片内部的输入缓冲产生时序模糊。这种问题一般通过串阻调整解决。我在调试现场一般准备一组0Ω、10Ω、22Ω、33Ω的贴片电阻快速替换测试找到最平滑眼图的阻值。5.3 电源与启动时序问题可编程振荡器对启动时序比较敏感。有些芯片需要电源稳定后等待一段时间再拉高使能如果一上电就开始写I2C可能因为内部PLL还没建立起来而配置失败。我在设计阶段会看数据手册的上电时序图确认电源上升时间的要求以及使能引脚和I2C配置之间的先后关系。如果系统主控在上电后很快就对振荡器做配置那最好在硬件上把振荡器使能脚连接到系统复位信号确保复位释放后电源已经完全稳定。还有一个比较隐蔽的问题是同一I2C总线上挂了多颗可编程振荡器和其他传感器器件后上电的器件在上拉电平还是未知状态时可能把总线上的电平拉低导致主控访问失败。解决办法是给I2C总线加上合适的串联电阻或者把总线分到不同电源域必要时调整上拉电阻的参考电压让它们统一到同一电平域。最后说一点个人体会。可编程振荡器不是拿来一上来就随便配置的我的习惯是先确认整板时钟树把所有需要频率按照模块列一张表然后才开始选型和配置。一个比较实用的经验是把所有配置脚本和寄存器值都用Git管起来每调一次板保存一次版本方便回溯。特别提醒一句很多可编程振荡器OTP烧录后是不可逆的量产前一定要先拿几片工程样片反复试不要把验证板上的配置直接当成最终OTP方案。按照我的经验只要前期的频率规划、电源处理和信号完整性做扎实可编程振荡器在下一代网络系统里不仅不会成为瓶颈反而会成为你快速迭代产品、应对不同客户需求的“万能钥匙”。