目录
- 1、前言
- 2、相关方案推荐
-
- 我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目
- [我这里已有的 GT 高速接口解决方案](#我这里已有的 GT 高速接口解决方案)
- [我这里已有的 JESD204 高速AD接口解决方案](#我这里已有的 JESD204 高速AD接口解决方案)
- 3、工程详细设计方案
-
- 工程设计原理框图
- [JESD204B 硬件设计架构](#JESD204B 硬件设计架构)
- 信号输入设备
- AD9081芯片解读
- [纯verilog实现的JESD204B 物理层方案](#纯verilog实现的JESD204B 物理层方案)
- [纯verilog实现的JESD204B 数据链路层方案](#纯verilog实现的JESD204B 数据链路层方案)
- [纯verilog实现的JESD204B 传输层方案](#纯verilog实现的JESD204B 传输层方案)
- PL端逻辑工程源码架构
- PS端软件工程源码架构
- 4、vivado工程源码1详解-->VU9P版本
- 5、vivado工程源码2详解-->VU37P版本
- 6、工程移植说明
- 7、上板调试验证
- 8、工程代码的获取
FPGA纯verilog实现JESD204B协议,基于AD9081数据接收,提供2套工程源码和技术支持
1、前言
什么是JESD204B协议?
JESD204B是一种高速串行接口标准,专门用于连接数据转换器(ADC/DAC)和逻辑设备(如FPGA、ASIC)。它由JEDEC固态技术协会制定,是JESD204标准的修订版本;JESD204B协议通过其高速串行接口、确定性延迟和多通道同步能力,已成为现代高速数据采集系统的首选接口标准。FPGA凭借其并行处理能力、灵活性和可重构特性,在JESD204B系统实现中展现出显著优势,特别是在需要实时处理、多通道同步和定制化应用的场景中。随着5G、航空航天、医疗影像等领域的持续发展,JESD204B与FPGA的结合将继续推动高性能数字系统向更高速度、更高集成度和更智能化的方向发展。协议发展历程如下:

JESD204关键特性如下:
数据速率:最高达12.5 Gbps
通道数量:支持1-8个通道
编码方式:8B/10B编码
同步机制:支持确定性延迟
子类支持:Subclass 0, 1, 2
JESD204协议分层结构如下:

JESD204B链路建立过程如下:

JESD204B详细建立步骤如下:
步骤1:代码组同步(CGS)

步骤2:初始通道对齐(ILAS)

步骤3:用户数据传输
正常数据传输开始
持续监控链路状态
JESD204B具体应用领域
1、无线通信基础设施,如下:

应用优势:
支持大规模MIMO系统
高采样率满足5G宽带需求
多通道同步支持相控阵列
2、航空航天与国防,如下:

应用优势:
高可靠性,抗干扰能力强
支持高速数据采集和处理
适用于恶劣环境
3、医疗影像设备,如下:

应用设备:
MRI(磁共振成像)
超声成像系统
CT扫描仪
4、测试与测量仪器,如下:

FPGA实现JESD204B的优势概括
1、架构灵活性,如下:

2、主要优势对比如下:

FPGA实现JESD204B的优势详解
1、并行处理能力,如下:

优势:同时处理多个数据通道,实现真正的并行处理。
2、定制化信号处理,如下:

优势:在数据进入系统前完成预处理,降低后端处理负担。
3、低延迟设计,如下:

优势:适用于需要快速响应的实时系统。
官方有Example,为何要用你这个?
Xilinx官方的确有JESD204B IP核的Example例程;
然后呢?你看得懂吗?你会照着模仿做自己的项目吗?
如果你会,那么请划走;
如果你不会,不妨看看下面的聊天记录

这位朋友用了我的JESD204B参考工程,感觉少走了一年的弯路。。。
工程概述
本设计使用Xilinx系列FPGA为平台,基于纯verilog实现的JESD204B协议实现AD9081数据收发,旨在为读者提供一套精简版的、基于JESD204B协议的的数据收发架构;
首先在由示波器产生正弦波或者使用其他信号源输入AD9081转接板;AD9081实现模数转换后将AD数据通过FMC高速连接器发送到FPGA开发板的GT高速BANK;然后调用纯verilog实现的JESD204B物理层实现并行AD数据与高速低压差分串行数据接口的转换,并输出并行数据;然后调用纯verilog实现的JESD204B链路层实现JESD204B协议层解码功能,数据链路层由解码模块和控制模块两个部分构成;然后调用纯verilog实现的JESD204B传输层实现数据帧解析和格式转换;完成解码解码后的数据送入纯verilog实现的FIFO实现位宽转换和时钟域转换;然后数据送入纯verilog实现的DMA模块实现数据搬运,搬运到FPGA开发板板载DDR3中缓存;然后vitis软件端控制DMA读取AD数据通过串口打印或者通过IIO服务发送到上位机做后续处理;针对市场主流需求,本博客设计并提供3套工程源码,具体如下:

现对上述3套工程源码做如下解释,方便读者理解:
工程源码1
开发板FPGA型号为Xilinx--Virtex UltraScale±-xcvu9p-flga2104-2L-e;首先在由示波器产生正弦波或者使用其他信号源输入AD9081转接板;AD9081实现模数转换后将AD数据通过FMC高速连接器发送到FPGA开发板的GTX高速BANK;然后调用纯verilog实现的JESD204B物理层实现并行AD数据与高速低压差分串行数据接口的转换,并输出并行数据;然后调用纯verilog实现的JESD204B链路层实现JESD204B协议层解码功能,数据链路层由解码模块和控制模块两个部分构成;然后调用纯verilog实现的JESD204B传输层实现数据帧解析和格式转换;完成解码解码后的数据送入纯verilog实现的FIFO实现位宽转换和时钟域转换;然后数据送入纯verilog实现的DMA模块实现数据搬运,搬运到FPGA开发板板载DDR3中缓存;然后vitis软件端控制DMA读取AD数据通过串口打印或者通过IIO服务发送到上位机做后续处理;
工程源码2
开发板FPGA型号为Xilinx--Virtex UltraScale±-xcvu37p-fsvh2892-2L-e;首先在由示波器产生正弦波或者使用其他信号源输入AD9250转接板;AD9250实现模数转换后将AD数据通过FMC高速连接器发送到FPGA开发板的GTH高速BANK;然后调用纯verilog实现的JESD204B物理层实现并行AD数据与高速低压差分串行数据接口的转换,并输出并行数据;然后调用纯verilog实现的JESD204B链路层实现JESD204B协议层解码功能,数据链路层由解码模块和控制模块两个部分构成;然后调用纯verilog实现的JESD204B传输层实现数据帧解析和格式转换;完成解码解码后的数据送入纯verilog实现的FIFO实现位宽转换和时钟域转换;然后数据送入纯verilog实现的DMA模块实现数据搬运,搬运到FPGA开发板板载DDR3中缓存;然后vitis软件端控制DMA读取AD数据通过串口打印或者通过IIO服务发送到上位机做后续处理;
本博客详细描述了FPGA纯verilog实现JESD204B协议实现AD9081数据收发的设计方案,工程代码可综合编译上板调试,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做学习提升,可应用于医疗、军工等行业的高速接口或图像处理领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;
免责声明
本工程及其源码即有自己写的一部分,也有网络公开渠道获取的一部分(包括CSDN、Xilinx官网、Altera官网等等),若大佬们觉得有所冒犯,请私信批评教育;基于此,本工程及其源码仅限于读者或粉丝个人学习和研究,禁止用于商业用途,若由于读者或粉丝自身原因用于商业用途所导致的法律问题,与本博客及博主无关,请谨慎使用。。。
2、相关方案推荐
我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目
其实一直有朋友反馈,说我的博客文章太多了,乱花渐欲迷人,自己看得一头雾水,不方便快速定位找到自己想要的项目,所以本博文置顶,列出我目前已有的所有项目,并给出总目录,每个项目的文章链接,当然,本博文实时更新。。。以下是博客地址:
点击直接前往
我这里已有的 GT 高速接口解决方案
我的主页有FPGA GT 高速接口专栏,该专栏有 GTP 、 GTX 、 GTH 、 GTY 等GT 资源的视频传输例程和PCIE传输例程,其中 GTP基于A7系列FPGA开发板搭建,GTX基于K7或者ZYNQ系列FPGA开发板搭建,GTH基于KU或者V7系列FPGA开发板搭建,GTY基于KU+系列FPGA开发板搭建;以下是专栏地址:
点击直接前往
我这里已有的 JESD204 高速AD接口解决方案
我的主页有FPGA JESD204 高速AD接口解决方案专栏,有JESD204B、JESD204C等接口解决方案,以下是专栏地址:
点击直接前往
3、工程详细设计方案
工程设计原理框图
工程设计原理框图如下:

JESD204B 硬件设计架构
JESD204B硬件设计实现AD9081芯片与FPGA之间的物理通道交互,基于JESD204B协议,其中AD9081采用FMC转接板形式与FPGA开发板实现物理连接,MFC的HPC接口时钟完全右MFC转接板供给,本设计采用外部时钟输入方式,你也可以采用时钟晶振方式,比如TI公司的LMK04828,多路同源时钟实现JESD204B协议的可靠运行,JESD204B硬件设计架构如下:

信号输入设备
做测试时,可采用示波器产生正弦波作为信号输入,不再赘述;
AD9081芯片解读
AD9081内部架构如下:

AD9081特性如下:
AD9081 混合信号前端(MxFE®)是一款高度集成的套件,具有四个 16 位、12 GSPS 最大采样率、RF 数模转换器(DAC)内核,以及四个 12 位、4 GSPS 速率、RF 模数转换器(ADC)内核。AD9081 非常适合需要宽带 ADC 和 DAC 来处理具有宽瞬时带宽信号的应用。该套件具有八个发送和八个接收通道,支持 24.75 Gbps/通道 JESD204C 或 15.5 Gbps/通道 JESD204B 标准。该套件还具有片内时钟乘法器,以及直接针对 RF 应用的宽带或多频带数字信号处理(DSP)功能。可以绕过 DSP 数据路径,以允许转换器内核与 JESD204 数据收发器端口之间直接连接。该套件还具有针对相位阵列雷达系统和电子战应用的低延迟回送和跳频模式。提供两种型号的 AD9081。4D4AC 模型支持完整的瞬时通道带宽,而 4D4AB 模型通过自动配置 DSP,来限制启动时的瞬时带宽,从而支持每通道 600 MHz 的最大瞬时带宽。
1、灵活的可重新配置通用平台设计
4 个DAC 和 4 个ADC(4D4A)
支持单频段、双频段和多频段
数据路径和 DSP 模块可完全绕过
1、2、3 和 4 的 DAC 与 ADC 采样率之比
具有多芯片同步功能的片内 PLL
片外 PLL 的外部 RFCLK 输入选项
2、最大 DAC 采样率高达 12 GSPS
使用 JESD204C 的最大数据速率高达 12 GSPS
可用的模拟带宽高达 8 GHz
3、最大 ADC 采样率高达 4 GSPS
使用 JESD204C 的最大数据速率高达 4 GSPS
7.5 GHz 模拟输入全功率带宽 (-3 dB)
4、4 GSPS,输入为 -2.7 GHz 时,ADC 交流性能为 -1 dBFS
满量程输入电压:1.4 V p-p
噪声密度:−147.5 dBFS/Hz
噪声指数:26.8 dB
HD2:−67 dBFS
HD3:−73 dBFS
最差的其他情况(HD2 和 HD3 除外):2.7 GHz 时,为 −79 dBFS
5、12 GSPS 时的 DAC 交流性能
满量程输出电流范围:6.43 mA 至 37.75 mA
双信号音 IMD3(每个音调 −7 dBFS):−78.9 dBc
3.7 GHz 时,NSD,单信号音:−155.1 dBc/Hz
3.7 GHz 时,SFDR,单信号音:−70 dBc
6、SERDES JESD204B/JESD204C 接口,16 个通道,速率高达 24.75 Gbps
8 通道 JESD204B/C 变送器 (JTx) 和 8 通道 JESD204B/C 接收器 Rx (JRx)
JESD204B 与最大 15.5 Gbps 的通道速率兼容
JESD204C 与最大 24.75 Gbps 的通道速率兼容
支持实数或复数数字数据(8、12、16 或 24 位)
7、多种数字特性
可配置或可旁路的 DDC 和 DUC
8 个细调复数 DUC 和 4 个粗调复数 DUC
8 个细调复数 DDC 和 4 个粗调复数 DDC
每个 DUC 或 DDC 48 位 NCO
可编程 192 抽头 PFIR 滤波器,用于接收均衡
支持通过 GPIO 加载的 4 种不同的配置文件设置
每个数据路径的可编程延迟
接收 AGC 支持
用于快速 AGC 控制,具有低延迟的快速检测
用于缓慢 AGC 控制的信号监控器
发射 DPD 支持
细调 DUC 通道增益控制和延迟调整
DPD 观察路径的粗调 DDC 延迟调整
8、辅助特性
快速跳频和直接数字频率合成器(DDS)
低延迟环回模式(接收数据路径数据可以路由到发送数据路径)
具有可选分频比的 ADC 时钟驱动器
功率放大器下游保护电路
片内温度监控单元
灵活的 GPIO 引脚
TDD 省电选项和共享 ADC
纯verilog实现的JESD204B 物理层方案
JESD204B物理层采用纯verilog代码实现,注意这里的纯verilog指的是非Xilinx原语部分,里面包含了GTEX2_COMMON和GTXE2_CHANNEL(GTX为例)原语,实现JESD204B物理层,即实现并行AD数据与高速低压差分串行数据接口的转换。
纯verilog实现的JESD204B物理层方案特性如下:
1、纯verilog代码实现,适用于Xilinx 7系列、Ultrascale和Ultrascale+系列FPGA;
2、支持Xilinx系列的GTXE2、GTHE3、GTHE4、GTYE4高速收发器原语;
3、最高可支持到单Lane 32.75Gbps线速率,根据选择的GT原语类型而定;
4、与Xilinx的JESD204 PHY IP核相比,简化了高速收发器配置流程,可任意修改底层代码,缺点是需要对高速收发器底层十分了解,否则很难精准配置;
5、预留了高速收发器的COMMON、CHANNEL和Eye-Scan的DRP配置接口,并转换为AXI4-Lite接口,可通过软件实现高速收发器线速率的动态配置;
6、支持8B10和64B66B编解码协议;
纯verilog实现JESD204B物理层方案设计架构如下:

纯verilog实现JESD204B物理层方案源码架构如下:

关于这个纯verilog实现JESD204B物理层方案IP的详细配置和使用,博主专门写了一个文档并放在了资料包中,如下:

纯verilog实现的JESD204B 数据链路层方案
JESD204B数据链路层采用纯verilog代码实现,实现JESD204B数据链路层解码功能。数据链路层由解码模块和控制模块两个部分构成;
纯verilog实现的JESD204B数据链路层方案特性如下:
1、纯verilog代码实现,适用于Xilinx 7系列、Ultrascale和Ultrascale+系列FPGA;
2、支持JESD204B和JESD204C;
3、支持JESD204子类0和1;
4、确定性延迟(用于子类1操作);
5、支持AXI4-Lite动态配置;
6、支持事件、中断;
7、8B/10B模式下的最大带宽:15 Gbps;
8、64B/66B模式下的最大带宽:32 Gbps;
9、低延迟;
10、每个独立的Lane可启用/禁用;
纯verilog实现JESD204B数据链路层方案设计架构如下:

纯verilog实现JESD204B数据链路层解码模块方案代码架构如下:

纯verilog实现JESD204B数据链路层控制模块方案代码架构如下:

关于这个纯verilog实现JESD204B链路方案IP的详细配置和使用,博主专门写了一个文档并放在了资料包中,如下:

纯verilog实现的JESD204B 传输层方案
JESD204B传输层采用纯verilog代码实现,实现JESD204B接收数据帧解析和格式转换功能。
该JESD204B传输层方案特性如下:
1、纯verilog代码实现,适用于Xilinx 7系列、Ultrascale和Ultrascale+系列FPGA;
2、支持JESD204B和JESD204C;
3、支持AXI4-Lite动态配置;
纯verilog实现JESD204B传输层方案设计架构如下:

JESD204B数据传输层负责在AD9625 JESD204B接口中进行数据格式的映射和解映射,即根据ADC芯片数据手册调整

关于这个纯verilog实现JESD204B传输层方案IP的详细配置和使用,博主专门写了一个文档并放在了资料包中,如下:

PL端逻辑工程源码架构
提供2套工程源码,以工程源码1为例,工程Block Design设计如下:

提供2套工程源码,以工程源码1为例,综合后的工程源码架构如下:

PS端软件工程源码架构
PS端软件代码架构
PS端软件工程源码架构如下:

软件程序流程图
程序流程图如下:

PS端代码功能
简单来说,PS端代码是一个 "AD9081系统启动与管理程序":
1、搭建硬件环境:配置时钟、复位芯片、建立高速数据传输通道(JESD204B)。
2、配置核心芯片:精细设置AD9081内部的数据路径、数字上下变频、增益等所有参数。
3、建立数据流水线:在FPGA侧准备好接收ADC数据和发送DAC数据的处理单元及DMA通道。
4、开放控制接口:最终通过IIO框架将整个系统的控制权和数据流开放给用户,或进入静默工作状态。
PS端代码主要功能模块详解
1、AD9081芯片驱动层 (ad9081.h/c)
作用:这是控制AD9081芯片本身的核心软件层。它通过SPI和GPIO配置芯片内部复杂的寄存器,管理其多通道、可变频器的数据路径。
在代码中的体现:ad9081_init() 函数是核心,它根据 phy_param 结构体中庞大的参数集(如DAC/ADC频率、NCO频率偏移、插值/抽取因子、JESD链路参数等)对芯片进行完整配置。代码支持初始化多片AD9081(MULTIDEVICE_INSTANCE_COUNT)。
2、硬件抽象层与平台驱动 (no_os_, xilinx_ )
作用:提供对FPGA底层硬件(SPI, GPIO, UART, 缓存)的统一访问接口,使上层代码与Xilinx具体平台(PS或PL)解耦。
在代码中的体现:phy_spi_init_param 和 gpio_phy_resetb 等结构体初始化了对AD9081的SPI和复位控制。Xil_DCacheEnable()等函数用于管理数据缓存,这对高速DMA数据传输至关重要。
3、时钟管理模块 (app_clock.c)
作用:生成并提供AD9081芯片所需的各种高精度时钟(如器件核心时钟 dev_clk)。
在代码中的体现:app_clock_init() 函数负责配置外部时钟芯片(如AD9528),输出AD9081需要的基准时钟。
4、JESD204B高速串行链路模块 (app_jesd.c, axi_jesd204_*)
作用:建立并维护AD9081与FPGA之间高速数字数据流的传输通道。JESD204B是高速串行协议,用于传输ADC采样数据和DAC数据。
在代码中的体现:
app_jesd_init():配置JESD链路所需的参考时钟(jesd_clk)。
axi_jesd204_tx/rx_status_read():读取并打印JESD链路的状态(如链路是否同步、错误计数等),用于调试和监控。
axi_jesd204_rx_watchdog():监控接收链路,在链路失步时尝试重新初始化,确保稳定性。
5、FPGA数据路径与DMA控制器 (axi_adc_core, axi_dac_core, axi_dmac)
作用:在FPGA侧处理JESD数据流,并高效地在数据转换器和内存之间搬运数据。
模块解析:
axi_adc_core / axi_dac_core:作为JESD链路与FPGA逻辑的桥梁。axi_adc_core 接收来自AD9081 ADC的JESD数据,解帧并转换为并行数据流;axi_dac_core 则将待发送的并行数据组帧并通过JESD链路发送给AD9081的DAC。
axi_dmac (Direct Memory Access Controller):无需CPU干预,直接在ADC/DAC核心与DDR内存之间搬运大批量数据,极大提升吞吐量,降低CPU负载。
在代码中的体现:axi_adc_init(), axi_dac_init(), axi_dmac_init() 初始化这些IP核。
6、工业I/O框架 (IIO Framework) - 可选项
作用:当定义 IIO_SUPPORT 宏时,代码会启动一个IIO守护进程,提供基于网络或串口的远程接口。
功能:用户可通过主机PC上的工具(如 iio-oscilloscope)实时可视化ADC采集的波形,或动态调整DAC的输出信号、AD9081的增益、频率等参数,极大地便利了系统调试和性能评估。
在代码中的体现:iio_app_init() 和 iio_app_run() 函数负责启动IIO服务。
4、vivado工程源码1详解-->VU9P版本
开发板FPGA型号:Xilinx--Virtex UltraScale±-xcvu9p-flga2104-2L-e;
FPGA开发环境:Vivado2022.2;
AD输入:AD9081;
DA输出:串口打印或串口输出到上位机;
数据交互接口:JESD204B;
JESD204B物理层方案:纯verilog实现的JESD204B物理层;
JESD204B链路层方案:纯verilog实现的JESD204B链路层;
JESD204B传输层方案:纯verilog实现的JESD204B传输层;
JESD204B使用高速收发器类型:GTY;
工程作用:让读者掌握FPGA基于JESD204B实现AD9081数据收发的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:

5、vivado工程源码2详解-->VU37P版本
开发板FPGA型号:Xilinx--Virtex UltraScale±-xcvu37p-fsvh2892-2L-e;
FPGA开发环境:Vivado2022.2;
AD输入:AD9081;
DA输出:串口打印或串口输出到上位机;
数据交互接口:JESD204B;
JESD204B物理层方案:纯verilog实现的JESD204B物理层;
JESD204B链路层方案:纯verilog实现的JESD204B链路层;
JESD204B传输层方案:纯verilog实现的JESD204B传输层;
JESD204B使用高速收发器类型:GTY;
工程作用:让读者掌握FPGA基于JESD204B实现AD9081数据收发的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:

6、工程移植说明
vivado版本不一致处理
1:如果你的vivado版本与本工程vivado版本一致,则直接打开工程;
2:如果你的vivado版本低于本工程vivado版本,则需要打开工程后,点击文件-->另存为;但此方法并不保险,最保险的方法是将你的vivado版本升级到本工程vivado的版本或者更高版本;

3:如果你的vivado版本高于本工程vivado版本,解决如下:

打开工程后会发现IP都被锁住了,如下:

此时需要升级IP,操作如下:


FPGA型号不一致处理
如果你的FPGA型号与我的不一致,则需要更改FPGA型号,操作如下:



更改FPGA型号后还需要升级IP,升级IP的方法前面已经讲述了;
其他注意事项
1:由于每个板子的DDR不一定完全一样,所以MIG IP需要根据你自己的原理图进行配置,甚至可以直接删掉我这里原工程的MIG并重新添加IP,重新配置;
2:根据你自己的原理图修改引脚约束,在xdc文件中修改即可;
3:纯FPGA移植到Zynq需要在工程中添加zynq软核;
7、上板调试验证
准备工作
需要准备的器材如下:
AD9081子卡;
FPGA开发板;
AD9081数据收发效果演示
将AD9081子卡连接FPGA开发板的FMC-HP接口,如下:

然后打开vitis,下载程序,具体演示这里不方便展示,敬请见谅;
8、工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料获取方式:文章末尾的V名片。
网盘资料如下:

此外,有很多朋友给本博主提了很多意见和建议,希望能丰富服务内容和选项,因为不同朋友的需求不一样,所以本博主还提供以下服务:
