zynq基于XDMA实现PCIE X8视频采集HDMI输出 提供工程源码和QT上位机程序和技术支持

news2025/1/10 4:06:42

目录

  • 1、前言
  • 2、我已有的PCIE方案
  • 3、基于zynq架构的PCIE
  • 4、总体设计思路和方案
    • 视频输入通路
    • PCIE数据缓存通路
    • 视频输出通路
  • 5、vivado工程详解
  • 6、SDK 工程详解
  • 7、驱动安装
  • 8、QT上位机软件
  • 9、上板调试验证
  • 10、福利:工程代码的获取

1、前言

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

本设计使用Xilinx官方的XDMA方案搭建基于Xilinx系列FPGA的PCIE通信平台,该方案只适用于Xilinx系列FPGA,一并提供了XDMA的安装驱动和QT上位机源代码,省去了使用XDMA繁琐的驱动寻找和上位机软件开发的不知所措,并以搭建好vivado工程,省去了不知道如何使用XDMA的尴尬,使得PCIE的使用变得简单易上手,而不用关心其复杂的PCIE协议;由于我的开发板只支持PCIE X8,所以提供的代码是PCIE X8架构,若需要PCIE X1、 X2、 X8、 X16、 X32的朋友,可自行修改本工程,也可关注我,我会实时发布新的工程。
本工程实现基础的PCIE通信,和QT上位机之间进行测速试验。
在这里插入图片描述
本文详细描述了zynq基于XDMA搭建PCIE通信平台的设计方案,利用开发板自带的HDM输出接口,实现了PCIE视频采集卡的功能,电脑端QT上位机实时采集电脑桌面的图像,并通过PCIE接口将实时图像发送FPGA板卡,FPGA板卡通过XDMA接收PCIE传来的图像,并将图像写入DDR3中缓存,zynq配置VDMA从DDR3中读出图像,再通过AXIS to video out输出图像到显示器显示;与之前出的纯FPGA工程不同,本设计是基于zynq架构的PCIE工程;工程代码可综合编译上板调试,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做项目开发,可应用于医疗、军工等行业的高速接口领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;

2、我已有的PCIE方案

我的主页有PCIE通信专栏,既有基于RIFFA实现的PCIE方案,也有基于XDMA实现的PCIE方案;既有简单的数据交互、测速,也有应用级别的图像采集传输,既有基于纯FPGA的PCIE工程,也有基于zynq架构的PCIE工程,以下是专栏地址:
点击直接前往

3、基于zynq架构的PCIE

PCIE理论部分可自行百度或csdn或知乎学习理论知识,其实用了XDMA,已经不太需要直到PCIE复杂的协议和理论了。。。
这里重点讲讲基于zynq架构的PCIE设计方法;
我们知道,PCIE要与PC进行数据交互,必然需要用到FPGA外挂的DDR存储器作为“中介”;但zynq架构的FPGA有个特点,他的PL和PS侧都可以外挂DDR,那是否两边的DDR都能作为PCIE通信的“中介”呢?显然是鱼和熊掌不可得兼的;
先来看看zynq的HP总线,HP的最高位宽仅为64位,如下:
在这里插入图片描述
如果zynq给PL的参考时钟为150M,那么HP总带宽为150000000x64=9.6Gb;就算把参考时钟提高到惊人的200M,那么HP总带宽为200000000x64=12.8Gb;而XDMA的PCIE2.0单Line先速率为5Gb,PCIEX8的总先速率则为5x8=40Gb;很显然,使用PS侧DDR作为PCIE与PC通信的“中介”是不可能达到贷款需求的,再加之由于编码、协议等开销,可用带宽只能达到 80%,PS侧DDR更不可能了,所以只能选择PL侧DDR作为PCIE与PC通信的“中介”;
下面看看PL侧DDR为啥可以:
PL侧调用MIG,MIG的用户操作时钟为200M,AXI数据位宽为256位,所以理论带宽=200000000x256=51.2Gb;实际带宽=51.2x80%=40.96Gb;刚好满足PCIEX8 2.0的40Gb线速率;
这么详细的计算告诉你选择zynq的PL侧DDR的原因,够保姆级教学了吧。。。

4、总体设计思路和方案

总体设计思路和方案如下:
在这里插入图片描述

视频输入通路

台式电脑的主板有PCIE插槽,FPGA板卡通过PCIE插槽与电脑主板连接,QT上位机程序调用Xilinx XDMA官方API实时截取电脑桌面图像作为视频输入,通过PCIE总线将采集的图像发送给FPGA板卡,作为FPGA板卡的输入源;

PCIE数据缓存通路

