当前位置: 首页 > news >正文

FPGA采集AD7606转SRIO传输,基于Serial Rapidlo Gen2,提供6套工程源码和技术支持

目录

  • 1、前言
    • SRIO是啥?
    • 官方有Example,为何要用你这个?
    • 工程概述
    • 免责声明
  • 2、相关方案推荐
    • 我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目
    • 我这里已有的 GT 高速接口解决方案
    • 本方案在FPGA与DSP交互架构中的应用
  • 3、工程详细设计方案
    • 工程设计原理框图
    • AD输入源
    • AD7606数据采集
      • AD7606数据手册解读
      • AD7606输入信号采集范围
      • AD7606输出模式选择
      • AD7606过采样率设置
      • AD7606串行输出模式采集
      • AD7606并行输出模式采集
    • AD数据组包发送模块
    • SRIO AD数据传输架构
      • Serial Rapidlo Gen2 IP核简介
      • Serial Rapidlo Gen2 基本结构
      • Serial Rapidlo Gen2 收发流程
      • Serial Rapidlo Gen2 接收流程
      • Serial Rapidlo Gen2 时钟架构
      • Serial Rapidlo Gen2 IP核调用和使用
    • AD数据接收解包模块
    • 工程源码架构
    • 工程仿真
  • 4、vivado工程源码1详解-->Artix7-35T,AD7606串行模式转SRIO版本
  • 5、vivado工程源码2详解-->Artix7-35T,AD7606并行模式转SRIO版本
  • 6、vivado工程源码3详解-->Kintex7-325T,AD7606串行模式转SRIO版本
  • 7、vivado工程源码4详解-->Kintex7-325T,AD7606并行模式转SRIO版本
  • 8、vivado工程源码5详解-->KU060,AD7606串行模式转SRIO版本
  • 9、vivado工程源码6详解-->KU5P,AD7606串行模式转SRIO版本
  • 10、工程移植说明
    • vivado版本不一致处理
    • FPGA型号不一致处理
    • 其他注意事项
  • 11、上板调试验证
    • 准备工作
    • SRIO AD数据回环效果演示
  • 12、工程代码的获取

FPGA采集AD7606转SRIO传输,基于serial Rapidlo cen2,提供6套工程源码和技术支持

FPGA采集AD7606转SRIO传输

1、前言

SRIO是啥?

SRIO(Serial RapidIO)是一种高性能、低引脚数、基于数据包交换的互连技术,专为满足嵌入式系统对高可靠性和高实时性的需求而设计。它由逻辑层、传输层和物理层三层协议构成,旨在为嵌入式系统提供可靠的、高性能的互连解决方案。总而言之,SRIO是一种为高性能嵌入式系统设计的高速串行互连技术。利用FPGA实现SRIO,能够充分发挥FPGA的灵活性、并行处理能力和高度集成性的优势,为通信、高性能计算、军工航天、工业自动化等领域提供高性能、高可靠性的数据传输解决方案。
下面是一个简要的SRIO协议核心特性概览:
在这里插入图片描述

FPGA实现SRIO的优势
FPGA以其高度灵活性和强大的并行处理能力,成为实现SRIO接口的理想选择之一,优势如下:
1、灵活性与可重构性:
FPGA允许工程师通过编程灵活配置SRIO接口的参数,如传输速率、端口数量、地址映射等,并能方便地更新协议功能,从而快速适应不同的应用需求和标准变更。
2、高性能并行处理:
FPGA的并行架构使其能够同时处理多个数据流和事务,非常适合于SRIO这种需要高速数据交换的场景,有助于满足系统对高带宽和低延迟的苛刻要求。
3、高度集成与成本优化:
利用FPGA实现SRIO功能,可以将SRIO接口与其他逻辑功能(如信号处理、数据打包/解包、错误管理等)集成在单一芯片上。这减少了对外部分立元器件的需求,降低了系统复杂性和总体成本。
4、加速开发和迭代:
Xilinx等FPGA供应商提供了成熟的SRIO IP核(知识产权核)和例程。这些IP核通常经过验证,包含配置、初始化、数据传输等示例代码,能显著缩短开发周期,让开发者更专注于上层应用。

基于FPGA-SRIO的应用领域
FPGA与SRIO的结合,在众多对数据传输速度和可靠性有严苛要求的领域发挥着重要作用,如下:
1、通信基础设施:
在无线基站、路由器和网络交换设备中,FPGA实现的SRIO接口可用于基带处理单元之间、以及它们与交换芯片之间的高速互联,确保数据的高速可靠传输。
2、高性能计算(HPC)与数据中心:
在高性能计算集群或数据中心内,FPGA-SRIO方案可用于连接多个计算节点、加速卡或存储单元,提供低延迟、高带宽的通信支持,适用于大规模并行计算和实时数据处理。
3、军事与航空航天:
这些领域对系统的可靠性和抗干扰能力要求极高。FPGA-SRIO可用于雷达信号处理、声纳系统、航空电子中的导航设备以及卫星通信等,确保在恶劣环境下数据的完整性和实时性。
4、工业自动化:
在工业控制系统中,FPGA-SRIO可用于连接高速传感器、控制器和执行器,实现实时数据采集和精准控制,提升生产效率和设备可靠性。
5、汽车电子:
随着高级驾驶辅助系统(ADAS)和自动驾驶技术的发展,车载网络需要处理大量传感器数据。FPGA-SRIO有望为车载网络中的高速数据交换提供解决方案,连接各种电子控制单元(ECU)。
6、医疗影像:
虽然搜索结果未直接提及,但医疗设备如高性能MRI、CT扫描仪等需要实时处理大量图像数据,FPGA-SRIO的高带宽和低延迟特性也适用于此类场景。

基于FPGA-SRIO的未来前景
尽管SRIO面临PCIe、以太网等技术的竞争,但FPGA-SRIO方案在特定领域仍有其发展空间和趋势,如下:
1、持续追求更高性能:
SRIO协议本身在不断发展,速率在不断提升(例如SRIO 3.0支持10.312 Gbps,未来目标指向25-400 Gbps)。FPGA工艺的进步(如采用更先进的制程)和SerDes技术的增强将支持这些更高的速率,满足未来系统对带宽的贪婪需求。
2、与新兴技术和应用融合:
人工智能与机器学习:AI推理和训练需要巨大的计算量和数据吞吐。FPGA-SRIO可用于连接AI加速器、高性能存储和计算单元,构建高效的计算平台。
3、数据中心加速:
在数据中心,FPGA常作为加速卡用于特定工作负载(如加解密、视频转码)。SRIO可作为FPGA加速卡与主机或其他加速卡之间的高效互联方式。
4、技术演进与创新:
为了进一步提升速率,PAM4(4阶脉冲幅度调制)等更高效的编码技术已在其他高速串行接口中应用。未来若SRIO采纳类似技术,FPGA的灵活性将有利于其快速实现。此外,光电共封装(CPO)甚至未来芯片级的光互联技术,虽然目前更多处于研究阶段,但长远看可能影响包括SRIO在内的高速互连技术实现方式。
5、在特定领域保持生命力:
在对确定性延迟、可靠性和抗干扰性要求极高的领域(如军工、航空航天、部分工业应用),SRIO的特性使其难以被完全替代。FPGA-SRIO方案预计将在这些利基市场持续发挥价值。

官方有Example,为何要用你这个?

Xilinx官方的确有SRIO IP核的Example例程;
然后呢?你看得懂吗?你会照着模仿做自己的项目吗?
如果你会,那么请划走;
如果你不会,不妨看看下面的聊天记录
在这里插入图片描述
这位朋友用了我的SRIO数据回环传输工程,感觉少走了一年的弯路。。。

工程概述

本设计使用Xilinx 系列FPGA为平台,基于GT高速收发器实现ADC数据采集转SRIO传输,旨在为读者提供一套精简版的、基于SRIO协议的的ADC数据收发架构;

ADC输入源为示波器产生的正弦波,正弦波输出到AD7606芯片实现模数转换,转换后的AD数据传输至FPGA,AD7606有串行输出和并行输出两种模式,本设计都有应用;然后AD7606数字信号送入纯verilog代码实现的AD7606采集模块实现8通道AD数据采集,同样的,AD7606采集模块也分为串行模式和并行模式;然后选择4个通道的AD7606数据送入AD数据组包发送模块,根据事先约定的协议将AD数据打包并符合SRIO用户数据发送接口时序;然后打包AD数据送入Xilinx官方的Serial Rapidlo Gen2 IP核实现SRIO协议层数据编码,该SRIO为SRIO主机,然后数据以高速差分信号输出,经板载的SFP或QSFP光口进行回环传输;经SFP/QSFP-RX接口输入高速差分信号再进入Xilinx官方的Serial Rapidlo Gen2 IP核实现SRIO协议层数据解码,该SRIO为SRIO从机,然后输出AXI4-Stream数据流;接收AXI4-Stream流然后进入纯verilog代码实现的AD数据接收解包模块,根据事先约定的协议从AXI4-Stream流中提取出4个通道的AD7606数,并用ILA抓取,最后通过ILA观测模拟波形即可;整个工程实用性拉满,对于有SRIO开发需求的用户可谓精准适配;针对市场主流需求,本博客设计并提供6套工程源码,具体如下:
在这里插入图片描述
现对上述6套工程源码做如下解释,方便读者理解:

工程源码1

开发板FPGA型号为Xilinx–Artix7-35T–xc7a35tfgg484-2;ADC输入源为示波器产生的正弦波,正弦波输出到AD7606芯片实现模数转换,转换后的AD数据传输至FPGA,AD7606有串行输出和并行输出两种模式,本设计使用串行模式;然后AD7606数字信号送入纯verilog代码实现的AD7606采集模块实现8通道AD数据采集,同样的,AD7606采集模块也分为串行模式和并行模式,本设计使用串行模式;然后选择4个通道的AD7606数据送入AD数据组包发送模块,根据事先约定的协议将AD数据打包并符合SRIO用户数据发送接口时序;然后打包AD数据送入Xilinx官方的Serial Rapidlo Gen2 IP核实现SRIO协议层数据编码,该SRIO为SRIO主机,然后数据以高速差分信号输出,经板载的SFP或QSFP光口进行回环传输;经SFP/QSFP-RX接口输入高速差分信号再进入Xilinx官方的Serial Rapidlo Gen2 IP核实现SRIO协议层数据解码,该SRIO为SRIO从机,然后输出AXI4-Stream数据流;接收AXI4-Stream流然后进入纯verilog代码实现的AD数据接收解包模块,根据事先约定的协议从AXI4-Stream流中提取出4个通道的AD7606数,并用ILA抓取,最后通过ILA观测模拟波形即可;本设计需要使用2路Serial Rapidlo Gen2 IP形成主从搭配,同时需要使用2路SFP光口做数据回环,2路Serial Rapidlo Gen2 IP使用Xilinx 7系列FPGA的GTP高速收发器资源,共享同一路GTP高速BANM参考时钟,SRIO线速率为5Gbps,数据位宽64bit,该工程适用于Xilinx 7系列FPG做工程移植部署;

