FPGA纯verilog代码实现H264视频压缩 提供工程源码和技术支持

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

1、前言

H264视频压缩与解码在FPGA图传领域应用广泛,Xilinx高端器件已经内嵌了H264加速器,在Linux系统下调用API即可使用,但对于需要定制私有算法或者协议的H264视频压缩与解码应用或者学习研究者而言,纯verilog代码实现H264视频压缩依然具有实用价值,本设计采用纯verilog代码实现H264视频压缩,没有使用任何IP,具有参考价值;

本文详细描述了FPGA纯verilog代码实现H264视频压缩的设计方案,工程代码可综合编译上板调试,但目前只做到了仿真层面,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做项目开发,可应用于医疗、军工等行业的数字成像和图像压缩领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;

免责声明

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

2、我这里已有的视频图像编解码方案

我这里有图像的JPEG解压缩、JPEG-LS压缩、H264编解码、H265编解码以及其他方案,后续还会出更多方案,我把他们整合在一个专栏里面,会持续更新,专栏地址:
直接点击前往

3、H264视频压缩理论

请参考这篇文章,感觉写得挺好:https://blog.csdn.net/Ciellee/article/details/91375879

4、H264视频压缩-性能表现

AVC/H.264 Baseline Profile
YUV 4:2:0视频源输入;
视频颜色深度8bit;
最高支持1080P@60Hz视频;
GOP:I/P 即帧内/帧间算法
MB: 16x16 即内部16x16图像分块
1/4 Sub-pixel interpolation
Search range: 16
All Inter Partition mode
All 9 Intra prediction mode
CAVLC
Deblocking Filter

INTRA – Intra mode decision & partition decision
a.Modify the mode priority of C model to match RTL
IME – Integer motion estimation
a.Modify the generation of mv_cost to support P frame
FME– Fractional motion estimation
a.Fix some bugs in fmv calculation and luma prediction
b.Redesign the 1/2 interpolator logic
TQ - Transformation & Quantization
a.Add QPc to quantize chroma residuals
b.Incease the bitwidth of quant modules and idct module to prevent overflow
CAVLC - Entropy coding
a.Modify the FSM to encode chroma component properly
b.Fix a bug in fetching residuals from TQ
FETCH
a.Fix several bugs in fetching predicted pixels
b.Modify the logic of reading RAM

5、H264视频压缩-设计方案

设计框图如下:
FPGA纯verilog代码实现H264视频压缩 提供工程源码和技术支持
输入:YUV 4:2:0视频流;颜色深度8bit;最高支持1080P@60Hz视频;
压缩算法:帧间和帧内自适应流水线设计;其中I帧存于模块内部Buffer,P帧输出模块外部Buffer;详细设计算法参考第3节的理论链接;https://blog.csdn.net/Ciellee/article/details/91375879
输出:单字节的H264压缩数据;
H264视频压缩代码顶层接口如下:

