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

news2024/12/25 9:10:50

这里写目录标题

  • 1、前言
  • 2、我这里已有的视频图像编解码方案
  • 3、H264视频压缩理论
  • 4、H264视频压缩-性能表现
  • 5、H264视频压缩-设计方案
  • 6、Vivado工程详解
  • 7、Vivado功能仿真
  • 8、福利:工程代码的获取

1、前言

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

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

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视频压缩-设计方案

设计框图如下:
在这里插入图片描述
输入: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资源消耗如下:
在这里插入图片描述

7、Vivado功能仿真

由于仿真过程比较复杂,我专门做了一个PPT教程,详细讲述了仿真流程,手把手教程,PPT教程一并在资料包里给出;位置如下:
在这里插入图片描述
正确仿真的结果如下:
在这里插入图片描述
在这里插入图片描述

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

福利:工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料获取方式:文章末尾的V名片。
网盘资料如下:
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/535346.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java+springboot基金股票信息系统的设计与实现

Spring Boot 是 Spring 家族中的一个全新的框架,它用来简化Spring应用程序的创建和开发过程。也可以说 Spring Boot 能简化我们之前采用SSM(Spring MVC Spring MyBatis )框架进行开发的过程。基于JAVA的基金分析系统包括后台管理和前端。前…

31从零开始学Java之详解如何定义方法

作者:孙玉昌,昵称【一一哥】,另外【壹壹哥】也是我哦 千锋教育高级教研员、CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者 前言 经过前面两篇关于面向对象、类和对象的文章,壹哥相信你现在对面向对象已经有了基本的了解…

微信小程序配置实现中英文国际化语言切换

目录 1,在根目录新建文件夹和js文件 2. 在main.js中设置全局语言状态(默认设置为中文) 3. 页面添加 语言切换按钮(登录页面) 4. 在需要显示的页面导入使用 1,在根目录新建文件夹和js文件 根目录新建一个locales.js文件, 通用…

苹果手机通话怎么录音?通话录音的详细教程!

案例:iPhone怎么一边通话一边录音? 【苹果手机通过普通的方式不能边通话边录音,有什么方法可以帮到我吗?感谢!】 录制通话可以帮助用户记录重要的电话内容,如商务谈判、家庭事务等。但是录音涉及隐私&…

Java基础(41)Java输入/输出流

在Java中所有数据都是使用流读写的。流是一组有序的数据序列,将数据从一个地方带到另一个地方。根据数据流向的不同,可以分为输入(Input)流和输出(Output)流两种。 什么是输入/输出流 Java 程序通过流来完…

Unity3D :创建您的第一个运行时 UI

ygtu May 16, 2023 • 27 min read 推荐:将 NSDT场景编辑器 加入你的3D工具链 3D工具集: NSDT简石数字孪生 创建您的第一个运行时 UI 本页将指导您完成使用 UI 工具包设置简单字符选择屏幕的步骤。它涵盖了 UI 元素和模板的创建、场景设置以及如何将脚…

公网SSH远程连接Termux - 电脑使用安卓Termux【cpolar内网穿透】

文章目录 1.安装ssh2.安装cpolar内网穿透3.远程ssh连接配置4.公网远程连接5.固定远程连接地址 使用安卓机跑东西的时候,屏幕太小,有时候操作不习惯。不过我们可以开启ssh,使用电脑PC端SSH远程连接手机termux。 本次教程主要实现在安卓手机te…

如何提高PID控制器离散化精度(SCL+梯形图代码)

通常采样率(执行频率)1/Ts的典型取值为闭环带宽的5~10倍。实际上大部分工程采样率范围会使我们所期望的闭环性能下降,要忽略采样造成的影响,采样率至少是典型值的10倍。原则上,采样率1/Ts在允许的计算能力范围内越大越好。当采样率较低时,提高PID控制器离散化精度的一种方…

DSSR122 4899001-NK汽车电子电气架构进化的终点在哪里

​ DSSR122 4899001-NK汽车电子电气架构进化的终点在哪里 随着人们对汽车性能要求的不断提高,越来越多的汽车电子/电气(E/E)架构系统被集成到汽车中,成为智能交通、自动驾驶、智能城市等更广泛生态系统的组成部分。汽车行业自动化…

