搞了几个月的高速采集项目核心器件就是AD9653这块16位、双通道、最高125MSPS的ADC配合FPGA搭完整的JESD204B接收链路。从选型评估、原理图设计、PCB布局到FPGA侧IP核配置和联调整个过程踩了不少坑也沉淀了不少可以复用的经验。这篇文章把从硬件到软件、从原理到实操的完整过程整理出来给正在做高速ADC采集、软件无线电、示波器前端或者多通道同步采样方案的朋友做个参考。如果你也想用JESD204B接口的ADC那这篇内容尤其值得看完。1. 项目背景与AD9653选型思路1.1 这个项目要解决什么问题当时的需求是做一个双通道高速数据采集前端模拟输入信号带宽到几十兆赫兹要求16位分辨率采样率至少100MSPS数据要实时送到FPGA做后续处理。这种指标下传统的并行LVDS接口ADC还能用但PCB布线压力大、管脚数量多多通道扩展也不方便。另一个选择是改用JESD204B接口的ADC用高速串行lane替代并行总线FPGA侧只需接几对高速差分线。AD9653正好落在需求区间内双通道、16bit、最高125MSPS、集成JESD204B Subclass 1接口支持多片同步而且ADI提供参考设计和寄存器配置向导开发周期能明显压缩。当时对比过同档次的其他器件比如AD9650是LVDS接口管脚多——但它最大的问题是FPGA资源占用大尤其是引脚和时序约束最后综合考虑还是选了带串行接口的AD9653。1.2 AD9653的核心参数和接口特点先把AD9653的几个关键参数列出来方便后面展开讨论。项目参数分辨率16 bit通道数2最高采样率125 MSPS输出接口JESD204B Subclass 1模拟电源1.8 V AVDD数字电源1.8 V DRVDD输入形式差分模拟输入带宽可达几百MHz满量程输入典型1.5 Vpp 差分可通过SPI微调信噪比 SNR典型值约77 dBFS 10 MHz以数据手册为准无杂散动态范围 SFDR典型值约90 dBc 10 MHz以数据手册为准JESD204B这个接口和传统并行接口最大的不同是把转换后的并行采样数据按帧结构打包经过8b/10b编码后通过高速串行lane发送。AD9653在双通道16bit、125MSPS时如果只配2条lane每条lane的编码后线速率能达到2.5Gbps实际更推荐按4条lane配置把线速率降到1.25Gbps左右对FPGA的GTX/GTH bank压力小很多信号完整性也更好处理。2. 硬件电路设计要点2.1 电源树设计与去耦AD9653对电源噪声比较敏感模拟电源AVDD直接影响采样信噪比。项目里我用了“LDO为主、DC-DC为辅”的策略先把外部5V用DC-DC降到2.5V再用低噪声LDO分别转出1.8V AVDD和1.8V DRVDD。AVDD和DRVDD之间用磁珠隔离并在芯片电源引脚附近放0.1uF和10uF电容组合去耦。如果板上有FPGA注意FPGA的开关电源噪声不能耦合到ADC模拟电源上在电源层划分时就要把模拟区域和数字区域分开。有个容易被忽略的细节SPI接口的电源域也要接到DRVDD如果SPI上拉电阻接到了其它电源轨上电时序不一致可能导致寄存器写不进去。我第一次调试时遇到过SPI读回全FF的情况查了半天发现是上拉电阻接到了3.3V而DRVDD是1.8V两者上电先后不确定SPI电平不匹配。2.2 时钟方案与SYSREF处理ADC的采样时钟质量直接决定系统信噪比时钟抖动会折损高输入频率下的SNR。这个项目里用了低抖动时钟发生器输出LVDS电平给AD9653的CLK和CLK-采样时钟频率通过SPI配置内部PLL分频。JESD204B Subclass 1还需要一个SYSREF信号用于对齐多片ADC的本地多帧时钟LMFC。SYSREF可以来自时钟芯片也可以由FPGA产生但必须保证和采样时钟同源否则建立保持时间无法满足。我当时把SYSREF做成从FPGA可控制的引脚输出这样在上电后可以通过FPGA动态产生SYSREF脉冲调试对齐时比硬件固定连接灵活很多。SYSREF走线要尽量短且远离数字开关信号这个信号比较“娇气”干扰大了会直接影响链路同步。2.3 模拟输入前端与幅度匹配AD9653是差分输入输入满量程典型1.5Vpp。如果前端信号源是单端需要通过巴伦转差分或者用全差分放大器做单端转差分同时完成电平搬移。巴伦方案的优点是噪声低、无额外功耗缺点是不能提供直流偏置适合交流耦合场景如果信号本身带直流分量或者需要DC采集就用全差分放大器。我在项目里用巴伦做了两路交流耦合输入巴伦次级中心抽头通过电阻分压给ADC提供共模电平。这里有个坑中心抽头电压要严格按照AD9653数据手册推荐的共模电压来设置一般接近AVDD/2偏离过大会导致输出波形产生削顶。调节满量程可以通过SPI配置寄存器把输入范围适当调小可以提高小信号分辨率但要注意别在调试初期就动这个参数会增加排查问题的变量。2.4 PCB布局布线与JESD204B信号质量JESD204B高速串行信号对PCB要求比LVDS高不少。4条lane跑1.25Gbps时虽然速率不算极端但布局布线不合理照样出误码。经验归纳几条差分对阻抗控制在100欧姆走线等长等距同一对差分线内长度差控制在5mil以内。高速lane远离时钟输出和模拟输入走线避免串扰。参考层要完整不能跨分割否则返回路径不连续会增加误码率。模拟输入部分与数字接口部分分区放置ADC芯片底下尽量铺完整地平面。所有SPI控制线属于慢速信号可以随意点但不要和高速lane平行走太长距离。当时打样回来第一次上电JESD204B链路能同步但偶发误码后定位到是其中一条lane走线跨了电源层分割改版后问题消失。验证了那句话高速信号出问题90%以上是布局布线的问题。3. FPGA逻辑设计与JESD204B链路搭建3.1 JESD204B协议要点和参数规划JESD204B协议描述的是“转换器-逻辑器件”之间的串行数据链路。数据被组织成帧多个帧组成多帧帧结构由参数L、M、F、S、K等确定。调这套链路第一步就是把参数算对参数错了后面全白搭。这次项目的链路配置如下参数取值说明L4高速lane数量M2转换器数量双通道F1每lane每帧包含的octet数S1每帧每个转换器包含的样本数N16转换器分辨率N16实际传输的样本bit数N16CS0无控制bitK32每个多帧包含32个帧Subclass1使用SYSREF对齐LMFC线速率可以用这个公式估算未编码数据速率 M × N × S × 采样率 / L代入数值2 × 16 × 1 × 125MHz / 4 1Gbps再乘以8b/10b编码系数10/8得到每lane线速率1.25Gbps。这个速率对于7系列的GTP或Ultrascale的GTY来说余量很充足。3.2 FPGA侧JESD204B IP核配置在Vivado里使用JESD204B IP核配置时重点确认几个地方逻辑层参数要和ADC侧一致物理层选择对应的GTX/GTH transceiver参考时钟频率要与线速率匹配。1.25Gbps线速率下GTX参考时钟一般用125MHzIP会自动完成内部PLL配置。另一个关键点是RX的时钟恢复。JESD204B链路接收端要从串行数据流中恢复出恢复时钟用恢复时钟把数据送入deserializer。初始调试时如果GTX的复位时序不对RX不会输出有效数据。我在最初阶段经常遇到“RPLL锁定但RX数据一直为零”的情况后来确认是GTX复位释放太早参考时钟还没稳定导致。解决办法是把GTX的复位逻辑改成由MMCM/PLL locked和参考时钟稳定标志共同控制。3.3 同步与对齐SYSREF与LMFCJESD204B Subclass 1的同步过程可以拆成三步首先是SYSREF信号让所有器件的LMFC对齐然后是接收端发送SYNC~信号请求同步最后是发送端在多帧边界发送K28.5码接收端检测到K码后完成帧和多帧对齐。FPGA侧必须保证SYSREF的建立时间和保持时间都满足要求。SYSREF可以先打两拍同步到系统时钟域再送给JESD204B IP的sysref引脚。如果时序余量不够就要检查SYSREF和采样时钟的相位关系必要时在硬件上加可控延迟线或者在FPGA内部用IDELAY调整。还有一个经验上电后不要急着让FPGA产生SYSREF脉冲先等ADC的PLL锁定再等参考时钟稳定最后才发SYSREF。顺序错了会导致同步不稳定表现为偶尔同步上偶尔同步不上。3.4 数据接收通路和采集缓存设计JESD204B IP输出的AXI4-Stream数据格式是每个通道的采样数据按帧交替排列。AD9653输出默认是偏移二进制格式拿到数据后需要转成二进制补码再给后续处理模块或者直接按偏移二进制处理取决于下游算法对格式的约定。我在IP后面加了一个简单的数据格式转换模块和一个异步FIFO做跨时钟域。因为JESD204B IP输出的数据时钟来自GTX恢复时钟和FPGA逻辑主时钟是异步的FIFO是最稳妥的处理方式。FIFO读写水位要做好监控如果读端长期为空或写端溢出说明上下游数据速率不匹配。调试时用ILA集成逻辑分析仪直接抓取FIFO读端的数据观察波形是否符合预期。如果输入是一个低频正弦波抓到的数据应该能看出平滑的正弦轮廓这是验证链路通不通的最直观方法。4. 系统联调与问题排查实录4.1 调试流程和工具准备AD9653系统联调我习惯按下面的顺序走上电后先读ADC寄存器确认SPI通信正常。配置ADC为测试图案输出模式比如斜坡或PN序列验证JESD204B链路完整性。确认链路无误后切换为正常采样模式用信号源给一个低频正弦波。用ILA抓取数据检查波形是否正确。用Matlab或Python对抓取的数据做FFT评估SNR和SFDR。这套流程的好处是每一步都有明确的判断标准链路通没通、数据对不对一目了然。如果跳过第2步直接上真实信号链路误码和信号异常混在一起很难定位问题。测试图案模式是JESD204B调试的神器。AD9653内置的测试图案包括全零、全一、斜坡、PN23、PN9等。用FPGA侧产生同样的期望图案把实际接收数据和期望数据逐bit比较就能精确判断链路是否有误码。4.2 问题一SYNC~信号一直为高链路同步不上现象是AD9653的SYNC~引脚一直为高说明接收端一直没有成功完成同步。排查过程如下先确认FPGA侧JESD204B IP是否处于正常工作状态查看IP状态寄存器发现GTX的PLL已经锁定但RX byte对齐一直没完成。然后用ILA抓GTX的rxbyteisaligned信号发现该信号一直为低说明8b/10b字节对齐没成功。继续追查发现GTX参考时钟实际频率和IP配置不一致本应125MHz但万用表和示波器量出来却是124.9MHz多。原因是时钟芯片配置有误输出频偏超出要求。修正配置后rxbyteisaligned正常拉高SYNC~信号成功拉低完成同步。这个问题的经验总结JESD204B链路同步问题先查字节对齐标志再查时钟和GTX配置。有的问题现象看起来是上层协议的事实际根因在物理层。4.3 问题二数据偶发跳变和误码链路同步后测试图案模式误码率不高但偶发跳变。用ILA抓数据发现某些时刻连续几个采样数据都错随后又恢复正常。这个现象明显不是直流偏移或增益问题更像是物理层偶发误码。检查了高速lane的差分对走线、连接器接触、终端电阻最后定位到问题出在电源上AVDD上叠加了高频纹波幅值十几毫伏来源是相邻电源模块的开关噪声通过地平面耦合过来。在ADC电源引脚处加大容值滤波电容并加磁珠隔离后误码消失。高速混合信号系统中电源完整性对误码率的影响往往比理论计算更明显。数字开关噪声耦合到模拟电源后会直接影响ADC内部比较器的工作点导致采样结果偶尔异常。4.4 问题三波形幅度和直流偏置不对链路通了数据也连续了但用信号源输入一个1kHz、1Vpp的正弦波抓出来的数据是“削顶”的幅度偏小且带直流偏移。先检查模拟输入配置发现巴伦次级中心抽头的共模电压设置不当实际比AVDD/2低了约100mV导致ADC输入信号整体向下偏移上端先削顶。调整中心抽头分压电阻后削顶消失。这个问题的要点是在排查ADC数据异常时不要一上来就调FPGA逻辑先用示波器测ADC模拟输入端的实际波形确认信号到了ADC引脚时确实正确。很多“看起来很FPGA的问题”根源其实在前级模拟电路。4.5 常见问题速查表现象可能原因排查方法与处理SYNC~一直为高GTX时钟配置错误、SYSREF没对齐、IP参数不一致检查字节对齐标志确认参考时钟频率与线速率匹配核对L/M/F/S参数SPI读回全FFSPI电平不匹配、DRVDD未上电、时序不对检查上拉电阻电源域输出是否和DRVDD一致数据全零或全FRX数据通路未工作、GTX复位时序错误检查复位信号是否由lock标志控制确认IP输出valid信号数据偶发跳变电源纹波大、高速lane信号完整性差、SYSREF干扰检查电源纹波优化去耦检查差分走线跨分割SYSREF远离高速lane输出波形削顶输入共模电压偏移、满量程配置过小用示波器测输入波形调整共模电压和满量程寄存器通道间数据错位帧对齐错误、参数配置不一致使用斜坡测试图案检查通道顺序和帧边界4.6 调试心得补充调试过程中我还有一个习惯每次SPI配置后都会把相关寄存器读回一遍确认写入成功。AD9653的寄存器比较多配置脚本化后容易掩盖问题读回校验能快速排除配置错误。测试图案模式下如果链路全链路无误码基本可以放心切真实采样。还有一个小技巧用FPGA内部计数器产生一个已知频率的方波或正弦波送给ADC做自测这样可以不依赖外部信号源方便在实验室环境快速验证整条链路。5. 项目复盘与经验心得5.1 硬件与FPGA开发的高效协作这个项目让我对“硬件先走一步FPGA并行介入”的流程有了更深体会。PCB布局布线阶段FPGA工程师就应该参与到JESD204B lane规划里确定GTX bank位置避免lanet分配和PCB走线冲突。如果等板子回来再发现FPGA引脚约束导致走线绕大圈就很被动了。FPGA逻辑开发和硬件调试不必严格串行。PCB投板阶段就可以开始搭建JESD204B IP核的仿真环境AD9653有IBIS-AMI模型可以做完整的链路仿真。仿真虽然不能替代实测但能把很多低级配置错误提前暴露出来省下的时间非常可观。5.2 高速ADC调试可以复用的经验这次项目调完几个通用的经验我觉得值得再强调一遍第一调试JESD204B链路要“从底层往上走”。先验证物理层再验证字节同步再验证多帧同步最后才看数据内容。只要链路断在哪一层就去哪一层排查。第二测试图案模式是链路调试最可靠的手段一定要善用。没有它很多问题会牵扯到“是ADC的问题还是FPGA的问题”有了它链路本身通不通先给出明确结论。第三电源是高速ADC项目的隐性杀手。原理图看着没问题、布局布线也没踩大坑但纹波和噪声仍然可能让数据异常。电源预算表要提前做哪些电源轨对噪声敏感要心中有数。第四如果项目里后续要扩展更多通道比如四通道、八通道一定要在方案阶段就想好多片同步的SYSREF分配方案等板子做出来再改成本就高了。AD9653的Subclass 1机制就是为多片同步设计的规划好时钟树后面扩展会顺利很多。这次AD9653项目从零基础到稳定采集前后大概花了一个半月。回看整个流程最费时间的不是代码编写而是问题定位。如果一开始就把测试图案校验、电源去耦、时钟规划这几个环节做扎实至少能省出一周以上的调试周期。希望这篇总结能帮正在做类似项目的人少走点弯路。