FPGA实现PCIE采集电脑端视频转SFP光口UDP输出,基于XDMA+GTX架构,提供4套工程源码和技术支持

ops/2024/10/18 12:31:49/

目录

  • 1、前言
    • 工程概述
    • 免责声明
  • 2、相关方案推荐
    • 我已有的PCIE方案
    • 1G/2.5G Ethernet Subsystem实现物理层方案
    • 1G/2.5G Ethernet PCS/PMA or SGMII + Tri Mode Ethernet MAC实现物理层方案
  • 3、PCIE基础知识扫描
  • 4、工程详细设计方案
    • 工程设计原理框图
    • 电脑端视频
    • PCIE视频采集QT上位机
    • XDMA配置及使用
    • XDMA中断模块
    • FDMA图像缓存
    • UDP视频组包发送
    • UDP协议栈
    • MAC数据缓冲FIFO组
    • AXI 1G/2.5G Ethernet Subsystem 简介
    • AXI 1G/2.5G Ethernet Subsystem 配置
    • 多个 AXI 1G/2.5G Ethernet Subsystem 主从级联使用
    • 1G/2.5G Ethernet PCS/PMA or SGMII 简介
    • 1G/2.5G Ethernet PCS/PMA or SGMII 配置
    • 多个1G/2.5G Ethernet PCS/PMA or SGMII 主从级联使用
    • Tri Mode Ethernet MAC
    • IP地址、端口号的修改
    • SFP光口转RJ45电口
    • UDP视频接收显示QT上位机
    • Windows版本XDMA驱动安装
    • Linux版本XDMA驱动安装
    • 工程源码架构
    • Vivado工程注意事项
    • PCIE上板调试注意事项
  • 5、vivado工程源码1详解-->Kintex7-35T,Ethernet Subsystem物理层版本
  • 6、vivado工程源码2详解-->Zynq7100,Ethernet Subsystem物理层版本
  • 7、vivado工程源码3详解-->Kintex7-35T,Ethernet PCS/PMA+三速MAC物理层版本
  • 8、vivado工程源码4详解-->Zynq7100,Ethernet PCS/PMA+三速MAC物理层版本
  • 9、工程移植说明
    • vivado版本不一致处理
    • FPGA型号不一致处理
    • 其他注意事项
  • 10、上板调试验证
    • 准备工作
    • 电脑端IP地址配置
    • QT上位机配置
    • 电脑端视频通过PCIE到FPGA端转UDP网络视频输出效果演示
  • 11、福利:工程代码的获取

FPGA实现PCIE采集电脑端视频转SFP光口UDP输出,基于XDMA+GTX架构,提供4套工程源码和技术支持

1、前言

FPGA实现PCIE数据传输现状;
目前基于Xilinx系列FPGA的PCIE通信架构主要有以下2种,一种是简单的、傻瓜式的、易于开发的、对新手友好的XDMA架构,该架构对PCIE协议底层做了封装,并加上了DMA引擎,使得使用的难度大大降低,加之Xilinx提供了配套的Windows和Linux系统驱动和上位机参考源代码,使得XDMA一经推出就让工程师们欲罢不能;另一种是更为底层的、需要设计者有一定PCIE协议知识的、更易于定制化开发的7 Series Integrated Block for PCI Express架构,该IP实现的是PCIe 的物理层、链路层和事务层,提供给用户的是以 AXI4-stream 接口定义的TLP 包,使用该IP 核,需要对PCIe 协议有清楚的理解,特别是对事务包TLP报文格式;本设计采用第一种方案,使用XDMA的中断模式实现PCIE通信;本架构既有简单的测速实验,也有视频采集应用;

FPGA实现UDP网络通信现状;
Xilinx系列FPGA实现UDP网络通信主要有两种方案,其一是使用PHY芯片实现物理层功能,比如常见的RTL8211、B50610等芯片,UDP协议栈部分很简单,可使用verilog代码直接实现;其二是使用Xilinx官方的IP核实现物理层功能,比如常见的1G/2.5G Ethernet PCS/PMA or SGMII、AXI 1G/2.5G Ethernet Subsystem、10G/25G Ethernet Subsystem、10G Ethernet Subsystem等,UDP协议栈部分很简单,可使用verilog代码直接实现;本设计使用1G/2.5G Ethernet PCS/PMA or SGMII和AXI 1G/2.5G Ethernet Subsystem方案实现物理层功能;

工程概述

本设计使用Xilinx系列FPGA为平台,实现电脑端视频通过PCIE到FPGA端转UDP网络视频输出;输入源为电脑端实时视频,也就是电脑桌面的实时图像,分辨率为1280x720@60Hz;打开QT上位机,QT上位机会实时采集电脑端视频,通过PCIE总线发送到FPGA板卡;FPGA内部的XDMA IP核接收到电脑端发来的视频后,将视频写入板载DDR3中缓存;同时使用本博主常用的FDMA图像缓存架构将视频从板载DDR3中读出;然后视频送入UDP视频组包发送模块,将视频加上包头和其他控制信息;然后组包的视频送入UDP协议栈进行以太网帧组帧;UDP协议栈输出的MAC数据经过FIFO组进行数据缓冲;MAC数据再送入Xilinx官方的1G/2.5G Ethernet PCS/PMA or SGMII或AXI 1G/2.5G Ethernet Subsystem IP核实现物理层;再经过板载的SFP+光口转电口,用网线传输到电脑端;电脑端使用QT上位机接收UDP网络视频并显示出来;本博客提供4套工程源码,具体如下:
在这里插入图片描述
现对上述4套工程源码做如下解释,方便读者理解:

