4. 链路建立流程

好,咱们进入正题。JESD204B 链路能不能跑起来,全看这三步走得稳不稳:Code Group Synchronization(CGS,码组同步)、Initial Lane Alignment Sequence(ILA,初始通道对齐序列)、数据模式。说白了,这就是 JESD204B 物理链路从“死”到“活”的完整过程。我当年第一次调通这个流程的时候,对着示波器看了整整两天,后来发现是中间一个时序没卡对……嗯,这些坑我后面会一个个拆开讲。

4.1 三步走:链路建立的宏观图谱

链路建立不是一蹴而就的。它分三个阶段,每个阶段都有明确的目标和退出条件。我建议你把这个流程刻在脑子里:

  1. CGS(码组同步):接收端找“逗号”(K28.5),告诉发送端“我准备好了”。
  2. ILA(初始通道对齐序列):发送一连串特定数据帧,同步所有通道的帧边界和链路参数。
  3. 数据模式:正常用户数据或测试模式开始传输。

任何一个阶段卡住,后面都白搭。量产测试时你根本没时间慢慢查,所以必须提前吃透每一步的信号长什么样。

JESD204B 链路建立流程 1. CGS 阶段 发送端:连续发 K28.5 接收端:等待逗号对齐 同步头检测 成功: 进入 ILA 失败: 看门狗超时 2. ILA 阶段 发送端:ILA 序列 /K/ /R/ /A/ /Q/ 字符 多帧对齐 链路配置参数传递 成功: 进入数据模式 失败: 重新 CGS 3. 数据模式 用户数据载荷 或测试模式 非同步字符 帧时钟连续运行 维持同步检测 失步则回 CGS ILA 失败 / 同步丢失 失步检测(4个错误)→ 重新 CGS 核心原则:CGS 失锁 → 重来;ILA 失败 → 重来;数据模式失步 → 重来 CGS 量产测试中,任意一步失败都需要记录错误码并判断链路不可用

4.2 CGS(码组同步):让接收端找到节拍

CGS 是整个流程的起点。它的目标很简单:接收端找到发送端的“逗号”字符,从而确定字符边界。这里说的逗号,就是 /K28.5/(8b/10b 编码里的一个特殊控制字符)。

CGS 的完整步骤:

  • 发送端:在未接收到 SYNC~ 信号有效之前,连续发送 /K28.5/ 字符。
  • 接收端:拉低 SYNC~ 信号,表示请求同步。然后开始检测串行数据流中的 /K28.5/ 模式。
  • 同步成功:连续检测到 4 个正确的 /K28.5/ 字符(没有错误),接收端认为字符边界对齐,拉高 SYNC~ 信号。
  • 看门狗超时:量产测试中我会给这个阶段设置个硬超时,比如 5 毫秒。超时未同步,直接报错。

量产测试要点: CGS 失败最常见的原因不是芯片坏了,而是参考时钟抖动过大或差分信号幅度不够。我建议你在测试程序中加入一个状态机,实时监测 SYNC~ 信号的上升沿——如果超过 2 毫秒还没起来,大概率是物理层问题,而不是协议问题。

为什么是 4 个 /K28.5/?这是 JESD204B 标准规定的,太少容易误同步。接收端在检测到 4 个正确的逗号后,就知道每个字符的起始位置了。举个例子,如果你在示波器上看到 SYNC~ 信号在 200ns 内被拉高,说明硬件和时钟都没问题;如果反复拉低拉高,那叫“抖动同步”,多半是信号完整性灾难。

4.3 ILA(初始通道对齐序列):对齐所有通道的边界

CGS 成功后,接收端拉高了 SYNC~,这时候发送端就知道可以开始 ILA 了。ILA 的核心目标是让所有通道(Lane)在帧边界上对齐。多通道设计中,如果 ILA 失败,各通道之间会差一个或几个字节,数据就全乱了。

ILA 的帧结构:

ILA 序列由 4 个多帧组成,每个多帧内部包含特定的控制字符。我用表格给你拆解一下:

多帧序号 包含的控制字符 含义
多帧 0 /K/ /R/ /A/ ... /A/ /R/ /A/ /A/ 初始帧边界同步,/K/ 标记帧开始
多帧 1 /Q/ + 链路配置参数 /Q/ 启动链路配置信息传输
多帧 2 链路配置参数(续) 传递 K、F、L、N 等关键参数
多帧 3 链路配置参数(续) 用于冗余校验(可选)

个人技巧: 我在项目中遇到过 ILA 里的 /Q/ 字符丢失的情况,导致接收端链路参数没更新。后来我建议在测试程序里直接读一次 ILA 完成后的链路配置寄存器,和预期值做对比。这样能避免“以为同步了,其实配置是错的”这种隐形 bug。

ILA 过程中,接收端要检测到 4 个完整的多帧才能确认对齐。如果丢帧或者控制字符顺序乱了,接收端会再次拉低 SYNC~,回到 CGS 阶段。量产测试时,我建议你测量 ILA 的持续时间——通常在几微秒到几十微秒之间。时间太短可能是误同步,时间太长说明通信不畅。

另外,多通道情况下,所有通道的 ILA 必须同步完成。如果一个通道先完成,其他通道还没跟上,这没关系,但最终所有通道的帧边界必须一致。我用示波器量过,不同通道之间的帧对齐误差不能超过一个 UI(单位间隔),否则数据交叉时必然出错。

4.4 数据模式:正常工作的开始

ILA 完成后,链路进入数据模式。这时候发送端开始发送用户数据载荷,接收端按帧结构解析,输出采样后的数据。数据模式下的传输特性:

  • 非同步字符:不再使用控制字符(/K/、/R/ 等),全部是 8b/10b 编码的普通数据。
  • 帧时钟连续运行:帧时钟和本地多帧时钟由 SYSREF 和参考时钟建立,数据模式期间保持稳定。
  • 同步维持:接收端持续检测数据流中的帧差错(8b/10b 解码错误、字符边界错误等)。
  • 失步处理:如果连续检测到 4 个错误(字符错误或帧失序),接收端会拉低 SYNC~,强制链路回到 CGS 阶段。

量产测试中,数据模式不仅仅是传用户数据。我们还会在数据模式里嵌入测试模式,比如:

  • PRBS 模式:用伪随机码测试误码率。
  • 交替模式:用交替 0/1 序列检测高频衰减。
  • 低频模式:用长串相同 bit 检测直流漂移。

注意避坑: 有些 ADC 芯片在数据模式中会插入额外的同步字节(用于验证),这不是标准 JESD204B 规定的,但一些厂商会这么干。我经历过一个项目,测试程序按标准流写,结果 ADC 丢了一个同步字节,导致整个测试 batch 废了。后来我在 ILA 完成后等待 100 微秒再开始测试模式,问题解决。宁可在时序上多等一等等,也别急着发数据。

4.5 量产测试中的链路建立检查清单

好了,理论讲完了,我给你列个检查清单,直接抄到你的测试程序里:

  1. CGS 同步时间:从 SYNC~ 拉低到拉高,< 2 ms -> PASS。
  2. ILA 完成标志:读寄存器或测量差分线上的控制字符序列 -> 确认 /K/ /R/ /A/ /Q/ 完整出现。
  3. 链路配置参数:对比接收端寄存器和预期值(K、F、L、N、CS、CF 等)-> 必须完全一致。
  4. 测试模式误码率:PRBS 模式下,误码率 < 1e-12 -> PASS。
  5. 失步检测:强制插入错误,验证接收端能在 4 个错误后拉低 SYNC~。

我个人习惯把这 5 步做成一个自动化序列,跑一遍大概需要 3 毫秒。量产测试里每一毫秒都是钱,但这个流程省不了。链路没建好就测数据,那是浪费时间。

最后说一句:JESD204B 的链路建立不是玄学。只要参考时钟干净、差分信号幅度够、SYSREF 时序符合要求,CGS 和 ILA 应该一次通过。如果发现反复失败,先别急着改代码,拿示波器量一下波形——八成是物理层的问题。