目录
- 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名片。
网盘资料如下: