基于XDMA 中断模式的 PCIE 上位机与FPGA数据交互架构 提供工程源码和QT上位机源码

news2024/11/17 13:36:19

目录

  • 1、前言
  • 2、我已有的PCIE方案
  • 3、PCIE理论
  • 4、总体设计思路和方案
    • 图像产生、发送、缓存
    • 数据处理
    • XDMA简介
    • XDMA中断模式
    • 图像读取、输出、显示
    • QT上位机及其源码
  • 5、vivado工程详解
  • 6、上板调试验证
  • 7、福利:工程代码的获取

1、前言

PCIE(PCI Express)采用了目前业内流行的点对点串行连接,比起 PCI 以及更早期的计算机总线的共享并行架构,每个设备都有自己的专用连接,不需要向整个总线请求带宽,而且可以把数据传输率提高到一个很高的频率,达到 PCI 所不能提供的高带宽,是目前各行业高速接口的优先选择方向,具有很高的实用价值和学习价值;

本设计提供一种基于XDMA 中断模式的 PCIE 上位机与FPGA数据交互架构;该机构的主要作用如下:图中的箭头代表数据流向,数字代表数据流向的步骤;
在这里插入图片描述
QT上位机将电脑端的数据通过PCIE总线发送给FPGA开发板,FPGA侧的XDMA将PCIE发来的数据缓存至DDR3,缓存完成后,XDMA产生中断信号,该信号通过AXI-GPIO发送给FDMA,通知FDMA去DDR3中读取数据,FDMA得到中断通知后,读取DDR3中的数据给FPGA逻辑做数据处理,数据处理完成后再通过FDMA将处理完成的数据写回到DDR3中缓存,XDMA再从DDR3中读取处理好的数据送入PCIE总线发送给电脑端,电脑端QT软件再接收处理好的数据;

本设计使用Xilinx官方的XDMA方案搭建基于Xilinx系列FPGA的PCIE通信平台,电脑端QT实时截取主机屏幕图片,QT软件会将图片发送给PCIE总线,XDMA驱动将PCIE总线上的数据发送出去;FPGA开发板的 XDMA IP 核将接收到的图片数据缓存至 DDR3,并以中断方式通知用户将DDR3中缓存的图片数据读出, FDMA控制器收到 XDMA 发来的中断信号后将图片从 DDR3 中读出,然后做数据处理,出于简单考虑,这里的数据处理我们仅做数据回环,当然你可以做更加负责的处理,比如图像缩放、图像增强,图像识别等,处理完成后,FDMA再将数据写入DDR3中缓存,XDMA读取处理完毕后的数据再通过PCIE发送给电脑上位机,QT最后将处理完成后的图像显示出来;

本设计的关键在于我们编写了一个 xdma_inter.v 的XDMA中断模块。该模块用来配合驱动处理中断,xdma_inter.v 提供了AXI-LITE 接口,上位机通过访问 user 空间地址读写 xdma_inter.v 的寄存器。该 模块 在 user_irq_req_i 输入的中断位,寄存中断位号,并且输出给 XDMA IP ,当上位机的驱动响应中断的时候,在中断里面写 xdma_inter.v 的寄存器,清除已经处理的中断。

该方案只适用于Xilinx系列FPGA,一并提供了XDMA的安装驱动和QT上位机源代码,省去了使用XDMA繁琐的驱动寻找和上位机软件开发的不知所措,并以搭建好vivado工程,省去了不知道如何使用XDMA的尴尬,使得PCIE的使用变得简单易上手,而不用关心其复杂的PCIE协议;由于我的开发板只支持PCIE X8,所以提供的代码是PCIE X8架构,若需要PCIE X1、 X2、 X8、 X16、 X32的朋友,可自行修改本工程,也可关注我,我会实时发布新的工程。
本工程实现进阶应用的PCIE通信,和QT上位机之间进行图片传输试验。
在这里插入图片描述
本文详细描述了基于XDMA搭建PCIE通信平台的设计方案,工程代码可综合编译上板调试,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做项目开发,可应用于医疗、军工等行业的高速接口领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;