Spring Boot 集成 Redis

Spring Boot 集成 Redis 一 集成Jedis1.1 Jedis1.2 集成步骤1.2.1 建Module1.2.2 改POM1.2.3 写YML1.2.4 主启动1.2.5 业务类 二 集成lettuce2.1 lettuce2.2 lettuce Vs Jedis2.3 集成步骤2.3.1 改pom2.3.2 业务类 三 集成RedisTemplate3.1 单机集成3.1.1 POM3.1.2 YML配置3.1.…

terrapos处理pospac数据(二)

上篇(参考文献2)说到terrapos不能处理pospac中的GPS数据,博主猜测可能的原因是没有记录主天线、方向天线和差分天线的原始数据,但是,即使记录这三种原始数据,当从pospac中提取IMU和GPS数据的时候&#xff0…

macOS Ventura 13.4 RC3(22F66)发布

系统介绍 5 月 17 日消息,苹果今日向 Mac 电脑用户推送了 macOS 13.4 RC 3 更新(内部版本号:22F66),本次更新距离上次发布隔了 5 天。 macOS Ventura 带来了台前调度、连续互通相机、FaceTime 通话接力等功能。其中&…

我和C++的故事---第一次见面.

📝个人主页:认真写博客的夏目浅石. 🏠学习社区:夏目友人帐. 文章目录 前言一、第一个C程序二、C 关键字(C98)三、命名空间1、命名空间的定义2、命名空间的使用3、命名空间的三种展开方式 四、C输入&&输出&&换行1、…

doxygen: 在Windows上源码编译

文章目录 1. 目的2. 思路3. 安装 Chocolatey4. 用 choco 安装 bison 和 flex安装 gs:安装 libiconv 5. 编译报错 1. 目的 在 windows 上源码编译 doxygen, 改代码加功能。 2. 思路 doxygen 依赖 flex 和 bison, 手动编译 flex 和 bison 很麻烦可以用…

孤独患者的树洞?AI情感陪伴是如何实现的?

一、人工智能大模型 自ChatGPT发布以来,越来越多的中国企业和研究机构扎堆冲入AI大模型赛道,试图在自然语言处理、机器翻译、问答等方面取得重大突破。在未来,这些模型有机会应用于金融、医疗、电商等各领域。 人工智能大模型的应用不仅可以…

矿山电子封条 yolov8网络模型

矿山电子封条通过yolov8网络模型利用AI图像智能视频识别等技术,矿山电子封条yolov8网络模型智能分析异常情况,包括不限于人数变化情况、出入井人员以及相关现场设备开停状态进行自动全天候远程监控。YOLOv8 主要参考了最近提出的诸如 YOLOX、YOLOv6、YOL…

为什么Windows/Linux 的端口数量最大限制为65535?

端口0:一般是用来表示所有端口,即1–65535。另外其他答主也提到1–1024是知名端口号,但那是很久以前数据,是该更新了。举几个大于1024的知名端口号:1614/1615:思科ISE用于AAA的端口号1812/1813:…

【腾讯云 Finops Crane 集训营】基于 Kubernetes 实现云资源分析与成本优化平台

基于 Kubernetes 实现云资源分析与成本优化平台 一、基本介绍1.主要功能2.整体架构 二、基于 Kubernetes 实现云资源分析与成本优化平台1.准备工作2.安装 Prometheus/Grafana 软件包3.安装 Crane 软件包4. 使用智能弹性 EffectiveHPA4.配置集群 三、功能验证1.成本展示2.资源推…

3分钟了解FactoryBean的作用和底层工作原理

大家好,我是冰点,本节我们通过对FactoryBean 接口源码解析,以及使用示例剖析,让大家3分钟了解FactoryBean的作用和底层工作原理。以及FactoryBean的使用场景,学以致用。 FactoryBean是Spring框架中的一个接口&#xf…

基于 resnet 对 CIFAR-10 图片进行分类和网络微调

本文基于李沐老师的 实战 Kaggle 比赛:图像分类 (CIFAR-10) 文章目录 数据格式数据加载标签转化划分数据集查看数据搭建网络主训练函数网络训练 数据格式 CIFAR-10 下载地址:https://www.kaggle.com/competitions/cifar-10/data 下拉到最下面有一个 Do…