论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com
»
论坛
›
软件与程序人生
›
云原生
›
FPGA实现PCIE3.0图片采集转HDMI输出,基于XDMA中断架构 ...
FPGA实现PCIE3.0图片采集转HDMI输出,基于XDMA中断架构,提供2套工程源码和 ...
千千梦丶琪
金牌会员
|
2024-12-11 04:22:48
|
显示全部楼层
|
阅读模式
楼主
主题
961
|
帖子
961
|
积分
2883
FPGA实现PCIE3.0图片采集转HDMI输出,基于XDMA中断架构,提供2套工程源码和技术支持
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通信;本架构既有简单的测速实验,也有视频采集应用;
工程概述
本计划利用Xilinx系列FPGA为平台,调用Xilinx官方的XDMA方案搭建基中断模式下的PCIE3.0图片采集转HDMI输出;需要注意的是,并不是全部FPGA都支持PCIE3.0,以Xilinx为例,只有Virtex7及其以上或者UltraScale系列高端FPGA才支持;低端FPGA只能支持到PCIE2.0,关于PCIE2.0的计划方案,可以参考我博客主页,有丰富案例;输入源为电脑端的一张测试图片,大小为1920x1080,图片格式要求为BMP;打开QT上位机,将测试图片加载到QT上位机中,QT上位机将图片通过PCIE总线发送到FPGA板卡,还可以从FPGA板卡读回图片并显示;FPGA内部的XDMA IP核接收到电脑端发来的图片后,将图片写入板载DDR3中缓存;同时利用本博主常用的FDMA图像缓存架构将图片从板载DDR3中读出,在Native视频时序的同步下生成1920x1080@60Hz的RGB视频流,然后利用本博主常用的RGB转HDMI模块实现RGB视频到HDMI视频转换,并通过板载的HDMI视频接口输出;末了用显示器显示图片即可;本博客提供2套工程源码,详细如下:
现对上述2套工程源码做如下表明,方便读者理解:
工程源码1
开发板FPGA型号为Xilinx–>Virtex7–690T–xc7vx690tffg1761-3;输入源为电脑端的一张测试图片,大小为1920x1080,图片格式要求为BMP;打开QT上位机,将测试图片加载到QT上位机中,QT上位机将图片通过PCIE总线发送到FPGA板卡,还可以从FPGA板卡读回图片并显示;FPGA内部的XDMA IP核接收到电脑端发来的图片后,将图片写入板载DDR3中缓存;同时利用本博主常用的FDMA图像缓存架构将图片从板载DDR3中读出,在Native视频时序的同步下生成1920x1080@60Hz的RGB视频流,然后利用本博主常用的RGB转HDMI模块实现RGB视频到HDMI视频转换,并通过板载的HDMI视频接口输出;末了用显示器显示图片即可;板载PCIE为8 Lane的PCIE3.0;单Lane线速率配置为8GT/s;由此形成QT上位机+PCIE3.0+XDMA+HDMI的高端架构;该工程实用于PCIE3.0接口的视频采集卡应用;
工程源码2
开发板FPGA型号为Xilinx–>Kintex UltraScale–xcku060-ffva1156-2-i;输入源为电脑端的一张测试图片,大小为1920x1080,图片格式要求为BMP;打开QT上位机,将测试图片加载到QT上位机中,QT上位机将图片通过PCIE总线发送到FPGA板卡,还可以从FPGA板卡读回图片并显示;FPGA内部的XDMA IP核接收到电脑端发来的图片后,将图片写入板载DDR4中缓存;同时利用本博主常用的FDMA图像缓存架构将图片从板载DDR4中读出,在Native视频时序的同步下生成1920x1080@60Hz的RGB视频流,然后利用本博主常用的RGB转HDMI模块实现RGB视频到HDMI视频转换,并通过板载的HDMI视频接口输出;末了用显示器显示图片即可;板载PCIE为8 Lane的PCIE3.0;单Lane线速率配置为8GT/s;由此形成QT上位机+PCIE3.0+XDMA+HDMI的高端架构;该工程实用于PCIE3.0接口的视频采集卡应用;
本文详细形貌了FPGA实现PCIE3.0图片采集转HDMI输出的计划方案,工程代码可综合编译上板调试,可直接项目移植,实用于在校学生、研究生项目开发,也实用于在职工程师做项目开发,可应用于医疗、军工等行业的高速接口范畴;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末端,请耐心看到末了;
免责声明
本工程及其源码即有本身写的一部门,也有网络公开渠道获取的一部门(包罗CSDN、Xilinx官网、Altera官网等等),若大佬们觉得有所冒犯,请私信品评教育;基于此,本工程及其源码仅限于读者或粉丝个人学习和研究,禁止用于贸易用途,若由于读者或粉丝自身缘故原由用于贸易用途所导致的法律标题,与本博客及博主无关,请审慎利用。。。
2、干系方案推荐
我已有的PCIE方案
我的主页有PCIE通信专栏,该专栏基于XDMA的轮询模式实现与QT上位机的数据交互,既有基于RIFFA实现的PCIE方案,也有基于XDMA实现的PCIE方案;既有简单的数据交互、测速,也有应用级别的图像采集传输,以下是专栏地点:
点击直接前去
别的,我的主页有中断模式的PCIE通信专栏,该专栏基于XDMA的中断模式实现与QT上位机的数据交互,以下是专栏地点:
点击直接前去
别的,还有基于RIFFA架构的PCIE通信专栏,以下是专栏地点:
点击直接前去
本博客方案的PCIE2.0版本
本博客详细形貌了FPGA实现PCIE3.0图片采集转HDMI输出的计划方案,但并不是全部FPGA都支持PCIE3.0,对于低端FPGA而言,PCIE2.0或许具有更多应用场景,恰好之前写过一篇PCIE2.0方案,计划根本与本片博客一样,只是XDMA配置的PCIE版本不一样,感爱好的可以查看之前的博客,博客链接如下:
点击直接前去
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、工程详细计划方案
工程计划原理框图
工程计划原理框图如下:
测试图片
输入源为电脑端的一张测试图片,大小为1920x1080,图片格式要求为BMP;我用到的测试图片如下:
该图片以放在QT上位机中,用户可直接利用,如下:
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 Card,H2C)的传输,也可以用与卡到主机(Card to Host,C2H)的传输。可以将 DMA 配置为由全部通道共享一个 AXI4 Master 接口,或者为每个启用的通道提供一个 AXI4-Stream 接口。内存传输是基于每个通道的形貌符链接列表指定的,DMA 从主机内存和进程中获取这些链接列表。诸如形貌符完成和错误之类的变乱通过中断来发出信号。XDMA 还提供多达 16 条用户中断线,这些中断线会向主机生成中断。本计划需要配置为中断模式;如下图:
本计划XDMA线速率配置为8GT/s,这是PCIE3.0标准,如下:
XDMA详情参考《AXI Bridge for PCI Express Gen3 Subsystem Product Guide(PG194)》;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帧图像的缓存,本计划只用到了FDMA控制器的读功能,FDMA控制器IP配置如下:
FDMA图像缓存架构在Block Design中如下:
Native视频时序生成
Native视频时序模块负责生成1920x1080@60Hz的视频时序,用以同步FDMA输出的视频,并输出完整的RGB视频流,该模块十分简单,计划巧妙,用宏定义的方式定义了多种标定时序,用户可自由选择切换,如下:
该模块在代码架构中例化如下:
RGB转HDMI输出模块
RGB转HDMI输出模块将RGB视频编码为HDMI差分信号,HDMI输出模块接纳verilog代码手写,可以用于FPGA的HDMI发送应用,该模块在代码架构中例化如下:
模块顶层如下:
该模块基于 oserdese3 原语实现,不但实用于Xilinx 7系列FPGA,还实用于Xilinx UltraScale系列FPGA,包罗KU、KU+、VU、VU+等;需要注意的是,工程源码1的HDMI输出方式为专用芯片方案,详细为silicom9134,在代码中仅需用i2c配置一下即可工作;
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
工程源码架构
提供2套工程源码,以工程源码2为例,工程Block Design计划如下:
提供2套工程源码,以工程源码2为例,综合后的工程源码架构如下:
Vivado工程注意事项
Vivado工程需要配合修改过的Xilinx官方XDMA驱动和QT上位机一起利用,以是Vivado工程必须做到以下几点:
1:XDMA中的AXI4_Lite基地点必须设为0x44A00000,这是XDMA驱动修改的规定,感爱好的可以去看驱动源码,配置如下;
2:MIG的DDR基地点必须从0x00000000开始,这是QT上位机代码的规定,感爱好的可以去看QT源码,配置如下;
PCIE上板调试注意事项
1:必须先安装本博提供的XDMA驱动,详情请参考第4章节的《XDMA驱动及其安装》,Windows版本驱动只需安装一次;
2:Windows版本下载FPGA工程bit后需要重启电脑,电脑才能识别到XDMA驱动;步伐固化后也需要重启电脑;Linux版本每次载FPGA工程bit后都需要重启电脑,都需要安装XDMA驱动;
3:FPGA板卡插在主机上后一般不需要额外供电,假如你的板子元器件较多功耗较大,则需要额外供电,详情咨询开发板厂家,当然,找我买板子的客户可以直接问我;
4:PCIE调试需要电脑主机,但笔记本电脑理论上也可以外接出来PCIE,详情百度自行搜索一下,电脑主机PCIE插槽不方便操作时可以利用延长线接出来,某宝有卖;
5、vivado工程源码1详解–>Virtex7-690T版本
开发板FPGA型号:Xilinx–690T–xc7vx690tffg1761-3;
FPGA开发环境:Vivado2019.1;
QT开发环境:VS2015 + Qt 5.12.10;
输入:电脑测试图片,分辨率1920x1080;
输出:HDMI,分辨率1920x1080@60Hz;
PC端到FDMA传输方案:PCIE3.0传输;
图像缓存方案:FDMA图像缓存+DDR3颗粒;
PCIE底层方案:Xilinx XDMA,8GT/s单lane线速率;
PCIE详情:PCIE3.0版本,X8,8GT/s单lane线速率;
实现功能:FPGA实现PCIE3.0图片采集转HDMI输出;
工程作用:此工程目标是让读者掌握FPGA实现PCIE3.0图片采集转HDMI输出的计划能力,以便能够移植和计划本身的项目;
工程Block Design和工程代码架构请参考第4章节的《工程源码架构》末节内容;
工程的资源斲丧和功耗如下:
6、vivado工程源码2详解–>KU060版本
开发板FPGA型号:Xilinx–Kintex UltraScale–xcku060-ffva1156-2-i;
FPGA开发环境:Vivado2019.1;
QT开发环境:VS2015 + Qt 5.12.10;
输入:电脑测试图片,分辨率1920x1080;
输出:HDMI,分辨率1920x1080@60Hz;
PC端到FDMA传输方案:PCIE3.0传输;
图像缓存方案:FDMA图像缓存+DDR4颗粒;
PCIE底层方案:Xilinx XDMA,8GT/s单lane线速率;
PCIE详情:PCIE3.0版本,X8,8GT/s单lane线速率;
实现功能:FPGA实现PCIE3.0图片采集转HDMI输出;
工程作用:此工程目标是让读者掌握FPGA实现PCIE3.0图片采集转HDMI输出的计划能力,以便能够移植和计划本身的项目;
工程Block Design和工程代码架构请参考第4章节的《工程源码架构》末节内容;
工程的资源斲丧和功耗如下:
7、工程移植说明
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软核;
8、上板调试验证
预备工作
需要预备的东西如下:
测试图片;
FPGA开发板,没有开发板可以找本博提供;
带PCIE卡槽的电脑主机;
我的开发板了毗连如下:
PCIE图片采集转HDMI输出效果演示
PCIE图片采集转HDMI输出效果如下:
XDMA-图片
9、工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料获取方式:文章末端名片。
网盘资料如下:
别的,有许多朋友给本博主提了许多意见和发起,盼望能丰富服务内容和选项,因为不同朋友的需求不一样,以是本博主还提供以下服务:
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
千千梦丶琪
金牌会员
这个人很懒什么都没写!
楼主热帖
SQLserver的安装
【C++】ZZ1864- 解题精讲
StoneDB社区答疑第一期
一文搞清UNIX/Linux与Windows文件换行 ...
数据湖Hudi与对象存储Minio及Hive\Spar ...
开发了一个Java库的Google Bard API, ...
C语言程序设计(一)计算机思维导论 ...
学透shell 带你写常用的100个 shell 脚 ...
Cesium 几何体贴模型 sampleHeight(二 ...
【HarmonyOS】初识HarmonyOS
标签云
运维
CIO
存储
服务器
浏览过的版块
物联网
移动端开发
网络安全
linux
.Net
开源技术
前端开发
快速回复
返回顶部
返回列表