APP下载

H.264/AVC中CAVLC编码器的硬件实现

2011-06-07李程达

电视技术 2011年18期
关键词:码表码字编码器

李程达,陈 炜

(福建邮科通信技术有限公司,福建 福州 350002)

0 引言

H.264/AVC作为新一代视频压缩技术,引入了CAV⁃LC和CABAC两种全新的熵编码方法。CAVLC和CA⁃BAC是在充分考虑编码数据特性的基础上对数据进行压缩,算法利用了相邻数据间的相关性,可以动态调整编码表,这些都为H.264/AVC的高压缩率奠定了基础。其中,CAVLC根据已编码句法元素的情况,动态调整编码中使用的码表,取得了极高的压缩比。本文在对CAVLC编码原理分析的基础上,优化了相关算法,并针对该算法设计了相应的电路结构,实现了待编码残差块的数据特征处理,简化了后续运算的复杂性,提高了处理能力。

1 算法描述

在H.264/AVC中,CAVLC用于亮度和色度残差块数据的编码,其利用了4×4量化块的多种特性,例如,4×4块经过预测、变换、量化后,非零系数主要集中在低频部分,在经过zig-zag扫描后高频系数部分连续零个数较多,量化后在数据经过zig-zag扫描得到的数据序列中,DC系数附近的非零系数幅值较大,最后高频位置上的非零系数值通常是1或-1。相邻的 4×4块的非零系数的数目是相关的,非零系数数目用查找表的方式编码,查找表的选择取决于相邻块非零系数数目,体现了基于上下文设计的思想[1]。

CAVLC制定了可自适应动态调整的码表,将非零系数值Level和零游程Run分开编码,进一步减少了数据中的冗余信息,为H.264/AVC卓越的编码效率奠定了基础。其编码过程描述如图1所示。

2 CAVLC编码器设计

2.1 算法优化

对CAVLC的5个流程分析后可以发现,顺序步骤之间并没有很强烈的数据依赖关系,考虑硬件实现的优势是可以将编码的流程并行计算,因此针对硬件实现,对编码的软件算法进行了优化改进,具体如下:

1)改变编码的顺序流程,将5个步骤所需的参数计算部分并行执行,从而减少时钟周期的损耗。

2)结合编码过程对数据序列中的数据进行分析,编码需要用到的是残存块数据的3种特征,分别为是否为0、是否为1和系数符号。考虑到硬件实现过程中位运算的独特优势,分别用标志位的方式来标示整个数据序列的数据特征。在编码过程中,对数据序列的大部分运算操作转化为对标志位的位运算,这样不但减少了硬件逻辑的损耗,同时进一步提高了处理速度,例如,对于扫描后数据序列0,3,0,1,-1,-1,0,1,0,0,0,0,0,0,0,0,用16 bit的标志位分别标示16个数据的非零属性,得出标志为0101 1101 0000 0000(1表示该位对应的系数为非零系数,0表示该系数为0),为1属性标志为0001 1101 0000 0000(1表示该位对应的系数幅值为1,0表示该系数幅值不为1),负数属性标志为 0000 1100 0000 0000(1表示该位对应的系数为负数,0表示该系数为正数)。

3)在图1的步骤1中,定长表格的码字是6 bit,高4 bit表示非零系数数目TotalCoeffs,最低2 bit表示拖尾系数的数目T1s,因此可以利用算术运算代替查表操作,节省电路面积。

2.2 编码器结构

在CAVLC编码过程中,除句法元素Level之外,其余元素的编码都是根据标准定义的码表,求出相应的入口地址得到该句法元素对应的编码码字。基于上述算法优化的思想,在对系统进行模块划分后,本文提出了一种高效的CAVLC编码器实现方法,其硬件结构框图如图2所示(CAVLC编码器部分用实线框表示,虚线框代表在整个H.264/AVC编码器系统中与CAVLC相关的前后接口模块)。其中虚线为控制信号,实线为数据流。

该结构将CAVLC编码的5个子流程归为3个部分,其中参数计算编码部分完成了非零系数总数Totalcoeffs和拖尾系数数目T1s、拖尾系数符号T1s_sign、最后非零系数前零总数TotalZeros的编码。同时,将除拖尾系数之外的非零系数幅值Level和每个非零系数前零个数Run_before的编码过程分开独立进行,对3个部分分别设计了具体的运算电路。为了进一步减少电路规模,在电路中加入了预处理模块,对经过zig-zag扫描后的4×4残差块数据序列进行数据特征的抽象,简化了后续模块计算的复杂性。整个系统主要由以下部分构成:预处理模块、Level重映射与编码部分、参数计算与编码部分、Run_before计算与编码部分以及控制器。

