4. JESD204B/C协议与Agilex硬核实现
JESD204B/C 是高速 ADC/DAC 与 FPGA 之间最常用的串行数据接口标准。它把传统并行 LVDS 接口中“每位一根线”的方式,改为多通道串行 SerDes 传输,用 8b/10b(B 版本)或 64b/66b(C 版本)编码承载采样数据,从而在更少引脚上实现数 Gsps 级采样率的数据搬运。对 Agilex 而言,理解协议层次与硬核分工,是正确配置 IP、保证多通道同步和确定性延迟的前提。
协议分层与链路层关键参数
JESD204 链路可粗略分为三层:传输层负责把 ADC 的采样样本按帧格式映射为 8 位八位组;链路层负责加扰、对齐、字符替换与多通道对齐;物理层由 SerDes 完成串并转换、均衡和时钟恢复。Agilex 的 E-Tile 或 F-Tile 提供硬核 SerDes 与部分链路层逻辑,JESD204B/C IP 则把传输层、链路层配置和同步状态机封装为可参数化模块。
配置时最核心的一组参数是 L、M、F、S、N、N'、K、CS。L 表示每器件链路通道数,M 为每帧转换器数,F 为每帧每通道的八位组数,S 为每帧每转换器的样本数,N 为转换器分辨率,N' 为打包后样本位宽,K 为多帧包含的帧数,CS 为控制位。它们必须与 ADC 端严格一致,否则链路无法进入 DATA 状态。以一颗 4 通道、14 位、采样率 1.25 Gsps 的 ADC 为例,若采用 L=4、M=4、F=2、S=1、N=14、N'=16、K=32,则每通道线速率约为 1.25G × 16 × (10/8) / 4 ≈ 6.25 Gbps(B 版本含 8b/10b 开销),这一数值必须落在所选 SerDes 通道的合法范围内。
多器件同步与确定性延迟
多片 ADC 或多通道系统要求各链路在同一时刻开始采样、同一时刻输出样本,这就是多器件同步。JESD204B 子类 1 通过 SYSREF 信号实现:SYSREF 与器件时钟同源,被各 ADC 和 FPGA 同时捕获,用于复位本地多帧计数器 LMFC。当所有链路的 LMFC 对齐后,发送端在 LMFC 边界释放 SYNC~,接收端在下一个 LMFC 边界开始接收数据,从而保证各通道样本在时间上对齐。
确定性延迟指从 ADC 模拟输入到 FPGA 用户逻辑输出之间的延迟固定且可重复。实现要点是:SYSREF 与参考时钟的相位关系稳定;弹性缓冲的释放点固定;IP 中 RBD(Receive Buffer Delay)参数设置为确定值。若 SYSREF 抖动过大或未对齐,延迟会随上电次数变化,多板同步就会失败。调试时可先观察 SYNC~ 是否稳定拉高,再检查 IP 状态寄存器中的 8b/10b 错误计数和链路状态,最后用已知测试码(如斜坡)验证样本顺序。
使用 Agilex JESD204B/C IP 对接高速 ADC 的配置流程
实际配置可按以下顺序推进。第一步,确认 ADC 数据手册中的 JESD204 参数表,记录 L、M、F、S、N、N'、K、子类、线速率和 SYSREF 要求。第二步,在 Quartus 中打开 JESD204B/C IP 参数编辑器,选择与 ADC 一致的链路模式(B 或 C)、通道数、帧格式和子类;若使用子类 1,勾选 SYSREF 支持并设置 LMFC 周期。第三步,分配 E-Tile/F-Tile 通道,设置参考时钟频率和线速率,确保 PLL 能锁定。第四步,连接 SYSREF 和 SYNC~ 信号,SYSREF 需与器件时钟同源并满足建立/保持时间。第五步,生成 IP 后编写用户逻辑,把 IP 输出的样本按 M 和 S 重组为通道数据,并接入后续处理链。
# 示例:JESD204B IP 关键参数(以 4 通道 14 位 ADC 为例)
L = 4 # 每器件链路通道数
M = 4 # 每帧转换器数
F = 2 # 每帧每通道八位组数
S = 1 # 每帧每转换器样本数
N = 14 # 转换器分辨率
N' = 16 # 打包后样本位宽
K = 32 # 每多帧帧数
Subclass = 1 # 使用 SYSREF 同步
Line Rate = 6.25 Gbps
SCR = 1 # 加扰使能
配置完成后,先不接真实 ADC,用 IP 内置的测试模式或伪随机码验证链路能否进入 DATA 状态。若 SYNC~ 一直不释放,优先检查 L/M/F/S 是否与 ADC 一致、参考时钟是否锁定、SYSREF 是否到达。若链路能建立但样本错位,检查 K 和 LMFC 设置,以及弹性缓冲释放点是否固定。若多通道间存在固定偏斜,用 SYSREF 重新对齐 LMFC,并确认各通道 RBD 一致。最终用 ADC 输出的已知斜坡或正弦测试信号,在 FPGA 侧观察样本序列是否连续、通道间是否对齐,以此判断链路层参数和同步配置是否正确。