ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

低抖动1.25-GSPS时钟:JESD204B高速数据转换器稳定运行的关键

低抖动1.25-GSPS时钟:JESD204B高速数据转换器稳定运行的关键 搞GSPS数据转换器高速ADC/DAC的板卡十有八九都被JESD204B接口坑过。而掉进这个坑里出不来的人最后十有八九会发现问题的根子不在FPGA逻辑而在那颗1.25-GSPS的JESD204B设备时钟上。我自己的第一块2.5GSPS采集板就是活生生的例子逻辑翻来覆去查了三天IP配置对着参考手册一行行对最后用示波器戳时钟输出端才发现1.25GHz时钟的上升沿已经糊成了一团整个链路的误码率能好才怪。这篇内容算是个人复盘把低抖动1.25-GSPS时钟和GSPS数据转换器里JESD204B接口之间的利害关系掰开揉碎讲一遍包括硬件选型、时钟树设计、FPGA侧IP配置以及我从“链路建立失败”到“频谱干净”的完整调试过程。适合正在做GSPS ADC/DAC高速采集板、或者调JESD204B IP一直调不通的工程师参考也适合刚接触JESD204B的硬件工程师对整套时钟架构建立一个整体概念。1. 为什么1.25GHz时钟决定JESD204B的生死1.1 数据流路径里的三把时钟在GSPS ADC/DAC应用中整个高速数据链路里其实有三把时钟在同时跑很多人只盯着采样时钟把另外两把扔在一边这是最大的误区。第一把是采样时钟也就是ADC/DAC的采样率比如2.5GSPS。第二把是设备时钟device clock它是JESD204B接口的数据参考时钟在常见的GSPS转换器里这个频率经常就是1.25GHz恰好是2.5GSPS采样率的一半。第三把是系统参考脉冲SYSREF用于多芯片、多通道之间的对齐。JESD204B Subclass 1协议要求SYSREF必须与device clock边沿保持确定的相位关系而device clock又要驱动SerDes的位时钟合成逻辑。换句话说这把1.25GHz的设备时钟一路通到协议物理层它要是抖了后面的8b/10b编码、多帧对齐、确定性延迟全部跟着崩。器件内部的具体机制各有不同但大方向几乎一致ADC内部将采样时钟分频或倍频后产生device clockFPGA端也以同一个时钟源作为JESD204B core的参考再经过GT收发器的内部PLL合成串行时钟。以常见的4通道、12bit、2.5GSPS配置为例JESD204B使用8b/10b编码有效数据率高达30Gbps分割到4条lane之后每条lane的串行速率大约在9.375Gbps附近而1.25GHz的device clock配合适当的倍频比正好落在这一类典型线速率区间。任何器件的数据手册里给出的配置表前提都是这颗时钟的相位噪声足够低。1.2 抖动怎么一口一口吃掉SNR时钟抖动对系统的影响是双份的很多人只算ADC那一份忽略了JESD204B接口本身那一份。先说ADC采样这一份。数据转换器有一个“孔径抖动”的概念指的是实际采样时刻相对于理想采样时刻的偏差。外部输入时钟的抖动会直接叠加到孔径抖动上最终反映为采样噪声。最经典的公式是SNR 20·log10(1 / (2π · fin · tj))其中fin是输入信号频率tj是总抖动单位秒。代入一个例子输入信号1GHz总抖动500fs0.5ps那么SNR上限大概只有50dB。你注意这里说的是“上限”也就是说即使ADC芯片本身标称的SNR是65dB只要时钟抖动不够低实测SNR就会被压低到50dB附近芯片的性能根本发挥不出来。GSPS数据转换器都是宽带应用输入频率轻松上GHz对抖动的敏感程度远高于低速系统。再说JESD204B接口这一份。JESD204B的串行线速率通常在6.25Gbps到12.5Gbps之间一个UI单位间隔只有80到160ps。GT参考时钟的抖动会直接影响SerDes的时钟恢复能力抖动一大眼图闭合误码率指数级上升。JESD204B规范一般要求误码率低于1e-15换算成抖动预算参考时钟路径能分到的抖动余量非常薄。很多链路“间歇性掉链”的问题表面看是同步失败实际是时钟抖动导致MGT恢复时钟相位发生瞬态跳变。所以结论很直接低抖动1.25GHz时钟不是“加分项”而是GSPS应用中JESD204B能正常工作的前提。1.3 抖动到底是从哪来的调过几块板子之后我对抖动来源的观察是大多数情况下时钟芯片本身的底噪并不是主要问题问题出在周边环境。开关电源纹波是头号嫌疑。DC-DC的开关频率通常在几百kHz到几MHz这个频段的纹波如果渗进时钟芯片的供电引脚会直接调制VCO形成靠近载波的杂散。其次是参考源质量。外部TCXO或OCXO的相位噪声决定了PLL带内的本底用一个性能很烂的参考源再好的时钟芯片也白搭。第三是布局布线串扰。数字总线、SPI控制线、甚至FPGA内部逻辑翻转的噪声都能通过PCB耦合到时钟走线上。这些噪声源的作用路径各有不同但最终的体现就是时钟抖动指标恶化。这个认知引出一个重要的调试原则当链路出问题时第一步不是查逻辑而是用频谱仪看时钟的相位噪声和杂散。2. 硬件侧的低抖动时钟方案与设计要点2.1 时钟芯片选型的四个硬指标GSPS数据转换器的JESD204B时钟选型时我只看四个指标输出频率覆盖范围、集成RMS抖动、SYSREF支持能力、以及供电敏感性。频率覆盖是基础必须能输出1.25GHz甚至更高因为有些器件的设备时钟会到2.5GHz。集成RMS抖动要盯住“12kHz到20MHz”或者“10kHz到80MHz”积分区间目标做到100fs RMS以内越低越好。SYSREF支持能力决定了Subclass 1能不能做如果芯片没有专用的SYSREF输出引脚和同步机制后面多芯片同步就会非常痛苦。市面上常用的几颗芯片我列一个表格芯片型号典型输出频率积分抖动典型SYSREF支持适用场景LMK04828最高约3GHz1.25GHz时约60fs RMS支持可编程JESD204B类应用的最佳选择之一AD9528最高约2.5GHz1.25GHz时约100fs RMS支持ADI配套GSPS转换器常用LMX2594最高约15GHz1.25GHz时约50fs RMS支持需要更高频率或宽带扫频时用ADF4355最高约6.8GHz1.25GHz时约100fs RMS需外部配合常规锁相环性价比高LMK04828这类双PLL架构特别适合JESD204B第一级PLL用于清洁参考源的相位噪声第二级PLL用高性能VCO输出1.25GHz低抖动时钟同时SYSREF通过内部同步逻辑与device clock精确对齐。单环PLL虽然便宜但在需要SYSREF和device clock严格对齐时实现起来要费不少功夫。2.2 供电滤波与布线的实战细节时钟芯片选好了供电和布线才是真正拉开差距的地方。时钟芯片的VCO对电源噪声极其敏感我用LMK04828时的经验是电源必须用低噪声LDO不要直接从DC-DC输出拉一条线过来。如果非要用DC-DC至少隔两级LDO并且LDO输出端的滤波电容要选好。我在时钟芯片电源引脚处习惯用“10uF钽电容0.1uF陶瓷电容100pF高频电容”的组合。10uF管低频瞬态0.1uF管中频去耦100pF管高频滤波。这个组合实测下来对开关电源残余纹波的抑制效果比单颗大电容好得多。注意陶瓷电容的直流偏压特性小封装电容在额定电压附近实际容值会大幅下降所以选型时耐压至少留两倍裕量。布线层面1.25GHz的差分时钟走线要遵守高速信号规则50欧姆单端/100欧姆差分阻抗控制参考地层必须连续走线尽量短、尽量直不打过孔。SYSREF和device clock的走线长度误差我控制在10mil以内因为两者的相位关系直接决定Subclass 1对齐的确定性。SPI控制线和时钟输出走线必须分开走中间最好有地隔离。我踩过一次坑SPI时钟线贴着时钟输出走了两厘米结果每次配置寄存器的时候频谱上就多出一串杂散。后来重新布局才解决这个教训很昂贵。2.3 SYSREF与Device Clock的对齐操作在硬件层面SYSREF和device clock的对齐由时钟芯片内部的同步机制完成。以LMK04828为例配置完分频比和延迟值后通过SYNC引脚或者SPI触发内部同步信号让所有输出被同步到同一个时刻。这个操作必须在系统初始化的时候执行并且要和FPGA侧的复位时序配合好。实测验证对齐效果时用示波器看1.25GHz时钟的上升沿和SYSREF脉冲的上升沿是否对齐。这里有个细节示波器探头带宽至少要4GHz以上普通500MHz探头测1.25GHz信号本身就自带衰减和相移会让你误判对齐关系。我后来直接改用高速差分探头接在测试点上配合示波器的PLL触发模式一次性看清稳定后的相位关系。3. FPGA里JESD204B IP配置与链路建立3.1 关键配置从IP核到XDC约束硬件时钟到位之后FPGA侧的工作同样有一堆坑。Xilinx Vivado里的JESD204B IP核配置时最关键的几个参数是线速率Lane Rate、参考时钟频率、SYSREF模式、Subclass类型。我用的典型配置线速率6.25GbpsMGT参考时钟250MHzSYSREF模式选择“periodic”或“one-shot”取决于上游时钟芯片的SYSREF输出类型Subclass选1。这里的250MHz MGT参考时钟是GT收发器专用的通常由板上同一颗时钟芯片的另一个输出提供而不一定和1.25GHz device clock同频。两者可以不同频但必须同源否则异步关系会破坏确定性延迟。如果你的设计里用的是RF Data Converter IP比如Vivado 2020/2022版本里的RFDC配置逻辑更集成化但底层依然是JESD204B。RFDC IP里有一个asynchronous clock mode divide选项允许发送和接收方向使用不同的时钟分频关系这在FMC板卡上很常见ADC和FPGA各自的时钟来源不同频率存在小偏差通过分频模式把两侧的LMFC对齐到近似频率。千万不要忽略这个选项配置错了会导致ILAS阶段反复失败。XDC约束里GT参考时钟必须约束到MRCC/SRCC管脚set_property PACKAGE_PIN AF14 [get_ports gt_refclk_p] set_property PACKAGE_PIN AG14 [get_ports gt_refclk_n] create_clock -name gt_refclk -period 4.000 [get_ports gt_refclk_p]这里的period 4.000对应250MHz。如果看到“IO Clock Placer failed”之类的报错多半是参考时钟没有绑定到专用的时钟输入管脚或者把普通IO当成参考时钟输入用了。3.2 Subclass 1的确定性延迟是怎么实现的Subclass 1的核心是用SYSREF采样建立LMFC本地多帧时钟从而让多条lane、多个芯片的数据对齐。SYSREF必须在device clock的建立保持时间窗口内被稳定采样否则就会进入亚稳态导致每次上电链路建立后的延迟都不一样。FPGA内部JESD204B IP核会用一个采样窗口去捕获SYSREF如果SYSREF相对device clock的边际刚好卡在窗口边缘就会出现偶发性对齐失败。这种情况的排查思路是先用频率计测量SYSREF和device clock的实际相位关系再在IP核内调整SYSREF采样延迟或者用FPGA内部的IDELAY对SYSREF做精细调整。我遇到过一次比较诡异的现象链路十次里有八次正常两次失败最后抓到是SYSREF上升沿刚好落在device clock采样窗口的建立时间边界上。把SYSREF走线加长了30mil问题就消失了。如果外部没有SYSREFXilinx IP核还支持配置一个“virtual clock”模式用内部生成的虚拟SYSREF去做对齐。这个模式在纯逻辑调试阶段非常有用可以先把内部数据通路跑通再接真正的SYSREF验证确定性。3.3 链路状态机CGS、ILAS、DataJESD204B链路建立大致分三个阶段CGS码组同步、ILAS初始通道对齐序列、Data正常数据。调试时观察这几个阶段的跳转能快速定位问题所在。CGS阶段接收端FPGA拉低SYNC信号发送端ADC/DAC连续发送K28.5字符直到接收端检测到连续的K28.5组合后SYNC拉高。很多“链路建立失败”就卡在这一步原因基本是SYSREF没到、device clock没到、或者线速率和参考时钟不匹配。ILAS阶段发送端发送多帧参数包括L、M、F、S、N、N’等配置接收端校验后进入Data阶段。ILAS校验失败的原因多数时候是FPGA侧IP的链路参数和ADC侧配置不一致比如lane数、每帧字节数、样本分辨率有出入。我建议把两侧的寄存器配置表打印出来逐项对照不要凭感觉。4. 实操复盘从建链失败到频谱干净4.1 现象一IO Clock Placer Failed第一次遇到“IO Clock Placer Failed”时我以为是XDC约束漏了什么后来发现是时钟资源分配的问题。Vivado里GT参考时钟、用户逻辑时钟、恢复时钟在同一个时钟区域内互相抢资源导致布局器找不到合法位置。具体报错信息里会提示是哪个时钟没办法放置在合法的时钟区域。解决办法有两条路一是给不同的时钟分配不同的物理区域通过set_property CLOCK_DEDICATED_ROUTE FALSE先临时绕过但这不是长久之计二是检查设计中是不是把多路GT参考时钟放在了同一个GPU bank或者用了过多的BUFGCE_DIV导致全局时钟树拥塞。我最后是把一路GT参考时钟从MRCC挪到SRCC再把用户逻辑时钟约束到另一个时钟区域一次通过。4.2 现象二链路间歇性掉链每次上电延迟不一致这块板子用的是外购时钟模块SYSREF和device clock分别来自两颗芯片频率虽然相同但相位关系每次上电后是随机的。这就违反了Subclass 1“SYSREF与device clock相位确定”的前提导致链路虽然能建立但每次建立后的确定性延迟完全不同多通道数据错位。解决办法是把SYSREF和device clock统一到同一颗时钟芯片的同一同步机制下。我换了LMK04828之后SYSREF和1.25GHz设备时钟从同一组PLL输出通过SYNC触发对齐问题彻底消失。这是一个典型的“时钟架构决定协议可实现性”的场景硬件改一处软件不用动。4.3 现象三频谱里冒出一堆杂散SNR上不去链路稳定之后真正考验时钟质量的是频谱。投一个1GHz单音信号FFT结果里在信号旁边出现了一串间隔规则的杂散SFDR只有70dBc左右和芯片手册标称的85dBc差了整整15dB。排查思路一层层来先换信号源确认不是信号源本身的问题再检查电源用频谱仪探针在时钟芯片供电引脚附近测试果然发现在开关电源的开关频率上有一组高次谐波。这组谐波通过供电引脚调制到了VCO上最终落在了时钟信号的近端杂散上。解决方法是给时钟芯片单独增加一级低噪声LDO并在LDO之前加一个LC滤波器把开关纹波压到mV级以下。改完再测1.25GHz时钟的近端杂散降低了20dB以上整个系统SFDR从70dBc提升到86dBc。换成低抖动脉冲源之后SNR也提升了约4dB和前面理论推导的抖动公式基本吻合。5. JESD204B调试常见问题速查现象可能原因排查方法解决办法CGS阶段一直不通过SYSREF没达到有效电平示波器测SYSREF波形检查时钟芯片SYSREF配置确认输出使能CGS通过但ILAS失败链路参数配置不一致比对FPGA和ADC寄存器配置表修正L、M、F、S、N等参数链路建立但偶发失步SYSREF和device clock相位漂移用频率计长时间监测相位统一SYSREF和device clock到同一芯片高输入频率时SNR明显下降时钟抖动超出预算用频谱仪看时钟相位噪声调整时钟芯片供电增加滤波降低抖动出现等间隔杂散开关电源纹波调制VCO频谱仪探针测电源噪声增加LC滤波器单独LDO供电IO Clock Placer Failed时钟区域资源冲突查看布局报告调整时钟管脚位置约束时钟区域每次上电确定性延迟不一致SYSREF采样处于亚稳态检查建立保持时间余量调整SYSREF走线长度或内部延迟多片ADC不同步SYSREF未同时到达各芯片测量各SYSREF走线延迟SYSREF走线等长或用时钟芯片多路SYSREF这套问题排查的记录我后来整理成了一个速查文档每次调试新板卡都先对着过一遍。说实话十个问题里有八个最后都能追溯到时钟相关环节。最后再分享一个个人体会JESD204B的调试本质上是在和时钟打交道。逻辑配置错了最多是花时间对文档时钟设计错了是硬件改板级别的灾难。GSPS数据转换器这类系统时钟树的设计一定要前置从选型到布局到供电每一环都别想着“先跑起来再说”。我自己吃过亏之后现在画板的第一件事就是把时钟树画完整确认SYSREF、device clock、GT参考时钟三者同源且相位可控再开始别的模块。这个习惯省下来的时间远比看起来多。
返回列表