工程源码1

开发板FPGA型号为Xilinx–>Kintex7–35T–xc7k325tffg676-2;输入源为电脑端实时视频,也就是电脑桌面的实时图像,分辨率为1280x720@60Hz;打开QT上位机,QT上位机会实时采集电脑端视频,通过PCIE总线发送到FPGA板卡;FPGA内部的XDMA IP核接收到电脑端发来的视频后,将视频写入板载DDR3中缓存;同时使用本博主常用的FDMA图像缓存架构将视频从板载DDR3中读出;然后视频送入UDP视频组包发送模块,将视频加上包头和其他控制信息;然后组包的视频送入UDP协议栈进行以太网帧组帧;UDP协议栈输出的MAC数据经过FIFO组进行数据缓冲;MAC数据再送入Xilinx官方的AXI 1G/2.5G Ethernet Subsystem IP核实现物理层;再经过板载的SFP+光口转电口,用网线传输到电脑端;电脑端使用QT上位机接收UDP网络视频并显示出来;板载的PCIE为4 Lane的PCIE2.0;单Lane线速率配置为5GT/s;板载SFP+光口,需要用到1个光口转电口模块后接上网线;由此形成QT上位机+PCIE+XDMA+SFP+UDP的高端架构;该工程适用于PCIE接口的视频采集卡或者网卡应用;

工程源码2

开发板FPGA型号为Xilinx–>Zynq7100–xc7z100ffg900-2;输入源为电脑端实时视频,也就是电脑桌面的实时图像,分辨率为1280x720@60Hz;打开QT上位机,QT上位机会实时采集电脑端视频,通过PCIE总线发送到FPGA板卡;FPGA内部的XDMA IP核接收到电脑端发来的视频后,将视频写入板载DDR3中缓存;同时使用本博主常用的FDMA图像缓存架构将视频从板载DDR3中读出;然后视频送入UDP视频组包发送模块,将视频加上包头和其他控制信息;然后组包的视频送入UDP协议栈进行以太网帧组帧;UDP协议栈输出的MAC数据经过FIFO组进行数据缓冲;MAC数据再送入Xilinx官方的AXI 1G/2.5G Ethernet Subsystem IP核实现物理层;再经过板载的SFP+光口转电口,用网线传输到电脑端;电脑端使用QT上位机接收UDP网络视频并显示出来;板载的PCIE为8 Lane的PCIE2.0;单Lane线速率配置为5GT/s;板载SFP+光口,需要用到1个光口转电口模块后接上网线;由此形成QT上位机+PCIE+XDMA+SFP+UDP的高端架构;该工程适用于PCIE接口的视频采集卡或者网卡应用;

工程源码3

开发板FPGA型号为Xilinx–>Kintex7–35T–xc7k325tffg676-2;输入源为电脑端实时视频,也就是电脑桌面的实时图像,分辨率为1280x720@60Hz;打开QT上位机,QT上位机会实时采集电脑端视频,通过PCIE总线发送到FPGA板卡;FPGA内部的XDMA IP核接收到电脑端发来的视频后,将视频写入板载DDR3中缓存;同时使用本博主常用的FDMA图像缓存架构将视频从板载DDR3中读出;然后视频送入UDP视频组包发送模块,将视频加上包头和其他控制信息;然后组包的视频送入UDP协议栈进行以太网帧组帧;UDP协议栈输出的MAC数据经过FIFO组进行数据缓冲;MAC数据再送入Xilinx官方的1G/2.5G Ethernet PCS/PMA or SGMII IP核+Tri Mode Ethernet MAC IP核实现物理层;再经过板载的SFP+光口转电口,用网线传输到电脑端;电脑端使用QT上位机接收UDP网络视频并显示出来;板载的PCIE为4 Lane的PCIE2.0;单Lane线速率配置为5GT/s;板载SFP+光口,需要用到1个光口转电口模块后接上网线;由此形成QT上位机+PCIE+XDMA+SFP+UDP的高端架构;该工程适用于PCIE接口的视频采集卡或者网卡应用;

工程源码4

开发板FPGA型号为Xilinx–>Zynq7100–xc7z100ffg900-2;输入源为电脑端实时视频,也就是电脑桌面的实时图像,分辨率为1280x720@60Hz;打开QT上位机,QT上位机会实时采集电脑端视频,通过PCIE总线发送到FPGA板卡;FPGA内部的XDMA IP核接收到电脑端发来的视频后,将视频写入板载DDR3中缓存;同时使用本博主常用的FDMA图像缓存架构将视频从板载DDR3中读出;然后视频送入UDP视频组包发送模块,将视频加上包头和其他控制信息;然后组包的视频送入UDP协议栈进行以太网帧组帧;UDP协议栈输出的MAC数据经过FIFO组进行数据缓冲;MAC数据再送入Xilinx官方的1G/2.5G Ethernet PCS/PMA or SGMII IP核+Tri Mode Ethernet MAC IP核实现物理层;再经过板载的SFP+光口转电口,用网线传输到电脑端;电脑端使用QT上位机接收UDP网络视频并显示出来;板载的PCIE为8 Lane的PCIE2.0;单Lane线速率配置为5GT/s;板载SFP+光口,需要用到1个光口转电口模块后接上网线;由此形成QT上位机+PCIE+XDMA+SFP+UDP的高端架构;该工程适用于PCIE接口的视频采集卡或者网卡应用;