module helai_h264_encode_2023 (
	input 		  				  clk             , 
	input 		  				  rst_n           ,                                   
	input						  i_sys_start     ,	//开始压缩信号,高电平脉冲     
	output						  o_sys_done      ,	//压缩完成指示信号,高有效		                			
	input						  i_sys_intra_flag,	//开始GOP信号,高电平脉冲 
	input [5:0]					  i_sys_qp        ,	//初始化QP值
	input 						  i_sys_mode      ,	//0:frame mode 1:MB mode 
	input [`PIC_W_MB_LEN-1:0] 	  i_sys_x_total   ,	//一行图像的 MB 大小    
	input [`PIC_H_MB_LEN-1:0]  	  i_sys_y_total   ,	//一列图像的 MB 大小  
	output						  o_enc_ld_start  ,
	output [`PIC_W_MB_LEN-1:0]	  o_enc_ld_x      ,
	output [`PIC_H_MB_LEN-1:0]    o_enc_ld_y      ,                             
	input [8*`BIT_DEPTH - 1:0]    i_video_data    ,	//视频数据输入
	input          				  i_video_de      ,	//视频输入有效信号,高有效
	output         				  o_video_in_ing  ,	//表示图像正在输入                        
	output [7:0]   				  o_video_data    ,	//压缩后的视频数据输出
	output         				  o_video_de      ,	//压缩后的视频数据输出有效信号,高有效                              
	output [`PIC_W_MB_LEN-1:0]    o_ext_PF_mb_x   ,	//输出 P 帧一行图像的 MB 大小	
	output [`PIC_H_MB_LEN-1:0] 	  o_ext_PF_mb_y   ,	//输出 P 帧一列图像的 MB 大小
	output                        o_ext_PF_start  ,	//输出 P 帧开始信号,高电平,相当于 VGA 时序的 VS	
	input                         i_ext_PF_done   ,	//输入 P 帧 Buffer 接收完成信号
	output [2:0]              	  o_ext_PF_mode   ,	//输出 P 帧模式:0:frame mode 1:MB mode
	input						  i_ext_PF_wen	  ,	//外部 P 帧 Buffer 输入写信号,	高有效	
	input						  i_ext_PF_ren	  ,	//外部 P 帧 Buffer 输入读信号,	高有效		
	input  [3:0]				  i_ext_PF_addr   ,	//外部 P 帧 Buffer 输入地址	
	input  [16*`BIT_DEPTH - 1:0]  i_ext_PF_data   ,	//读回 P 帧 Buffer 的视频	
	output [4*4*`BIT_DEPTH - 1:0] o_ext_PF_data   	//写入 P 帧 Buffer 的视频	
);

6、Vivado工程详解

建立Vivado工程,将源码复制进去,目的是进行功能仿真和综合;
开发板FPGA型号:xc7k325tffg676-2;
输入:测试激励YUV 4:2:0视频流文件;
输出:软件生成的压缩视频与FPGA压缩的视频逐个字节对比结果;
应用:功能仿真和综合;

代码架构如下:
FPGA纯verilog代码实现H264视频压缩 提供工程源码和技术支持
综合后的FPGA资源消耗如下:
FPGA纯verilog代码实现H264视频压缩 提供工程源码和技术支持

7、Vivado功能仿真

由于仿真过程比较复杂,我专门做了一个PPT教程,详细讲述了仿真流程,手把手教程,PPT教程一并在资料包里给出;位置如下:
FPGA纯verilog代码实现H264视频压缩 提供工程源码和技术支持
正确仿真的结果如下:
FPGA纯verilog代码实现H264视频压缩 提供工程源码和技术支持
FPGA纯verilog代码实现H264视频压缩 提供工程源码和技术支持

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

福利:工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料获取方式:文章末尾的V名片。
网盘资料如下:
FPGA纯verilog代码实现H264视频压缩 提供工程源码和技术支持
FPGA纯verilog代码实现H264视频压缩 提供工程源码和技术支持文章来源地址https://www.toymoban.com/news/detail-456348.html

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

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

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

相关文章

  • FPGA实现HDMI转LVDS视频输出,纯verilog代码驱动,提供4套工程源码和技术支持

    FPGA实现HDMI转LVDS视频输出,纯verilog代码驱动,提供工程源码和技术支持 LVDS协议作为中等速率的差分信号,在笔记本电脑和手机等消费电子领域应用广泛,FPGA实现LVDS视频协议也有广泛应用,一般在军工和医疗领域,LVDS视频相比RGB并行视频传输而言,图像质量和IO数量都有优

    2024年03月20日
    浏览(33)
  • FPGA纯verilog实现 LZMA 数据压缩,提供工程源码和技术支持

    目录 1、前言 2、我这儿已有的FPGA压缩算法方案 3、FPGA LZMA数据压缩功能和性能 4、FPGA LZMA 数据压缩设计方案 输入输出接口描述 数据处理流程 LZ检索器 数据同步 LZMA 压缩器 为输出LZMA压缩流添加文件头 5、vivado仿真 6、福利:工程代码的获取 说到FPGA的应用,数据压缩算法的硬

    2024年02月03日
    浏览(32)
  • FPGA实现MPEG2视频压缩 提供工程源码和技术支持

    MJPEG、MPEG2、MPEG4、H264 是流行且兼容性很高的 4 种视频编码格式。其中 MJPEG 对每帧独立进行 JPEG 图象压缩,而不利用帧间相关性,因此压缩效果较差。 MPEG2、MPEG4 和 H264 会进行帧间压缩,但后两者更复杂,效果也更好。MPEG2 虽然比较老 (1994年),但在低压缩率的条件下与 MPEG

    2024年02月06日
    浏览(33)
  • golang基于FFmpeg实现视频H264编解码

    FFmpeg 是领先的多媒体框架,能够解码、编码、转码、混合、解密、流媒体、过滤和播放人类和机器创造的几乎所有东西。它支持最晦涩的古老格式,直到最尖端的格式。无论它们是由某个标准委员会、社区还是公司设计的。它还具有高度的便携性。 FFmpeg 可以在 Linux、Mac OS

    2024年02月11日
    浏览(35)
  • 【音视频处理】转编码H264 to H265,FFmpeg,代码分享讲解

    大家好,欢迎来到停止重构的频道。 本期我们讨论音视频文件 转编码 ,如将视频H264转H265等。 内容中所提及的 代码都会放在GitHub ,感兴趣的小伙伴可以到GitHub下载。 我们按这样的顺序展开讨论:​ 1、  编码的作用  2、  转编码的工作原理 3、  编解码器安装  4、  示

    2024年02月11日
    浏览(37)
  • FPGA纯verilog实现8路视频拼接显示,提供工程源码和技术支持

    没玩过图像拼接都不好意思说自己玩儿过FPGA,这是CSDN某大佬说过的一句话,鄙人深信不疑。。。 图像拼接在实际项目中应用广泛,特别是在医疗和军工行业,目前市面上的图像拼接方案主要有Xilinx官方推出的Video Mixer方案和自己手撕代码的自定义方案;Xilinx官方推出的Vide

    2024年02月08日
    浏览(30)
  • FPGA实现MPEG2视频压缩PCIe传输 提供软硬件工程源码和技术支持

    MJPEG、MPEG2、MPEG4、H264 是流行且兼容性很高的 4 种视频编码格式。其中 MJPEG 对每帧独立进行 JPEG 图象压缩,而不利用帧间相关性,因此压缩效果较差。 MPEG2、MPEG4 和 H264 会进行帧间压缩,但后两者更复杂,效果也更好。MPEG2 虽然比较老 (1994年),但在低压缩率的条件下与 MPEG

    2024年02月08日
    浏览(31)
  • JAVA实现H264视频流推送到RTSP、RTMP服务----JavaCV

    前提: 1.准备好rtsp、rtmp服务 2.准备好视频流接收程序 基本思路是:启动两个线程,线程1接收视频流,线程2使用JavaCV将视频流推送到RTSP、RTMP服务,两者之间使用管道流进行通信。线程2接收到视频流后的具体操作:启动grabber接收视频流并捕获视频帧,然后启动recoder将捕获的

    2024年02月11日
    浏览(44)
  • FPGA纯verilog实现4路视频拼接,纯逻辑资源搭建,提供4套工程源码和技术支持

    FPGA高端项目:Xilinx Kintex7系列FPGA多路视频拼接 工程解决方案 提供6套工程源码和技术支持 没玩过图像拼接都不好意思说自己玩儿过FPGA,这是CSDN某大佬说过的一句话,鄙人深信不疑。。。 图像拼接在实际项目中应用广泛,特别是在医疗和军工行业,目前市面上的图像拼接方

    2024年02月08日
    浏览(36)
  • FPGA实现 NIC 10G 网卡,纯verilog代码编写,提供工程源码和技术支持

    FPGA实现 NIC 10G 网卡,纯verilog代码编写,提供3套工程源码和技术支持 网络接口控制器(NIC)是计算机与网络进行交互的网关。NIC构成了软件协议栈和网络之间的桥梁,该桥梁的功能定义了网络接口。网络接口的功能以及这些功能的实现都在迅速发展。这些变化是由提高线速和

    2024年02月03日
    浏览(45)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包