河南国安建设集团有限公司网站,可以显示文章列表的wordpress主题,个商个体户可以建设网站不,网站建设有哪些名词目录 1、前言工程概述免责声明 2、相关方案推荐我已有的PCIE方案我这里已有的以太网方案本博已有的FPGA图像缩放方案 3、PCIE基础知识扫描4、工程详细设计方案工程设计原理框图电脑端视频PCIE视频采集QT上位机XDMA配置及使用XDMA中断模块FDMA图像缓存纯Verilog图像缩放模块详解… 目录 1、前言工程概述免责声明 2、相关方案推荐我已有的PCIE方案我这里已有的以太网方案本博已有的FPGA图像缩放方案 3、PCIE基础知识扫描4、工程详细设计方案工程设计原理框图电脑端视频PCIE视频采集QT上位机XDMA配置及使用XDMA中断模块FDMA图像缓存纯Verilog图像缩放模块详解纯Verilog图像缩放模块使用UDP视频组包发送UDP协议栈MAC数据缓冲FIFO组Tri Mode Ethernet MAC IP核PHY芯片IP地址、端口号的修改UDP视频接收显示QT上位机Windows版本XDMA驱动安装Linux版本XDMA驱动安装工程源码架构Vivado工程注意事项PCIE上板调试注意事项 5、vivado工程源码1详解--Artix7-100TPCIE--FPGA--B50610版本6、vivado工程源码2详解--Kintex7-35TPCIE--FPGA--B50610版本7、vivado工程源码3详解--Kintex7-35TPCIE--FPGA--RTL8211F版本8、工程移植说明vivado版本不一致处理FPGA型号不一致处理其他注意事项 9、上板调试验证准备工作电脑端视频通过PCIE到FPGA端图像缩放转UDP网络视频输出效果演示 10、福利工程代码的获取 FPGA实现PCIE采集电脑端视频缩放后转千兆UDP网络输出基于XDMAPHY芯片架构提供3套工程源码和技术支持 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代码直接实现本设计使用PHY芯片方案实现物理层功能
工程概述
本设计使用Xilinx系列FPGA为平台实现电脑端视频通过PCIE到FPGA端转UDP网络视频输出输入源为电脑端实时视频也就是电脑桌面的实时图像分辨率为1280x72060Hz打开QT上位机QT上位机会实时采集电脑端视频通过PCIE总线发送到FPGA板卡FPGA内部的XDMA IP核接收到电脑端发来的视频后将视频写入板载DDR3中缓存同时使用本博主常用的FDMA图像缓存架构将视频从板载DDR3中读出然后视频送入纯verilog实现的图像缩放模块对视频进行缩放操作然后视频再经过FDMA图像缓存架构进行图像缓存操作视频从板载DDR3中读出后送入UDP视频组包发送模块将视频加上包头和其他控制信息然后组包的视频送入UDP协议栈进行以太网帧组帧UDP协议栈输出的MAC数据经过FIFO组进行数据缓冲MAC数据再送入Xilinx官方的Tri Mode Ethernet MAC IP核实现AXIS数据到RGMII数据转换再经过板载的PHY网络芯片实现物理层功能将RGMII数据转换为差分数据再经过板载的RJ45网口用网线传输到电脑端电脑端使用QT上位机接收UDP网络视频并显示出来本博客提供3套工程源码具体如下 现对上述3套工程源码做如下解释方便读者理解
工程源码1
开发板FPGA型号为Xilinx–Artix7-100T–xc7a100tfgg484-2输入源为电脑端实时视频也就是电脑桌面的实时图像分辨率为1280x72060Hz打开QT上位机QT上位机会实时采集电脑端视频通过PCIE总线发送到FPGA板卡FPGA内部的XDMA IP核接收到电脑端发来的视频后将视频写入板载DDR3中缓存同时使用本博主常用的FDMA图像缓存架构将视频从板载DDR3中读出然后视频送入纯verilog实现的图像缩放模块对视频进行缩放操作将原视频分辨率从1920x1080缩放为1280x720然后视频再经过FDMA图像缓存架构进行图像缓存操作视频从板载DDR3中读出后送入UDP视频组包发送模块将视频加上包头和其他控制信息然后组包的视频送入UDP协议栈进行以太网帧组帧UDP协议栈输出的MAC数据经过FIFO组进行数据缓冲MAC数据再送入Xilinx官方的Tri Mode Ethernet MAC IP核实现AXIS数据到RGMII数据转换再经过板载的B50610网络芯片实现物理层功能将RGMII数据转换为差分数据再经过板载的RJ45网口用网线传输到电脑端电脑端使用QT上位机接收UDP网络视频并显示出来板载的PCIE为1 Lane的PCIE2.0单Lane线速率配置为5GT/s板载的PHY芯片为B50610工作于延时模式输出RGMII接口数据由此形成QT上位机PCIEXDMAUDP的高端架构该工程适用于PCIE接口的视频采集卡或者网卡应用
工程源码2
开发板FPGA型号为Xilinx–Kintex7–35T–xc7k325tffg676-2输入源为电脑端实时视频也就是电脑桌面的实时图像分辨率为1280x72060Hz打开QT上位机QT上位机会实时采集电脑端视频通过PCIE总线发送到FPGA板卡FPGA内部的XDMA IP核接收到电脑端发来的视频后将视频写入板载DDR3中缓存同时使用本博主常用的FDMA图像缓存架构将视频从板载DDR3中读出然后视频送入纯verilog实现的图像缩放模块对视频进行缩放操作将原视频分辨率从1920x1080缩放为1280x720然后视频再经过FDMA图像缓存架构进行图像缓存操作视频从板载DDR3中读出后送入UDP视频组包发送模块将视频加上包头和其他控制信息然后组包的视频送入UDP协议栈进行以太网帧组帧UDP协议栈输出的MAC数据经过FIFO组进行数据缓冲MAC数据再送入Xilinx官方的Tri Mode Ethernet MAC IP核实现AXIS数据到RGMII数据转换再经过板载的B50610网络芯片实现物理层功能将RGMII数据转换为差分数据再经过板载的RJ45网口用网线传输到电脑端电脑端使用QT上位机接收UDP网络视频并显示出来板载的PCIE为4 Lane的PCIE2.0单Lane线速率配置为5GT/s板载的PHY芯片为B50610工作于延时模式输出RGMII接口数据由此形成QT上位机PCIEXDMAUDP的高端架构该工程适用于PCIE接口的视频采集卡或者网卡应用
工程源码3
开发板FPGA型号为Xilinx–Zynq7100–xc7z100ffg900-2输入源为电脑端实时视频也就是电脑桌面的实时图像分辨率为1280x72060Hz打开QT上位机QT上位机会实时采集电脑端视频通过PCIE总线发送到FPGA板卡FPGA内部的XDMA IP核接收到电脑端发来的视频后将视频写入板载DDR3中缓存同时使用本博主常用的FDMA图像缓存架构将视频从板载DDR3中读出然后视频送入纯verilog实现的图像缩放模块对视频进行缩放操作将原视频分辨率从1920x1080缩放为1280x720然后视频再经过FDMA图像缓存架构进行图像缓存操作视频从板载DDR3中读出后送入UDP视频组包发送模块将视频加上包头和其他控制信息然后组包的视频送入UDP协议栈进行以太网帧组帧UDP协议栈输出的MAC数据经过FIFO组进行数据缓冲MAC数据再送入Xilinx官方的Tri Mode Ethernet MAC IP核实现AXIS数据到RGMII数据转换再经过板载的RTL8211F网络芯片实现物理层功能将RGMII数据转换为差分数据再经过板载的RJ45网口用网线传输到电脑端电脑端使用QT上位机接收UDP网络视频并显示出来板载的PCIE为8 Lane的PCIE2.0单Lane线速率配置为5GT/s板载的PHY芯片为RTL8211F工作于延时模式输出RGMII接口数据由此形成QT上位机PCIEXDMAUDP的高端架构该工程适用于PCIE接口的视频采集卡或者网卡应用
电脑端视频通过PCIE到FPGA端图像缩放转UDP网络视频输出的设计方案工程代码可综合编译上板调试可直接项目移植适用于在校学生、研究生项目开发也适用于在职工程师做项目开发可应用于医疗、军工等行业的高速接口领域 提供完整的、跑通的工程源码和技术支持 工程源码和技术支持的获取方式放在了文章末尾请耐心看到最后
免责声明
本工程及其源码即有自己写的一部分也有网络公开渠道获取的一部分(包括CSDN、Xilinx官网、Altera官网等等)若大佬们觉得有所冒犯请私信批评教育基于此本工程及其源码仅限于读者或粉丝个人学习和研究禁止用于商业用途若由于读者或粉丝自身原因用于商业用途所导致的法律问题与本博客及博主无关请谨慎使用。。。
2、相关方案推荐
我已有的PCIE方案
我的主页有PCIE通信专栏该专栏基于XDMA的轮询模式实现与QT上位机的数据交互既有基于RIFFA实现的PCIE方案也有基于XDMA实现的PCIE方案既有简单的数据交互、测速也有应用级别的图像采集传输以下是专栏地址 点击直接前往 此外我的主页有中断模式的PCIE通信专栏该专栏基于XDMA的中断模式实现与QT上位机的数据交互以下是专栏地址 点击直接前往 此外还有基于RIFFA架构的PCIE通信专栏以下是专栏地址 点击直接前往
我这里已有的以太网方案
目前我这里有大量UDP协议的工程源码包括UDP数据回环视频传输AD采集传输等也有TCP协议的工程还有RDMA的NIC 10G 25G 100G网卡工程源码对网络通信有需求的兄弟可以去看看 直接点击前往 其中千兆TCP协议的工程博客如下 直接点击前往
本博已有的FPGA图像缩放方案
我的主页目前有FPGA图像缩放专栏改专栏收录了我目前手里已有的FPGA图像缩放方案从实现方式分类有基于HSL实现的图像缩放、基于纯verilog代码实现的图像缩放从应用上分为单路视频图像缩放、多路视频图像缩放、多路视频图像缩放拼接从输入视频分类可分为OV5640摄像头视频缩放、SDI视频缩放、MIPI视频缩放等等以下是专栏地址 点击直接前往
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、工程详细设计方案
工程设计原理框图
工程设计原理框图如下
电脑端视频
输入源为电脑端实时视频也就是电脑桌面的实时图像分辨率为1920x108060Hz电脑端的分辨率需要设置为1920x108060Hz如下
PCIE视频采集QT上位机
仅提供Win10版本的QT上位机位置如下 以Win10版本为例源码位置如下 以Win10版本下可以点击已经编译好的QT软件直接运行位置如下 QT上位机运行效果如下
XDMA配置及使用
根据Xilinx官方手册XDMA框图如下 由图可知XDMA封装了Integrated Block for PCI Express IP不仅完成了事务层的组包解包还添加了完整的 DMA 引擎 XDMA 一般情况下使用AXI4 接口AXI4 接口可以加入到系统总线互联适用于大数据量异步传输而且通常情况下使用 XDMA 都会使用到 BRAM 或 DDR 内存AXI4-Stream 接口适用于低延迟数据流传输。XDMA 允许在主机内存和 DMA 子系统之间移动数据。它通过对包含有关要传输的数据的源、目标和数量的信息的“描述符”进行操作来实现此目的。这些直接内存传输既可以用于主机到卡Host to CardH2C的传输也可以用与卡到主机Card to HostC2H的传输。可以将 DMA 配置为由所有通道共享一个 AXI4 Master 接口或者为每个启用的通道提供一个 AXI4-Stream 接口。内存传输是基于每个通道的描述符链接列表指定的DMA 从主机内存和进程中获取这些链接列表。诸如描述符完成和错误之类的事件通过中断来发出信号。XDMA 还提供多达 16 条用户中断线这些中断线会向主机生成中断。本设计需要配置为中断模式如下图 XDMA详情参考《AXI Bridge for PCI Express Gen3 Subsystem Product GuidePG194》XDMA在Block Design中如下
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帧图像的缓存本设计只用到了2路FDMA控制器其中一路只用到了读数据功能用作将PCIE传来的视频从DDR3中读出另一路FDMA用到了读写功能作用是将图像缩放后的视频缓存一下以优化视频时序第一路FDMA控制器IP配置如下 FDMA图像缓存架构在Block Design中如下
纯Verilog图像缩放模块详解
本设计图像缩放模块使用纯Verilog方案功能框图如下由跨时钟FIFO、插值RAM阵列构成跨时钟FIFO的目的是解决跨时钟域的问题比如从低分辨率视频放大到高分辨率视频时像素时钟必然需要变大这是就需要异步FIFO了插值算法和RAM阵列具体负责图像缩放算法层面的实现 插值算法和RAM阵列以ram和fifo为核心进行数据缓存和插值实现设计架构如下 图像缩放模块代码架构如下模块的例化请参考工程源码的顶层代码 图像缩放模块FIFO的选择可以调用工程对应的vivado工具自带的FIFO IP核也可以使用纯verilog实现的FIFO可通过接口参数选择图像缩放模块顶层接口如下
module helai_video_scale #(//---------------------------Parameters----------------------------------------parameter FIFO_TYPE xilinx, // xilinx for xilinx-fifo ; verilog for verilog-fifoparameter DATA_WIDTH 8 , //Width of input/output dataparameter CHANNELS 1 , //Number of channels of DATA_WIDTH, for color imagesparameter INPUT_X_RES_WIDTH 11 //Widths of input/output resolution control signals
)(input i_reset_n , // 输入--低电平复位信号input [INPUT_X_RES_WIDTH-1:0] i_src_video_width , // 输入视频--即缩放前视频的宽度input [INPUT_X_RES_WIDTH-1:0] i_src_video_height, // 输入视频--即缩放前视频的高度input [INPUT_X_RES_WIDTH-1:0] i_des_video_width , // 输出视频--即缩后前视频的宽度input [INPUT_X_RES_WIDTH-1:0] i_des_video_height, // 输出视频--即缩后前视频的高度input i_src_video_pclk , // 输入视频--即缩前视频的像素时钟input i_src_video_vs , // 输入视频--即缩前视频的场同步信号,必须为高电平有效input i_src_video_de , // 输入视频--即缩前视频的数据有效信号,必须为高电平有效input [DATA_WIDTH*CHANNELS-1:0] i_src_video_pixel , // 输入视频--即缩前视频的像素数据input i_des_video_pclk , // 输出视频--即缩后视频的像素时钟,一般为写入DDR缓存的时钟output o_des_video_vs , // 输出视频--即缩后视频的场同步信号,高电平有效output o_des_video_de , // 输出视频--即缩后视频的数据有效信号,高电平有效output [DATA_WIDTH*CHANNELS-1:0] o_des_video_pixel // 输出视频--即缩后视频的像素数据
);FIFO_TYPE选择原则如下 1总体原则选择xilinx好处大于选择verilog 2当你的FPGA逻辑资源不足时请选xilinx 3当你图像缩放的视频分辨率较大时请选xilinx 4当你的FPGA没有FIFO IP或者FIFO IP快用完了请选verilog 5当你向自学一下异步FIFO时请选verilog 6不同FPGA型号对应的工程FIFO_TYPE参数不一样但选择原则一样具体参考代码
2种插值算法的整合与选择 本设计将常用的双线性插值和邻域插值算法融合为一个代码中通过输入参数选择某一种算法 具体选择参数如下
input wire i_scaler_type //0--bilinear;1--neighbor通过输入i_scaler_type 的值即可选择 输入0选择双线性插值算法 输入1选择邻域插值算法 代码里的配置如下
纯Verilog图像缩放模块使用
图像缩放模块使用非常简单顶层代码里设置了四个参数举例如下 当然需要修改的不仅仅这一个地方FDMA的配置也需要相应修改详情请参考代码但我想要证明的是图像缩放模块使用非常简单你都不需要知道它内部具体怎么实现的上手就能用
UDP视频组包发送
UDP视频组包发送实现视频数据的组包并通过UDP协议栈发送出去视频数据发送必须与QT上位机的接受程序一致上位机定义的UDP帧格式包括帧头个UDP数据QT上位机接收代码数据帧头定义如下 FPGA端的UDP数据组包代码必须与上图的数据帧格式对应否则QT无法解析代码中定义了数据组包状态机以及数据帧如下 另外由于UDP发送是64位数据位宽而图像像素数据是24bit位宽所以必须将UDP数据重新组合以保证像素数据的对齐这部分是整个工程的难点也是所有FPGA做UDP数据传输的难点UDP视频组包发送代码架构如下
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组代码架构如下
Tri Mode Ethernet MAC IP核
Tri Mode Ethernet MAC主要是为了适配PHY芯片因为后者的输入接口是GMII而Tri Mode Ethernet MAC的输入接口是AXIS输出接口是GMIITri Mode Ethernet MAC配置如下 Tri Mode Ethernet MAC IP核还需要复位和配置逻辑才能工作整体代码架构如下 此外Tri Mode Ethernet MAC IP核在配合不同型号的PHY芯片使用时用法也不一样给开发者带来了很大麻烦基于此本博主提供Tri Mode Ethernet MAC针对B50610和RTL8211F的使用教程和移植教程这两款PHY芯片在延时模式下的RGMII时序具有代表性所以看了本博主提供的Tri Mode Ethernet MAC IP核移植修改教程再去做其他PHY芯片的工程时应该是可以得心应手的
PHY芯片
本工程的PHY芯片使用了B50610和RTL8211F为什么选择这两款芯片呢一是因为这两款芯片成熟稳定市场占有率较高二是因为这两款芯片在延时模式下的RGMII时序具有代表性做过本博主提供的工程项目再去做其他PHY芯片的工程时应该是可以得心应手的为了照顾到做硬件的开发者本博主还提供了B50610和RTL8211F的参考原理图
IP地址、端口号的修改
UDP协议栈留出了IP地址、端口号的修改端口供用户自由修改位置在顶层模块如下
UDP视频接收显示QT上位机
仅提供Win10版本的QT上位机位置如下 以Win10版本为例源码位置如下 以Win10版本下可以点击已经编译好的QT软件直接运行位置如下 QT上位机运行效果如下 我们的QT目前仅支持1280x720分辨率的视频抓图显示但同时预留了1080P接口对QT开发感兴趣的朋友可以尝试修改代码以适应1080P因为QT在这里只是验证工具不是本工程的重点所以不再过多赘述
Windows版本XDMA驱动安装
提供Windows和Linux系统驱动本章节介绍Windows下XDMA驱动安装 Windows下驱动安装步骤如下友情提示Windows下驱动秩序安装一次即可
第一步使系统禁用签名并进入测试模式方法如下 也可百度其他方法实现上述目的完成后电脑屏幕右下角应有如下显示 第二步定位到驱动目录下提供Windows7和Windows10两个版本驱动由于我的电脑选择Windows10如下 单击鼠标右键安装即可如下 第三步下载FPGA工程bit到FPGA开发板然后重启电脑打开我的电脑–管理–设备管理器应看到如下设备
Linux版本XDMA驱动安装
提供Windows和Linux系统驱动本章节介绍Linux下XDMA驱动安装 Linux下驱动安装步骤如下友情提示Linux下每次下载FPGA bit后都需要重启电脑才能安装驱动
进入到Linux驱动目录下一次执行以下两条指令即可安装如下 • 驱动编译终端指令make -j8 •驱动安装终端指令sudo insmod xdma.ko
工程源码架构
提供3套工程源码以工程源码1为例工程Block Design设计如下 提供3套工程源码以工程源码1为例综合后的工程源码架构如下
Vivado工程注意事项
Vivado工程需要配合修改过的Xilinx官方XDMA驱动和QT上位机一起使用所以Vivado工程必须做到以下几点 1XDMA中的AXI4_Lite基地址必须设为0x44A00000这是XDMA驱动修改的规定感兴趣的可以去看驱动源码配置如下 2MIG的DDR基地址必须从0x00000000开始这是QT上位机代码的规定感兴趣的可以去看QT源码配置如下
PCIE上板调试注意事项
1必须先安装本博提供的XDMA驱动详情请参考第4章节的《XDMA驱动及其安装》Windows版本驱动只需安装一次 2Windows版本下载FPGA工程bit后需要重启电脑电脑才能识别到XDMA驱动程序固化后也需要重启电脑Linux版本每次载FPGA工程bit后都需要重启电脑都需要安装XDMA驱动 3FPGA板卡插在主机上后一般不需要额外供电如果你的板子元器件较多功耗较大则需要额外供电详情咨询开发板厂家当然找我买板子的客户可以直接问我 4PCIE调试需要电脑主机但笔记本电脑理论上也可以外接出来PCIE详情百度自行搜索一下电脑主机PCIE插槽不方便操作时可以使用延长线接出来某宝有卖
5、vivado工程源码1详解–Artix7-100TPCIE–FPGA–B50610版本
开发板FPGA型号Xilinx–Artix7–xc7a100tfgg484-2 FPGA开发环境Vivado2019.1 QT开发环境VS2015 Qt 5.12.10 输入电脑主机实时视频分辨率1920x108060Hz 输出UDP网络视频分辨率1280x72060Hz PC端到FDMA传输方案PCIE传输 图像缩放方案自研纯Verilog图像缩放 图像缩放实例1920x1080缩放到1280x720 图像缓存方案FDMA图像缓存DDR3颗粒 PCIE底层方案Xilinx XDMA PCIE详情PCIE2.0版本X15GT/s单lane线速率 UDP协议栈千兆UDP协议栈 MAC层方案Xilinx官方Tri Mode Ethernet MAC IP核方案 以太网物理层方案PHY芯片–B50610方案延时模式RGMII接口 实现功能电脑端视频通过PCIE到FPGA端图像缩放转转UDP网络视频输出 工程作用此工程目的是让读者掌握电脑端视频通过PCIE到FPGA端图像缩放转转UDP网络视频输出的设计能力以便能够移植和设计自己的项目 工程Block Design和工程代码架构请参考第4章节的《工程源码架构》小节内容 工程的资源消耗和功耗如下
6、vivado工程源码2详解–Kintex7-35TPCIE–FPGA–B50610版本
开发板FPGA型号Xilinx–Kintex7–35T–xc7k325tffg676-2 FPGA开发环境Vivado2019.1 QT开发环境VS2015 Qt 5.12.10 输入电脑主机实时视频分辨率1920x108060Hz 输出UDP网络视频分辨率1280x72060Hz PC端到FDMA传输方案PCIE传输 图像缩放方案自研纯Verilog图像缩放 图像缩放实例1920x1080缩放到1280x720 图像缓存方案FDMA图像缓存DDR3颗粒 PCIE底层方案Xilinx XDMA PCIE详情PCIE2.0版本X45GT/s单lane线速率 UDP协议栈千兆UDP协议栈 MAC层方案Xilinx官方Tri Mode Ethernet MAC IP核方案 以太网物理层方案PHY芯片–B50610方案延时模式RGMII接口 实现功能电脑端视频通过PCIE到FPGA端图像缩放转转UDP网络视频输出 工程作用此工程目的是让读者掌握电脑端视频通过PCIE到FPGA端图像缩放转转UDP网络视频输出的设计能力以便能够移植和设计自己的项目 工程Block Design和工程代码架构请参考第4章节的《工程源码架构》小节内容 工程的资源消耗和功耗如下
7、vivado工程源码3详解–Kintex7-35TPCIE–FPGA–RTL8211F版本
开发板FPGA型号Xilinx–Kintex7–35T–xc7k325tffg900-2 FPGA开发环境Vivado2019.1 QT开发环境VS2015 Qt 5.12.10 输入电脑主机实时视频分辨率1920x108060Hz 输出UDP网络视频分辨率1280x72060Hz PC端到FDMA传输方案PCIE传输 图像缩放方案自研纯Verilog图像缩放 图像缩放实例1920x1080缩放到1280x720 图像缓存方案FDMA图像缓存DDR3颗粒 PCIE底层方案Xilinx XDMA PCIE详情PCIE2.0版本X85GT/s单lane线速率 UDP协议栈千兆UDP协议栈 MAC层方案Xilinx官方Tri Mode Ethernet MAC IP核方案 以太网物理层方案PHY芯片–RTL8211F方案延时模式RGMII接口 实现功能电脑端视频通过PCIE到FPGA端图像缩放转转UDP网络视频输出 工程作用此工程目的是让读者掌握电脑端视频通过PCIE到FPGA端图像缩放转转UDP网络视频输出的设计能力以便能够移植和设计自己的项目 工程Block Design和工程代码架构请参考第4章节的《工程源码架构》小节内容 工程的资源消耗和功耗如下
8、工程移植说明
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软核
9、上板调试验证
准备工作
需要准备的器材如下 FPGA开发板没有开发板可以找本博提供 带PCIE卡槽的电脑主机 网线 我的开发板了连接如下
电脑端视频通过PCIE到FPGA端图像缩放转UDP网络视频输出效果演示
电脑端视频通过PCIE到FPGA端图像缩放转UDP网络视频输出效果如下 XDMA-FPGA-UDP-PHY 10、福利工程代码的获取
福利工程代码的获取 代码太大无法邮箱发送以某度网盘链接方式发送 资料获取方式私或者文章末尾的V名片。 网盘资料如下 此外有很多朋友给本博主提了很多意见和建议希望能丰富服务内容和选项因为不同朋友的需求不一样所以本博主还提供以下服务