一、初识
JESD204B 是由 JEDEC(电子器件工程联合会)制定的高速串行接口标准,主要用于数据转换器(ADC/DAC)与数字处理器(如 FPGA、ASIC)之间的数据传输。在 JESD 标准出来前,常用的是传统的 LVDS 接口:LVDS(Low-Voltage Differential Signaling,低压差分信号)是一种广泛应用的物理层电气标准,用于高速、低功耗的差分信号传输。在使用 LVDS 接口时,对阻抗和多通道时延要求比较严格,因为 LVDS 使用的是源同步接口,允许时钟和多个数据通道同时传输,时钟信号和数据保持确定的相位关系,同时由发送端(图中的外部器件)传输至接收端(比如 FPGA)。接收端利用对端传送来的时钟信号作为采样时钟,对数据位进行采样。在采样过程中,只要保证接收端时钟信号与接收数据满足一定的建立/保持时间,数据即可被正确接收。
图 1 源同步 LVDS 接口
因此我们可以知道,LVDS 对各通道的时延要求是比较高的,因此 PCB 布线要求也比较严格,差分对需阻抗匹配(100Ω±10%)和等长控制(长度差<5 mil),高密度布线时难度剧增。多通道 LVDS 系统需严格同步时钟(如 FPGA 至多个 ADC),时钟抖动>1 ps 可能导致采样偏差。
对于 JESD204B 协议而言,它为多通道高速数据转换器设计的端到端协议标准,含完整的同步和校验机制,是一种高速串行接口标准,该协议支持高达 12.5 Gbps 的数据速率。物理接口上,它依靠的是高速收发器进行数据收发同步与校验,即串行收发数据,这也就意味着数据接口路由所需电路板布线空间更少,适用于需要高带宽和高可靠性的应用场景,相比与 LVDS 它的线更少,建立与保持时序要求更低及转换器和逻辑器件的封装更小。因此在高速 AD/DA 芯片中很常用,并且在通信 AD/DA IC 中,未来将会越来越主流。其使用率正在稳步上升,并且有望成为未来转换器的协议标准。
JESD204B 行业标准用于串行接口的开发,旨在以高效和节省成本的方式解决将最新的宽带数据转换器与其他系统 IC 连接的问题。其动机是通过使用可扩展的高速串行接口来标准化接口,从而减少数据转换器与其他设备,比如 FPGA(现场可编程门阵列)和 SoC(片上系统)之间的数字输入/输出数量。

图 2 JESD 连接
二、JESD204B 结构
JESD204B 协议层主要包括四层,分别为:物理层、链路层、传输层、应用层。
物理层是基础,它基于高速 SerDes(如 Xilinx GTY、GTX)的电气接口,支持多通道绑定。
物理层之后就是链路层,主要包括处理加扰 (SCRAMBLING)、8B/10B 编码、链路同步(CGS/ILAS);传输层主要是数据对应关系其中包括定义数据映射规则(如采样分帧、通道分配),应用层:用户得到最终 IQ 数据。
JESD204 协议定义了三种子类模式(Subclass 0/1/2),用于解决多器件时钟同步与确定性延迟问题链路建立。
Subclass 0
- 无全局同步信号:依赖设备自身时钟(Device Clock)的相位对齐,通过本地多帧时钟(LMFC)实现单器件内的多通道同步。
- 无确定性延迟:不同器件的 LMFC 可能随机偏移,无法保证跨器件的固定延迟。

图 3 Subclass 0
Subclass 1(用的比较多的类,也是本文的重点)
- 全局同步信号(SYSREF):所有器件(FPGA、ADC、DAC)接收同一 SYSREF 信号,对齐各 LMFC 的相位。
- 确定性延迟:链路建立后,数据传输延迟固定(±1 LMFC 周期),支持多器件纳秒级同步。

图 4 Subclass 1
Subclass 2
- 运行时重配置:支持在不复位链路的情况下,动态调整 LMFC 相位或数据传输参数(如延迟补偿)。
- 确定性延迟 + 动态性:在 Subclass 1 的基础上,增加了链路状态机(如重新同步请求)。

