尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

JESD204B时钟同步实战:AD9680子卡1.25GSPS采样率下的SYSREF调试全记录

发布时间:2026/9/28 17:06:46

资讯中心
01
ARTICLE

JESD204B时钟同步实战:AD9680子卡1.25GSPS采样率下的SYSREF调试全记录

JESD204B时钟同步实战:AD9680子卡1.25GSPS采样率下的SYSREF调试全记录
开工之前先说句题外话调过JESD204B接口的兄弟基本都明白这个协议本身的门槛不在协议层而在“物理层时钟层链路层”三件事同时要处理好。尤其是AD9680这种双通道14位ADC子卡跑到1.25GSPS采样率的时候总线速率直接逼近高速收发器的极限这时时钟同步clocksync一旦没做好表现出来的现象就是要么链路起不来要么偶尔起来但跑几分钟就掉链子甚至多片同步时数据对齐位置一直在漂。这篇文章我就把AD9680子卡在1.25GSPS采样率下的JESD204B时钟同步整个调试过程梳理一遍重点讲SYSREF怎么处理、clocksync怎么设置、哪些寄存器必须核对、哪些坑我踩过以后不想让你再踩。适合正在调FPGA高速采集板卡、做软件无线电或者采集系统底层开发的工程师参考。1. 先看清整套体系1.25GSPS采样率下的JESD204B链路到底在跑什么1.1 AD9680子卡的整体形态与工作链路AD9680是ADI家一颗双通道14位ADC支持最高1.25GSPS采样率不同后缀对应不同速率等级它内部集成了JESD204B接口可以把采样结果高速发出去。我们这块子卡做的是标准FMC形态插到FPGA基板上用板上FPGA的高速收发器去接收ADC数据。整个链路简单画出来就是模拟信号进来经过AD9680采样量化ADC内部把14bit采样数据按JESD204B协议组帧再从高速串行口发出来FPGA侧用GTX/GTH收发器把高速串行数据收下来经过JESD204B IP核解帧、对齐、去映射最后拿到并行采样数据给上层逻辑用。这个链路里最容易被忽略的其实是“时序关系”。JESD204B不像传统LVDS接口那样一个DCO时钟直接送过来就完事它要求接收端和发送端之间保持确定的延迟关系。这种确定性延迟必须靠一整套“设备时钟device clockSYSREF本地多帧时钟LMFC”机制来保证。换句话说AD9680采样时钟是否干净、SYSREF能否被两边同时正确捕获、FPGA侧收发器对SYSREF的采样窗口是否稳定这三个问题中的任何一个出了问题都会导致链路同步失败。1.2 时钟同步到底同步的是“什么”很多人第一次调JESD204B时都会困惑我明明已经给ADC和FPGA都送了同一个时钟源为什么还是同步不上这里要分清两个“同步”的概念。一个是频率同步即两边都用同一时钟源频率一致。另一个是相位同步即不仅频率一致而且数据帧的起点也要对齐。JESD204B的Subclass 1机制要求必须使用SYSREF信号来对齐所有器件的本地多帧时钟LMFC确保每个器件在同一个多帧边界开始发送或接收数据。SYSREF是一个低速率、周期性的脉冲/突发信号它和device clock之间必须满足严格的建立保持时间。AD9680在Subclass 1模式下会采样SYSREF一旦捕获到上升沿就把内部的SYSREF捕获位置锁存下来用来对齐LMFC。FPGA侧的JESD204B IP核同样也会采样SYSREF来做LMFC对齐。这里最难的点在于SYSREF和device clock虽然在同一个时钟芯片上生成但走线长度不同、负载不同、器件内部的延迟不同所以必须做“确定性延迟”校准。1.3 为什么1.25GSPS这个点特别敏感如果只在500MSPS以下采样率调JESD204B说实话坑会少很多因为链路余量足够大很多小问题被高速收发器的自适应均衡吞掉了。一旦站到1.25GSPS这个档位情况就完全不一样。以AD9680双通道、14bit、4条lane的典型配置来算每个采样点按16bit帧格式打包含控制位的数据总数据率是2×1.25GHz×16bit40Gbps再除以4条lane单条lane速率就是10Gbps。10Gbps这个数字几乎是很多FPGA高速收发器在普通FR4板材加连接器条件下能够稳定工作的上限。这时候时钟抖动对误码率的影响会被急剧放大哪怕只有几皮秒的随机抖动在10Gbps的信号眼图上都会直接表现为眼高缩小、眼宽变窄。我调试中就遇到过SYSREF和device clock相位看起来没问题但链路BER误码率始终在10的负12次方附近徘徊高低温一跑就翻车的案例。所以在这个速率点上时钟同步不是“配一下寄存器”那么简单它是整个信号链路的基石。2. 调试前的顶层设计时钟树方案、芯片选型与链路规划2.1 时钟芯片选型与整体时钟树规划时钟树是整个JESD204B系统最先要定下来的东西。AD9680的采样时钟device clock、FPGA的参考时钟refclk、SYSREF信号理论上都应该来自同一个源头这个源头一般由时钟芯片提供。我在这个项目里用的是ADI的LMK04828之所以选它不选更便宜的普通时钟芯片主要是因为它能同时输出多路低抖动时钟并且支持SYSREF和device clock的确定性对齐而且里面有专门的SYSREF分频逻辑能产生不同周期、不同模式的SYSREF信号。时钟树的具体设计思路是先用一个干净的外部参考源比如10MHz恒温晶振给LMK04828锁相然后LMK04828输出两路关键时钟——一路是AD9680的采样时钟也就是device clock按1.25GHz给另一路是FPGA侧的高速收发器参考时钟按250MHz给因为FPGA收发器内部会做10倍频或者20倍频来匹配lane速率。SYSREF则从LMK04828的SYSREF输出引脚产生频率可以配置成LMFC频率或者其分频这个后面细说。2.2 参考设计中的时钟配置路径LMK04828的寄存器配置建议直接通过ADI的Clock Design Tool生成不推荐手算分频系数。打开工具后选择芯片型号把PLL1、PLL2的参考频率、锁定频率、各个输出的分频比、延迟值都填进去工具会直接导出寄存器配置表。我自己的习惯是先把AD9680的采样率和lane速率确定下来反推出LMFC频率然后才去算SYSREF分频。这里有个关键点SYSREF的频率必须是LMFC频率的整数分之一同时SYSREF的高电平宽度要足够让AD9680稳定采样。我实际项目里把SYSREF配置成了LMFC频率的1/16周期约几微秒一次这样既能保证足够的采样窗口又不会因为SYSREF频繁翻转引入太多噪声。在Clock Design Tool里可以通过SYSREF的normal模式或者pulse模式来配置我建议先用normal模式把功能调通再根据EMC和功耗需求决定是否改成pulse模式。2.3 FPGA侧的高速收发器配置与复位时序FPGA侧的大头是把Xilinx JESD204B IP核和收发器配置好。如果你用的是Vivado通常会先把JESD204B IP核的Transceiver配置选好lane速率设定为10Gbps参考时钟频率设定为250MHz线速率和参考时钟的比例关系由IP核自动计算。这里我踩过一个坑JESD204B IP核里的参考时钟默认可能和实际板卡上的时钟频率不一致导致收发器CDR无法锁定。所以配置完IP核第一步不是跑仿真而是先看gt_rxresetdone和gt_txresetdone有没有拉高。另外FPGA侧的复位时序对时钟同步成效影响非常大。标准的复位流程是先给收发器复位等txresetdone、rxresetdone起来之后再给JESD204B IP核的复位而IP核的复位又分为核心复位和链路层复位核心复位要在SYSREF之前释放链路层复位要和ADC侧同步释放。很多新手直接把所有复位绑在一起结果SYSREF来的时候FPGA侧还没准备好同步当然失败。实操上我会在复位状态机里加一个至少100us的延时等电源和时钟都稳定后才开始释放链路复位。3. clocksync核心实操SYSREF处理与同步寄存器设置3.1 配置前的硬件状态检查正式开始配寄存器之前我强烈建议先把硬件的几个状态量测一遍不然后面软件和硬件问题搅在一起非常难排查。第一用示波器看LMK04828输出的device clock频率是不是精确的1.25GHz频率计测量比示波器测出来的更准。第二看SYSREF信号是否存在幅度是否达到AD9680的逻辑阈值。第三用误码仪或者FPGA的IBERT把每一条lane的物理层先测通确保10Gbps下线速率下收发器能正常锁定、误码率在可接受范围。只有在物理层干净的条件下时钟同步的问题才能被独立拎出来分析。我自己习惯的做法是在FPGA里先例化一个IBERT工程把4条lane全部测一遍查看每个通道的误码率、眼图扫描结果。实测中经常发现某条lane因为走线过长或者过孔设计不好误码率比其他lane高一个数量级。这种情况下你先去调SYSREF是没有意义的因为同步成功之后这种劣化的lane依然会在长时间跑数据时丢码。物理层是1协议层是后面的0这个顺序不能反。3.2 AD9680侧的关键寄存器设置AD9680的寄存器配置建议通过它的SPI接口写入常见做法是FPGA用SPI Master直接写或者通过ADI的评估板软件先导出寄存器表再用脚本刷进板子。仅针对1.25GSPS采样率、4条lane、Subclass 1模式我核对了以下几个关键配置项JESD mode配置为2个转换器、4条lane、每帧2个采样点L4M2S2对应寄存器0x112、0x113、0x114等。Subclass设为1确保SYSREF的采样功能打开。SYSREF 采样模式根据SYSREF是周期性信号还是突发信号选择“连续SYSREF”模式或者“NEG/DEG”模式。如果SYSREF持续翻转建议配置成连续模式如果只是固定个数脉冲就配成突发模式并在捕获完成后关闭SYSREF检测避免后续误触发。SYNC_INB段低电平检测使能JESD204B的SYNC信号是ADC通知FPGA“我准备好同步”的握手信号要确保FPGA侧能正确响应。我特别想强调SYSREF采样模式的选择。SYSREF在LMK04828里生成时如果一直是连续脉冲它会在数据时钟边上持续带来周期性的噪声干扰影响ADC的动态性能。实测在同一块板子上把SYSREF从连续模式改成突发模式后SFDR大概改善了3到5dB。所以功能调试阶段可以先用连续模式等系统稳定后改成突发模式做最终优化。3.3 SYSREF与device clock的对齐原则SYSREF与device clock之间的时序关系是AD9680能否锁定LMFC的命门。AD9680内部的SYSREF采样器会对device clock的每个上升沿采样SYSREF电平。为了保证采样稳定SYSREF的建立时间和保持时间必须满足手册要求。JESD204B标准里允许SYSREF宽度包含多个device clock周期但最优做法是把SYSREF边沿对齐到device clock边沿附近并且确保SYSREF稳定电平覆盖住采样点。实际操作中我会在LMK04828的寄存器里通过调整SYSREF的模拟延迟和数字延迟把SYSREF的上升沿一点点扫描过去。在FPGA侧通过JESD204B IP核的状态寄存器观察同步是否成功同时用示波器同时测量device clock和SYSREF的波形确认复位后的第一个SYSREF上升沿和device clock的相位关系。因为LMK04828的延迟步进精度在几十皮秒量级所以在10Gbps系统里这个扫描过程是必须做细的。3.4 FPGA侧观测点与同步状态判断时钟同步配完之后怎么快速判断它到底成没成功我的判断顺序是先看JESD204B IP核的中断/状态寄存器确认lane的时钟恢复锁定rx_ctrl_eom、rx_cgs_state这些状态再看symbol同步是否通过最后看多帧同步是否完成。Xilinx的JESD204B IP核一般会有不同模块的状态输出只要链路层从“CGS状态”跳到“DATA状态”并且保持一段时间不掉下去基本就能确认同步成功。建议在FPGA上通过ILA抓取JESD204B IP核的用户侧接口信号比如rx_tvalid、rx_tdata、rx_tsof、rx_tdata。如果rx_tvalid持续拉高且rx_tdata里能够分辨出帧对齐标志0xBC等控制字说明数据链路已经通了。这里有个技巧先让ADC输出一个直流电平或者单音信号去FPGA里看采样数据的原始码值如果码值稳定且符合预期就说明链路彻底打通了如果数据在几个固定值之间跳变多半是链路对齐有问题而不是时钟同步有问题。4. 调试中遇到的典型坑与排查实录4.1 SYSREF采不到链路状态一直卡在CGS现象描述JESD204B IP核的链路层状态一直锁在CGScode group synchronization阶段同步完成后无法进入DATA阶段。排查方法不外乎先从SYSREF入手。先用示波器确认SYSREF确实送到了AD9680封装引脚上再看AD9680的SPI寄存器里SYSREF采样事件有没有发生。如果SYSREF没被标记大概率是电平幅值不够、SYSREF极性配反或者SYSREF建立时间不够。我自己踩过的坑是在LMK04828配置中把SYSREF输出了几个周期就没有了但AD9680默认配置成连续采样模式状态机在等待后续SYSREF来校准结果永远等不到。解决办法是把AD9680配置成“SYSREF触发一次后进入正常数据模式”也就是把SYSREF及其采样行为配置到正确的工作状态。另外SYSREF的极性和AD9680内部寄存器的SYSREF极性选择必须匹配这个在很多应用笔记里都提到过但实操时很容易漏。4.2 lane速率在10Gbps下眼图余量差、跑一段时间后误码率升高JESD204B链路同步上去了但长时间跑数不稳定每隔几分钟会跳一个错误计数。这种问题最隐蔽因为它在示波器上看起来波形也正常SYSREF相位也扫过最佳点了但还是会偶发错误。这时候要回到物理层去排查。我的经验是先降低lane速率做对照实验比如把采样率暂时降到1GSPS看链路是否稳定。如果降速后一切正常再回到1.25GSPS就基本坐实是物理层余量问题。针对10Gbps线速率收发器里的RX均衡参数必须认真调。Xilinx收发器的RX均衡包括LPM低功耗模式和DFE判决反馈均衡两个路径。对走线较长的FMC链路LPM模式往往不够用要打开DFE模式。同时根据实际链路损耗调整RXEQ的增益档位。这块在IBERT里可以直观看到调整均衡参数后眼图的变化。我是先在IBERT里把每条lane调到误码率为0再把参数同步到JESD204B IP核的收发器配置里这样能省掉大量盲调时间。4.3 多片AD9680子卡级联时的通道延迟不一致在单一子卡上做同步比较容易但涉及两块甚至多块子卡同时采集要求所有ADC在同一LMFC边界对齐输出数据这就是multi-chip同步。这个场景下调试难度又上升一个台阶因为每块子卡上的SYSREF到达时间、device clock相位都可能有细微差异。我在项目里遇到的现象是两片子卡分别单独调试都能出数但放一起跑时两片数据之间固定差了一两个采样周期而且每次上电这个差异还会变。这个问题的根因通常是SYSREF没有同时到达所有器件。解决办法有两个层面。第一个是硬件层面尽量保证SYSREF和device clock到各子卡的走线等长或者采用时钟芯片的多个同步输出分别驱动不同子卡。第二个是软件层面利用JESD204B标准里的RBD接收缓冲区延迟机制在FPGA侧JESD204B IP核的配置里调整接收缓冲区的延迟值把不同子卡的数据对齐到同一个多帧边界上。但要注意RBD值不是随便调的它必须满足大于0小于本地多帧长度的范围否则会造成缓冲区溢出或欠载。4.4 SPI寄存器读写时序引起的“灵异现象”AD9680的寄存器配置是通过SPI完成的很多人容易忽略SPI时序和复位时序之间的配合。遇到过一种很奇特的现象同样的配置有时候能同步成功有时候不行完全看不到规律。后来查来查去发现是SPI写寄存器的顺序不对。比如在写入JESD链路相关寄存器之前就把ADC的PLL使能打开了这时候链路的初始化时序已经乱了后面再去写其他寄存器虽然正确但ADC内部状态机已经走到错误状态。所以建议严格按照datasheet里的推荐流程先把所有配置写好最后一步再打开JESD发送使能或者直接执行一次软复位让所有寄存器统一生效。另外SPI的时钟频率不要设太高对于AD9680这种高速ADCSPI速度一般在20MHz以内就够用了频率过高反而容易因为板卡走线噪声导致读回校验失败。写完配置后一定要做回读把关键寄存器回读出来和期望值比对这能帮你第一时间发现“其实是没写进去”这种尴尬问题。5. 时钟同步调试中的信号完整性问题与实测方法5.1 SYSREF与device clock的示波器测量方法测量SYSREF和device clock的相位关系时示波器探头的连接方式非常关键。FMC子卡上SYSREF通常是从连接器传过来的差分信号千万不能直接拿普通探头去点引脚那样测出来的波形没有参考意义。我建议使用1GHz以上的有源差分探头或者至少在靠近芯片的测试点上使用低电容探头单端测量同时用另一个探头同源触发device clock。示波器的时基要去到每格纳秒甚至百皮秒级别打开无穷余辉模式长时间观察SYSREF和device clock之间的抖动。正常情况下SYSREF上升沿相对device clock上升沿的抖动应该在几十皮秒以内。如果发现抖动超过几百皮秒说明时钟芯片的供电或者环路滤波可能有问题这时候去调延迟反而没意义得先把时钟源弄干净。这就像盖房子地基没打平墙刷得再漂亮也白搭。5.2 误码率测试与确定性延迟的反复验证判断时钟同步是否真正做好的最终标准是长时间运行后的误码率。我一般会在最终频率下让FPGA内部跑一个PRBS伪随机序列或者让ADC灌一个标准正弦信号连续跑12到24小时统计JESD204B IP核上报的链路错误计数值。正常的系统在室温下应该保持0错误如果有零星错误但不多还是说明链路余量不足。同时还要做多次上电测试验证确定性延迟是否真的“确定性”。我发现最可靠的方法是把系统设计成每次上电后自动完成一次SYSREF同步然后FPGA记录用户数据的第一个有效采样点位置。连续上下电10次如果每次第一个有效采样点的位置都完全相同说明确定性延迟成立如果位置有跳变说明SYSREF采样不一致需要回头检查SYSREF捕获窗口。这一步很多工程师会偷懒不做但它在生产环境中恰恰是可靠性的大杀器。5.3 一组实测数据参考最后附一组我在调试中记录的典型数据供参考不同板卡会有差异但量级可以作为参照。在LMK04828的SYSREF延迟扫描过程中我以约50ps步进改变SYSREF上升沿位置记录FPGA侧同步成功率。结果发现SYSREF上升沿位于device clock周期内约30%到70%位置时同步成功率接近100%靠近边沿附近则出现偶发失败成功率跌到70%以下。这个窗口范围比理论上窄主要是因为10Gbps速率下链路整体抖动变大导致的。另一个参考数据是SYSREF从连续模式改为突发模式后误码率从连续运行2小时出现1次错误变成了连续运行24小时0错误。这充分说明了SYSREF噪声对高速链路的影响不能被忽视。如果你发现自己无论怎么调整延迟都还有零星错误不妨回头看看SYSREF是不是真的有必要持续翻转。6. 一些攒了很久的经验总结时钟同步这个事技术细节再多真正到现场调试的时候靠的还是几个朴素的习惯。首先手里一定要有一份最新版本的datasheet和寄存器手册很多奇怪问题的答案其实都在里面。其次是分阶段验证把问题分类物理层用IBERT排除时钟层用示波器排除协议层用寄存器状态和ILA排除不要跳步。第二个经验是要重视“上电时序”。好几次我们花了两三天去调SYSREF延迟最后发现是电源上电顺序不满足AD9680的要求导致芯片内部一个子系统没完成初始化。虽然AD9680的电源轨比有些ADC多但严格按照数据手册里的时序要求去做复位和初始化是最省时间的路径。最后如果条件允许把LMK04828、AD9680和FPGA的调试接口都引到板边测试点哪怕占用两三个测试针也好。因为时钟同步调试过程中你永远不知道下一步需要用示波器点哪里。很多时候我们调板子调到最后用一句话总结“JESD204B是协议问题但90%的故障出在物理层和时钟上”。想通这个再遇到SYSREF采不到、链路同步不上、数据偶尔跳字这类问题时你的排查思路就会清晰很多。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。