您的位置 首页 产品

H.264/AVC中CAVLC编码器的硬件规划与完成

设计了一种H.264标准的CAVLC编码器,对原有软件流程进行部分改进,提出了并行处理各编码子模块的算法结构。

H.264/AVC是ITU-T和ISO联合发布的世界视频压缩规范[1],比特压缩率别离是MPEG-4、H.263及MPEG-2的39%、49%及64%[2],是一种高压缩比的新规范。根据内容的自适应可变长编码(CAVLC)是H.264中关键技术之一,应用于H.264的根本层次和扩展层次对亮度和色度残差数据块进行编解码,编码功率高,抗误码和纠错能力强[3],但核算复杂度大,用软件编码难以满意高清视频实时性要求。H.264编码进程不触及任何浮点数运算,特别合适硬件电路完结。文献[4]提出的CAVLC编码可分红扫描和编码2部分,扫描部分对残差数据zig-zag逆序扫描后,提取出run-level标志以及相关信息供给给编码部分进行编码。文献[5]对扫描模块进行了优化。编码模块中非零系数级(level)编码核算量最大,复杂度最高。本文充分利用FPGA高速实时特色,选用并行处理及流水线规划,通过优化CAVLC编码结构和level编码子模块,进步CAVLC编码器的功能。

1 CAVLC原理

CAVLC是一种根据4×4块改换系数的zig-zag扫描次序进行的编码算法。块系数的非零系数幅值较小,首要会集在低频段,通过zig-zag扫描后,接连零的个数较多,选用run-level游程编码,通过编码5个语义元素能够完结高效无损压缩,编码流程如图1所示。zig-zag扫描后,次序编码系数符号(coeff_token)。尾1的符号(trailing_ones_sign_flag)、除尾1外非零系数的级(level),最终一个非零系数前零的个数(total_zeros)和零的游程(run_before)。其间TC、T1、T0别离表明非零系数个数、尾1个数以及最终一个非零系数前零的个数。因为CAVLC编码流程是串行的,软件简单完结,但履行速度慢且功率低。

2 CAVLC编码器硬件结构规划

2.1 并行化编码结构

为了进步运算速度和功率,将图1的CAVLC编码流程并行化处理,合适FPGA完结。根据文献[4]提出的思路,将CAVLC编码分红扫描和编码2部分,见图2。由zig-zag逆序扫描、核算、编码、码流整合4个模块组成。zig-zag模块和核算模块构成扫描部分,编码模块和码流整合模块构成编码部分,体系选用状态机操控。因为trailing_ones_sign_flag、level和run_before都是从zig-zag扫描后序列的尾部开端编码,所以本规划中zig-zag选用逆序扫描。核算模块用计数器核算zig-zag逆序扫描输出序列的TC、T1和T0,将尾1符号(T1_sign)、除尾1外的非零系数(coeffs)和零的游程(runbefore)存入缓存器并输出。编码模块分红6个子模块:NC生成模块、coeff_token模块、trailing_ones_sign_flag模块、level模块、total_zeros模块以及run_before模块。核算模块给各编码子模块供给输入数据,确保各编码子模块并行作业,减少了CAVLC编码的时钟周期,进步了编码器履行功率。因为CAVLC编码是变长的,使得每个编码子模块的输出码流长度不确定,各编码子模块的码字寄存器宽度不同。为了确保各编码子模块生成的码字能够紧凑无缝链接和有用存储,在各编码子模块的码字输出中嵌入输出标志信号和码长信息,当输出标志信号为高电平时码字与码长有用,低电平时则无效,经码流整合模块整合后输出。

2.2 level编码的优化完结

非零系数级编码是CAVLC编码中复杂度最高、核算量最大、编码延时最长的部分也是CAVLC编码器高速、高效运转的瓶颈之一。根据H.264中CAVLC的level解码进程[6]可规划出相应的编码流程,如图3所示。

(1)初始化suffixlength为0,假如TC>10,而且T13,则初始化为1。
(2)核算中心变量levelcode[i]:

(5)写码字。
非零系数级的码字为“前缀码字+后缀码字”,前缀码字为prefix个0后紧跟一个1(即前缀码字为1,码长为prefix+1),后缀码字值为suffix,码长为levelsuffixsize。

根据图3编码流程,level编码所需的时钟周期与TC和T1之差有关,不同的数据块所需的时钟周期不同,而编码前需通过扫描和核算。当非零系数较多时,level编码选用传统的串行方法所需的时钟周期或许比核算模块所耗要多,导致不安稳的吞吐量。另一方面,取得level的码字需知道该系数的prefix、suffix以及levelsuffixsize,而levelsuffixsize的巨细是自适应改变的,与上一个已编码系数的绝对值巨细有关,这给并行处理带来了必定困难。为此,选用并行处理和两级流水线相结合的结构并行处理2个非零系数,如图4所示。榜首级初始化suffixlength,求coeffs的绝对值及中心变量levelcode;第二级更新suffixlength,核算prefix,suffix和levelsuffixlength。模块coeffs SIPO buffer完结串行输入并行输出,输入输出联系如图5所示。

3 试验验证剖析

Level编码电路结构选用Verilog HDL言语描绘,在ModelSim SE 6.0上进行仿真,运用Synplicity公司的Synplify Pro完结归纳进程。最终选用Xilinx公司VirtexⅡ系列的xc2v250 FPGA进行完结和验证。
图6给出了ModelSim的仿真波形,其结果与JVT校验软件模型JM16.2[7]的值共同。从图6能够看出,并行编码TC-T1个level值比串行方法节约(TC-T1)/2个时钟周期,当非零系数较多时,也能取得安稳的吞吐量。表1给出了Synplify Pro归纳的硬件资源陈述。体系答应的最高时钟频率为158.1 MHz,硬件资源耗费如表1所示。综上所述,本规划满意H.264实时高清视频编码的要求。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/chanpin/196852.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部