工程源码2

开发板FPGA型号为Xilinx–Artix7-35T–xc7a35tfgg484-2;ADC输入源为示波器产生的正弦波,正弦波输出到AD7606芯片实现模数转换,转换后的AD数据传输至FPGA,AD7606有串行输出和并行输出两种模式,本设计使用并行模式;然后AD7606数字信号送入纯verilog代码实现的AD7606采集模块实现8通道AD数据采集,同样的,AD7606采集模块也分为串行模式和并行模式,本设计使用并行模式;然后选择4个通道的AD7606数据送入AD数据组包发送模块,根据事先约定的协议将AD数据打包并符合SRIO用户数据发送接口时序;然后打包AD数据送入Xilinx官方的Serial Rapidlo Gen2 IP核实现SRIO协议层数据编码,该SRIO为SRIO主机,然后数据以高速差分信号输出,经板载的SFP或QSFP光口进行回环传输;经SFP/QSFP-RX接口输入高速差分信号再进入Xilinx官方的Serial Rapidlo Gen2 IP核实现SRIO协议层数据解码,该SRIO为SRIO从机,然后输出AXI4-Stream数据流;接收AXI4-Stream流然后进入纯verilog代码实现的AD数据接收解包模块,根据事先约定的协议从AXI4-Stream流中提取出4个通道的AD7606数,并用ILA抓取,最后通过ILA观测模拟波形即可;本设计需要使用2路Serial Rapidlo Gen2 IP形成主从搭配,同时需要使用2路SFP光口做数据回环,2路Serial Rapidlo Gen2 IP使用Xilinx 7系列FPGA的GTP高速收发器资源,共享同一路GTP高速BANM参考时钟,SRIO线速率为5Gbps,数据位宽64bit,该工程适用于Xilinx 7系列FPG做工程移植部署;

工程源码3

开发板FPGA型号为Xilinx–Kintex7-325T–xc7k325tffg900-2;ADC输入源为示波器产生的正弦波,正弦波输出到AD7606芯片实现模数转换,转换后的AD数据传输至FPGA,AD7606有串行输出和并行输出两种模式,本设计使用串行模式;然后AD7606数字信号送入纯verilog代码实现的AD7606采集模块实现8通道AD数据采集,同样的,AD7606采集模块也分为串行模式和并行模式,本设计使用串行模式;然后选择4个通道的AD7606数据送入AD数据组包发送模块,根据事先约定的协议将AD数据打包并符合SRIO用户数据发送接口时序;然后打包AD数据送入Xilinx官方的Serial Rapidlo Gen2 IP核实现SRIO协议层数据编码,该SRIO为SRIO主机,然后数据以高速差分信号输出,经板载的SFP或QSFP光口进行回环传输;经SFP/QSFP-RX接口输入高速差分信号再进入Xilinx官方的Serial Rapidlo Gen2 IP核实现SRIO协议层数据解码,该SRIO为SRIO从机,然后输出AXI4-Stream数据流;接收AXI4-Stream流然后进入纯verilog代码实现的AD数据接收解包模块,根据事先约定的协议从AXI4-Stream流中提取出4个通道的AD7606数,并用ILA抓取,最后通过ILA观测模拟波形即可;本设计需要使用2路Serial Rapidlo Gen2 IP形成主从搭配,同时需要使用2路SFP光口做数据回环,2路Serial Rapidlo Gen2 IP使用Xilinx 7系列FPGA的GTX高速收发器资源,共享同一路GTX高速BANM参考时钟,SRIO线速率为5Gbps,数据位宽64bit,该工程适用于Xilinx 7系列FPG做工程移植部署;

工程源码4

开发板FPGA型号为Xilinx–Kintex7-325T–xc7k325tffg900-2;ADC输入源为示波器产生的正弦波,正弦波输出到AD7606芯片实现模数转换,转换后的AD数据传输至FPGA,AD7606有串行输出和并行输出两种模式,本设计使用并行模式;然后AD7606数字信号送入纯verilog代码实现的AD7606采集模块实现8通道AD数据采集,同样的,AD7606采集模块也分为串行模式和并行模式,本设计使用并行模式;然后选择4个通道的AD7606数据送入AD数据组包发送模块,根据事先约定的协议将AD数据打包并符合SRIO用户数据发送接口时序;然后打包AD数据送入Xilinx官方的Serial Rapidlo Gen2 IP核实现SRIO协议层数据编码,该SRIO为SRIO主机,然后数据以高速差分信号输出,经板载的SFP或QSFP光口进行回环传输;经SFP/QSFP-RX接口输入高速差分信号再进入Xilinx官方的Serial Rapidlo Gen2 IP核实现SRIO协议层数据解码,该SRIO为SRIO从机,然后输出AXI4-Stream数据流;接收AXI4-Stream流然后进入纯verilog代码实现的AD数据接收解包模块,根据事先约定的协议从AXI4-Stream流中提取出4个通道的AD7606数,并用ILA抓取,最后通过ILA观测模拟波形即可;本设计需要使用2路Serial Rapidlo Gen2 IP形成主从搭配,同时需要使用2路SFP光口做数据回环,2路Serial Rapidlo Gen2 IP使用Xilinx 7系列FPGA的GTX高速收发器资源,共享同一路GTX高速BANM参考时钟,SRIO线速率为5Gbps,数据位宽64bit,该工程适用于Xilinx 7系列FPG做工程移植部署;

工程源码5

