网站建设类论文格式,珠海左右创意园网站开发,推广赚钱的app,wordpress优秀插件目录1、前言2、硬件H.264/AVC视频解码优势3、vivado工程设计架构4、代码架构分析5、vivado仿真6、福利#xff1a;工程代码的获取1、前言
本设计是一种verilog代码实现的低功耗H.264/AVC解码器(baseline )#xff0c;硬件ASIC设计#xff0c;不使用任何GPP/DSP等内核#…
目录1、前言2、硬件H.264/AVC视频解码优势3、vivado工程设计架构4、代码架构分析5、vivado仿真6、福利工程代码的获取1、前言
本设计是一种verilog代码实现的低功耗H.264/AVC解码器(baseline )硬件ASIC设计不使用任何GPP/DSP等内核完全有可综合的verilog代码实现没有任何ip可在Xilinx、Intel、国产FPGA间任意移植 本文详细描述了纯verilog实现设计方案可直接项目移植适用于在校学生做毕业设计、研究生项目开发也适用于在职工程师做项目开发可应用于医疗、军工等行业的视频解码领域提供完整的、跑通的工程源码和技术支持 本设计只做到了仿真层面并验证通过并没有实际应用于真实项目但理论上讲是可行的作为研究FPGA实现H.264的学习性参考资料很完美既有verilog源码又有仿真文件作为工程应用可能需要自行搭建使用平台我也可以提供技术支持 H.264和AVC是两个不同机构定义的不同名称其实质是同一个东西也就是视频压缩和解压的算法由于叫的人多了也就习惯叫H.264了不必纠结这些名称性的东西。 关于H.264编解码的理论知识请看官自行搜索CSDN也有很多大佬写得很详细我就不写这部分了我们详细讲讲用verilog实现的过程和本工程的组成结构。
2、硬件H.264/AVC视频解码优势
本H.264/AVC解码器(baseline)具有以下特点 一个字牛逼表现如下 1Verilog-HDL实现没有任何IP核学习性和阅读性达到天花板 2目前只支持QCI分辨率(176X144)的实时H.264/AVC解码但可修改代码以适应更高分辨率视频 3由于使用verilog代码实现所以具有流水线操作和并行操作的特点解码速度直接拉满 4帧间和帧内自适应流水线设计 5分层内存组织设计减少外部内存访问 6低开销的帧内预测单元 7优化的帧间预测单元运动补偿 8最大频率200MHz可提供高达980kMB/s的吞吐量 9QCIF 30fps的实时解码仅需约1.5MHz时钟只有169k个逻辑门实测功耗低至293µW 10移植性达到天花板Xilinx、Altera和国产FPGA之间自由移植 以Virtex-4 xc4vlx200的FPGA实现本解码器的资源消耗如下 用专用ASIC实现本解码器的资源消耗如下
3、vivado工程设计架构
vivado工程设计架构如下 代码运行仿真流程如下 1使用10个300帧的QCIF视频序列作为输入源它们由JM94软件编码产生位TXT文件生成的模拟视频流文件放在仿真文件夹下如图 2测试视频RAM负责将读取视频流文件送到H264解码器进行解码该模块由H264解码器的视频流控制模块控制只作为仿真应用在实际使用中并不需要模块很简单源码如下
module Beha_BitStream_ram(input clk ,input BitStream_ram_ren ,input [16:0] BitStream_ram_addr, output reg [15:0] BitStream_ram_data
);reg [15:0] BitStream_ram[0:Beha_Bitstream_ram_size]; initial begin$readmemh(akiyo300_1ref.txt,BitStream_ram);endalways (posedge clk)if (BitStream_ram_ren 0) BitStream_ram_data #2 BitStream_ram[BitStream_ram_addr]; endmodule3H264解码器当测试视频RAM深度填充至一半时开始发送测试视频流给到H264解码器H264解码器由视频流控制器和数据重构解析器组成如下 其中的4×4/16×16混合流水线机制如下 关于H264解码器具体代码级详情请联系我看源码不是我不愿具体写而是代码量实在有点大写不完也装不下如果具体写的话估计得出5本书。。。 H264解码器顶层接口如下
module helai_h264_decode (input clk ,input reset_n ,input [15:0] BitStream_buffer_input,input pin_disable_DF ,input freq_ctrl0 ,input freq_ctrl1 , output BitStream_ram_ren ,output [16:0] BitStream_ram_addr ,output [5:0] pic_num ,//---ext_frame_RAM0---output ext_frame_RAM0_cs_n ,output ext_frame_RAM0_wr ,output [13:0] ext_frame_RAM0_addr ,input [31:0] ext_frame_RAM0_data ,//---ext_frame_RAM1---output ext_frame_RAM1_cs_n ,output ext_frame_RAM1_wr ,output [13:0] ext_frame_RAM1_addr ,input [31:0] ext_frame_RAM1_data ,output [31:0] dis_frame_RAM_din ,output slice_header_s6 );4乒乓RAM设置了两个乒乓RAM一个用来缓存一帧数据作为H264解码器解析用比如帧预测另一个作为输出显示的缓存当其中一个RAM完成自己的任务时H264解码器控制二者角色互换RAM顶层接口如下 H264解码器通过片选信号ext_frame_RAM0_cs_n达到控制二者乒乓效果
module ext_frame_RAM0_wrapper (input clk , input reset_n ,input ext_frame_RAM0_cs_n,input ext_frame_RAM0_wr ,input [13:0] ext_frame_RAM0_addr,input [31:0] dis_frame_RAM_din ,input [5:0] pic_num ,input slice_header_s6 ,output reg [31:0] ext_frame_RAM0_data
);5视频输出 H264解码器解码后的视频颜色空间为YUV4:2:0需要转换为YUV4:4:4或者RGB8:8:8再输出显示框图如下
4、代码架构分析
总体代码架构如下 下面我们重点看看H264解码器代码级组成 视频流控制器完整verilog代码组成如下 数据重构解析器完整verilog代码组成如下 关于H264解码器具体代码级详情请联系我看源码不是我不愿具体写而是代码量实在有点大写不完也装不下如果具体写的话估计得出5本书。。。
5、vivado仿真
仿真后H264解码器会输出两个文件文件位置如下 h264_display.txt存放H264解码器输出的像素数据可以将此文件转成图片显示 h264_MB_output_debug.txt存放H264解码器输出的debug数据可清晰看到输出过程如下
6、福利工程代码的获取 福利工程代码的获取 代码太大无法邮箱发送以某度网盘链接方式发送 资料获取方式私或者文章末尾的V名片。 网盘资料如下