图 5 Subclass 2
综合对比,总结一下:
| 特性 | Subclass 0 | Subclass 1 | Subclass 2 |
|---|---|---|---|
| 同步信号 | 无 | SYSREF | SYSREF |
| 确定性延迟 | 不支持 | 固定延迟(±1 LMFC 周期) | 固定延迟 + 可动态调整 |
| 多器件同步 | 仅单器件 | 全局对齐 | 全局对齐 |
| 动态重配置 | 不支持 | 需复位链路 | 支持运行时调整 |
| 复杂度 | 低(已过时) | 中(需 SYSREF 管理) | 高(状态机及动态逻辑) |
接下来的重点在于链路层的同步机制建立。
三、链路层同步机制建立
JESD204B 的物理层是基于高速串行收发器进行的,因此物理层对于本文而言是比较通用的,在 XILINX FPGA 中,不管是 Aurora、万兆网、SRIO 等都是基于高速串行收发器进行的。
在本文中,跳过物理层,直接进入链路层,这是 JESD204B 的重点。
假设在图 2 架构中,作为 FPGA 这一侧,想把外部 AD 芯片的 IQ 数据完整读取过来,首先需要知道什么时候 AD 芯片会传数据过来,其次得知道数据线上传过来的是啥数据,最后得知道这些数据是怎么排列的。
由于 JESD204 协议中,常用的就是 JESD204B Subclass 1,因为它既优化了 Subclass 0 中的缺少确定性延时不足,也为 Subclass 2 的动态调整打下了基础,所以在该文中主要说明的是 Subclass 1,在其链路建立过程中,总共分为三个阶段:
第一个阶段为 SYSREF 阶段:这个阶段类似于百米比赛中的发令枪,当监测到 sysref 时,就开始正式进行同步流程。这个信号是怎么来的呢?如图 6 所示,外部的时钟源为 AD 芯片和 FPGA 提供 device clk 和 sysref,这个 device clk 就相当于基准时钟源,所有的链路建立都以该时钟为基础,Device Clock 经过分频后得到帧时钟 Frame Clk 和多帧时钟 LMFC,该阶段中主要是检测 sysref 的状态。对于检测 sysref 的状态也有两种方式,第一种是 oneshot,即只需要捕获一次 sysref 就行,时钟源只需要在开始前提供几个周期的 sysref 信号,下一次再提供则是整体架构复位之后重新 link 时才会提供。另外一种是 continue 模式,即 SYSREF 信号以固定频率(通常与 LMFC 同频)持续发送,器件在每个 SYSREF 上升沿动态校准 LMFC 相位,这种常用于多器件同步。
One-Shot 模式:适合短期运行、环境稳定的小型系统,强调低功耗和简单设计。
Continuous 模式:用于高精度、多器件、长时间运行的工业场景,通过持续校准保障同步稳定性。
同时,在使用时要确保 sysref 与 device_clk 的相位满足建立/保持时间。

图 6 SYSREF 时序要求
第二个阶段为组码同步阶段(Code Group Synchronization)。在 Subclass 1 中是 TX 发送 K28.5,当 RX 连续收到 4 个 K28.5 时(但是在 Xilinx IP 的仿真中是识别到 20 个 K 码),则会把 sync 拉高,准备进入第三个阶段 ILAS 阶段(Initial Lane Alignment Sequence)。简单解释一下就是:当 RX 收到连续的 n 个个 K28.5 时,会告诉 TX:'我已准备 OK,流程可以继续往下走了',那他是怎么告诉 TX 的呢?会把 sync 拉高。当 TX 捕捉 sync 信号的改变时,TX 会在下一个本地多帧时(LMFC)边界上启动 ILAS 阶段。
第三个阶段为初始通道对齐阶段(Initial Lane Alignment Sequence),在该阶段里主要完成通道对齐,在该阶段中,主要发送 4 个多帧,即 4 个帧序列,如图 7 中:'K frame'。

图 7 ILAS 同步说明

图 8 K 码序列表
这个序列是有一定的规则的:比如多帧是以 K 码 K28.0 开头,D 数据为累加数,A 为多帧结束标志,第二个多帧的前 14 个 C 数据为配置数据等。并且累加数也有其特定的规则,怎么去累加,控制字符算不算累加数等,图 9 介绍了配置数据的具体说明,每个配置参数的具体含义可去看手册《JEDEC STANDARD-Serial Interface for Data Converters》。

图 9 多帧累加数规则

图 10 配置数据详解
说到这里,可能大家对单通道的对齐有初步理解了,单对于 JESD204B 来说,它是如何保证多通道对齐的呢?
多通道对齐
由于每个通道的时延不一致,检测到多帧的时间也不一致,因此如上图接收端检测到字符/R/(K28.0) 之后,接收端会把/R/(K28.0) 后面的数据存入一个深度可设置的 BUFFER 中,当下一个 LMFC 边沿到来,且所有通道的 BUFFER 中都有数据时,所有通道的 BUFFER 数据开始输出,从而实现通道间的数据对齐。
说到多通道对其那就必须要补充一下确定性延迟:JESD204B 标准定义了确定性延迟(DL),它表示帧式样本到达串行发送器时与帧式样本从串行接收器输出之间的时间差。如图所示

在 JESD204 系统中,确定性延迟包括固定延迟和可变延迟。可变延迟是由于数字处理块中时钟域之间的任意相位关系在电源周期之间不一致而产生的。即确定性延迟被定义为从 TX 设备的并行帧数据输入到 RX 设备的并行帧数据输出。
因此整个链路建立的流程就如图 10 和图 11 所示:

图 11 子类 0-2 的同步过程

图 12 同步具体流程
现在的整体架构如图 13 所示,常见的芯片有 AD9009, AD9371 等芯片。

