4. JESD204链路建立流程

JESD204B/C 链路并非上电即通,它必须依次经过代码组同步(CGS)、初始通道对齐(ILAS)、帧同步与多帧同步四个阶段。理解每个阶段“谁在发什么、谁在等什么、失败会怎样”,是 FPGA 在线调试时定位问题的基础。下面按信号流顺序展开。

核心记忆:CGS 解决“位边界”,ILAS 解决“通道间对齐与参数协商”,帧/多帧同步解决“数据边界与确定性延迟”。四步是串行依赖关系,前一步不完成,后一步不会启动。

一、代码组同步(CGS):先找到 10bit 边界

SerDes 上电后,接收端 CDR 虽然能恢复出比特流,但不知道 10bit 代码组的起始位置。此时发送端(TX)持续发送 K28.5 字符(8b/10b 编码后为 0xBC 或 0x7C 的 10bit 码型),接收端(RX)在比特流中滑动搜索,连续检测到 至少 4 个正确的 K28.5 代码组后,认为代码组边界已锁定,拉高 SYNC~ 信号(低有效时释放)。

FPGA 侧通常通过 JESD204 PHY 的 rx_sync 状态或 sync_status 寄存器观测。若长时间不拉高,常见原因是:TX 未使能、K28.5 码型被 8b/10b 禁用字符替换、SerDes 极性反接、参考时钟频偏过大导致 CDR 失锁。

# 典型观测(Xilinx JESD204 PHY / 自定义 IP)
rx_sync_status   : 0  -> 1   # 代码组同步完成
rx_cgs_done      : 0  -> 1
sync_req (SYNC~) : 1  -> 0   # 低有效,表示 RX 已对齐

二、初始通道对齐(ILAS):多通道“对齐 + 参数协商”

CGS 只保证单条 Lane 的 10bit 边界,但多条 Lane 之间可能存在通道间偏斜(skew)。ILAS 阶段,TX 在每条 Lane 上发送 4 个多帧的 ILAS 序列,内容依次为:

  • 多帧1:K28.0(R)/ K28.3(A)/ K28.3(A)/ K28.3(A),作为对齐标记;
  • 多帧2:K28.4(Q)/ 配置参数(L、M、F、S、N、N'、CS、CF 等);
  • 多帧3:K28.4(Q)/ 校验与保留字段;
  • 多帧4:K28.4(Q)/ 结束标记,随后进入用户数据。

RX 在每条 Lane 上捕获到 R/A/A/A 后,利用 A 字符的到达时刻计算各 Lane 的偏斜,并通过弹性缓冲(Elastic Buffer)将各 Lane 对齐到同一多帧边界。同时,RX 读取多帧2中的参数,与本地配置比对,若 L/M/F/S 等不一致,链路会停在 ILAS 阶段并报 ilas_config_error。

调试要点:ILAS 失败时,优先检查 TX 与 RX 的 L(Lane 数)、M(转换器数)、F(每帧字节数)、S(每帧采样数)是否完全一致。参数不匹配是 ILAS 卡死的最常见原因。

三、帧同步与多帧同步:数据边界与确定性延迟

ILAS 完成后,链路进入用户数据阶段。此时 RX 需要持续确认“帧边界”和“多帧边界”没有漂移:

  • 帧同步:每帧以 /F/ 字符(K28.7)或帧对齐字符标识,RX 在每个帧起始位置校验对齐字符,若连续多帧丢失,则判定帧同步丢失;
  • 多帧同步:每 K 个帧组成一个多帧,多帧起始以 /A/ 或 /R/ 标识,用于维持确定性延迟和错误检测。

在 JESD204B 中,多帧同步还承担确定性延迟的测量:RX 通过比较本地多帧计数与接收到的多帧边界,计算并补偿延迟,确保多次上电后链路延迟一致。若多帧同步丢失,通常表现为 rx_frame_error 或 rx_multiframe_error 计数增长,数据出现周期性错位。

JESD204 链路建立四阶段信号流 ① 代码组同步 CGS TX 发 K28.5 RX 搜索 10bit 边界 连续 ≥4 个 K28.5 SYNC~ 拉低 ② 初始通道对齐 ILAS R/A/A/A 对齐标记 Q 字符携带 L/M/F/S 弹性缓冲消除 skew 参数不匹配则卡死 ③ 帧同步 每帧 /F/ 对齐字符 校验帧起始位置 连续丢帧则失步 rx_frame_error 增长 ④ 多帧同步 K 帧组成多帧 /A/ 或 /R/ 标识 确定性延迟测量 rx_multiframe_error 时间轴 CGS 完成 ILAS 完成 帧同步锁定 多帧同步锁定 ILAS 失败回退 CGS 帧失步回退 ILAS 调试口诀: CGS 看 SYNC~ 是否拉低 → ILAS 看参数是否匹配 → 帧同步看 /F/ 是否连续 → 多帧同步看确定性延迟是否稳定。

四、案例与复盘:一次 ILAS 卡死的排查

某项目中,FPGA 与 ADC 的 JESD204B 链路始终停在 CGS 之后,SYNC~ 已拉低但 ilas_done 不置位。通过在线抓取 RX 侧 ILAS 状态机,发现多帧2中的 F 参数为 2,而 FPGA 配置为 4。原因是 ADC 的 F 由采样率和 Lane 速率自动计算,与 FPGA 手工配置不一致。修改 FPGA 的 F 后,ILAS 立即通过,帧同步与多帧同步也正常锁定。

阶段 关键信号/字符 成功标志 常见失败原因
CGS K28.5(0xBC/0x7C) SYNC~ 拉低,rx_sync=1 TX 未使能、极性反接、CDR 失锁
ILAS R/A/A/A、Q 字符 ilas_done=1,参数匹配 L/M/F/S 不一致、弹性缓冲溢出
帧同步 /F/(K28.7) rx_frame_error=0 帧边界漂移、8b/10b 错误
多帧同步 /A/ 或 /R/ rx_multiframe_error=0,延迟稳定 多帧计数错位、确定性延迟未补偿
误区提醒:很多工程师只关注 CGS 的 SYNC~ 是否拉低,却忽略 ILAS 的参数协商。实际上,ILAS 失败时 SYNC~ 可能仍保持低电平,但链路永远不会进入用户数据阶段。在线调试时,必须同时观测 ilas_done、frame_sync、multiframe_sync 三个状态位,才能完整判断链路处于哪一步。

总结:CGS 建立位边界,ILAS 建立通道对齐并协商参数,帧同步维持帧边界,多帧同步维持确定性延迟。四步环环相扣,任何一步失败都会导致链路无法进入稳定数据传输。在线调试时,按“SYNC~ → ILAS 参数 → 帧错误计数 → 多帧错误计数”的顺序逐级排查,可以快速定位故障阶段。