FPGA实现MPEG2视频压缩PCIe传输 提供软硬件工程源码和技术支持

2023-05-16

目录

  • 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名片。
网盘资料如下:
在这里插入图片描述
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FPGA实现MPEG2视频压缩PCIe传输 提供软硬件工程源码和技术支持 的相关文章

  • FPGA同步复位和异步复位的区别以及设计处理

    FPGA复位信号的设计处理 同步复位 同步复位 同步复位信号跟触发器的时钟是同步的 只有在时钟的跳变沿到来之后才会生效 对应verilog代码如下 这种写法会被编译器综合成同步复位 always posedge clk begin if r
  • Xilinx平台SRIO介绍(二)SRIO IP核基础知识

    使用SRIO IP核必须掌握的基础知识 理解了这篇 剩下的只是代码罢了 汇总篇 Xilinx平台SRIO介绍 汇总篇 目录 前言 SRIO RapidIO GT 有什么关系
  • 硬件设计---了解电源篇

    1 概述 在高速电路设计中一块单板上常存在多种电源 3 3V 1 8V 1 2V 1 0V 0 9V 0 75V等 有时光是对FPGA供电就需要五六种电源 为了便于使用往往用户只需要提供一种或几种电源 然后经过板上电源模块转换到各个目标电源
  • SATA M.2 NGFF PCIE AHCI NVME SSD固态硬盘的接口、总线和协议区分

    总线 协议 说接口之前先说总线 民用产品的硬盘总线多为 SATA 和 PCIe SATA 总线只能使用 AHCI 协议 NVME 对比 AHCI 的优势在于 低延时 低功耗 更适合固态硬盘 PCIe总线 可以使用 AHCI 也可以使用更高效
  • 八段数码管动态显示(输入数据为BCD编码)

    八段数码管动态显示 输入数据为BCD编码 一 数码管概述 图1 八段共阴数码管内部等效原理图 图2 八段共阳数码管内部等效原理图 上面两图分别是对应八段共阴 共阳的数码管内部等效图 共阴是将八个LED数码管的阴极连接在一起接低 阳极segm
  • verilog 基本语法 {}大括号的使用

    的基本使用是两个 一个是拼接 一个是复制 下面列举了几种常见用法 基本用法 表示拼接 第一位 第二位 表示复制 4 a 等同于 a a a a 所以 13 1 b1 就表示将13个1拼接起来 即13 b1111111111111 拼接语法详
  • 【电子技术】什么是LFSR?

    目录 0 前言 1 数学基础 1 1 逻辑异或 1 2 模2乘法 和 模2除法 2 线性反馈移位寄存器LFSR 3 抽头和特征多项式 4 阶线性反馈移位寄存器实例 0 前言 线性反馈移位寄存器 Linear Feedback Shift R
  • VHDL:按钮去抖动(或不去抖动,视情况而定)

    我已阅读其他帖子 但似乎无法修复我的 我是 VHDL 新手 所以我确信这是一个简单的修复 简而言之 按钮没有防抖 代码编译和比特流程序 在测试台中 按下按钮可以工作 但输出 LED 不会改变 在板上 按下按钮会使随机 LED 亮起 我猜是因
  • 异步FIFO设计之格雷码

    目录 二进制转格雷码 格雷码转二进制 相邻的格雷码只有1bit的差异 因此格雷码常常用于异步fifo设计中 保证afifo的读地址 或写地址 被写时钟 或读时钟 采样时最多只有1bit发生跳变 在不考虑路径延时的情况下 因为源数据 读写地址
  • 使用 VHDL 实例化 FPGA 中的 RAM

    我试图按照中的指导实现双端口 RAM这篇优秀的博文 http danstrother com 2010 09 11 inferring rams in fpgas 然而 ModelSim 在编译时给出以下警告 Warning fifo ra
  • 同时读取和写入寄存器

    我计划在 FPGA 上用 VHDL 设计一个类似 MIPS 的 CPU CPU 将具有经典的五级管道 没有转发和危险预防 在计算机体系结构课程中 我了解到第一个 MIPS CPU 用于在时钟上升沿读取寄存器文件并在时钟下降沿写入 我使用的F
  • 修改后的 baugh-wooley 算法乘法 verilog 代码不能正确乘法

    以下 verilog 源代码和 或测试平台可以很好地工作商业模拟器 iverilog https www edaplayground com x 3TuQ也形式化验证工具 yosys smtbmc https gist github com
  • Linux驱动程序DMA传输到PC作为主机的PCIe卡

    我正在开发一个 DMA 例程 将数据从 PC 传输到 PCIe 卡上的 FPGA 我阅读了 DMA API txt 和 LDD3 ch 15 详细信息 但是 我不知道如何从 PC 到 PCIe 卡上的一致 iomem 块进行 DMA 传输
  • UIO 设备上的 mmap EINVAL 错误

    在尝试使用 UIO 而不是直接映射后 我在 Xilinx Zynq 上映射物理内存时遇到问题 dev mem 虽然计划是以普通用户身份运行应用程序 而不是root这仍在运行root 显然 第一个映射成功 其余映射到同一个文件描述符12 de
  • 模拟器和合成器之间初始化状态机的差异

    我的问题是关于合成状态机中使用的第一个状态 我正在使用莱迪思 iCE40 FPGA 用于仿真的 EDA Playground 和用于综合的莱迪思 Diamond Programmer 在下面的示例中 我生成一系列信号 该示例仅显示引用状态机
  • 您可以使用类 C 语言对 FPGA 进行编程吗? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 在大学里 我用类似 C 的语言编写了 FPGA 不过 我也知道人们通常使用 Verilog 或 VHD
  • 如何使用 Verilog 和 FPGA 计算一系列组合电路的传播延迟?

    我是 FPGA 和 HDL 的新手 但我正在尝试学习 但无法弄清楚这一点 如何通过多个级别的组合逻辑来计算或估计传播延迟 我可以仅凭经验确定这一点 还是可以在设计时弄清楚 在这种情况下 我使用 FPGA 来实现奇偶校验设置和检查电路 该电路
  • FPGA大输入数据

    我正在尝试向 FPGA 发送 4 KB 字符串 最简单的方法是什么 是我正在使用的fpga的链接 我正在使用 Verilog 和 Quartus 您的问题的答案在很大程度上取决于将数据输入 FPGA 的内容 即使没有您需要遵守的特定协议 S
  • 映射 MMIO 区域写回不起作用

    我希望对 PCIe 设备的所有读写请求都由 CPU 缓存进行缓存 然而 它并没有像我预期的那样工作 这些是我对回写 MMIO 区域的假设 对 PCIe 设备的写入仅在缓存回写时发生 TLP 有效负载的大小是缓存块大小 64B 然而 捕获的
  • 可以购买哪些 FPGA(现场可编程门阵列)在家中进行实验? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 什么是 FPGA 在哪里可以买到 它们要花多少钱 您需要什么样的系统来试验它们 如何对它们进行编程 如果这是正确的术语 您能否使用普通 M

随机推荐