系统的编码流程由控制器控制,控制器由一个Mealy型有限状态机实现,其状态转移图如图3所示。系统复位后进入Idle状态,各模块进行初始化工作,预处理模块并行地接收来自系统外部,经过zig-zag扫描后的4×4块数据,对数据处理后得到相应的数据特征标志。随后系统启动参数计算器(Cal状态),参数计算器计算得出非零系数总数Totalcoeffs、拖尾系数数目T1s、拖尾系数符号T1s_sign和最后非零系数前零总数TotalZeros(CalTo⁃talzeros状态)。接下来,控制器根据参数计算器中模块的输出信号启动参数编码模块、Level重映射模块(CT_Lmap状态)。当Level重映射完成之后,控制器启动Level编码器(CodeLevel状态)。待Level编码完成后,Run_before计算与编码部分开始工作,输出Run_before编码后的码字信息(Code_Runbefore状态)。编码完CAVLC所有句法元素后,重新读取下一个4×4块开始下一轮残差块的编码。此外,在编码过程中,各个编码模块向外部输出码字的数值和长度、系统外部的码字重组、生成模块根据码字的信息,完成码流顺序的调整并生成相应的二进制码流。

2.3 参数计算与编码

参数计算器完成对参数Totalcoeffs,T1s,T1s_sign和TotalZeros的计算,其结构如图4所示。在参数计算器中共有4个独立的电路功能模块,通过对数据特征标志的计算得到参数,具体电路采用移位寄存器、判断逻辑等结构实现。参数编码器结构如图5所示,参数的编码是基于码表进行的。Coeff_token的编码需要总共5个码表,其中,定长表格以逻辑计算代替查表操作,其余4个表格存放在ROM1中。在TotalZeros编码过程中,对于4×4块和2×2块情况下的码表分别存于ROM2和ROM3中,每个编码模块完成编码后,输出相应码字信息,包括码字值codeword和码字长度codelen。

2.4 Level编码

Level编码器结构如图6所示,控制器根据输入的To⁃talcoeffs和T1s初始化suffixlength,通过信号sel选通MUX依次对Level1~Level16进行编码,编码完成后输出前缀值prefix,后缀值suffix和后缀长度suffixsize,最后控制器根据当前已经编码的非零系数幅值是否大于相应的阈值对suffixlength进行更新。其中,Level编码运算过程在模块Levelcode_gen中实现。

3 实现结果

用Verilog HDL语言对本文提出的电路结构进行RTL级描述,采用Synopsys的Design Compiler在SIMC 0.18 μm CMOS单元库下综合,最大限制频率为181 MHz时,规模为2 660门。本文在仿真时采用JVT提供的JM8.6 C程序产生码流进行了测试,RTL级模型的仿真结果和C程序的运算结果一致。仿真结果显示,在工作频率为181 MHz的情况下,本文设计的数据吞吐率为41.97 Msample/s。实现对高清格式视频(分辨力为1 280×720,30 f/s)的实时处理,需达到的数据吞吐率为41.472 Msample/s(1 280×720×1.5×30)。可以看到,本文提出的CAVLC编码器设计方案满足对高清格式视频的实时处理。

4 小结

本文提出了一种适用于H.264/AVC的CAVLC编码器优化算法及其电路结构,通过对编码流程的重新划分,安排了紧凑的控制时序,并在电路中设计了数据特征提取的电路单元,减少了后续模块运算的复杂性。实验结果表明,本设计电路规模约为2 660门,能够以41.97 Msample/s的数据吞吐率对视频进行处理。与同类设计相比[2],电路规模小,处理能力高,可方便用于H.264/AVC编码芯片中,也可作为IP核嵌入到特定目的的处理器或DSP中。

[1]ITU-T Rec.H.264/ISO/lEC 14496-10 AVC,Drafl ITU-T recommendation and final drafl intemational standard of joint video specification[S].2003.

[2]CHEN T C,HUANG Y W,TSAI C Y,et al.Architecture design of context-based adaptive variable-length coding for H.264/AVC[J].IEEE Trans.Circuits and Systems II:Express Briefs,2006,53(9):832-836.

猜你喜欢

码表码字编码器
放 下
iGPSPORTiGS618智能GPS码表测评
基于FPGA的同步机轴角编码器
数据链系统中软扩频码的优选及应用
放下
基于双增量码道的绝对式编码器设计
皱皱眉头就是一首诗
廉价亲民黑鸟单车BB10 GPS码表评测
JESD204B接口协议中的8B10B编码器设计
轻松上手 码表踏频组