2、我已有的PCIE方案

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

3、PCIE理论

这部分可自行百度或csdn或知乎学习理论知识,其实用了XDMA,已经不太需要直到PCIE复杂的协议和理论了。。。

4、总体设计思路和方案

总体设计思路和方案如下:图中的箭头代表数据流向,数字代表数据流向的步骤;
在这里插入图片描述

图像产生、发送、缓存

QT上位机实时截取电脑桌面的屏幕图片,我的电脑分辨率为1920X1080,QT软件会将图片发送给PCIE总线,XDMA驱动将PCIE总线上的数据发送出去;FPGA开发板的 XDMA IP 核将接收到的图片数据缓存至 DDR3,并以中断方式通知用户将DDR3中缓存的图片数据读出;这里的中断采用AXI-GPIO传递;

数据处理

出于简单考虑,这里的数据处理我们仅做数据回环,当然你可以做更加负责的处理,比如图像缩放、图像增强,图像识别等;代码如下:
在这里插入图片描述

XDMA简介

Xilinx 提供的 DMASubsystem for PCIExpressIP 是一个高性能,可配置的适用于 PCIE2.0,PCIE3.0 的 SG 模式 DMA,提供用户可选择的 AXI4 接口或者 AXI4-Stream 接口。一般情况下配置成 AXI4 接口可以加入到系统总线互联,适用于大数据量异步传输,通常情况都会使用到 DDR,AXI4-Stream 接口适用于低延迟数据流传输。
XDMA 是 SGDMA,并非 Block DMA,SG 模式下,主机会把要传输的数据组成链表的形式,然后将链表首地址通过 BAR 传送给 XDMA,XDMA 会根据链表结构首地址依次完成链表所指定的传输任务,XDMA框图如下:
在这里插入图片描述
AXI4、AXI4-Stream,必须选择一个,用于数据传输AXI4-Lite Master 可选,用于实现 PCIE BAR 地址到 AXI4-lite 寄存器地址的映射,可以用于读写用户逻辑寄存器。
AXI4-Lite Slave 可选,用来将 XDMA 内部寄存器开放给用户逻辑,用户逻辑可以通过此接口访问 XDMA 内部寄存器,不会映射到 BAR。
AXI4 Bypass 接口,可选,用来实现 PCIE 直通用户逻辑访问,可用于低延迟数据传输。

XDMA中断模式

本设计的关键在于我们编写了一个 xdma_inter.v 的XDMA中断模块。该模块用来配合驱动处理中断,xdma_inter.v 提供了AXI-LITE 接口,上位机通过访问 user 空间地址读写 xdma_inter.v 的寄存器。该 模块 在 user_irq_req_i 输入的中断位,寄存中断位号,并且输出给 XDMA IP ,当上位机的驱动响应中断的时候,在中断里面写 xdma_inter.v 的寄存器,清除已经处理的中断。
另外本方案中通过 AXI-BRAM 来演示用户 user 空间的读写访问测试。

图像读取、输出、显示

FDMA控制器收到 XDMA 发来的中断信号后将图片从 DDR3 中读出,然后将图像信息放入 VGA 时序的数据总线上形成 VGA 时序的视频流,在将视频流送入 HDMI 发送模块将 RGB 数据转换为 HDMI 差分数据通过 HDMI 线缆输出到显示器;VGA时序分辨率为1920X1080@60Hz;关于FDMA的详细设计说明,请参考我之前的文章:点击直接前往

QT上位机及其源码

QT上位机本方案使用 VS2015 + Qt 5.12.10 完成上位机开发软件环境搭建,QT程序调用XDMA官方API采用中断模式实现与FPGA的数据交互,本例程实现的是读写测速,提供QT上位机软件及其源码,路径如下:
在这里插入图片描述
QT源码部分截图如下:
在这里插入图片描述

5、vivado工程详解