本文详细描述了FPGA实现PCIE采集电脑端视频转SFP光口UDP输出的设计方案,工程代码可综合编译上板调试,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做项目开发,可应用于医疗、军工等行业的高速接口领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;

免责声明

本工程及其源码即有自己写的一部分,也有网络公开渠道获取的一部分(包括CSDN、Xilinx官网、Altera官网等等),若大佬们觉得有所冒犯,请私信批评教育;基于此,本工程及其源码仅限于读者或粉丝个人学习和研究,禁止用于商业用途,若由于读者或粉丝自身原因用于商业用途所导致的法律问题,与本博客及博主无关,请谨慎使用。。。

2、相关方案推荐

PCIE_35">我已有的PCIE方案

我的主页有PCIE通信专栏,该专栏基于XDMA的轮询模式实现与QT上位机的数据交互,既有基于RIFFA实现的PCIE方案,也有基于XDMA实现的PCIE方案;既有简单的数据交互、测速,也有应用级别的图像采集传输,以下是专栏地址:
点击直接前往
此外,我的主页有中断模式的PCIE通信专栏,该专栏基于XDMA的中断模式实现与QT上位机的数据交互,以下是专栏地址:
点击直接前往
此外,还有基于RIFFA架构的PCIE通信专栏,以下是专栏地址:
点击直接前往

1G/2.5G Ethernet Subsystem实现物理层方案

Xilinx官方的1G/2.5G Ethernet Subsystem IP核可实现以太网物理层方案,该方案无需外接PHY,完全使用FPGA内部高速接口资源即可实现,关于这个方案,请参考我之前的博客,博客链接如下:
1G/2.5G Ethernet Subsystem物理层+UDP协议栈方案,博客链接如下:
直接点击前往
1G/2.5G Ethernet Subsystem物理层+TCP/IP协议栈方案,博客链接如下:
直接点击前往

1G/2.5G Ethernet PCS/PMA or SGMII + Tri Mode Ethernet MAC实现物理层方案

Xilinx官方的1G/2.5G Ethernet PCS/PMA or SGMII + Tri Mode Ethernet MAC IP核可实现以太网物理层方案,该方案无需外接PHY,完全使用FPGA内部高速接口资源即可实现,关于这个方案,请参考我之前的博客,博客链接如下:
1G/2.5G Ethernet PCS/PMA or SGMII + Tri Mode Ethernet MAC物理层+UDP协议栈方案,博客链接如下:
直接点击前往
1G/2.5G Ethernet PCS/PMA or SGMII + Tri Mode Ethernet MAC物理层+TCP/IP协议栈方案,博客链接如下:
直接点击前往

PCIE_54">3、PCIE基础知识扫描

PCIe 总线架构与以太网的 OSI 模型类似,是一种分层协议架构,分为事务层(Transaction Layer)、数据链路层(Data Link Layer) 和物理层(Physical Layer)。这些层中的每一层都分为两部分:一部分处理出站(要发送的)信息,另一部分处理入站(接收的)信息,如下图:
在这里插入图片描述
事务层
事务层的主要责任是事务层包 TLP(Transaction Layer Packet)的组装和拆卸。事务层接收来自 PCIe 设备核心层的数据,并将其封装为 TLP。TLP 用于传达事务,例如读取和写入,以及确定事件的类型。事务层还负责管理 TLP 的基于信用的流控制。每个需要响应数据包的请求数据包都作为拆分事务实现。每个数据包都有一个唯一标识符,该标识符使响应数据包可以定向到正确的始发者。数据包格式支持不同形式的寻址,具体取决于事务的类型(内存、I/O、配置和消息)。数据包可能还具有诸如 No Snoop、Relaxed Ordering 和基于 ID 的排序(IDO)之类的属性。事务层支持四个地址空间:包括三个 PCI 地址空间(内存、I/O 和配置)并添加消息空间。该规范使用消息空间来支持所有先前 PCI 的边带信号,例如中断、电源管理请求等,作为带内消息事务。

数据链路层
数据链路层充当事务层和物理层之间的中间阶段。数据链路层的主要职责包括链路管理和数据完整性,包括错误检测和错误纠正。数据链路层的发送方接受事务层组装的 TLP,计算并应用数据保护代码和 TLP序列号,以及将它们提交给物理层以在链路上传输。接收数据链路层负责检查接收到的 TLP 的完整性,并将它们提交给事务层以进行进一步处理。在检测到 TLP 错误时,此层负责请求重发 TLP,直到正确接收信息或确定链路失败为止。数据链路层还生成并使用用于链路管理功能的数据包。为了将这些数据包与事务层(TLP)使用的数据包区分开,当指代在数据链路层生成和使用的数据包时,将使用术语“数据链路层数据包(DLLP)”。