XDMA接收到PCIE发来的图像数据后,将图像缓存至zynq的PL侧DDR3;

视频输出通路

VDMA_1配置为只读模式,将缓存的视频读出来,调用AXIS to video out将AXIS视频流由VTC配合转换为VGA时序的视频流,板载一颗ADV7511编码芯片,将VGA视频流的RGB数据编码为TMDS差分视频输出显示器;ADV7511由zynq的i2c配置;

5、vivado工程详解

开发板FPGA型号:Xilinx–zynq–xc7z100ffg900-2;
开发环境:Vivado2019.1;
输入:PCIE X8;
输出:HDMI;ADV7511编码;
应用:QT上位机显示试验;
工程BD如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
综合后的工程代码架构如下:
在这里插入图片描述
综合编译完成后的FPGA资源消耗和功耗预估如下:
在这里插入图片描述

6、SDK 工程详解

SDK主要完成HDMI编解码芯片的i2c配置,VDMA的寄存器配置,VTC的配置等,SDK部分采用C语言实现,代码架构如下:
在这里插入图片描述

7、驱动安装

提供提供Win系统驱动,目录如下:
在这里插入图片描述
提供了Win和Linux驱动,
驱动的具体安装教程请参考我之前的文章:点击直接前往

8、QT上位机软件

QT测速上位机:提供源代码和可执行程序,发开版本为QT5.6.2;位置如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

9、上板调试验证

开启上位机测程序进行 PCIe 显示测试,打开下图的显示软件 pcie2screen,软件在如下位置,实验结果如下:
在这里插入图片描述
打开上位机以后点击开始屏幕映射,会把当前电脑屏幕抓取,然后通过 PCIe 传输到 DDR3 中,通过连续不断的抓取,可以形成连续的视频:
在这里插入图片描述
HDMI输出的PCIE采集的电脑主机桌面图像;
在这里插入图片描述

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

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

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

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

相关文章

二叉树的实现