开发板FPGA型号:Xilinx–xc7k325tffg900-2;
开发环境:Vivado2022.2;
输入:测试图片,QT上位机发送,分辨率为1920X1080;
输出:HDMI,分辨率为1920X1080@60Hz;
应用:QT上位机发送图像,FPGA接收显示试验;
工程BD如下:
在这里插入图片描述
XDMA需要设计中断数量,配置如下:
在这里插入图片描述
同时,XDMA中断模块的中断数量也设置为4,如下:
在这里插入图片描述
综合后的代码架构如下:
在这里插入图片描述
综合编译完成后的FPGA资源消耗和功耗预估如下:
在这里插入图片描述

6、上板调试验证

开启上位机测程序进行 PCIe 接收视频测试,打开QT软件,实验结果如下:
在这里插入图片描述

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

福利:工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料获取方式:私,或者文章末尾的V名片。
网盘资料如下:
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/705739.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SAP从入门到放弃系列之可用性检查-订单物料可用性检查-Part2

文章目录 一、概述二、物料可用性检查如何锁定库存2.1实现思路2.2系统设置关键点 三、系统测试数据3.1、勾选含预留选项的测试效果3.2、含相关预留3.2.1含相关预留-排除3.2.2含相关预留-仅可领料3.2.3含相关预留-全部 四、最后总结: 一、概述 物料可用性检查最终的…

【Linux】shell中快速遍历所有文件下匹配的内容

目录 1.举例 2.find命令 2.1. find命令作用 2.2. find命令选项基本格式 2.3. 常用选项 2.4. 常用动作 2.5. 根据文件名进行匹配 2.5.2 在/home目录下查找以.txt结尾的文件名 2.5.3 同上,但忽略大小写 2.5.4 查找 /home/ 下所有以.txt或.pdf结尾的文件…

五、卷积神经网络

文章目录 前言一、图像卷积1.1 不变性1.2 互相关运算1.3 卷积层1.4 互相关和卷积1.5 特征映射和感受野 二、填充和步幅2.1 填充2.2 步幅 三、多输入多输出通道3.1 多输入通道3.2 多输出通道3.3 11卷积层 四、汇聚层/池化层4.1 最大汇聚层与平均汇聚层4.2 填充和步幅4.3 多个通道…

Linux下安装/使用mariadb

文章目录 第一章:mariadb在rhel7上的使用第二章:mariadb在rhel6上的安装(1)编译源码包(比较慢)(2)二进制包安装(比较推荐) 第一章:mariadb在rhel7…

【Android】Android虚拟机

虚拟机 Android的虚拟机主要有两种:Dalvik 虚拟机和 ART(Android Runtime)虚拟机。 Dalvik 虚拟机 Dalvik 虚拟机是 Android 早期使用的虚拟机,它基于寄存器架构。从Android 2.2版本开始,支持JIT即时编译&#xff08…

计算机系统 基础知识点汇总,超全!!!

计算基础知识点合集来啦!!! 更多知识请关注我!!! 近期内容: 第二章 数据结构与算法 知识点总结第三章 程序设计基础知识点整理第四章 软件工程基础知识点汇总第五章 数据库基础知识pyhon基础知…

JVM 调优设置

堆大小设置 JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;系统的可用物理内存限制。32位系统下,一般限制在1.5G~2G;64为操作系统对内存无…

Python web框架开发 - WSGI协议

目录 浏览器请求动态页面过程 多进程web服务端代码 - 面向过程 封装对象分析 增加识别动态资源请求的功能 为什么需要 WSGI协议 WSGI协议的介绍 定义WSGI接口 编写framwork支持WSGI协议,实现浏览器显示 hello world 本次开发的完整代码如下: 浏…

深度学习 / 数据处理:如何处理偏态数据

1 前言 当我们使用一个线性回归模型时,通常这个模型是在很大假设的前提下才有一个很好的结果: 1、假设预测因子和预测目标之间的关系是线性的2、数据不存在外在噪声:不存在一些极端的数据3、非共线性( collinearity)…

1分钟学会使用docker-compose部署 registry 以及可视化镜像

获取 docker-compose: curl -L https://github.com/docker/compose/releases/download/2.2.2/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose docekr-compose.yaml: version: 3.3services:registry-ui:image: joxit/docker-registry-ui:mainrestart: always…

appium如何连接多台设备

目录 前言: 1.我们拿两台设备来模拟操作下,使用:adb devices查看连接状况,获取到设备名称。 2.获取需要操作app的包名和页面名称(前提该设备已经打开了app) 3.设置初始配置信息 4.打开页面后操作元素&am…

嵌入式系统的不同方向及优化策略

当涉及到嵌入式系统开发时,可以根据具体的应用需求选择不同的方向进行优化。以下是一些常见的嵌入式系统方向及其特点: 单片机方向:这个方向主要针对使用单片机作为核心的嵌入式系统开发。单片机资源有限,适用于简单的控制任务&am…

基于Java的万年历(课设)

基于Java的万年历 资源链接:基于Java的万年历(课设) 文章目录 基于Java的万年历1 绪论2 需求分析3 概要设计3.1 类间组合框架3.2 布局结构示意3.3 对各个类的概述 4运行环境5 开发工具和编辑语言6 详细设计6.1 NiceCaelendar类6.2 NiceFram…

分享一个优秀的动态数据源开源库-dynamic-datasource-spring-boot-starter

分享一个优秀的动态数据源开源库-dynamic-datasource-spring-boot-starter 1.1 前言1.2 动态数据源开源库简介1.3 特性1.4 用法示例1.4.1 添加依赖1.4.2 配置数据源1.4.3 使用 DS 注解切换数据源 1.5 最佳实践 1.1 前言 在我们的Java后端研发工作中, 有时候由于业务的快速迭代…

Unity 热力图效果实现 笔记

Unity 热力图效果实现 笔记 参考文献连接: 1、人体热力图shader graph实现(URP) 超链接: https://www.youtube.com/watch?vKlMON4Dzq_0&t51s shader forge 翻译通用管线下 连接点实现方案: 2、碰撞热力图实现…

青岛大学_王卓老师【数据结构与算法】Week03_08_线性表的链式表示和实现8_学习笔记

本文是个人学习笔记,素材来自青岛大学王卓老师的教学视频。 一方面用于学习记录与分享,另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。如有侵权,请留言作删文处理。 课程视频链接: 数据结构与算法基础–第…

Python打包工具 Pyinstaller使用教程(将.py以及Python解释器和相关库打包可执行文件)

文章目录 pyinstaller历史背景工作原理使用方法简介使用方法详解(请仔细阅读help文档中文翻译)help文档help文档中文翻译 简单使用示例1. 编译打包2. 拷贝到目标系统3. 运行(遇到问题) 如何使用xxx.spec文件重新编译配置项示例配置…

千字提炼商业智能BI精髓,言简意赅

商业智能BI的发展和数据的增长有很强的关联性,而当前人工智能、大数据、云计算、物联网、互联网等技术和应用都对数据的增长有促进作用,所以商业智能BI也就伴随着数据的增长,在各行各业的企业中开始发挥作用。 商业智能(Business…

uniapp 移动端 后台返回数据流 查看PDF

使用步骤&#xff1a; 1.官网下载地址pdf.js 2.在项目的根目录新建hybrid文件夹&#xff0c;将下载的pdf.js压缩包解压后&#xff0c;复制到hybrid下的html文件夹中 3.在page文件夹下新建一个filePreview.vue页面&#xff0c;页面代码如下&#xff1a; <template><…

C#核心知识回顾——5.结构体和类区别、抽象类和接口、核心知识图解

1.结构体和类区别 结构体和类最大的区别是在存储空间上的&#xff0c;因为结构体是值&#xff0c;类是引用&#xff0c;因此他们的存储位置一个在栈上&#xff0c;一个在堆上。 结构体和类在使用上很类似&#xff0c;结构体甚至可以用面向对象的思想来形容一类对象。 结…