开发板FPGA型号为Xilinx–Kintex7–UltraScale–xcku060-ffva1156-2-i;;FPGA内部设计了一个纯verilog代码实现的用户数据发送模块,该模块生成发送AXI4-Stream流接口的数据帧,数据帧的数据长度、每帧发送间隔、累加数据初始值等都可由parameter参数配置,数据帧的有效数据段以累加数形式出现,方便用户仿真和ILA观测,数据帧虽简单,但完美适配了SRIO IP核的用户发送接口,是基于SRIO传输其他数据的基础范本,可加速用户产品开发周期;用户数据发送数据然后送入Xilinx官方的Serial Rapidlo Gen2 IP核实现SRIO协议层数据编码,该SRIO为SRIO主机,然后数据以高速差分信号输出,经板载的SFP或QSFP光口进行回环传输;经SFP/QSFP-RX接口输入高速差分信号再进入Xilinx官方的Serial Rapidlo Gen2 IP核实现SRIO协议层数据解码,该SRIO为SRIO从机,然后输出AXI4-Stream数据流;接收AXI4-Stream流然后进入纯verilog代码实现的用户数据接收比对模块,实现接收数据与发送数据的逐个比较;最后将比较结果输出功设计者分析判断;整个工程实用性拉满,对于有SRIO开发需求的用户可谓精准适配;本设计需要使用2路Serial Rapidlo Gen2 IP形成主从搭配,同时需要使用2路SFP光口做数据回环,2路Serial Rapidlo Gen2 IP使用Xilinx UltraScale系列FPGA的GTH高速收发器资源,共享同一路GTH高速BANM参考时钟,SRIO线速率为5Gbps,数据位宽64bit,该工程适用于Xilinx UltraScale系列FPG做工程移植部署;

工程源码6

开发板FPGA型号为Xilinx–Virtex UltraScale±-xcvu37p-fsvh2892-2-e;FPGA内部设计了一个纯verilog代码实现的用户数据发送模块,该模块生成发送AXI4-Stream流接口的数据帧,数据帧的数据长度、每帧发送间隔、累加数据初始值等都可由parameter参数配置,数据帧的有效数据段以累加数形式出现,方便用户仿真和ILA观测,数据帧虽简单,但完美适配了SRIO IP核的用户发送接口,是基于SRIO传输其他数据的基础范本,可加速用户产品开发周期;用户数据发送数据然后送入Xilinx官方的Serial Rapidlo Gen2 IP核实现SRIO协议层数据编码,该SRIO为SRIO主机,然后数据以高速差分信号输出,经板载的SFP或QSFP光口进行回环传输;经SFP/QSFP-RX接口输入高速差分信号再进入Xilinx官方的Serial Rapidlo Gen2 IP核实现SRIO协议层数据解码,该SRIO为SRIO从机,然后输出AXI4-Stream数据流;接收AXI4-Stream流然后进入纯verilog代码实现的用户数据接收比对模块,实现接收数据与发送数据的逐个比较;最后将比较结果输出功设计者分析判断;整个工程实用性拉满,对于有SRIO开发需求的用户可谓精准适配;本设计需要使用2路Serial Rapidlo Gen2 IP形成主从搭配,同时需要使用2路QSFP光口做数据回环,2路Serial Rapidlo Gen2 IP使用Xilinx UltraScale+系列FPGA的GTY高速收发器资源,共享同一路GTY高速BANM参考时钟,SRIO线速率为5Gbps,数据位宽64bit,该工程适用于Xilinx UltraScale+系列FPG做工程移植部署;

本博客详细描述了FPGA实现SRIO数据回环传输的设计方案,工程代码可综合编译上板调试,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做学习提升,可应用于医疗、军工等行业的高速接口或图像处理领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;

免责声明

