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

news2024/11/14 2:09:17

目录

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

1、前言

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

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

本设计使用Xilinx官方的XDMA方案搭建基于Xilinx系列FPGA的PCIE通信平台,电脑端QT实时截取主机屏幕图片,QT软件会将图片发送给PCIE总线,XDMA驱动将PCIE总线上的数据发送出去;FPGA开发板的 XDMA IP 核将接收到的图片数据缓存至 DDR4,并以中断方式通知用户将DDR4中缓存的图片数据读出, FDMA控制器收到 XDMA 发来的中断信号后将图片从 DDR4 中读出,然后做数据处理,出于简单考虑,这里的数据处理我们仅做数据回环,当然你可以做更加负责的处理,比如图像缩放、图像增强,图像识别等,处理完成后,FDMA再将数据写入DDR4中缓存,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 核将接收到的图片数据缓存至 DDR4,并以中断方式通知用户将DDR4中缓存的图片数据读出;这里的中断采用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–xcku060-ffva1156-2-i;
开发环境:Vivado2022.2;
输入:测试图片,QT上位机发送,分辨率为1920X1080;
输出:HDMI,分辨率为1920X1080@60Hz;
应用:QT上位机发送图像,FPGA接收显示试验;
工程BD如下:
在这里插入图片描述
XDMA需要设计中断数量,配置如下:
在这里插入图片描述
在这里插入图片描述
同时,XDMA中断模块的中断数量也设置为4,如下:
在这里插入图片描述
综合后的代码架构如下:
在这里插入图片描述
综合编译完成后的FPGA资源消耗和功耗预估如下:
在这里插入图片描述

6、上板调试验证

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

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

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

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

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

相关文章

权威认可丨九州未来获科学技术成果登记证书

近日,由九州未来自主研发的工业项目——“5G”边缘计算云平台的产品研究及其在工业视觉AI设计中的应用,经评审、公示获准登记,取得浙江省科技厅颁发的科学技术成果登记证书。 伴随我国在新基建领域不断推进深入,5G以其特有的大带宽…

Vue教程(三):计算属性

1、姓名案例—插值语法版 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>姓名案例-插值语法版</title><script type"text/javascript" src"../js/vue.js"><…

IDEA中文UT方法执行报错问题、wps默认保存格式

wps默认保存格式、IDEA中文UT方法执行报错问题 背景 1、wps修改文件后&#xff0c;编码格式从UTF-8-bom变成UTF-8&#xff08;notepad可以查看&#xff09;&#xff1b; 2、IDEA中文UT执行报错&#xff1a; 解决方案 1、语言设置中不要勾选 “Beta版。。。。” 2、cmd中执…

Vue-cli3项目之Vue.config.js配置文件—取代vue-cli2中build与config

我们在做vue项目的时候&#xff0c;在根目录中肯定都看到过一个vue.config.js文件&#xff0c;那么这个文件在整个项目中到底有什么作用呢&#xff1f;本文就来说说使用Vue-cli3 创建的vue项目中&#xff0c;Vue.config.js文件的配置问题。 说点题外话&#xff0c;先来看看vue-…

隐藏文件夹怎么显示?3种方法轻松解决!

“我有些文件不知道为什么就看不到了&#xff0c;不知道是因为我不小心将它们隐藏了还是删除了。有家人知道隐藏文件怎么显示的吗&#xff1f;非常着急&#xff0c;感谢回答&#xff01;” 为了保护我们的隐私&#xff0c;有些重要的文件我们不想将其被人看到&#xff0c;一个…

2017年全国硕士研究生入学统一考试管理类专业学位联考写作试题——解析版

2017年1月真题 四、写作&#xff1a;第56~57小题&#xff0c;共65 分。其中论证有效性分析30 分&#xff0c;论说文35分。 56、论证有效性分析&#xff1a; 分析下述论证中存在的缺陷和漏洞&#xff0c;选择若干要点&#xff0c;写一篇600字左右的文章&#xff0c;对论证的有…

【启扬方案】嵌入式核心板在全自动生化仪设备中的应用

随着科技的不断进步和医疗技术的发展&#xff0c;全自动生化分析仪作为体外诊断领域的重要工具之一&#xff0c;逐渐受到广泛的关注。全自动生化分析仪作为一种能够实时监测和分析体液中生化指标的设备&#xff0c;在临床医学应用中的用途广泛&#xff0c;可用于检测血液中的血…

Nim游戏博弈论

【模板】nim 游戏 题目描述 https://www.luogu.com.cn/problem/P2197 甲&#xff0c;乙两个人玩 nim 取石子游戏。 nim 游戏的规则是这样的&#xff1a;地上有 n n n 堆石子&#xff08;每堆石子数量小于 1 0 4 10^4 104&#xff09;&#xff0c;每人每次可从任意一堆石子…

管理后台低代码PaaS平台源码:点击鼠标,就能编程

低代码平台源码10大核心功能:1建模引擎 、2 移动引擎 、3,流程引擎 5.报表引擎、6安全引擎、 7 API引擎 、8.应用集成引擎、 9.代码引擎、 10.公式引擎。 一、低代码开发特色 1.低代码开发&#xff1a;管理后台提供了一系列易于使用的低代码开发工具&#xff0c;使企业可以快速…

CSPM难度大吗?对比pmp怎么样?

CSPM证书是刚出来的&#xff0c;难度不会很大&#xff0c;大家都知道 PMP 证书是从国外引进的&#xff0c;近几年很热门&#xff0c;持证人数已经高达 90 余万了&#xff0c;但是目前我们和老美关系大家有目共睹&#xff0c;一直推国际标准和美国标准感觉有点奇怪。 现在新出台…

React Flow

// 创建项目 npm create vitelatest my-react-flow-app -- --template react // 安装插件 npm install reactflow // 运行项目 npm run dev 1、App.jsx import { useCallback, useState } from react; import ReactFlow, {addEdge,ReactFlowProvider,MiniMap,Controls,useNode…

适用于虚拟环境的免费企业备份软件

多年来&#xff0c;许多行业严重依赖物理服务器提供计算资源——你可以想象到巨大的服务器机房和笨重的服务器的场景。 然而&#xff0c;随着业务快速增长&#xff0c;许多组织发现物理服务器已经无法有效利用计算资源。因此&#xff0c;为了节省成本&#xff0c;引入了虚拟服…

STL中 vector常见函数用法和迭代器失效的解决方案【C++】

文章目录 size && capacityreserveresizeempty迭代器begin和end push_back &&pop_backinsert && erasefindswap[ ]范围for遍历vector迭代器失效问题 size && capacity #include <iostream> #include <vector> using namespace st…

一文搞懂如何在群晖NAS中使用cpolar实现【内网穿透】

文章目录 1.1前言2.如何在群晖nas中使用cpolar内网穿透2.1第一步——进入套件中心2.2第二步——管理cpolar套件2.3第三步——建立专属的数据隧道2.4 第四步——查看本地数据隧道状态是否激活 3.结语 1.1前言 今天&#xff0c;我们来为大家介绍&#xff0c;如何在群晖系统中&am…

设计模式-命令模式在Java中的使用示例-桌面程序自定义功能键

场景 欲开发一个桌面版应用程序&#xff0c;该应用程序为用户提供了一系列自定义功能键&#xff0c;用户可以通过这些功能键来实现一些快捷操作。 用户可以将功能键和相应功能绑定在一起&#xff0c;还可以根据需要来修改功能键的设置&#xff0c;而且系统在未来可能还会增加…

做外贸工厂跳过我联系了客户

在我十多年外贸创业历程里&#xff0c;遇过不少想跳过我直接和客户联系的供应商。 譬如给客户发邮件&#xff0c;悄咪咪将我从抄送里删掉。又或者偷偷将名片塞在货柜里&#xff0c;期望客户一开箱就能看到。 然而这么多年过去&#xff0c;一次让他们得逞的机会都没有。每一次…

C++多线程编程(第三章 案例1,使用互斥锁+ list模拟线程通信)

主线程和子线程进行list通信&#xff0c;要用到互斥锁&#xff0c;避免同时操作 1、封装线程基类XThread控制线程启动和停止&#xff1b; 2、模拟消息服务器线程&#xff0c;接收字符串消息&#xff0c;并模拟处理&#xff1b; 3、通过Unique_lock和mutex互斥方位list 消息队列…

【力扣每日一题】2023.7.28 并行课程3

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 题目给我们课程表以及每门课需要学习的时间&#xff0c;我们可以同时学任意数量的课程&#xff0c;但是学习的条件是先修课程都已经学完了…

【雕爷学编程】MicroPython动手做(02)——尝试搭建K210开发板的IDE环境6

#尝试搭建K210的Micropython开发环境&#xff08;Win10&#xff09; #实验程序之六&#xff1a;测试Microphone阵列算法 #尝试搭建K210的Micropython开发环境&#xff08;Win10&#xff09; #实验程序之六&#xff1a;测试Microphone阵列算法from Maix import MIC_ARRAY as mi…

MySQL运维:从全备sql文件中提取指定表的数据并恢复

目录 一、运行环境 二、需求说明 三、思路分析 五、具体方案 六、恢复表数据 一、运行环境 系统&#xff1a;CentOS7.3 数据库&#xff1a;MySQL 8.0.21 二、需求说明 线上有个表的数据被误操作了很多&#xff0c;无法通过bin-log进行具体的恢复。所以当前我们需要从全…