目录
- 1、前言
- 2、MPEG2视频压缩实现
- 3、我已有的FPGA图像视频编解码方案
- 4、我已有的PCIE方案
- 5、MPEG2视频压缩PCIE传输设计方案
- FPGA硬件设计
- 软件设计
- 6、Vivado工程详解
- 7、Linux下的XDMA驱动安装
- 8、上板调试验证
- 9、福利:工程代码的获取
1、前言
MJPEG、MPEG2、MPEG4、H264 是流行且兼容性很高的 4 种视频编码格式。其中 MJPEG 对每帧独立进行 JPEG 图象压缩,而不利用帧间相关性,因此压缩效果较差。 MPEG2、MPEG4 和 H264 会进行帧间压缩,但后两者更复杂,效果也更好。MPEG2 虽然比较老 (1994年),但在低压缩率的条件下与 MPEG4 和 H264 没有明显劣势,因此 MPEG2 在高质量、低压缩率要求的应用场合仍然可堪一用。。。
PCIE(PCI Express)采用了目前业内流行的点对点串行连接,比起 PCI 以及更早期的计算机总线的共享并行架构,每个设备都有自己的专用连接,不需要向整个总线请求带宽,而且可以把数据传输率提高到一个很高的频率,达到 PCI 所不能提供的高带宽,是目前各行业高速接口的优先选择方向,具有很高的实用价值和学习价值;
本设计使用Xilinx官方的XDMA方案搭建基于Xilinx系列FPGA的PCIE通信平台,该方案只适用于Xilinx系列FPGA,一并提供了XDMA的安装驱动和QT上位机源代码,省去了使用XDMA繁琐的驱动寻找和上位机软件开发的不知所措,并以搭建好vivado工程,省去了不知道如何使用XDMA的尴尬,使得PCIE的使用变得简单易上手,而不用关心其复杂的PCIE协议;由于我的开发板只支持PCIE X1,所以提供的代码是PCIE X1架构,若需要PCIE X1、 X2、 X8、 X16、 X32的朋友,可自行修改本工程,也可关注我,我会实时发布新的工程。
本文详细描述了FPGA基于XDMA搭建PCIE通信平台的设计方案,利用开发板逻辑资源大的特点,实现了MPEG2视频压缩后通过PCIe传输的功能试验;工程代码可综合编译上板调试,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做项目开发,可应用于医疗、军工等行业的高速接口领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;
本设计与我之前写的PCIE工程区别在于,此XDMA的PCIE工程硬件和软件都运行于Linux系统,XDMA的驱动安装、API调用和应用软件都与运行于Windows系统的工程不一样,适用于运行在Linux系统的PCIE应用,当然,Windows系统的用户也可以参考,因为XDMA都是一样的,仅仅驱动安装不一样;
2、MPEG2视频压缩实现
关于MPEG2视频压缩实现,我之前已经专门写过一篇文章,建议回头看看,一遍了解MPEG2视频压缩的实现原理和方法,文章链接:https://blog.csdn.net/qq_41667729/article/details/129998492
3、我已有的FPGA图像视频编解码方案
我的主页有FPGA图像视频编解码专栏,既有例如MPEG2、H264、H265等主流的视频编解码,也有JPEG、JPEG-LS、PNG等主流的图片编解码;全部采用FPGA硬件实现编解码加速;以下是专栏地址:https://blog.csdn.net/qq_41667729/category_12277772.html?spm=1001.2014.3001.5482
4、我已有的PCIE方案
我的主页有PCIE通信专栏,既有基于RIFFA实现的PCIE方案,也有基于XDMA实现的PCIE方案;既有简单的数据交互、测速,也有应用级别的图像采集传输,既有基于纯FPGA的PCIE工程,也有基于zynq架构的PCIE工程,以下是专栏地址:https://blog.csdn.net/qq_41667729/category_12252265.html?spm=1001.2014.3001.5482
5、MPEG2视频压缩PCIE传输设计方案
MPEG2视频压缩PCIE传输方案设计方案架构如下图:
设计共分两部分:FPGA设计和Linux软件设计;
FPGA硬件设计
MPEG2视频压缩:
采用systemverilog语言实现,属于为YUV422视频流,输出为256位宽的MPEG2视频流,可参考设计框图的箭头流向;在此基础上,将MPEG2视频压缩模块挂在于AXI4总线上,这里为AXI4从机,所以,MPEG2视频压缩最后的封装形式为AXI4接口,该接口可直接与XDMA对接交互;
PCIe:
直接调用官方的XDMA,由于我的板子只有PCIe X1的接口,所以将XDMA配置为X1模式,亦可配置为X2 X4 X8等其他模式;具体配置如下:
MPEG2视频压缩挂载AXI4接口后的顶层接口和例化部分如下如:
软件设计
直接调用XDMA官方API实现软件的功能,主函数xdma_mpeg2encode.c实现两个功能:
1:将.YUV格式文件发送到PCIe的发送端口,通过PCIe总线发送给FPGA板子,FPGA里面的XDMA接收后通过AXI4总线发送给MPEG2视频压缩作为视频输入;载入.YUV文件的功能子函数如图:
2:FPGA里面的MPEG2视频压缩收到输入视频后,实时的将视频压缩为MPEG2视频流,通过AXI4总线发送给XDMA,XDMA再通过PCIe总线发送给电脑,xdma_mpeg2encode.c的另一个功能就是接收MPEG2视频流,并将它转为.m2v格式的视频文件,该文件的视频可用VLC播放器播放;
读取MPEG2视频流的功能子函数如图:
至此,一个完整的FPGA实现MPEG2视频压缩PCIe传输的功能就搭建完成了。。。
6、Vivado工程详解
开发板FPGA型号:Xilinx–xc7vx690tffg1761-3;
开发环境:Vivado2019.1;
输入:软件程序喂入.YUV格式视频流;
输出:MPEG2视频流软件转为.m2v格式的视频文件;
应用:MPEG2视频压缩PCIe采集卡;
工程源码架构如下:
FPGA资源消耗和功耗预估如下:
7、Linux下的XDMA驱动安装
资料包里提供了XDMA驱动和驱动安装手册,可打开手册安装即可,位置如图:
8、上板调试验证
第一步:首先将FPGA板子插在电脑主板的PCIE插槽里,如下:
第二步:按照软件使用手册一步步执行命令即可,资料包里提供了MPEG2视频压缩运行软件和软件使用手册,按照软件使用手册一步步执行命令即可,位置如图:
第三步:执行完软件后,即可看到压缩后的MPEG2视频,然后用VLC播放器播放即可,生成的视频文件位置如图:
播放截图如下:
9、福利:工程代码的获取
福利:工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料获取方式:文章末尾的V名片。
网盘资料如下: