链路初始化与同步流程(CGS、ILAS、Data)

链路初始化,说白了就是让发送端和接收端对上暗号,然后确认彼此都准备好了,再开始正经传数据。JESD204B把这个过程拆成三个明确的阶段:CGS、ILAS 和 Data 传输。我在调试一块 64 通道 ADC 时,发射端给了时钟,但接收端迟迟不亮——排查了很久才发现是 CGS 阶段有个 8G/10G 的位宽问题。嗯,从那以后我再也不敢小看这个初始同步了。

从“握手”到“稳定跑起来”

整个流程你可以想象成两个人打电话:先各自听清楚对方的时钟(CGS),再交换名片确认身份和能力(ILAS),最后才能开始正题交流(Data)。下表把三个阶段的核心工作列在一起,方便对照:

阶段 英文全称 核心目标 关键码组
CGS Code Group Synchronization 建立字符级同步 K28.5(逗号字符)
ILAS Initial Lane Alignment Sequence 对齐通道、获取链路参数 R-/A-/Q-/K- 码组
Data User Data Transmission 正常用户数据传输 正常采样数据 + 控制位

CGS:代码组同步

CGS 是第一步,也是最容易卡住的一步。它的任务只有一个:让接收端锁定到发送端发出的 K28.5 逗号字符。K28.5 在 8B/10B 编码里是一个特殊的控制码,我在调试时经常直接用示波器看它的眼图——要是眼图都睁不开,那肯定走不到下一步。

我个人的小习惯:每次板子上电后先用示波器抓一下差分对的共模电压——有一次发现接收端直流偏置不对,整个 CGS 阶段根本无法完成,白白浪费了三天排查时间。

接收端是怎么锁定 K28.5 的?它其实是在不停地滑动搜索,直到连续收到 4 个正确的 K28.5 码组,才认为同步达成。这个过程在协议里叫 SYNC_INIT 状态。如果连续出错或者超时,接收端就会拉低 SYNC~ 信号,要求发送端重新开始。

CGS 的潜在坑

  • 时钟抖动过大:K28.5 的跳变沿可能被抖动吃掉,接收端永远收不到连续 4 个正确码组——我曾经遇到过,后来把参考时钟的抖动从 2ps 压到 0.5ps 才解决。
  • 位宽配置不一致:如果发送端和接收端在链路层配置的位宽对不上,K28.5 的 10 位码组会被错误截取——嗯,这个问题在硬件设计阶段最容易忽略。
  • SYNC~ 信号毛刺:我见过由于 PCB 走线耦合导致的 SYNC~ 信号毛刺,接收端短暂误判,导致 CGS 反复重来。

ILAS:初始通道对齐序列

CGS 完成后,链路进入 ILAS。ILAS 带着很多配置信息——说白了就是发送端告诉接收端:“我是谁,我准备怎么传数据”。ILAS 的格式是固定的,由 4 个多帧 组成,每个多帧包含特定的码组序列:

  1. 第一个多帧:全发 /R/ 码组,用于通道内对齐。
  2. 第二个多帧:以 /A/ 码组开始,后跟 /Q/ 码组和三组 /K/ 码组。/Q/ 码组里包含链路配置参数,比如帧长、多帧长度、校验方式等。
  3. 第三个多帧:重复第一个多帧的结构。
  4. 第四个多帧:重复第二个多帧的结构。

我建议你在调试时:先抓取 ILAS 第二个多帧的 /Q/ 码组,它里面有一个 Did 字段(设备 ID),如果接收端读到的 Did 和预期不符,那八成是链路配置哪里对不上了。

ILAS 完成后,接收端内部会完成跨通道对齐和参数更新,然后拉高 SYNC~ 信号,告诉发送端:“我已经准备好了,你尽管发数据吧。”

数据传输阶段

数据阶段就没那么多花样了。发送端按照 ILAS 里约定好的帧结构,一帧一帧地往接收端传数据。每一帧包含多个样本和控制位,具体格式取决于链路配置。

实际工作中常遇到数据阶段误码率偏高的问题。我曾经在测试中发现 ILAS 阶段虽然通过了,但接收端把 /Q/ 码组里的某个校验位读错了,导致后续的数据解帧逻辑跑偏了。这种问题很隐蔽——链路看着是通的,但数据就是不对。

注意:Data 阶段如果出现帧同步丢失,接收端必须重新进入 CGS 阶段。也就是说,整个链路要从头开始同步——你想想看,如果链路频繁重同步,数据吞吐量会受到很大影响。

一张图看明白三个阶段

下面的流程图把 CGS、ILAS、Data 三个阶段及其内部子状态串在一起,我在调试时习惯把它贴在显示器旁边:

JESD204B 链路初始化与同步流程 JESD204B 链路初始化与同步流程 CGS 阶段 等待 K28.5 检测 K28.5 连续计数 锁定(4 个连续) 超时 → 拉低 SYNC~ ILAS 阶段 多帧 1:/R/ 码组 多帧 2:/A/-/Q/-/K/ 多帧 3:/R/ 码组 多帧 4:/A/-/Q/-/K/ 拉高 SYNC~ Data 阶段 帧 1 样本 + 控制位 帧 2 ... 帧 N 连续传输 帧同步丢失 同步成功 准备就绪 重新同步 实战说明 • CGS 阶段:连续收到 4 个 K28.5 才算锁定;否则重来。 • ILAS 阶段:按 /R/ → /A/-/Q/-/K/ 顺序传 4 个多帧;/Q/ 含链路参数。 • Data 阶段:按配置帧结构传用户数据;帧同步丢失则退回 CGS。 • 我调试时会把示波器触发在 SYNC~ 下降沿,直接定位到 CGS 冲突点。

实战避坑总结

三个阶段的坑各有不同,我把常见问题整理成清单,你设计或调试时可以逐条排查:

  • CGS 不锁定:先查时钟质量(抖动、占空比、频偏),再查差分信号幅度(我一般要求峰峰值不低于 500mV)。
  • ILAS /Q/ 码组解析失败:用逻辑分析仪抓取 ILAS 多帧,核对 /Q/ 码组中的链路参数是否与发送端配置一致。我以前遇到过接收端把 F 字段(帧尺寸)读错,结果数据阶段把一帧多算了 2 个字节。
  • Data 阶段误码:可能是 ILAS 阶段校验位传错了,也可能是通道间偏斜不稳定。你想想看,如果 ILAS 阶段接收端把偏斜补偿值算错了一点,后面每帧数据都会对不齐——这种问题排查起来很痛苦。
我记得有次客户现场:板子上的 JESD204B 链路时通时断,我怀疑是 CGS 阶段电磁干扰导致 K28.5 偶尔被误判。后来在 SYNC~ 触发了波形捕获,发现确实是电源纹波耦合到了差分线上。加了一级滤波电容后问题解决——嗯,有时候问题不在数字逻辑本身,而在物理层。

总而言之,这三个阶段是 JESD204B 链路的生命线。CGS 管时钟和字符同步,ILAS 管参数和通道对齐,Data 管用户数据。任何一个阶段出问题,链路都无法正常工作。