图 13 整体架构
四、Xilinx IP 的仿真
4.1 IP 设置
我们使用的 XILINX IP 是 JESD204,这是包含了链路层的 IP,一般搭配使用还需要带一个 JESD204_PHY 的 IP。

图 14 JESD204

图 15 JESD204_phy
我们这里主要介绍 JESD204B 这个 ip 的仿真,在 UltraScale 系列中没有这个 IP,用 JESD204C 也是可以的。这个 IP 的设置比较简单:

1:发送端还是接收端设置
2:通道数
3:Pattern Generators:经修改的随机模式连续序列(RPAT);连续的加扰抖动模式序列 (JSPAT)
在《JEDEC STANDARD-Serial Interface for Data Converters》中规定,所有 TX 设备均应能传输下列测试序列:
• 一个连续的/K28.7/字符序列(低频模式,有助于确定上升和下降时间);
• 连续的/K28.5/字符序列(混频模式或码组同步);
• 重复发送初始通道对齐序列。如果发送器启用此测试模式,只要接收器发出同步请求,发送器就应启动码组同步。完成码组同步后,发送器应重复发送 ILAS。如果发送器进入测试模式时没有有效的码组同步请求,则发送器的行为应与接收到的同步请求相同。进入测试模式时,发送器应连续发送至少四个/K28.5/符号,作为码组同步序列的一部分。单通道子类 0 ADC 设备不需要此测试序列。
4:AXI-LITE 时钟(配置通道)
5:采样 SYSREF 的边沿类型
共享逻辑就没什么太多需要说的,直接跳过了。

1:SYSREF 的模式,是否是连续还是单次的
2:数据是否加扰
3:每个帧里面有几个字节,也就是一个有效数据,用几个字节表示,该参数也是根据芯片手册来确定。
4:每个多帧里包含多少帧数,这个参数一般根据 AD 芯片来设置
5:重新同步时是否再次需要 SYSREF
上面所有参数均设置等效配置寄存器中存储的默认(重置)值。如果通过 AXI4-Lite 配置总线写入寄存器,则会覆盖在 IP 生成期间设置的值。如果使用软件配置转换器帧参数,则无需在此处配置值。这些配置设置可用于在没有连接 AXI4-Lite 主机的情况下使用 IP。只有寄存器的一小部分可以通过这种方式配置。要访问所有配置设置并监控链路状态,应连接 AXI4-Lite 接口。
物理层的配置在另外一个 IP 上进行配置,在该 IP 上不参与配置。
4.2 IP 仿真
生成 IP 后,右键 IP,点击打开 Example design:即可进入示例工程,如下图:

示例工程如下:

对于该 IP 来说,发端和收端的仿真工程不是一样的,整体框架一直,但是具体的数据流是有区别的:

接下来,重点说明发端的 tb:
在 demo_tb 中:刚开始是对相关参数的初始化:
LANE 数量和对齐 buff 参数的初始化:

ILAS 阶段第二个多帧配置参数的初始化:(各字段含义见手册描述)

不同 K 码的定义:

三种时钟的定义:GTXE2 BUF 时钟,DRP 时钟,AXI-LITE 配置时钟

这是 sysref 的产生,比较简单不做太多阐述。

这个模块是对 K 码的 8B/10B 解码模块,对产生的数据进行解析,当为 K 码时,就会有 is_k 拉高,这在组码同步,通道对齐阶段都有使用

这是逗号对齐模块,在 xilinx 高速串行收发器中,在数据之间会插入逗号也就是 K 码,监测到逗号就说明该帧为一个完整数据。

该模块为 K28.0 的检测模块,也就是在 ILAS 阶段需要检测四个多帧的开始即 K28.0 /R/。

这是配置 IP 的模块,通过 AXI-LITE 总线去读写寄存器,即可以通过寄存器去配置 IP 的相关参数。


接下来对主要仿真代码进行解析:
在组码同步阶段,仿真模块中写的是识别到 20 个 COMMA 之后,则开始进入 ILAS,并且认为已经识别到 K28.5。

当 CGS 阶段结束后,开始进行 ILAS 阶段,这个时候首先 bit_count 作为滑动窗口,对每 10 个 bit 进行 8B/10B 解码,找出 K28.0,也就是多帧阶段的帧起始字段/R/.后面就是对每个通道都做数据

接下来就是多通道对齐,对齐的 buf 深度为 64,每个通道按 bit 输入进 BUF,其中 I 表示通道编号。

当所有通道对齐之后,链路正式建立。

其他的就是仿真状态监测,通过不同的状态进行打印,熟悉了上面流程状态监测就是比较简单的模块了。
还有一点比较重要,就是寄存器配置模块,这里都是比较重要的寄存器,在我们实际项目中是使用的比较多的寄存器具体参数可以看 PG066 的寄存器空间,如果有不熟悉的,大家可以评论留言,后面看有没有必要对寄存器进行单独说明


图 16 寄存器空间