物理层
PCIe 总线的物理层为 PCIe 设备间的数据通信提供传送介质,为数据传送提供可靠的物理环境。物理层包括用于接口操作的所有电路,包括驱动器和输入缓冲器、并行至串行和串行至并行转换、PLL 和阻抗匹配电路。它还包括与接口初始化和维护有关的逻辑功能。物理层以实现特定的格式与数据链路层交换信息。该层负责将从数据链路层接收的信息转换为适当的序列化格式,并以与连接到链路另一端的设备兼容的频率和通道宽度在 PCI Express 链路上传输该信息。物理层是 PCIe 体系结构最重要,也是最难以实现的组成部分(该层对用户透明,开发 PCIe 程序时无需关心)。PCIe 总线的物理层定义了 LTSSM (Link Training and Status State Machine)状态机,PCIe 链路使用该状态机管理链路状态,并进行链路训练、链路恢复和电源管理。PCIe 总线使用端到端的连接方式,在一条PCIe 链路的两端只能各连接一个设备,这两个设备互为数据发送端和数据接收端。由于 PCIe 是支持全双工通信的,所以发送端和接收端中都含有TX (发送逻辑) 和RX (接收逻辑)。在PCIe 总线的物理链路的一个数据通路(Lane) 中,有两组差分信号,共4 根信号线组成。其中发送端的TX 与接收端的RX 使用一组差分信号连接,该链路也被称为发送端的发送链路,也是接收端的接收链路;而发送端的RX 与接收端的TX 使用另一组差分信号连接,该链路也被称为发送端的接收链路,也是接收端的发送链路。一个PCIe 链路可以由多个Lane 组成。目前PCIe 链路可以支持1、2、4、8、12、16 和32 个Lane,即×1、×2、×4、×8、×12、×16 和×32 宽度的PCIe 链路。每一个Lane 上使用的总线频率与PCIe 总线使用的版本相关。

4、工程详细设计方案

工程设计原理框图

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

电脑端视频

输入源为电脑端实时视频,也就是电脑桌面的实时图像,分辨率为1280x720@60Hz;电脑端的分辨率需要设置为1280x720@60Hz,如下:
在这里插入图片描述

PCIEQT_72">PCIE视频采集QT上位机

仅提供Win10版本的QT上位机,位置如下:
在这里插入图片描述
以Win10版本为例,源码位置如下:
在这里插入图片描述
以Win10版本下,可以点击已经编译好的QT软件直接运行,位置如下:
在这里插入图片描述
QT上位机运行效果如下:
在这里插入图片描述

XDMA_81">XDMA配置及使用

根据Xilinx官方手册,XDMA框图如下:
在这里插入图片描述
由图可知,XDMA封装了Integrated Block for PCI Express IP,不仅完成了事务层的组包解包,还添加了完整的 DMA 引擎;
XDMA 一般情况下使用AXI4 接口,AXI4 接口可以加入到系统总线互联,适用于大数据量异步传输,而且通常情况下使用 XDMA 都会使用到 BRAM 或 DDR 内存;AXI4-Stream 接口适用于低延迟数据流传输。XDMA 允许在主机内存和 DMA 子系统之间移动数据。它通过对包含有关要传输的数据的源、目标和数量的信息的“描述符”进行操作来实现此目的。这些直接内存传输既可以用于主机到卡(Host to Card,H2C)的传输,也可以用与卡到主机(Card to Host,C2H)的传输。可以将 DMA 配置为由所有通道共享一个 AXI4 Master 接口,或者为每个启用的通道提供一个 AXI4-Stream 接口。内存传输是基于每个通道的描述符链接列表指定的,DMA 从主机内存和进程中获取这些链接列表。诸如描述符完成和错误之类的事件通过中断来发出信号。XDMA 还提供多达 16 条用户中断线,这些中断线会向主机生成中断。本设计需要配置为中断模式;如下图:
在这里插入图片描述
XDMA详情参考《AXI Bridge for PCI Express Gen3 Subsystem Product Guide(PG194)》;XDMA在Block Design中如下:
在这里插入图片描述

XDMA_89">XDMA中断模块

XDMA中断模块和XDMA IP配合使用,XDMA中断模块主要执行两个任务,一是获取XDMA的状态,输出用户中断使能信号,以指示用户此时可以发起中断,该任务通过AXI_Lite接口与XDMA连接,其从机地址受PC端软件控制;二是转发用户中断给XDMA,当用户侧检测到XDMA处于可接受中断状态时,用户逻辑可以发起中断,XDMA中断模块将此中断转发给XDMA IP;将模块直接拖入Block Design中,显示如下:
在这里插入图片描述

FDMA图像缓存

FDMA图像缓存架构实现的功能是将输入视频缓存到板载DDR3中,由于调用了Xilinx官方的MIG作为DDR控制器,所以FDMA图像缓存架构就是实现用户数据到MIG的桥接作用;架构如下:
在这里插入图片描述
FDMA图像缓存架构由FDMA控制器+FDMA组成;FDMA实际上就是一个AXI4-FULL总线主设备,与MIG对接,MIG配置为AXI4-FULL接口;FDMA控制器实际上就是一个视频读写逻辑,以写视频为例,假设一帧图像的大小为M×N,其中M代表图像宽度,N代表图像高度;FDMA控制器每次写入一行视频数据,即每次向DDR3中写入M个像素,写N次即可完成1帧图像的缓存,本设计只用到了FDMA控制器的读功能,FDMA控制器IP配置如下:
在这里插入图片描述
FDMA图像缓存架构在Block Design中如下:
在这里插入图片描述

UDP_99">UDP视频组包发送

UDP视频组包发送实现视频数据的组包并通过UDP协议栈发送出去,视频数据发送必须与QT上位机的接受程序一致,上位机定义的UDP帧格式包括帧头个UDP数据,QT上位机接收代码数据帧头定义如下:
在这里插入图片描述
FPGA端的UDP数据组包代码必须与上图的数据帧格式对应,否则QT无法解析,代码中定义了数据组包状态机以及数据帧,如下:
在这里插入图片描述
另外,由于UDP发送是64位数据位宽,而图像像素数据是24bit位宽,所以必须将UDP数据重新组合,以保证像素数据的对齐,这部分是整个工程的难点,也是所有FPGA做UDP数据传输的难点;UDP视频组包发送代码架构如下:
在这里插入图片描述

UDP_106">UDP协议栈

UDP协议栈使用UDP协议栈网表文件,该协议栈目前并不开源,只提供网表文件,虽看不见源码但可正常实现UDP通信,但不影响使用,该协议栈带有用户接口,使得用户无需关心复杂的UDP协议而只需关心简单的用户接口时序即可操作UDP收发,非常简单;协议栈架构如下:
在这里插入图片描述
协议栈性能表现如下:
1:支持 UDP 接收校验和检验功能,暂不支持 UDP 发送校验和生成;
2:支持 IP 首部校验和的生成和校验,同时支持 ICMP 协议中的 PING 功能,可接收并响应同一个子网内部设备的 PING 请求;
3:可自动发起或响应同一个子网内设备的 ARP 请求,ARP 收发完全自适应。ARP 表可保存同一个子网内部256 个 IP 和 MAC 地址对;
4:支持 ARP 超时机制,可检测所需发送数据包的目的 IP 地址是否可达;
5:协议栈发送带宽利用率可达 93%,高发送带宽下,内部仲裁机制保证 PING 和 ARP 功能不受任何影响;
6:发送过程不会造成丢包;
7:提供64bit位宽AXI4-Stream形式的MAC接口,可与Xilinx官方的千兆以太网IP核Tri Mode Ethernet MAC,以及万兆以太网 IP 核 10 Gigabit Ethernet Subsystem、10 Gigabit Ethernet MAC 配合使用;
有了此协议栈,我们无需关心复杂的UDP协议的实现了,直接调用接口即可使用。。。
UDP协议栈用户接口发送时序如下:
在这里插入图片描述
UDP协议栈用户接口接收时序如下:
在这里插入图片描述

MAC数据缓冲FIFO组

这里对代码中用到的数据缓冲FIFO组做如下解释:
由于 UDP IP 协议栈的 AXI-Stream 数据接口位宽为 64bit,而 Tri Mode Ethernet MAC 的 AXI-Stream数据接口位宽为 8bit。因此,要将 UDP IP 协议栈与 Tri Mode Ethernet MAC 之间通过 AXI-Stream 接口互联,需要进行时钟域和数据位宽的转换。实现方案如下图所示:
在这里插入图片描述
收发路径(本设计只用到了发送)都使用了2个AXI-Stream DATA FIFO,通过其中1个FIFO实现异步时钟域的转换,1个FIFO实
现数据缓冲和同步Packet mode功能;由于千兆速率下Tri Mode Ethernet MAC的AXI-Stream数据接口同步时钟信号为125MHz,此时,UDP协议栈64bit的AXI-Stream数据接口同步时钟信号应该为125MHz/(64/8)=15.625MHz,因此,异步
AXI-Stream DATA FIFO两端的时钟分别为125MHz(8bit),15.625MHz(64bit);UDP IP协议栈的AXI-Stream接口经过FIFO时钟域转换后,还需要进行数据数据位宽转换,数据位宽的转换通过AXI4-Stream Data Width Converter完成,在接收路径中,进行 8bit 到 64bit 的转换;在发送路径中,进行 64bit 到 8bit 的转换;MAC数据缓冲FIFO组代码架构如下:
在这里插入图片描述

AXI 1G/2.5G Ethernet Subsystem 简介

AXI 1G/2.5G Ethernet Subsystem的权威官方手册为《pg138-axi-ethernet》,请自行下载阅读,该IP是Xilinx官方将1G/2.5G Ethernet PCS/PMA or SGMII和Tri Mode Ethernet MAC封装在一起组成的全新IP,目的是简化FPGA实现以太网物理层的设计难度,直接调用这一个IP即可使用,该IP展开后如下:
在这里插入图片描述
接收端:
数据首先经过1G/2.5G Ethernet PCS/PMA or SGMII解串,将串行数据解为并行数据;然后经过弹性Buffer做数据缓冲处理,主要是为了去频偏,使板与板之间的数据稳定,然后进行8b/10b解码,恢复正常数据;然后经过PCS接收同步器,对数据进行跨时钟处理,同步到GMII时序下然后输出给Tri Mode Ethernet MAC进行数据合适转换,最后以AXI4-Stream输出;

发送端:
发送端则简单得多,用户侧UDP MAC数据首先给到Tri Mode Ethernet MAC进行数据合适转换,以GMII数据输出给1G/2.5G Ethernet PCS/PMA or SGMII,后者进行以太网物理层处理,以差分信号输出;

AXI 1G/2.5G Ethernet Subsystem 配置

