FPGA实现jpeg图片解码RGB 纯verilog代码编写 提供基于zynq得工程源码和技术支持

这篇具有很好参考价值的文章主要介绍了FPGA实现jpeg图片解码RGB 纯verilog代码编写 提供基于zynq得工程源码和技术支持。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、前言

jpg是一种压缩的图片格式,之所以压缩是为了减小图片所占空间,jpg压缩原理这里不罗嗦,可以自行百度或者b站,大佬讲的比我好,jpg解压缩就是逆向过程,用opencv啥的解压缩就是一句话的事儿,但对于fpga硬件来说就是大型工程了。

本设计使用zynq7100位平台,将jpg图片的c语言数组写入PS侧DDR3中缓存作为jpg解码器的输入,使用自研的AXI4控制器从DDR3中读取出jpg图片数据,并转换为AXIS数据流送入jpg解码器解码为rgb数据输出,至此,jpg解码实际已经完成,但为了输出显示验证解码的效果,再加上基于FDMA的图像缓存架构将jpg解码后的rgb数据输出显示器显示,可以直观的查看显示器的输出与原始jpg图片的差异,以验证我们设计的正确性。。。。

本文详细描述了zynq7100位平台验证jpg解码器并将解码后的rgb数据输出显示器显示的设计方案,工程代码编译通过后上板调试验证,文章末尾有演示视频,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做项目开发,可应用于医疗、军工等行业的数字成像和图像传输领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;

免责声明

本工程及其源码即有自己写的一部分,也有网络公开渠道获取的一部分(包括CSDN、Xilinx官网、Altera官网等等),若大佬们觉得有所冒犯,请私信批评教育;基于此,本工程及其源码仅限于读者或粉丝个人学习和研究,禁止用于商业用途,若由于读者或粉丝自身原因用于商业用途所导致的法律问题,与本博客及博主无关,请谨慎使用。。。

2、JPG解码器详解

JPG解码器是本设计的核心,其他设计都是围绕本模块来设计,目的就是为了验证本模块的正确性;
本JPG解码器具有以下特征:
1:纯verilog代码实现,不含有任何IP核;
2:移植性天花板,由于采用纯verilog代码实现,可在Xilinx、Altera和国产FPGA (比如紫光同创、安路)等之间任意移植;
3:32bit的AXI4-Stream数据流输入接口,可处理大批量数据;
4:支持任意分辨率jpg图片解码;
5:支持YUV4:4:4、YUV4:2:0色度采样输入;
6:支持固定的标准的霍夫曼解码(减少逻辑资源的使用和更快速解码);
7:支持动态霍夫曼解码(使用更多的逻辑资源和更慢速解码);
8:动态DQT;
9:输出24bit的RGB8:88格式,同时输出解码后的图片宽和高数据;
10:消耗逻辑资源少,具体如下:
fpga实现jpeg压缩,菜鸟FPGA图像处理专题,FPGA视频图像编解码,fpga开发
jpg解码器模块设计框图如下:
fpga实现jpeg压缩,菜鸟FPGA图像处理专题,FPGA视频图像编解码,fpga开发
解码过程就是编码过程的逆过程,原理可以百度一下或者csdn搜一下,本模块就是把用c语言或者c++实现的软件解码方式用verilog的硬件解码方式实现了,由于FPGA的并行性,所以解码速度更快,达到加速的目的。。。

3、设计思路和架构

设计思路和架构如下:
fpga实现jpeg压缩,菜鸟FPGA图像处理专题,FPGA视频图像编解码,fpga开发
总体流程:
第一步:
下载一张jpg图片,用Matlab等工具将jpg图片转为c语言数组,提供的vivado工程中已包含此文件;
第二步:
用SDK将jpg图片c语言数组拷贝到PS侧DDR3中缓存,作为jpg解码器的输入源;
第三步:
AXI4主机控制器和AXI4-Stream主机控制器负责从PS侧DDR3中读取jpg数据,输出AXI4-Stream数据流给到jpg解码器;
第四步:
jpg解码器将AXI4-Stream格式的jpg数据解码为24bit的RGB数据输出,一同输出图片宽个高信息;至此,jpg解码实际已经完成,但为了输出显示验证解码的效果,再加上基于FDMA的图像缓存架构将jpg解码后的rgb数据输出显示器显示,可以直观的查看显示器的输出与原始jpg图片的差异,以验证我们设计的正确性。。。。
第五步:
使用FDMA数据缓存架构将解码后的RGB数据缓存至PS侧DDR3后再读出,这里做缓存的原因是做数据跨时钟处理,jpg解码后的rgb数据时钟是100M,而HDMI输出的像素时钟是148.5M。。。关于FDMA数据缓存架构,可以参考我之前写的文章直接点击此处查看
第六步:
HDMI输出分辨率使用1920x1080@60Hz,只要jpg图片分辨率小于1920x1080均可在此背景下输出,屏幕只会输出有效的jpg图片,其他区域为黑色,这也是我的一大原创。。。需要解码显示更大jpg图片分辨率的朋友可以修改输出VGA时序,比如改为4K分辨率,则可显示1920x1080的图片了。
HDMI发送没有使用HPY芯片,而是使用纯verilog实现的HDMI发送驱动,关于这一点,可以参考我之前写的文章直接点击此处查看