二叉树 文章目录 二叉树背景二叉树的概念遍历方式代码实现 背景 数组存储方式的分析 优点:通过下标方式访问元素,速度快。对于有序数组,还可使用二分查找提高检索速度。 缺点:如果要检索具体某个值,或者插入值(按一…

linux中使用docker部署微服务

目录 一、制作jar包(如果看一眼很简单,可以直接使用结尾的jar) 1.首先创建一个微服务 demo2 2.启动微服务(在DemoApplication上右键执行启动就行) 注意:其他操作导致的 可能遇到的报错 3.修改端口 4.新…

ChatGPT的快速发展究竟给我们带来了什么?

😚一个不甘平凡的普通人,致力于为Golang社区和算法学习做出贡献,期待您的关注和认可,陪您一起学习打卡!!!😘😘😘 🤗专栏:算法学习 &am…

java基础入门-05-【面向对象进阶(static继承)】

Java基础入门-05-【面向对象进阶(static&继承)】 13、面向对象进阶(static&继承)1.1 如何定义类1.2 如何通过类创建对象1.3 封装1.3.1 封装的步骤1.3.2 封装的步骤实现 1.4 构造方法1.4.1 构造方法的作用1.4.2 构造方法的…

Unity API详解——Random类

Random类是Unity中用于产生随机数的类,不可以实例化,只有静态属性和静态方法。本博客主要介绍了Random类的一些静态属性。 文章目录 一、Random类静态属性1、基本语法2、功能说明3、代码实现 二、rotationUniform属性1、基本语法2、功能说明1、规范化向量…

前沿探索,AI 在 API 开发测试中的应用

目录 一、引言二、AI 加持下的 API 设计1、NLP 在 API 设计中的应用2、DL 在 API 设计中的应用能力一:Apikit 如何利用 AI 生成最佳的 API 设计方案能力二: Apikit 如何利用 AI 提高 API 的可用性和易用性 三、AI 加持下的 API 开发能力三:Ap…

k8s二进制安装部署(详细)(3主2从)

目录 kubeadm 和二进制安装 k8s 适用场景分析 多 master 节点高可用架构图 集群环境准备 部署过程 修改主机内核参数(所有节点) 配置阿里云的repo源(所有节点) 配置国内安装 docker 和 containerd 的阿里云的 repo 源 配置…

比肩 ChatGPT,国内快速访问的强大 AI 工具 Claude

作者:明明如月学长, CSDN 博客专家,蚂蚁集团高级 Java 工程师,《性能优化方法论》作者、《解锁大厂思维:剖析《阿里巴巴Java开发手册》》、《再学经典:《EffectiveJava》独家解析》专栏作者。 热门文章推荐…

Gateway案例

官网:Spring Cloud Gateway 中文文档:Spring Cloud Gateway 2.1.0 中文官网文档 - 腾讯云开发者社区-腾讯云 一、网关介绍: 网关就是当前微服务的统一入口 通常在微服务项目中,只有网关项目是暴露在网络里的,其他服务一般都是在内网里, 用户访问网关,网关根据访问的路径,来进…

Tomcat安装步骤及详细配置教程(2022最新版)

网上的tomcat安装及配置教程一大堆,但是好多都过时了,根本不适用现在的版本,今天凯歌整理一篇Tomcat安装步骤及详细配置教程,2022年最新版~ Tomcat安装及配置教程主要分为四步: 步骤一:首先确认自己是否已…

ChatGPT登录操作扫盲级教程,附ChatGPT登录常见报错及处理技巧

文 / 韩彬(微信公众号:量子论) 有了帐号,我们自然可以使用ChatGPT尽情玩耍了。 知识扩展:ChatGPT是啥,以及注册的问题,可以看《ChatGPT常见问题手册,通俗易懂版,3分钟了解…

Windows微信聊天图片文件的解码和图片、视频占满电脑磁盘空间的清理

1 问题现象 我的Windows版微信最近老是提示“磁盘空间不足200MB,需及时清理磁盘”。 使用文件资源管理器查看我的电脑磁盘使用情况,发现C盘只剩下174MB空间可用。系统盘C盘空间耗尽已经严重影响电脑的使用。 2 问题分析 2.1 磁盘空间占用情况分析 由于…

【学习笔记】pandas提取excel数据形成三元组,采用neo4j数据库构建小型知识图谱

前言 代码来自github项目 neo4j-python-pandas-py2neo-v3,项目作者为Skyelbin。我记录一下运行该项目的一些过程文字以及遇到的问题和解决办法。 一、提取excel中的数据转换为DataFrame三元组格式 from dataToNeo4jClass.DataToNeo4jClass import DataToNeo4j imp…

实操带你使用Mybatis_plus(2)

文章目录 一、通用ServiceService CRUD 接口a> IServiceb>创建Service接口和实现类测试 二、常用注解1、TableName2、TableId雪花算法3、TableField4、TableLogic 一、通用Service Service CRUD 接口 通用 Service CRUD 封装IService 接口,进一步封装 CRUD …

选择无服务器:Babbel 的迁移故事

Babbel 是什么? Babbel 是一个完整的语言学习产品生态系统,囊括了世界上最畅销的语言学习应用程序。我们已售出超过 1000 万份订阅和超过 60,000 门涵盖 14 种语言的课程,创造了全球第一语言学习目的地。自 2007 年推出产品的第一天起&#…

vivid源码分析

vivid源码分析 文章目录 vivid源码分析如何编写V4L2驱动分析vivid.c的open,read,write,ioctl过程openreadioctlv4l2_ctrl_handler使用过程 如何编写V4L2驱动 分配/设置/注册v4l2_device.v4l2_device_register,v4l2_device(辅助作用,提供自旋锁,引用计数…

LeetCode单链表OJ题目做题思路分享

目录 移除链表元素链表的中间节点链表中倒数第K个节点合并两个有序链表 移除链表元素 链接: link 题目描述: 思路分享: 我们上个博客分享了第一种方法,下面我们分析第二种方法:思路就是将每一个不等于我们要删除的值的节点依次尾…

【硬件】嵌入式电子设计基础之产品实践

电子技术是一门实践性非常强的学科,学习电子元器件基础知识和设计技能,最终为的是把具备一定功能的电路板制作出来,解决科研、生产、生活中的实际问题。 本篇文章从实际的电子产品出发,让您能够初步体验电子产品的硬件设计过程&am…

【Unity编辑器】拓展Project视图

目录 1、拓展右键菜单 2、创建一个菜单 3、拓展布局 4、监听事件 首先创建一个Editor文件夹,此文件夹可以作为多个目录的子文件夹存在,这样开发者就可以按照功能来划分,将不同功能的编辑代码放在不同的Editor目录下。 如果属于编辑模式下…

多维时序 | MATLAB实现BP、SVM、LSSVM多变量时间序列预测(考虑历史特征的影响,多指标、多图输出)

多维时序 | MATLAB实现BP、SVM、LSSVM多变量时间序列负荷预测(考虑历史特征的影响,多指标、多图输出) 目录 多维时序 | MATLAB实现BP、SVM、LSSVM多变量时间序列负荷预测(考虑历史特征的影响,多指标、多图输出)预测效果基本介绍程序设计学习总结参考资料…