☰
AD9653高速ADC+JESD204B接口的FPGA采集系统设计与调试实战
2026/10/3 1:04:46 网站建设 项目流程

搞了几个月的高速采集项目,核心器件就是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转换器分辨率
N'16实际传输的样本bit数,N'=16
CS0无控制bit
K32每个多帧包含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参考时钟一般用125MHz,IP会自动完成内部PLL配置。

另一个关键点是RX的时钟恢复。JESD204B链路接收端要从串行数据流中恢复出恢复时钟,用恢复时钟把数据送入deserializer。初始调试时,如果GTX的复位时序不对,RX不会输出有效数据。我在最初阶段经常遇到“RPLL锁定但RX数据一直为零”的情况,后来确认是GTX复位释放太早,参考时钟还没稳定导致。解决办法是把GTX的复位逻辑改成由MMCM/PLL locked和参考时钟稳定标志共同控制。

3.3 同步与对齐:SYSREF与LMFC

JESD204B 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系统联调,我习惯按下面的顺序走:

  1. 上电后先读ADC寄存器,确认SPI通信正常。
  2. 配置ADC为测试图案输出模式,比如斜坡或PN序列,验证JESD204B链路完整性。
  3. 确认链路无误后切换为正常采样模式,用信号源给一个低频正弦波。
  4. 用ILA抓取数据,检查波形是否正确。
  5. 用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项目从零基础到稳定采集,前后大概花了一个半月。回看整个流程,最费时间的不是代码编写,而是问题定位。如果一开始就把测试图案校验、电源去耦、时钟规划这几个环节做扎实,至少能省出一周以上的调试周期。希望这篇总结能帮正在做类似项目的人少走点弯路。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询