4、vivado工程详解

开发板:Xilinx zynq7100开发板;
开发环境:vivado2019.1;
输入:jpg图片;
输出:HDMI显示;

工程Block Design如下:
fpga实现jpeg压缩,菜鸟FPGA图像处理专题,FPGA视频图像编解码,fpga开发
综合后的工程代码架构如下:
fpga实现jpeg压缩,菜鸟FPGA图像处理专题,FPGA视频图像编解码,fpga开发
jpg解码器源码如下:
fpga实现jpeg压缩,菜鸟FPGA图像处理专题,FPGA视频图像编解码,fpga开发
总工程师的资源消耗和功耗预估如下:
注意:这里是整个工程的资源消耗,并非jpg解码器;
fpga实现jpeg压缩,菜鸟FPGA图像处理专题,FPGA视频图像编解码,fpga开发
SDK源码架构如下:
fpga实现jpeg压缩,菜鸟FPGA图像处理专题,FPGA视频图像编解码,fpga开发

5、上板调试验证

开发板如下:
fpga实现jpeg压缩,菜鸟FPGA图像处理专题,FPGA视频图像编解码,fpga开发

程序调试方法

需要你的板子有个HDMI输出接口
第一步:
编译,打开SDK,并进行debug单步调试,如下:
fpga实现jpeg压缩,菜鸟FPGA图像处理专题,FPGA视频图像编解码,fpga开发
fpga实现jpeg压缩,菜鸟FPGA图像处理专题,FPGA视频图像编解码,fpga开发
第二步:
选择你要解码输出的jpg图片分辨率,为了深度测试jpg解码器的性能,我这里设置了7种不同分辨率的jpg图片,分别如下:
jpg图片分辨率:1920x1080;
jpg图片分辨率:1280x720;
jpg图片分辨率:800x800;
jpg图片分辨率:800x600;
jpg图片分辨率:606x530;
jpg图片分辨率:474x458;
jpg图片分辨率:361x458;
fpga实现jpeg压缩,菜鸟FPGA图像处理专题,FPGA视频图像编解码,fpga开发
下面以1920x1080图片解码为例,首先取消上图中//WR_pic_1920x1080();前面的//,如此就选择了解码输出1920x1080图片,随后按照第一步开始单步debug,当dubug到while(1)死循环里面时,多点几次,让程序在while(1)里面多转几圈,屏幕就会出现RGB图片输出了,while(1)里面的代码作用是产生触发信号开启jpg解码器工作。。。

下面看输出效果:
解码jpg图片分辨率1920x1080的输出:
fpga实现jpeg压缩,菜鸟FPGA图像处理专题,FPGA视频图像编解码,fpga开发
fpga实现jpeg压缩,菜鸟FPGA图像处理专题,FPGA视频图像编解码,fpga开发
解码jpg图片分辨率1280x720的输出:
fpga实现jpeg压缩,菜鸟FPGA图像处理专题,FPGA视频图像编解码,fpga开发
fpga实现jpeg压缩,菜鸟FPGA图像处理专题,FPGA视频图像编解码,fpga开发
解码jpg图片分辨率800x800的输出:
fpga实现jpeg压缩,菜鸟FPGA图像处理专题,FPGA视频图像编解码,fpga开发
fpga实现jpeg压缩,菜鸟FPGA图像处理专题,FPGA视频图像编解码,fpga开发
解码jpg图片分辨率800x600的输出:
fpga实现jpeg压缩,菜鸟FPGA图像处理专题,FPGA视频图像编解码,fpga开发

fpga实现jpeg压缩,菜鸟FPGA图像处理专题,FPGA视频图像编解码,fpga开发
解码jpg图片分辨率606x530的输出:
fpga实现jpeg压缩,菜鸟FPGA图像处理专题,FPGA视频图像编解码,fpga开发
fpga实现jpeg压缩,菜鸟FPGA图像处理专题,FPGA视频图像编解码,fpga开发
解码jpg图片分辨率606x530的输出:
fpga实现jpeg压缩,菜鸟FPGA图像处理专题,FPGA视频图像编解码,fpga开发
fpga实现jpeg压缩,菜鸟FPGA图像处理专题,FPGA视频图像编解码,fpga开发
解码jpg图片分辨率606x530的输出:
fpga实现jpeg压缩,菜鸟FPGA图像处理专题,FPGA视频图像编解码,fpga开发
fpga实现jpeg压缩,菜鸟FPGA图像处理专题,FPGA视频图像编解码,fpga开发
下面看视频演示:

fpga-jpg

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

福利:工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料获取方式:文章末尾的V名片。
网盘资料如下:
fpga实现jpeg压缩,菜鸟FPGA图像处理专题,FPGA视频图像编解码,fpga开发
具体的文件构成如下:
fpga实现jpeg压缩,菜鸟FPGA图像处理专题,FPGA视频图像编解码,fpga开发
fpga实现jpeg压缩,菜鸟FPGA图像处理专题,FPGA视频图像编解码,fpga开发文章来源地址https://www.toymoban.com/news/detail-725996.html