AXI 1G/2.5G Ethernet Subsystem配置为1G,如下:
在这里插入图片描述
AXI 1G/2.5G Ethernet Subsystem可运行于1G和2.5G线速率,对GT时钟有严格研究,按照官方数据手册,运行1G线速率时,GT差分时钟必须为125M,运行2.5G线速率时,GT差分时钟必须为312.5M,如下:
在这里插入图片描述

多个 AXI 1G/2.5G Ethernet Subsystem 主从级联使用

多个AXI 1G/2.5G Ethernet Subsystem 的主从搭配使用的应用场景是FPGA开发板充当多光口的网卡使用,即一个FPGA挂载多个光口,每一个光口相当于一个独立的网卡,有独立的IP地址和MAC地址,类似于交换机;主从搭配使用框架如下:
在这里插入图片描述
AXI 1G/2.5G Ethernet Subsystem可单独使用,当单独使用时,一个AXI 1G/2.5G Ethernet Subsystem单独占用一个GT高速接口资源,单独占用一对差分时钟资源;此时的IP配置如下:
在这里插入图片描述
AXI 1G/2.5G Ethernet Subsystem也可多个级联主从搭配使用,主从搭配使用时,一个AXI 1G/2.5G Ethernet Subsystem当做主IP,占用一个GT高速接口资源,单独占用一对差分时钟资源;其他AXI 1G/2.5G Ethernet Subsystem当做从IP,占用一个GT高速接口资源,但不占用差分时钟资源,而是使用主IP提供的参考时钟;此时的从IP配置如下:
在这里插入图片描述

1G/2.5G Ethernet PCS/PMA or SGMII 简介

1G/2.5G Ethernet PCS/PMA or SGMII实现了类似于网络PHY芯片的功能,其功能框图如下:
在这里插入图片描述
接收端:
数据首先经过GT资源解串,将串行数据解为并行数据;然后经过弹性Buffer做数据缓冲处理,主要是为了去频偏,使板与板之间的数据稳定,然后进行8b/10b解码,恢复正常数据;然后经过PCS接收同步器,对数据进行跨时钟处理,同步到GMII时序下;最后将数据放入GMII总线下输出;

发送端:
发送端则简单得多,输入时序为GMII;然后进入PCS发送引擎;然后对数据进行8b/10b编码;最后放入GT串化后输出;

1G/2.5G Ethernet PCS/PMA or SGMII 配置

1G/2.5G Ethernet PCS/PMA or SGMII配置为1G,其与MAC的接口为GMII,配置如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
1G/2.5G Ethernet PCS/PMA or SGMII可运行于1G和2.5G线速率,对GT时钟有严格研究,按照官方数据手册,运行1G线速率时,GT差分时钟必须为125M,运行2.5G线速率时,GT差分时钟必须为312.5M,如下:
在这里插入图片描述

多个1G/2.5G Ethernet PCS/PMA or SGMII 主从级联使用

多个1G/2.5G Ethernet PCS/PMA or SGMII 的主从搭配使用的应用场景是FPGA开发板充当多光口的网卡使用,即一个FPGA挂载多个光口,每一个光口相当于一个独立的网卡,有独立的IP地址和MAC地址,类似于交换机;主从搭配使用框架如下:
在这里插入图片描述
1G/2.5G Ethernet PCS/PMA or SGMII可单独使用,当单独使用时,一个1G/2.5G Ethernet PCS/PMA or SGMII单独占用一个GT高速接口资源,单独占用一对差分时钟资源;此时的IP配置如下:
在这里插入图片描述
1G/2.5G Ethernet PCS/PMA or SGMII也可多个级联主从搭配使用,主从搭配使用时,一个1G/2.5G Ethernet PCS/PMA or SGMII当做主IP,占用一个GT高速接口资源,单独占用一对差分时钟资源;其他1G/2.5G Ethernet PCS/PMA or SGMII当做从IP,占用一个GT高速接口资源,但不占用差分时钟资源,而是使用主IP提供的参考时钟;此时的从IP配置如下:
在这里插入图片描述

Tri Mode Ethernet MAC

Tri Mode Ethernet MAC主要是为了适配1G/2.5G Ethernet PCS/PMA or SGMII,因为后者的输入接口是GMII,而Tri Mode Ethernet MAC的输入接口是AXIS,输出接口是GMII,Tri Mode Ethernet MAC配置如下:
在这里插入图片描述
在这里插入图片描述

IP地址、端口号的修改

UDP协议栈留出了IP地址、端口号的修改端口供用户自由修改,位置在顶层模块如下:
在这里插入图片描述

SFP光口转RJ45电口

需要准备满足千兆传输要求的SFP光口转RJ45电口,某宝二三十块钱很便宜,大概长这样:
在这里插入图片描述

UDPQT_182">UDP视频接收显示QT上位机

仅提供Win10版本的QT上位机,位置如下:
在这里插入图片描述
以Win10版本为例,源码位置如下:
在这里插入图片描述
以Win10版本下,可以点击已经编译好的QT软件直接运行,位置如下:
在这里插入图片描述
QT上位机运行效果如下:
在这里插入图片描述
我们的QT目前仅支持1280x720分辨率的视频抓图显示,但同时预留了1080P接口,对QT开发感兴趣的朋友可以尝试修改代码以适应1080P,因为QT在这里只是验证工具,不是本工程的重点,所以不再过多赘述;

XDMA_192">Windows版本XDMA驱动安装