本工程及其源码即有自己写的一部分,也有网络公开渠道获取的一部分(包括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开发板搭建;以下是专栏地址:
点击直接前往

本方案在FPGA与DSP交互架构中的应用

SRIO通常搭配DSP使用,轻松实现异构方案的高速数据交互,对FPGA与DSP通过SRIO交互方案感兴趣的朋友,可以参考我之前发布的博客,链接如下:
基于FPGA与DSP通过SRIO简单测试:
点击直接前往
基于FPGA与DSP通过SRIO传输ADC数据:
点击直接前往
基于FPGA与DSP通过SRIO传输图像视频数据:
点击直接前往

3、工程详细设计方案

工程设计原理框图

工程设计原理框图如下:
在这里插入图片描述

AD输入源

本设计使用示波器为AD输入源,示波器配置为AD正弦波,当然,你也可以使用其他ADC输入源;示波器通过BNC线缆连接至AD7606模块;

AD7606数据采集

AD7606数据手册解读

AD7606英文原版数据手册只有37页,但真正看懂的兄弟却很少,下面解读一下这个手册:
DAQ7606 是 16 位 8 通道同步采样模数数据采集系统(DAS)。
AD7606内置模拟输入箝位保护、二阶抗混叠滤波器、跟踪保持放大器、16位电荷再分配逐次逼近型ADC、灵活的数字滤波器、2.5V基准电压源、基准电压缓冲以及高速串行和并行接口。AD7606采用5V单电源供电,可以处理±10V 和±5V 真双极性输入信号,同时所有通道均能以高达200 KSPS的吞吐速率采样。输入箝位保护电路可以耐受最高达±16.5V 的电压。无论以何种采样频率工作,AD7606的模拟输入阻抗均为1 MΩ。它采用单电源工作方式,具有片内滤波和高输入阻抗,因此无需驱动运算放大器和外部双极性电源。AD7606抗混叠滤波器的3 dB截止频率为22 kHz;当采样速率为200 KSPS时,它具有40 dB抗混叠抑制特性。灵活的数字滤波器采用引脚驱动,可以改善信噪比(SNR),并降低3 dB带宽。
写了这么多你看懂了吗?
我猜你应该是云里雾里,下面举例说人话,让你听得懂:
AD7606芯片框图如下:
在这里插入图片描述
红线即是信号输出输出的数据通路;

AD7606输入信号采集范围

AD7606可以处理±10V 和±5V 真双极性输入信号,即输入信号可以是±10V 和±5V,由RANGE引脚上下拉决定;
下拉处理±5V 信号;
上拉处理±10V 信号;
一旦选择了输入信号范围,就别乱给信号源了,否则烧板子了。。。
原文如下:
在这里插入图片描述

AD7606输出模式选择

红线以通道1为例:
输入数据位单端模拟数据,进过复杂的转换后可输出串行数字信号或者并行数据信号;
如果你的板子设计引脚资源有限,则选择串行输出;串行输出的优点是节约IO,缺点是采集时序复杂些;
如果你的板子设计引脚足够多,则选择并行输出,并行输出数据线占用16个IO口,并行输出的优点是采集时序简单,缺点是费IO;可自行选择;
输出模式选择通过PAR/SER/BYTE SEL引脚的上下拉决定;
上拉选择串行输出;
下拉选择并行输出;
具体的时序细节放在后面的章节;
原文如下:
在这里插入图片描述

AD7606过采样率设置

过采样率设置由OS的三个引脚上下拉决定,可以固定用电阻上下拉,这种模式就定死了,除非飞线,也可以用FPGA引脚给高低电平配置,具体配置模式如下图:
在这里插入图片描述
作为FPGA开发者,需要知道这些就行了,具体的时序细节放在后面的章节;

AD7606串行输出模式采集

AD7606串行输出模式采集模块顶层接口如下:
在这里插入图片描述
AD7606串行采集时钟的范围要求如下:
在这里插入图片描述
这里我们选择16.666MHz时钟,不高也不低;
系统参考时钟选择100M,那个1个时钟周期就是1000÷100=10ns;
采集时钟是16.666M,那个1个时钟周期就是1000÷16.666=60ns;
记住这两个时钟周期,很重要;
串行输出流程时序图如下:
在这里插入图片描述
这张图采用边转换边读取的方式,还有转换完成后再读取的方式,既然可以边转换边读取,为何还要等转换完成后再读取呢?所以我们直接用这种方式。
并行采集使用的则是转换完成后再读取的方式。
第一步:拉高RESET引脚至少至少50ns,数据手册规定如下:
在这里插入图片描述
第二步:拉低CONVSTA或者CONVSTB持续最多0.5ms(500ns),注意这里是最多,所以在代码里只需一个参考时钟周期足以,比如你用的100M,一个参考时钟周期就是10ns,当然,CONVSTA和CONVSTB也可同时拉低,这样就是8个通道同时采集,时间由数据手册得知,如下:
在这里插入图片描述
CONVSTA开启V1-V4通道的转换;
CONVSTB开启V5-V8通道的转换;
原文如下:
在这里插入图片描述
第三步:等待BUSY为高后,拉低CS,这个BUSY是AD7606输出给用户的,表征AD转换正在进行,他有一个最大时间,我们一定要满足他的最大时间,不然人家还没转换完你就结束采集了,岂不唧唧了;那么,CS在什么时刻拉低呢?既然前面我们已经选择了边转换边读取的方式,所以在BUSY拉高的期间CS拉低,数据手册最大推荐4.15us,代码里直接设置5ms,由数据手册得知,如下:
在这里插入图片描述
流程看完了,来看具体的采集时序:
在这里插入图片描述
采集时序如下:
首先用户拉低CS,并给出SCLK到AD7606,AD7606在CS为低期间,在SCLK的上升沿输出数据(但根据时序图,我感觉是SCLK高电平期间输出的),一个通道一次转换后输出16位采样数据;
既然AD7606是在SCLK上升沿输出,那么FPGA就应该在SCLK下降沿采集(或者低电平采集);
AD7606有8个模拟输入通道,串行输出模式下只有两个数字输出通道,每个输入通道输出16位采样数据;
DOUTA对应CH1、CH2、CH3、CH4四个输出通道;
DOUTB对应CH5、CH6、CH7、CH8四个输出通道;
因为每个输入通道输出16位采样数据,需要16个SCLK周期,所以4个输入通道输出16位采样数据,需要64个SCLK周期;那个我们需要一个计数器,计数到64时输出64位的采集数据,呢么采集到的每个通道数据对应如下:
wire [15:0] ad_ch1 = ad_out_a[63:48];
wire [15:0] ad_ch2 = ad_out_a[47:32];
wire [15:0] ad_ch3 = ad_out_a[31:16];
wire [15:0] ad_ch4 = ad_out_a[15: 0];
wire [15:0] ad_ch5 = ad_out_b[63:48];
wire [15:0] ad_ch6 = ad_out_b[47:32];
wire [15:0] ad_ch7 = ad_out_b[31:16];
wire [15:0] ad_ch8 = ad_out_b[15: 0];

AD7606并行输出模式采集

AD760并行输出模式采集模块顶层接口如下:
在这里插入图片描述
并行采集时序,由于官方画的图太繁琐,我直接重画了一个图来表示,如下:
在这里插入图片描述
第一步:拉高RESET引脚至少至少50ns,和串行采集一样;
第二步:拉低CONVSTA或者CONVSTB持续最多0.5ms(500ns),和串行采集一样;
第三步:等待转换完成再读取数据,即采用转换完成后再读取的方式;
第四步:拉低CS片选信号;
第五步:拉低RD信号,在RD和CS同时为低时即可依次读取V1-V8通道的数据;
相应的时间问题也是重要的,具体查看手册;

AD数据组包发送模块

AD数据组包发送模块在工程中位置如下:
在这里插入图片描述
然后选择4个通道的AD7606数据送入AD数据组包发送模块,根据事先约定的协议将AD数据打包并符合SRIO用户数据发送接口时序;AD数据组包发送模块需要用到FIFO做数据跨时钟域转换;AD数据组包发送模块顶层接口如下:
在这里插入图片描述
AD数据组包发送模块组包协议如下:
在这里插入图片描述
发送端首先发送一个门铃包,以标志一帧AD数据开始;
发送端然后发送一个AD数据包包头,以标志AD数据包为NWRITE包;
发送端然后连续发送32个AD数据,这是有效数据段;
发送端然后发送一个门铃包,以标志一帧AD数据结束;
接收端依据上面的逻辑接收AD数据并做处理;
AD数据组包发送模块与SRIO的s_axis_ireq接口对接;

SRIO AD数据传输架构

本设计基于Xilinx GT高速收发器实现SRIO AD数据回环传输,总体代码架构如下:
在这里插入图片描述
SRIO AD数据回环传输架构的核心是Serial Rapidlo Gen2 IP核的例化和使用,所以本章节我们重点讲解这个IP;

Serial Rapidlo Gen2 IP核简介

关于Serial Rapidlo Gen2 IP核介绍最详细的肯定是Xilinx官方的《pg007_Serial RapidIO Gen2
LogiCORE IP Product Guide》,我们以此来解读,《pg007》PDF文档我已放在了资料包里;Serial Rapidlo Gen2 IP核支持 1x、2x 和 4x 的通道宽度(Lane Widths),每个通道支持 1.25, 2.5, 3.125, 5.0 和 6.25 Gbaud 的传输速率。它兼容 Serial RapidIO 2.1 标准,并包含 逻辑层(Logical Layer)、传输层(Transport Layer)和物理层(Physical Layer) 的实现。

Serial Rapidlo Gen2 基本结构

根据《pg007》,Serial Rapidlo Gen2 基本结构如下:
在这里插入图片描述
由上图可知,SRIO Gen2 IP 核遵循 逻辑(LOG)、传输(Transport)和物理(PHY) 三层体系结构。这种划分提供了向逻辑规范添加新事务类型的灵活性,而无需修改传输或物理层规范。
SRIO Gen2 端点由以下部分组成:
Serial RapidIO Gen2 顶层包装器 (srio_gen2_<core_version>_unifiedtop):包含物理层(PHY)、逻辑层(LOG)和传输层、缓冲区设计(BUF)。
<component_name>_block:集成了上述统一顶层包装器、SRIO GT 包装器 (srio_gt_wrapper) 和配置结构参考设计。
<component_name>_support:包含时钟和复位模块。
<component_name>:顶层包装器,用于将整个 SRIO Gen2 端点集成到你的设计中。
本博主将官方给的框图做了简化,概括了 IP 核的系统架构和数据流,如下:
在这里插入图片描述
逻辑层(LOG)用户接口
逻辑层定义整体协议和数据包格式,是端点发起和完成事务所需的信息。其用户接口主要包括:
1、I/O端口 (I/O Port):
可以配置为 Condensed I/O 或 Initiator/Target 样式。它使用 AXI4-Stream 协议进行数据传输,支持 HELLO 和 SRIO Stream 两种数据包格式。
Condensed I/O 样式减少了通道数,使用一个AXI4-Stream通道传输所有I/O端口发送数据包(s_axis_iotx*),一个通道接收所有I/O端口数据包(m_axis_iorx*)。
Initiator/Target 样式将事务分离,是文档中较多分析的模式。它包含四个通道:
Initiator Request (ireq):本地生成的请求,放置在 s_axis_ireq* 通道上发送。
Initiator Response (iresp):从远程设备接收的响应,在 m_axis_iresp* 通道上呈现。
Target Request (treq):从远程设备接收的请求,在 m_axis_treq* 通道上呈现。
Target Response (tresp):对接收到的请求生成的响应,放置在 s_axis_tresp* 通道上发回。
2、消息端口 (Messaging Port):一个可选接口,遵循 Initiator/Target 样式,用于消息事务。
3、维护端口 (Maintenance Port):如果启用,则使用 AXI4-Lite 接口,允许用户应用程序访问本地或远程配置空间。
4、用户定义端口 (User-Defined Port):一个可选端口,仅使用 SRIO Stream 格式。

缓冲区设计(BUF)与物理层(PHY)
1、缓冲区设计 (BUF):
负责数据包的缓冲和流量控制。发送缓冲区(TX Buffer)对传出事务排队,接收缓冲区(RX Buffer)充当FIFO存储和转发数据到LOG接收路径。缓冲区大小可配置(8, 16 或 32 个数据包深度),并在必要时处理时钟域交叉。
2、物理层 (PHY):
处理链路训练、初始化、协议(如插入CRC和确认标识符),并连接到串行收发器(GT)。收发器通常由用户在IP核外部实例化。

Serial Rapidlo Gen2 收发流程

用户发送数据通过s_axis_ireq接口发送;用户接口端口由 AXI4-Stream 接口构建,使用就绪/有效握手传输信息。为了简化数据包构造,常使用 HELLO 数据包格式。HELLO包最大净荷量为256字节,其第一拍数据包含了包头信息,后续为正常数据;具体发送流程如下:
1、用户逻辑构造请求:
用户逻辑根据HELLO格式或SRIO Stream格式,在 s_axis_ireq_tdata 上准备数据,并断言 s_axis_ireq_tvalid。
2、IP核握手并处理:
当IP核准备好接收时,会断言 s_axis_ireq_tready,完成握手。LOG层接收请求,进行处理。
3、经BUF到PHY:
处理后的数据包经过BUF层(进行缓冲和流量控制),到达PHY层。
4、PHY封装并发送:
PHY层为数据包插入CRC、确认标识符(ackID) 等,然后通过GT收发器将并行数据转换为串行差分信号发送到链路上。

Serial Rapidlo Gen2 接收流程

用户接收数据通过m_axis_treq接口发送;用户接口端口由 AXI4-Stream 接口构建,数据接收流程是发送的逆过程;具体发送流程如下:
1、PHY接收并解包:
PHY层从GT收发器接收串行数据,将其转换为并行数据,检查CRC、确认ackID(若ackID不符合预期,会回复PNA而非PA,并可能触发重传机制),并剥离物理层信息。
2、经BUF到LOG:
数据包通过BUF层(进行缓冲),到达LOG层。
3、LOG解析并分发:
LOG层解析数据包,并根据其类型(请求或响应)分发到相应的目标接口。
若是请求包(如NREAD、NWRITE_R),会呈现在 m_axis_treq* 接口上,用户逻辑需在此接口接收并处理。
若是响应包(如对NREAD的响应),会呈现在 m_axis_iresp* 接口上,用户逻辑在此接口接收响应。
4、用户逻辑生成响应(针对请求包):
对于需要响应的请求(如NREAD),用户逻辑处理完后,需在 s_axis_tresp* 接口上构造并发送响应包。
物理层握手机制
SRIO物理层有重要的握手机制确保可靠传输:
每个SRIO包都有一个 ackID。
接收端检查收到的 ackID:
若符合预期,回复 PA (Packet Accepted)。
若不符合预期,回复 PNA (Packet Not Accepted)。
发送端收到PNA后,会自动发起重传(Link Request)。
此机制在物理层自动完成,一般无需用户干预,但在调试链路错误时(如信号质量差导致重传)需关注。

Serial Rapidlo Gen2 时钟架构

SRIO IP核涉及多个时钟域,理解时钟关系对稳定运行至关重要。IP核内部主要涉及以下时钟:
在这里插入图片描述
这些时钟域之间通常需要时钟域交叉(CDC),BUF层中的设计就包含了处理CDC的逻辑;

Serial Rapidlo Gen2 IP核调用和使用

Serial Rapidlo Gen2 IP核调用和使用很简单,通过vivado的UI界面即可完成,如下:
在这里插入图片描述
然后配置如下:
在这里插入图片描述
具体配置要根据自己的项目需求而定,上图只是博主的配置,仅供参考;

AD数据接收解包模块

AD数据接收解包模块在工程中位置如下:
在这里插入图片描述
接收AXI4-Stream流然后进入纯verilog代码实现的用户数据接收比对模块,实现接收数据与发送数据的逐个比较;最后将比较结果输出功设计者分析判断;整个工程实用性拉满,对于有SRIO开发需求的用户可谓精准适配;
用户数据接收模块顶层接口如下:
在这里插入图片描述
AD数据接收解包模块接收包协议如下:
在这里插入图片描述
接收端首先接收一个门铃包,以标志一帧AD数据开始;
接收端然后接收一个AD数据包包头,以标志AD数据包为NWRITE包;
接收端然后连续接收32个AD数据,这是有效数据段;
接收端然后接收一个门铃包,以标志一帧AD数据结束;
AD数据接收解包模块与SRIO的m_axis_treq接口对接;

工程源码架构

提供6套工程源码,以工程源码1为例,综合后的工程源码架构如下:
在这里插入图片描述

工程仿真

仅提供针对AD7606串行模式数据采集的仿真,如下:
在这里插入图片描述

4、vivado工程源码1详解–>Artix7-35T,AD7606串行模式转SRIO版本

开发板FPGA型号:Xilinx–Artix7-35T–xc7a35tfgg484-2;
FPGA开发环境:Vivado2019.1;
输入:示波器产生的正向波,AD7606模数转换;
输出:AD数据,ILA观测波形;
AD7606数据输出模式:串行输出模式;
SRIO方案:Xilinx Serial Rapidlo Gen2 IP核;
回环光口类型:2路SFP光口;
使用高速收发器类型:GTP,线速率5Gbps;
SRIO用户数据位宽:64 bit;
工程作用:让读者掌握FPGA采集AD7606转SRIO传输的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

5、vivado工程源码2详解–>Artix7-35T,AD7606并行模式转SRIO版本

开发板FPGA型号:Xilinx–Artix7-35T–xc7a35tfgg484-2;
FPGA开发环境:Vivado2019.1;
输入:示波器产生的正向波,AD7606模数转换;
输出:AD数据,ILA观测波形;
AD7606数据输出模式:并行输出模式;
SRIO方案:Xilinx Serial Rapidlo Gen2 IP核;
回环光口类型:2路SFP光口;
使用高速收发器类型:GTP,线速率5Gbps;
SRIO用户数据位宽:64 bit;
工程作用:让读者掌握FPGA采集AD7606转SRIO传输的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

6、vivado工程源码3详解–>Kintex7-325T,AD7606串行模式转SRIO版本

开发板FPGA型号:Xilinx–Kintex7-325T–xc7k325tffg900-2;
FPGA开发环境:Vivado2019.1;
输入:示波器产生的正向波,AD7606模数转换;
输出:AD数据,ILA观测波形;
AD7606数据输出模式:串行输出模式;
SRIO方案:Xilinx Serial Rapidlo Gen2 IP核;
回环光口类型:2路SFP光口;
使用高速收发器类型:GTX,线速率6.25Gbps;
SRIO用户数据位宽:64 bit;
工程作用:让读者掌握FPGA采集AD7606转SRIO传输的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

7、vivado工程源码4详解–>Kintex7-325T,AD7606并行模式转SRIO版本

开发板FPGA型号:Xilinx–Kintex7-325T–xc7k325tffg900-2;
FPGA开发环境:Vivado2019.1;
输入:示波器产生的正向波,AD7606模数转换;
输出:AD数据,ILA观测波形;
AD7606数据输出模式:并行输出模式;
SRIO方案:Xilinx Serial Rapidlo Gen2 IP核;
回环光口类型:2路SFP光口;
使用高速收发器类型:GTX,线速率6.25Gbps;
SRIO用户数据位宽:64 bit;
工程作用:让读者掌握FPGA采集AD7606转SRIO传输的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

8、vivado工程源码5详解–>KU060,AD7606串行模式转SRIO版本

开发板FPGA型号:Xilinx–Kintex UltraScale–xcku060-ffva1156-2-i;
FPGA开发环境:Vivado2019.1;
输入:示波器产生的正向波,AD7606模数转换;
输出:AD数据,ILA观测波形;
AD7606数据输出模式:串行输出模式;
SRIO方案:Xilinx Serial Rapidlo Gen2 IP核;
回环光口类型:2路SFP光口;
使用高速收发器类型:GTH,线速率6.25Gbps;
SRIO用户数据位宽:64 bit;
工程作用:让读者掌握FPGA采集AD7606转SRIO传输的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

9、vivado工程源码6详解–>KU5P,AD7606串行模式转SRIO版本

开发板FPGA型号:Xilinx–>Kintex UltraScale+–xcku5p-ffvb676-1-i;
FPGA开发环境:Vivado2019.1;
输入:示波器产生的正向波,AD7606模数转换;
输出:AD数据,ILA观测波形;
AD7606数据输出模式:串行输出模式;
SRIO方案:Xilinx Serial Rapidlo Gen2 IP核;
回环光口类型:2路SFP光口;
使用高速收发器类型:GTY,线速率6.25Gbps;
SRIO用户数据位宽:64 bit;
工程作用:让读者掌握FPGA采集AD7606转SRIO传输的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

10、工程移植说明

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软核;

11、上板调试验证

准备工作

需要准备的器材如下:
FPGA开发板,没有开发板可以找本博提供;
SFP光模块和光纤;
我的开发板了连接如下:
在这里插入图片描述

SRIO AD数据回环效果演示

SRIO AD数据回环效果演示如下:

FPGA采集AD7606转SRIO传输

12、工程代码的获取

代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料获取方式:文章末尾的V名片。
网盘资料如下:
在这里插入图片描述
此外,有很多朋友给本博主提了很多意见和建议,希望能丰富服务内容和选项,因为不同朋友的需求不一样,所以本博主还提供以下服务:
在这里插入图片描述

http://www.dtcms.com/a/388972.html

相关文章:

  • Cloudcompare实现在模型上进行点云(下)采样
  • 【Linux】聊聊文件那些事:从空文件占空间到系统调用怎么玩
  • 基于代码层对运动台性能提升实战
  • openfeigin配置相关
  • 网络传输协议解析及SSE补充
  • 视觉SLAM第12讲:建图
  • 2025编程技术学习网站大全:从入门到精通的免费资源指南
  • 刷题日记0918
  • emacs 如何显示断点和运行的行标
  • 【c++】继承(2)
  • 大模型提示词Prompt工程:万能公式-完整指南
  • Flask RESTful API 教程:从零实现 Python CRUD 后端服务
  • 百年奢品家电ASKO亮相IFA2025|以至臻品质绘就生活新境
  • jvm排查full gc或者humongous obj思路?如何调优?
  • 实现.NetCore集成Serilog,写入日志文件,并按日期拆分文件夹
  • [新启航]航空发动机燃烧室喷嘴孔深光学 3D 轮廓测量 - 激光频率梳 3D 轮廓技术
  • iOS 上架 App 流程全解析 苹果应用发布步骤、App Store 审核流程、ipa 文件上传与 uni-app 打包实战经验
  • 22.6 单卡A100驯服30亿参数模型!DeepSpeed ZeRO-3实战显存优化指南
  • jvm垃圾搜集器
  • 小红书开放平台笔记详情接口实战:内容解析与数据挖掘全方案
  • App 上架平台全解析,iOS 应用发布流程、苹果 App Store 审核步骤
  • BeeWorks:私有化部署即时通讯,铸就企业数字安全基石
  • (数据分析方向)Flask 动漫数据可视化分析系统(Echarts + 番剧管理・大数据)(源码)✅
  • 2025 最新版 Node.js 下载安装及环境配置教程
  • 分布式流处理与消息传递——Kafka ISR(In-Sync Replicas)算法深度解析
  • JVM(三)-- 运行时数据区
  • 从比特币到Web3:数字资产犯罪的演进史
  • godot+c#实现状态机
  • linux计划任务管理
  • excel文件导入+存储过程导入表到业务表