2. 系统架构分层:物理层、链路层、传输层职责与交互

JESD204B 的协议栈分成了三层。说白了,就是把数据从一个芯片搬到另一个芯片这件事,拆成了三个不同专业的人来干。我刚开始接触的时候也觉得分层有点多,等你调试多了就会明白——不分不行,每一层都有它自己的麻烦事。

核心一句话:物理层管“连接”,链路层管“安全”,传输层管“格式”。搞清楚这三层,你就能看懂绝大多数眼图、CGS、ILAS 的测试结果。

2.1 三层总览

我们先看一张整体框架图,把三个层的角色和接口摆清楚。

JESD204B 系统架构三层结构图 JESD204B 系统架构 —— 三层职责与交互 传输层(Transport Layer) 职责:将 ADC/DAC 采样数据映射成帧格式 关键参数:M / S / F / K / L / N / N' / CS 输出:样本 → 八位字节(Octets) 链路层(Link Layer) 职责:加扰、对齐字符 / 非对齐字符、8B/10B 编解码 关键过程:CGS → ILAS → 正常数据模式 输出:编码后的 Lane 数据流 物理层(Physical Layer) 职责:CML 差分驱动、时钟与数据恢复(CDR) 关键指标:眼图、误码率、抖动 输出:高速串行差分信号 数据从上往下流:样本 → 帧 → Lane 编码 → 串行比特

数据流是从上往下走的。ADC 那边,传输层先把采样值打包成帧,链路层加扰和编码,物理层才把比特推出去。接收端正好反过来,物理层恢复时钟和数据,链路层做解码和解扰,传输层再把帧拆成采样值交给 DAC。

我个人习惯是,调试时从下往上查。大部分问题其实出在物理层,但如果你没搞清楚链路层的状态机,看到误码会一头雾水。

调试口诀:物理层不行改 PCB,链路层不行改配置,传输层不行改映射表。

2.2 物理层(Physical Layer)

物理层负责最底层的信号传输。它不管你的数据是哪个通道的样本,只管0和1能不能正确送到对面。物理层的核心就是一对差分线上的 CML 信号,加上时钟恢复。

物理层的关键职责:

  • CML 驱动:电流模式逻辑,差分摆幅典型值 200~800 mV
  • CDR:时钟与数据恢复,从数据边沿提取时钟
  • 阻抗匹配:50Ω 单端对地(100Ω 差分),避免反射
  • AC 耦合:串接电容,隔离收发器的直流电平

⚠ 常见坑:AC 耦合电容的容值不要取太小。我记得曾经遇到一个客户,用了 10 nF 的电容,结果低频分量被衰减,链路层初始化一直失败。建议用 100 nF 到 1 μF。

物理层的调试手段很有限,主要就是看眼图和测误码率。眼图张开度不够,八成是 PCB 走线有问题或参考时钟抖动太大。

2.3 链路层(Link Layer)

链路层是三层里最复杂的一层,也是调试时接触最多的部分。它负责初始化、对齐、编解码。

链路层的三大功能:

  1. 初始化序列:CGS(代码组同步) + ILAS(初始通道对齐序列),让所有 Lane 就绪并对齐
  2. 8B/10B 编解码:把 8 位数据变成 10 位码,保证直流平衡和足够的跳变沿
  3. 加扰/解扰:可选的自同步加扰,防止长串相同比特导致 CDR 失锁

为什么要加 8B/10B 编码?你想想看,如果 ADC 输出是固定的直流电平,长时间没有跳变,CDR 会漂走。8B/10B 保证任何情况都有足够的边沿。这个编码本身有 20% 的开销,8 Gbps 的 Lane 实际数据率只有 6.4 Gbps。

链路层的关键状态机:

状态 名称 收发双方的行为
CGS 代码组同步 发送端连续发 /K28.5/;接收端在连续 4 个帧时钟后锁定
ILAS 初始通道对齐序列 发送端发 4 个多帧的对齐数据;接收端完成 Lane 对齐和参数协商
Data 正常数据模式 传输用户数据,携带帧对齐和通道对齐字符

我建议你把链路层的调试重点放在 ILAS 阶段。ILAS 不出错,后面基本没问题。ILAS 里如果丢了对齐字符,传输层的帧解析肯定乱掉。

2.4 传输层(Transport Layer)

传输层是离用户最近的一层。你不用关心物理线上怎么传,也不管 8B/10B 怎么编码,你只需要告诉传输层:我有几个 ADC 通道(M),用几条 Lane(L),每个样本多少位(N),样本怎么排到帧里。

传输层的核心映射参数:

  • M:转换器个数(每个转换器对应一个样本流)
  • L:物理 Lane 数
  • F:每帧包含的八位字节数
  • K:每多帧包含的帧数
  • N:样本分辨率(如 12、14、16 位)
  • N':样本在帧内占用的总位数(包含填充位)

举个常见的例子:14 位 ADC,双通道(M=2),用 1 条 Lane(L=1),每帧 4 个字节(F=4)。这时 N' 可能是 16 位,多出来的 2 位是填充位。

个人经验:我在调试一个 4 通道 16 位 ADC 时,发现 Lane 数配错了(L 设成了 2,但 ADC 实际只支持 L=4 的映射表)。传输层一直报帧错误。后来仔细看手册,才知道还有 N'%8 为 0 这样的对齐约束。传输层不是你想怎么映射就怎么映射,得看器件支持的选项。

2.4 三层之间的交互关系

三层之间不是独立工作的。我直接说它们交互的要点:

  1. 物理层给链路层提供“时钟+数据”恢复后的比特流。链路层拿到比特流后,首先找 /K28.5/ 的边界。如果物理层的 CDR 不干净,链路层永远找不到对齐字符。
  2. 链路层给传输层提供“解码后的八位字节流”。传输层不管编码的事,它只拿到没有码型错误的数据。如果链路层的 8B/10B 解码出错,传输层收到的就是乱码。
  3. 传输层给用户提供“样本数据”。用户只看有没有帧错误、有没有样本丢点。如果传输层的映射表没配对,链路层和物理层跑得再好也没用。

⚠ 让我再次强调:三层之间有一个隐藏依赖——参数一致性。例如链路层的多帧长度 K,必须在传输层的 ILAS 参数里一致。发送端配 K=32,接收端配 K=64,ILAS 永远过不了。

最后附一张我在白板上常用的三层交互检查清单,回头排查问题时对着看:

问题现象 先查哪层 检查点
Lane 始终不同步 物理层 时钟、眼图、AC 耦合电容
CGS 通过但 ILAS 失败 链路层 /K28.5/ 检测、帧时钟边界、对齐窗口
ILAS 通过但持续报帧错误 传输层 M/F/L/K 匹配、N'/N 映射、多帧对齐
数据有误码但链路层正常 传输层 样本顺序、填充位处理、CS 位状态