尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

JESD204B多ADC同步实战:时钟与数据对齐的完整方案

JESD204B多ADC同步实战:时钟与数据对齐的完整方案 1. 多ADC同步到底难在哪从JESD204B的链路特性说起做过多通道采集系统的人都有一个共同体会单颗ADC跑通不难难的是让四颗、八颗甚至更多ADC在同一个时间基准下协同工作。尤其在相控阵雷达、医疗超声、大规模MIMO接收这些场景里通道间的采样时刻偏差如果超过一个采样周期后续的波束合成、相位相干处理基本就废了。JESD204B协议之所以被寄予厚望就是因为它用高速串行链路替代了传统并行LVDS接口线数少、引脚省、带宽高但它同时也把同步问题从“板级走线等长”这个相对直观的层面推到了“链路层状态机时钟域交叉确定性延迟”这个更抽象的层面。我接触JESD204B大概是在三年前当时手头一个项目要用四颗ADC做八通道相干采集采样率要求500Msps分辨率14bit。一开始想得很简单给所有ADC和FPGA同一组参考时钟用同一个SYNC信号拉齐不就行了结果实测发现通道间偏差在几百皮秒到几纳秒之间随机跳动完全不可接受。后来花了将近两个月从时钟树重新设计到链路参数逐项排查才把偏差稳定控制在单个采样周期以内。这篇文章就把我踩过的坑和最终跑通的方案完整梳理一遍适合正在做多通道高速采集、被JESD204B同步问题卡住的工程师参考。不管你是刚接触JESD204B的新手还是已经调过几版板子但同步精度始终不理想的老手下面这些内容应该都能帮你省下不少调试时间。2. 整体方案设计为什么同步要分“时钟”和“数据”两层来做2.1 同步问题的本质拆解很多人一上来就盯着JESD204B的SYNC信号看觉得只要SYNC拉齐了数据就对齐了。这个思路只对了一半。多ADC同步实际上要解决两个层面的问题第一层是所有ADC的采样时钟边沿必须对齐这是模拟域的事第二层是每个ADC内部采样到的数据经过JESD204B链路传输到FPGA后要能恢复到正确的时间顺序上这是数字域的事。两层缺一不可而且第一层是第二层的基础——采样时钟都没对齐后面数据对齐做得再好也没意义。打个比方假设有四个水龙头同时往四个桶里放水你想让四个桶在同一时刻开始接水。首先四个水龙头的开关必须同时打开时钟对齐其次每个桶下面接的管子长度不同水流到桶里的时间有先有后你得知道每根管子的延迟是多少才能推算出实际接水时刻数据对齐。JESD204B的链路延迟就相当于那根管子而且这根管子的长度还跟链路参数配置有关不是固定值。2.2 为什么选择子类1而不是子类0或子类2JESD204B有三个子类子类0没有确定性延迟保证子类1用SYSREF信号做同步子类2用SYNC信号本身做同步。多ADC同步场景下子类1是唯一合理的选择。原因很简单子类0的链路延迟不确定每次上电可能都不一样根本没法做多通道对齐子类2虽然也能做确定性延迟但它依赖SYNC信号的边沿来对齐而SYNC信号在链路建立过程中会有多次翻转容易引入不确定性。子类1用独立的SYSREF信号这个信号只在需要同步的时候发一次边沿干净所有器件都拿它做时间基准确定性最好。注意选子类1的前提是ADC和FPGA都支持SYSREF输入。选型阶段一定要确认这一点不然后面改板子代价很大。2.3 时钟树架构的取舍时钟方案上常见的有两种做法一种是所有ADC和FPGA共用一颗时钟芯片由它同时产生采样时钟、SYSREF和FPGA的参考时钟另一种是ADC用独立的时钟芯片FPGA用另一颗SYSREF由其中一颗分发。我最终选的是第一种方案用一颗低抖动时钟芯片同时输出所有时钟。理由有三点第一共用时钟芯片意味着所有输出之间的偏斜是可控的数据手册里会给出明确的通道间偏斜参数第二SYSREF和采样时钟同源它们之间的相位关系确定不需要额外校准第三调试阶段只需要配置一颗芯片变量少出问题容易定位。代价是时钟芯片的扇出能力要够而且PCB布局时要注意时钟走线的等长和阻抗控制。我当时用的时钟芯片有14路输出刚好够四颗ADC加FPGA用。如果通道数再多可能需要级联时钟芯片那时候就要额外考虑级联带来的偏斜问题。3. 时钟对齐实操从芯片配置到PCB走线的完整细节3.1 时钟芯片的关键参数配置时钟芯片的配置直接决定了采样时钟的质量和SYSREF的时序。我用的那颗芯片需要配置几个关键参数输出频率、输出格式、SYSREF模式。输出频率根据ADC采样率来定500Msps采样率对应500MHz时钟。输出格式选LVDS因为ADC的时钟输入是LVDS电平。SYSREF模式选“连续”还是“脉冲”要看系统需求——连续模式下SYSREF一直输出适合需要周期性同步的场景脉冲模式下SYSREF只发一次适合上电同步一次就够的场景。我选的是脉冲模式因为系统不需要周期性重同步而且脉冲模式对正常采样的干扰更小。配置的时候有个细节容易忽略SYSREF和采样时钟的相位关系。数据手册里通常会给出一个“SYSREF建立/保持时间”参数要求SYSREF的边沿距离采样时钟边沿至少多少皮秒。如果这个条件不满足ADC内部可能采到错误的SYSREF状态导致同步失败。我的做法是在时钟芯片配置里调整SYSREF的输出延迟用示波器实测SYSREF和采样时钟的相位差确保满足建立/保持要求。3.2 PCB走线的等长与阻抗控制PCB走线这块采样时钟和SYSREF的走线必须严格等长。等长精度要求取决于采样周期和允许的通道间偏差。以500Msps为例一个采样周期是2ns如果要求通道间偏差小于采样周期的十分之一那就是200ps。信号在PCB上的传播速度大约是6.7ps/mm200ps对应大约30mm的走线长度差。这个余量看起来挺大但实际设计中还要考虑芯片内部延迟的差异、连接器的偏斜等因素所以走线等长最好控制在5mm以内。阻抗控制方面LVDS差分走线要求100欧姆差分阻抗单端50欧姆。这个在叠层设计阶段就要算好走线宽度和间距根据板材参数确定。我用的板材是FR4介电常数4.2左右差分走线宽度0.15mm间距0.2mm实测阻抗在98到102欧姆之间满足要求。实操心得走线等长不要只盯着时钟线SYSREF线也要和时钟线等长。很多人只关注采样时钟的等长结果SYSREF偏了同步照样出问题。3.3 实测时钟对齐效果的方法时钟对齐做完之后怎么验证最直接的方法是用高带宽示波器同时抓多路采样时钟的边沿看它们是否对齐。但示波器探头本身有延迟差异多探头之间也有偏斜所以这个方法只能做粗略判断。更准确的方法是利用ADC内部的测试模式很多ADC支持输出一个与采样时钟相关的测试信号比如斜坡信号或者固定码型通过JESD204B链路传到FPGA然后在FPGA里比较各通道的测试信号相位。如果时钟对齐了各通道的测试信号应该完全一致。我当时用的是斜坡测试模式四颗ADC同时输出内部生成的斜坡信号FPGA接收后比较四个通道的斜坡起始点。实测下来四通道的斜坡起始点偏差在正负一个采样周期以内说明时钟对齐基本到位。剩下的偏差通过后续的数据对齐来补偿。4. 数据对齐实操链路参数配置与确定性延迟测量4.1 JESD204B链路参数的计算与选择数据对齐的第一步是配置JESD204B链路参数。这些参数包括L链路数、M转换器数、F每帧字节数、K每多帧帧数、N转换器分辨率、N子类1的调整分辨率、S每帧每转换器采样数。这些参数不是随便选的它们之间要满足一定的约束关系而且会影响链路延迟和同步性能。以我的系统为例四颗ADC每颗ADC有双通道所以M8每颗ADC用一条链路所以L4分辨率14bit所以N14N16子类1要求N是4的倍数采样率500Msps帧时钟频率等于采样率除以S取S1所以帧时钟500MHzF选2K选32。这些参数确定后链路的总延迟就可以计算出来了。计算链路延迟的公式比较复杂涉及帧时钟周期、多帧长度、链路建立时间等多个因素。我的做法是直接用ADC厂商提供的配置工具生成参数然后在FPGA端用同样的参数配置JESD204B IP核。配置工具会给出一个理论延迟值但这个值只是参考实际延迟还要实测。4.2 SYSREF的时序要求与捕获方法SYSREF的时序是数据对齐的关键。子类1要求SYSREF的边沿满足ADC和FPGA的建立/保持时间要求而且SYSREF必须与采样时钟同源。在实际系统中SYSREF从时钟芯片发出经过PCB走线到达ADC和FPGA走线延迟会导致SYSREF到达不同器件的时间有差异。这个差异必须在链路建立之前补偿掉。补偿的方法有两种一种是在时钟芯片里调整SYSREF的输出延迟让所有器件的SYSREF到达时间对齐另一种是在FPGA里调整SYSREF的捕获相位用IDELAY或者类似的延迟单元来补偿。我选的是第二种方法因为FPGA端的延迟调整更灵活而且可以逐通道调整。具体操作是在FPGA的JESD204B IP核里配置SYSREF捕获逻辑用一个可编程延迟线来调整SYSREF的采样相位。调整的时候先让SYSREF在默认相位下捕获然后逐步增加延迟观察链路是否稳定建立。找到稳定窗口的中心点就是最佳捕获相位。4.3 确定性延迟的测量与补偿确定性延迟是子类1的核心特性它保证每次上电后链路延迟都是一个固定值。但这个固定值具体是多少需要实测。测量方法是在ADC端发送一个已知的时间标记比如一个特殊的码型在FPGA端记录接收到这个标记的时间两者之差就是链路延迟。实测的时候要注意链路延迟包括两部分一部分是ADC内部从采样到数据输出的延迟这部分是固定的另一部分是JESD204B链路传输的延迟这部分与链路参数有关。两部分加起来才是总延迟。我的做法是在FPGA里做一个时间戳计数器用SYSREF复位然后比较各通道数据到达时间戳的差异。如果所有通道的差异都在一个采样周期以内说明确定性延迟已经对齐了。注意确定性延迟的测量要在链路稳定建立之后进行链路还没稳定的时候测出来的值没有意义。5. 常见问题与排查技巧实录5.1 链路建立失败从SYNC信号入手排查链路建立失败是最常见的问题表现是SYNC信号一直处于高电平FPGA收不到有效数据。排查的时候从SYNC信号入手先用示波器看SYNC信号的波形确认它有正常的翻转。如果SYNC一直不翻转说明FPGA没有发出同步请求检查FPGA端的JESD204B IP核配置是否正确。如果SYNC有翻转但链路还是建不起来检查ADC端的配置确认ADC已经正确接收到SYNC信号并开始发送数据。还有一个容易忽略的点链路建立过程中ADC和FPGA的帧时钟必须已经稳定。如果帧时钟还没稳定就开始同步链路会反复建立失败。我的做法是在FPGA里加一个延时等时钟稳定后再发起同步请求。5.2 通道间偏差过大时钟还是数据的锅通道间偏差过大首先要判断是时钟问题还是数据问题。判断方法很简单如果偏差是固定的不随时间变化那大概率是数据对齐没做好如果偏差是随机的每次上电都不一样那大概率是时钟对齐有问题。固定偏差可以通过调整数据对齐参数来补偿随机偏差则要回头检查时钟树。我遇到过一次随机偏差的情况排查了很久才发现是时钟芯片的SYSREF输出模式配置错了。当时配成了连续模式但系统只需要脉冲模式结果SYSREF一直在翻转ADC内部的同步状态机被反复触发导致每次上电的同步结果都不一样。改成脉冲模式后问题解决。5.3 常见问题速查表问题现象可能原因排查方法解决方案SYNC信号不翻转FPGA端IP核配置错误检查IP核参数重新配置IP核链路反复建立失败帧时钟不稳定示波器测帧时钟等时钟稳定后再同步通道间偏差随机SYSREF模式配置错误检查时钟芯片配置改为脉冲模式通道间偏差固定数据对齐参数不对测量确定性延迟调整延迟补偿值链路建立后数据错误链路参数不匹配对比ADC和FPGA参数统一链路参数SYSREF捕获不稳定捕获相位不在窗口中心扫描捕获相位取稳定窗口中心点5.4 几个容易被忽略的细节第一个细节是电源噪声。JESD204B的高速串行链路对电源噪声很敏感尤其是ADC的模拟电源和时钟芯片的电源。我在调试初期遇到过链路偶尔失锁的问题后来在电源上加了额外的LC滤波才解决。第二个细节是温度漂移。时钟芯片和ADC的延迟会随温度变化如果系统工作温度范围大确定性延迟可能会漂移。我的做法是在温度稳定后再做一次延迟校准或者用温度传感器做实时补偿。第三个细节是FPGA端的参考时钟质量。FPGA的JESD204B IP核需要高质量的参考时钟如果参考时钟抖动大链路误码率会升高。我用的是时钟芯片输出的专用参考时钟抖动在100fs以内。6. 系统联调与性能验证从实验室到实际场景6.1 联调步骤的先后顺序系统联调不能眉毛胡子一把抓要有明确的顺序。我的做法是第一步单独调试每颗ADC的链路确保每颗ADC都能独立稳定工作第二步把所有ADC的链路同时打开观察是否有相互干扰第三步做时钟对齐用测试模式验证各通道采样时钟是否对齐第四步做数据对齐测量并补偿确定性延迟第五步跑实际信号验证通道间相干性。这个顺序的好处是每一步只引入一个变量出问题容易定位。如果一上来就全部打开出了问题根本不知道是哪颗ADC、哪个环节的问题。6.2 性能验证的关键指标性能验证主要看三个指标通道间偏差、信噪比、无杂散动态范围。通道间偏差用前面说的测试模式来测目标是小于一个采样周期。信噪比用单音信号来测输入一个已知频率和幅度的正弦波在FPGA里做FFT看信噪比是否达到ADC数据手册标称值。无杂散动态范围同样用单音信号测看频谱里有没有异常的杂散分量。我实测下来四通道的偏差在正负0.5个采样周期以内信噪比达到70dB以上无杂散动态范围达到85dB以上满足系统要求。如果指标不达标优先检查时钟质量和电源噪声这两个是影响性能的主要因素。6.3 实际场景中的注意事项实际场景和实验室环境最大的区别是干扰源更多。实验室里可能只有几台仪器实际场景里可能有电机、开关电源、无线发射设备等各种干扰源。这些干扰可能通过电源线、空间辐射等途径耦合到采集系统里影响同步性能。我的做法是在实际场景里先做一次背景噪声测试记录没有信号时的噪声水平然后再做同步测试。如果背景噪声比实验室高很多就要考虑加屏蔽或者滤波。另外实际场景里的温度变化也可能影响同步性能。如果系统需要长时间连续工作建议在温度稳定后再做一次同步校准或者设计温度补偿机制。7. 写在最后几个让我少走弯路的经验整个项目做下来最大的体会是JESD204B多ADC同步不是一个“配好参数就能跑”的事它需要你对时钟树、链路层、PCB设计都有足够的理解。我踩过的坑里有一半是因为对某个环节的理解不够深入另一半是因为调试方法不对。如果让我重新做一遍我会在方案设计阶段就花更多时间在时钟树仿真上把各种偏斜因素都算清楚而不是等到板子回来再调。另外调试工具很重要。一台高带宽示波器、一个能抓JESD204B链路状态的协议分析仪能帮你省下大量时间。我刚开始调的时候没有协议分析仪只能靠FPGA里的调试逻辑猜问题效率很低。后来借了一台分析仪链路建立过程中的每个状态都能看到问题定位快了很多。最后分享一个小技巧如果链路偶尔失锁但找不到原因可以试试降低链路速率跑一段时间。如果降速后稳定了说明是信号完整性问题重点检查PCB走线和连接器如果降速后还是偶尔失锁那可能是时钟或者电源的问题。这个方法能帮你快速缩小排查范围。
返回列表