H.264中自适应二进制算术编码器的FPGA实现
2009-07-08
作者:王 琨,刘大茂
摘 要: H.264是目前国际上最新、最有前途的视频压缩标准,基于上下文的自适应二进制算术编码是H.264中一种高效的熵编码,但算法比较复杂,执行速度不高。本文提出一种基于流水线的自适应二进制算术编码器的FPGA结构。在实现过程中,对原有的软件流程进行了部分改进以满足硬件实现要求,采用流水线及并行处理技术设计整个电路。
关键词: 算术编码;FPGA;流水线;H.264
随着HDTV与视频会议的兴起,H.264视频编解码技术由于其具有更高的压缩比、更好的图像质量和良好的网络适应性而备受关注。基于上下文的自适应二进制算术编码是H.264标准中的关键技术之一[1],它充分考虑了视频流的相关性,能适应信号统计特性的变化,容易达到渐进性能,是一种高效的熵编码方法。其不足是复杂度大[2],这使得单纯用软件编码难以达到很高的性能,特别是对于实时应用,由于高清晰度视频不能实现实时编码,就需要硬件加速或者设计专门的硬件编码电路。
随着现场可编程阵列FPGA的容量、功能以及可靠性的不断提高,采用FPGA设计自适应算术编码器成为一个新的途径。本文充分利用FPGA高速、实时的特点,对原编码器算法进行优化,采用并行运算及流水线设计,最终在FPGA上以较优的速度和资源实现了硬件编码。
1 自适应二进制算术编码的原理
自适应二进制算术编码的编码过程分为概率估计、二进制算术编码以及区间分割与重整三部分,如图1。
系统以待编码比特(Bin)以及上下文编号(CtxIdx)为输入,其概率模型包括低概率符号(LPS)和高概率符号(MPS)的概率状态(StateIdx)。概率估计模块分为概率状态的初始化和重置与概率模型的更新两部分。概率状态的初始化和重置是指在H.264的基本编码单元——片开始时,某些预定义的概率状态通过特定的概率模型进行初始化。概率模型的更新是指:除一个外,所有概率模性均是自适应模型,在每个符号被编码后会自动更新概率模型。LPS量化后的概率值以σ为编号,进行如图2所示的刷新。刷新的具体过程见参考文献[3]。H.264标准中采取概率状态转移表的方式实现概率状态更新。
二进制算术编码部分采用表格的方式避免了乘法运算。算术编码器内在状态被描绘为两个量:当前间隔范围R和当前编码基础L 。对于Bin的主要编码流程如图3所示,包括R通过给定的概率估计细分,概率模型的更新以及重整,具体流程解释见参考文献[3]。
区间分割与重整部分主要是对编码器存储精度的控制。在CABAC编码器中存储精度要求在8~9位,即如果新的区间范围R不在合法范围[28,29]之内,则需要进行重整化操作。每个周期重整化都要被执行,输出一位或多位数据。
2 自适应算术编码器的改进
H.264标准中的CABAC编码流程是串行的,适合软件实现,但执行速度很慢且效率低下。而硬件实现的最大优势在于其并行性,可以大大提高执行效率。因此,为了设计出高速的编码器电路,在不改变算法实质的前提下,将标准中的编码流程进行相应的改进,以利于硬件实现。本文主要提出以下改进措施:
(1)对概率状态转移表的改进。H.264中对于概率状态的转移通过概率模型索引pStateIdx进行表征。在进行概率状态转移时,首先判断当前Bin是否为MPS,然后再对该Bin查概率状态表进行状态转移,见表1。对概率状态表的硬件实现通常是采用RAM或寄存器堆搭建而成。经过深入分析,发现表中transIdxMPS的值正好是索引pStateIdx值(除62和63以外)加1所得,故对于(pStateIdx,transIdxMPS)表的实现,不再采取RAM方式,而是以选择器和加法器的方式实现,改进后流程如图4。经过硬件验证,发现优化后的面积为原来面积的90%,且不改变关键路径。
(2)对于LPS对应的码字区间宽度R的查找表的改进[4]。如前所述,在CABAC中算术编码采用基于表格的查找法,故区间宽度R的值对应于64×4的RangeLPS表。在设计中,采用64×4的ROM来存放数值。但是依照H.264标准设计,ROM的入口地址不仅取决于6 bit的概率状态索引值σ,还取决于区间宽度参数ρ的值,这种数据依存关系无疑增加了运算量。且输出是串行,不利于流水线设计,这样就将降低了系统的时钟频率。故采用一种并行设计方案,以σ为输入地址查表,结果得到4个不同的输出,将它们锁存后,利用多路选择器以R[7:6]作为控制端选出所需的值。两种不同的实现方式见图5。
(3)对区间重整模块的改进。在重整过程中,必须满足R在[28,29]范围内,每次递归运算后,R可能会变得更小,所以要保持上述要求,就需要对寄存器进行由低位向高位的移位,同时空出来的低位补零,直到第一个非零位在寄存器允许的取值范围移到最高位。当然L也要通过移位与R保持一致的精度。用软件完成概率区间重整需要多次循环,直接串行实现还将占用数量不等的时钟周期。经过仔细研究发现,重整化的循环次数count等于R二进制化值前导零的数目。故R值的更新很简单,只要R左移count位即可,在硬件设计中直接采取移位寄存器即可完成。对于L值的更新较复杂,如果L值移出的count位全为1,则重整化后的L值即为原L值移位count位后的值;否则将移位后L值的最高位置0。总之,采用分离R与L重整的优化方法,使其不必在编码时相互等待,从而加快二元判决编码的速度,改善编码性能。
3 自适应二进制算术编码器的FPGA实现
根据上节的改进编码流程,将整个编码器设计为三个主要模块:概率估计模块、二进制算术编码模块、区间分割与重整模块,如图6所示。电路实现主要分为6级流水线。在第1级流水线中,输入数据进入上下文模型,读取相应数据供后级调用。第2级流水线包含两个模块:概率估计模块和二进制算术编码模块。在软件实现中,这两个模块是串行的,但在硬件设计中,本文抽取两个模块的输入端,同时给它们数据,使其达到并行计算,提高了编码速度。在第3级流水线中,进行的是概率区间R的重整与上下文模型的更新。这也是两个并行运算,同时由于L重整要用到R重整的相关参数,因此放在下一个流水线。第4级流水线完成L的重整。第5级流水线实现数据的最后输出。
在电路设计中,为实现流水线及并行计算,一些关键的模块不可忽略。如采用加法器与选择器完成状态转移表,节约面积;采用移位寄存器完成区间重整,减少运算复杂度,缩短关键路径;采用几个模块并行执行,提高时钟频率等。
4 电路仿真及性能分析
本文的算法经过VC++仿真验证,可对H.264标准中的主要视频码流进行编码,其结果与H.264标准程序JM8.6相同。电路结构采用Verilog语言进行RTL级描述,并用modelsim6.0软件仿真通过。仿真波形如图7所示。
图7 仿真波形
由图7可以看出,数据输出周期数不确定。这是因为,在输出模块对数据进行整理时,其产生的有用数据位数不确定,而只有达到32位时才进行输出,故输出数据的周期性也不确定。
电路在spartan3 FPGA上进行综合、布局布线,使用Synplify工具进行综合,最高时钟频率为90.4 MHz。将综合好的edif电路网表文件输入到后端由FPGA厂商Xilinx提供的Foundation软件进行布局布线,生成二进制流文件,逻辑单元为769,占总资源的22%。
使用本文设计的电路对H.264标准中一些标准视频序列进行测试,序列质量为QP=28,并与H.264标准程序JM8.6、文献[5]中H.264的MQ编码器以及文献[6]中JPEG2000的MQ编码器的编码时间作比较,得出如表2所示的结果。
综上,本文设计的算术编码器在速度上较软件实现及其他硬件电路实现有较大提升,资源占用率也较少,不仅能完成H.264标准中基本档次的编码,还有望应用于更大尺寸、更高质量的实时视频压缩编码。
本文在对H.264标准中自适应二进制算术编码器研究和分析的基础上,提出其FPGA电路结构,采用流水线方式实现了电路。本结构经spartan3 FPGA实现,吞吐量为每周期1 bit,最大时钟频率为90.4 MHz,能够适应H.264中level3及以上档次实时视频编码的要求。
参考文献
[1] OSORIO O,BRUGUERA J.Arithmetic coding architecture for H.264/AVC CABAC compression system.in Proc.Euromicro Symposium on Digital System Design,2004:62-69.
[2] MARPE D,SCHWARZ H,WIEGAND T.Context-based adaptive binary arithmetic coding in the H.264/avc video compression standard[J].IEEE Circuits and Systems for Video Tech,2003,13(7):620-635.
[3] Joint video team(JVT) of ISO/IEC MPEG and ITU-T VCEG draft ITU-T recommendation and final draft international standard of joint video specification[S].Pattaya,Thailand:Final Committee Draft,Document JVT-G050,7th Meeting,2003:7-14.
[4] BOSSEN F.CABAC cleanup and complexity reduction.in Joint Video Team of ISO/IEC JTC1/SC29/WG11 & ITU-T SG16/Q.6 Doc.JVTE086,Geneva,Switzerland,2002(10).
[5] V H Ha,W -S.Shim,J.-W.Kim.Real-time MPEG-4 AVC/H.264 CABAC entropy coder,in Proc.Int.Conf.Comsumer Electron.(ICCE),2005:255-256.
[6] 华林,朱珂,张倩苓,等一种适用于JPEG2000的高速MQ编码器的VLSI实现.固体电子学研究与进展,2002,23(4).