到了这里,关于FPGA实现jpeg图片解码RGB 纯verilog代码编写 提供基于zynq得工程源码和技术支持的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 《FPGA纯Verilog设计实现CameraLink视频编解码验证方案》

    FPGA纯verilog编解码CameraLink视频 本文详细描述了FPGA纯verilog实现CameraLink视频接收和发送的实现设计方案,目的在于验证CameraLink解码模块和编码模块的正确性,思路是这样的,由于项目之处没有CameraLink相机,但又必须验证关键的CameraLink解码模块和编码模块,所以做了这样一个巧

    2024年04月22日
    浏览(32)
  • 基于FPGA的UART多字节环回实验verilog代码(含帧头帧尾和解码部分)

    采用VIVADO开发环境,频率50MHz,波特率 256000,8位数据位,1位停止位。 串口接收程序源自正点原子的例程。 带仿真工程,数据帧格式如下图: 发送数据为:aa ff 03 00 0E 03 B1 86 10 00 40 01 11 00 00 00 00 00 00 00 11 00 00 00 00 00 11 11 55 CC 效果如图:  仿真效果图: 参考以下文章和视频:

    2024年02月08日
    浏览(37)
  • Verilog编写实现FPGA打两拍

    Verilog编写实现FPGA打两拍 本文将向您展示如何使用Verilog编写并实现在FPGA上打两拍的功能。打两拍是一种音乐节奏,通常用于音乐中的序列节奏,可以通过FPGA来实现。使用Verilog作为硬件描述语言,我们可以简单而有效地实现这一功能。 首先,我们需要定义一个时钟信号和计

    2024年02月05日
    浏览(34)
  • CNN的硚口实现: 由Verilog编写并在FPGA上合成

    目录 前言 一、环境设置 二、CNN的硬件设计思路 三、使用Verilog实现CNN

    2024年02月13日
    浏览(37)
  • FPGA实现Verilog 2分频:从原理到代码实现

    FPGA实现Verilog 2分频:从原理到代码实现 在数字电路设计中,2分频是一种常见的电路实现方式,可以将输入信号的频率减半。在FPGA设计中,我们可以利用Verilog语言快速实现2分频电路。本文将从原理出发,结合代码介绍FPGA实现2分频电路的方法。 原理及实现 2分频电路通常采

    2024年02月02日
    浏览(41)
  • 用Python编写GUI程序实现WebP文件批量转换为JPEG格式

    在Python编程中,经常会遇到需要处理图片格式的情况。最近,我遇到了一个有趣的问题:如何通过编写一个GUI程序来实现将WebP格式的图片批量转换为JPEG格式?在这篇博客中,我将分享我使用Python、wxPython模块和Pillow库实现这一功能的经验。 C:pythoncodenewwebp2jpeg.py 准备工作

    2024年04月11日
    浏览(30)
  • BMP图像处理(jpeg转bmp,以及bmp图片缩放,附代码)

    目录 背景 一、BMP图片讲解: 二、代码: 背景 1、主要记录下BMP图片的功能,里面包括jpeg格式图片转bmp格式的图片,还有bmp图片的缩放,因为bmp格式的图片一般都很大。 2、网上搜的代码,好多的代码都有依赖,有些是依赖libjpeg.dll,有些是boost,有些是opencv,后面废了不少力

    2024年02月04日
    浏览(66)
  • FPGA实现的多波形信号发生器,支持正弦、方波、锯齿波、三角波及调制,配备仿真和实物制作功能,使用Verilog HDL编写

    基于FPGA的DDS多波形信号发生器,可以产生正弦波,方波,锯齿波三角波,调制波形2psk.2askAM调制,可以仿真,可以制作实物,可以进行讲解! 使用可以使用Quarter9.0自带仿真软件进行仿真波形。 也可以使用quarter13.1与modesim进行联合仿真进行仿真波形! 使用verilog HDL语言进行编

    2024年04月12日
    浏览(48)
  • 【FPGA实现三态门(inout)Verilog代码详解】

    【FPGA实现三态门(inout)Verilog代码详解】 三态门(tristate gate)是在数字电路中使用频率较高的一种逻辑门,其特点是输出端具有三种可能的状态:高电平、低电平和高阻态。在实际应用中常常用于多个设备共享同一个总线的情况下,有效地防止输出口相互影响、产生干扰等

    2024年02月10日
    浏览(39)
  • FPGA Artix7-100T实现手写字硬件加速,纯Verilog编写的CNN神经网络加速器,有效减轻误识别问题

    fpga实现cnn神经网络加速 手写字硬件加速 FPGA artix7-100t 纯verilog编写 神经网络硬件加速 使用ov5640摄像头dvp接口 verilog实现手写字识别 包括卷积层、全连接层、池化层、softmax,有效减轻误识别问题。 注意: 该项目并未使用到arm核,是使用传统fpga的逻辑资源实现的。 ID:92299 7141

    2024年04月23日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包