提供Windows和Linux系统驱动,本章节介绍Windows下XDMA驱动安装;
在这里插入图片描述
Windows下驱动安装步骤如下:友情提示,Windows下驱动秩序安装一次即可;

第一步:使系统禁用签名并进入测试模式,方法如下:
在这里插入图片描述
也可百度其他方法实现上述目的,完成后电脑屏幕右下角应有如下显示:
在这里插入图片描述
第二步:定位到驱动目录下,提供Windows7和Windows10两个版本驱动,由于我的电脑选择Windows10,如下:
在这里插入图片描述
单击鼠标右键安装即可,如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
第三步:下载FPGA工程bit到FPGA开发板,然后重启电脑,打开我的电脑–>管理–>设备管理器,应看到如下设备:
在这里插入图片描述

XDMA_209">Linux版本XDMA驱动安装

提供Windows和Linux系统驱动,本章节介绍Linux下XDMA驱动安装;
在这里插入图片描述
Linux下驱动安装步骤如下:友情提示,Linux下,每次下载FPGA bit后都需要重启电脑才能安装驱动;

进入到Linux驱动目录下,一次执行以下两条指令即可安装,如下:
• 驱动编译终端指令:make -j8
•驱动安装终端指令:sudo insmod xdma.ko
在这里插入图片描述

工程源码架构

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

Vivado工程注意事项

Vivado工程需要配合修改过的Xilinx官方XDMA驱动和QT上位机一起使用,所以Vivado工程必须做到以下几点:
1:XDMA中的AXI4_Lite基地址必须设为0x44A00000,这是XDMA驱动修改的规定,感兴趣的可以去看驱动源码,配置如下;
在这里插入图片描述
2:MIG的DDR基地址必须从0x00000000开始,这是QT上位机代码的规定,感兴趣的可以去看QT源码,配置如下;
在这里插入图片描述

PCIE_229">PCIE上板调试注意事项

1:必须先安装本博提供的XDMA驱动,详情请参考第4章节的《XDMA驱动及其安装》,Windows版本驱动只需安装一次;
2:Windows版本下载FPGA工程bit后需要重启电脑,电脑才能识别到XDMA驱动;程序固化后也需要重启电脑;Linux版本每次载FPGA工程bit后都需要重启电脑,都需要安装XDMA驱动;
3:FPGA板卡插在主机上后一般不需要额外供电,如果你的板子元器件较多功耗较大,则需要额外供电,详情咨询开发板厂家,当然,找我买板子的客户可以直接问我;
4:PCIE调试需要电脑主机,但笔记本电脑理论上也可以外接出来PCIE,详情百度自行搜索一下,电脑主机PCIE插槽不方便操作时可以使用延长线接出来,某宝有卖;

5、vivado工程源码1详解–>Kintex7-35T,Ethernet Subsystem物理层版本

开发板FPGA型号:Xilinx–>Kintex7–35T–xc7k325tffg676-2;
FPGA开发环境:Vivado2019.1;
QT开发环境:VS2015 + Qt 5.12.10;
输入:电脑主机实时视频,分辨率1280x720@60Hz;
输出:UDP网络视频,分辨率1280x720@60Hz;
PC端到FDMA传输方案:PCIE传输;
图像缓存方案:FDMA图像缓存+DDR3颗粒;
PCIE底层方案:Xilinx XDMA
PCIE详情:PCIE2.0版本,X4,5GT/s单lane线速率;
以太网物理层:Xilinx官方AXI 1G/2.5G Ethernet Subsystem方案
以太网协议层:千兆UDP协议栈;
实现功能:FPGA实现PCIE采集电脑端视频转SFP光口UDP输出;
工程作用:此工程目的是让读者掌握FPGA实现PCIE采集电脑端视频转SFP光口UDP输出的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第4章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

6、vivado工程源码2详解–>Zynq7100,Ethernet Subsystem物理层版本

开发板FPGA型号:Xilinx–>Zynq7100–xc7z100ffg900-2;
FPGA开发环境:Vivado2019.1;
QT开发环境:VS2015 + Qt 5.12.10;
输入:电脑主机实时视频,分辨率1280x720@60Hz;
输出:UDP网络视频,分辨率1280x720@60Hz;
PC端到FDMA传输方案:PCIE传输;
图像缓存方案:FDMA图像缓存+DDR3颗粒;
PCIE底层方案:Xilinx XDMA
PCIE详情:PCIE2.0版本,X8,5GT/s单lane线速率;
以太网物理层:Xilinx官方AXI 1G/2.5G Ethernet Subsystem方案
以太网协议层:千兆UDP协议栈;
实现功能:FPGA实现PCIE采集电脑端视频转SFP光口UDP输出;
工程作用:此工程目的是让读者掌握FPGA实现PCIE采集电脑端视频转SFP光口UDP输出的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第4章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

7、vivado工程源码3详解–>Kintex7-35T,Ethernet PCS/PMA+三速MAC物理层版本

开发板FPGA型号:Xilinx–>Kintex7–35T–xc7k325tffg900-2;
FPGA开发环境:Vivado2019.1;
QT开发环境:VS2015 + Qt 5.12.10;
输入:电脑主机实时视频,分辨率1280x720@60Hz;
输出:UDP网络视频,分辨率1280x720@60Hz;
PC端到FDMA传输方案:PCIE传输;
图像缓存方案:FDMA图像缓存+DDR3颗粒;
PCIE底层方案:Xilinx XDMA
PCIE详情:PCIE2.0版本,X4,5GT/s单lane线速率;
以太网物理层:Xilinx官方1G/2.5G Ethernet PCS/PMA or SGMII +Tri Mode Ethernet MAC方案
以太网协议层:千兆UDP协议栈;
实现功能:FPGA实现PCIE采集电脑端视频转SFP光口UDP输出;
工程作用:此工程目的是让读者掌握FPGA实现PCIE采集电脑端视频转SFP光口UDP输出的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第4章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

8、vivado工程源码4详解–>Zynq7100,Ethernet PCS/PMA+三速MAC物理层版本

开发板FPGA型号:Xilinx–>Zynq7100–xc7z100ffg900-2;
FPGA开发环境:Vivado2019.1;
QT开发环境:VS2015 + Qt 5.12.10;
输入:电脑主机实时视频,分辨率1280x720@60Hz;
输出:UDP网络视频,分辨率1280x720@60Hz;
PC端到FDMA传输方案:PCIE传输;
图像缓存方案:FDMA图像缓存+DDR3颗粒;
PCIE底层方案:Xilinx XDMA
PCIE详情:PCIE2.0版本,X8,5GT/s单lane线速率;
以太网物理层:Xilinx官方1G/2.5G Ethernet PCS/PMA or SGMII +Tri Mode Ethernet MAC方案
以太网协议层:千兆UDP协议栈;
实现功能:FPGA实现PCIE采集电脑端视频转SFP光口UDP输出;
工程作用:此工程目的是让读者掌握FPGA实现PCIE采集电脑端视频转SFP光口UDP输出的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第4章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

9、工程移植说明

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

10、上板调试验证

准备工作

需要准备的器材如下:
FPGA开发板,没有开发板可以找本博提供;
PCIE卡槽的电脑主机;
网线;
我的开发板了连接如下:
在这里插入图片描述

电脑端IP地址配置

电脑端IP地址需要修改为和代码里的目的地址一样,如下:
在这里插入图片描述

QT上位机配置

打开QT上位机配置如下,然后可以采集显示视频;
在这里插入图片描述

PCIEFPGAUDP_338">电脑端视频通过PCIE到FPGA端转UDP网络视频输出效果演示

电脑端视频通过PCIE到FPGA端转UDP网络视频输出效果如下:

XDMA-FPGA-UDP-PHY

11、福利:工程代码的获取

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


http://www.ppmy.cn/ops/126474.html

相关文章

用 JavaScript 循环快速解决问题——WEB开发系列48

循环结构是用来处理重复性任务的工具。无论是基本的计算还是复杂的数据处理,循环结构都能够高效地完成这些任务。在JavaScript中,最常用的循环结构包括​​​​for​​​​​循环、​​​​while​​​​​语句和​​​​do...while​​​语句&#xff0…

Odoo:免费开源的装备制造行业信息化解决方案

概述 满足装备制造行业MTO、ETO、MTS等多种业务模式,从个性化的订单选配、多层级计划管理模式、复杂的物料齐套规划、频繁的设计变更管理、精细化制造执行和用料管控、精准的售后服务等行业特性,提供一站式整体解决方案。 行业趋势洞察 个性化定制 洞察…

【Iceberg分析】Iceberg 1.6.1 源码使用IDEA本地编译

Iceberg 1.6.1 源码使用IDEA本地编译 文章目录 Iceberg 1.6.1 源码使用IDEA本地编译下载文件配置调整gradle相关修改bulid.gradlegradle.properties在IDEA上构建编译打包 可能出现的问题彩蛋与Spark部署Spark与Iceberg集成部署 下载 网络条件允许的情况下,使用git直…

智慧船舶物联网实训室建设方案

第一章 建设背景 随着全球海洋经济的蓬勃发展与智能化技术的日新月异,数字船舶物联网(Internet of Things for Maritime, IoT-Maritime)与人工智能(Artificial Intelligence, AI)的结合已成为推动航运业转型升级的关键…

浏览器缓存

问题 每次发布 web 项目新的版本后, 在浏览器中打开项目时, 不清除浏览器缓存, 无法获取最新页面。 原因 为了减少资源请求次数,加快资源访问速度, 浏览器会对资源文件如图片 、css 文件、 js 文件等进行缓存&#xff…

《深度学习》Dlib、OpenCV 关键点定位 原理及案例解析

目录 一、关键点定位 1、什么是关键点定位 2、步骤 1)加载预训练的人脸检测器 2)加载预训练的关键点检测器 3)读取图像 4)检测人脸 5)关键点检测 6)可视化关键点 7)显示图像 二、案例…

关于武汉芯景科技有限公司的限流开关芯片XJ6288开发指南(兼容SY6288)

一、芯片引脚介绍 1.芯片引脚 二、系统结构图 三、功能描述 1.EN引脚控制IN和OUT引脚的通断 2.OCB引脚指示状态 3.过流自动断开

【解决】webstrom uniapp rpx格式化空格 报错飘红

解决办法 1、安装 wechat mini program support 插件 2. 设置 wechat mini program 里小程序支持选为启用 3. 重新格式化显示正常&#xff0c;也不飘红了 注意要style开启scss支持lang"scss"&#xff0c;否则也会飘红报错 <style lang"scss"><…