摘要:H.264是国际上最新、最有前途的视频压缩标准,基于上下文的二进制算术编码器(CABAC)是H.264中一种高效的熵编码器,但其算法比较复杂,吞吐量不高。为此,提出了一种高吞吐量算术编码器的电路结构。在递归过程中,通过对两个符号的同时处理而提高吞吐量,从而提高编码速度。整体的电路采用流水线结构,该结构在spartan3 FPGA上实现,编码速度达到2bits/cycle,最高的时钟频率可达67.5MHz。 关键字:H.264;算术编码;FPGA;流水线
1 引言
H.264是由ITU-T和ISO/IEC的联合开发组共同开发的最新国际视频编码标准[1]。基于上下文的自适应二进制算术编码(Context-based Adaptive Binary Arithmetic Coding,CABAC)是H.264/AVC标准中的关键技术之一[2],它充分考虑了视频流的相关性,能适应信号统计特性的变化,容易达到渐进性能,是一种高效的熵编码方法。它的主要不足就是复杂度大[6],这造成了单纯用软件编码难以达到很高的性能,特别是对于实时应用,对于高清晰度视频不能实现实时编码,这样就需要硬件加速或者设计专门的硬件编码电路。
目前,对于CABAC中的算术编码单元主要采用Q和M系列编码器来实现。QM编码器设计较早,其算法较复杂且速度也较慢;MQ编码器是基于QM编码器的新设计,速度有所提高,但算法依然较复杂。
频繁的区间重整和复杂的字节输出是实现MQ编码器的难点。本文根据MQ编码器自身的特点,提出了区间重整的硬件加速算法,即每个周期同时处理两个符号,设计了基于FIFO的高吞吐率输出模块,并对流水线进行合理调配,使其在FPGA上以较优的速度和资源实现了流水线结构并提高了吞吐量。
2 MQ编码器的原理
MQ编码器的结构分为概率估计、区间分割与重整以及进位输出三部分,如图1。 
系统以待编码比特(Bin)以及上下文编号(CtxIdx)为输入,其概率模型包括低概率符号(LPS)和高概率符号(MPS)的概率状态(StateIdx)。概率估计部分根据CtxIdx读取概率模型,查找状态转移表得到更新的概率模型并写入上下文存储器,概率区间以宽度R和下界L表示,在区间分割过程中按表1进行修正,其中rlps代表LPS的概率。

表1 MQ编码器区间分割基本流程表
在重整过程中,必须满足R在[0x100,0x1FF]的范围内,每次递归运算后,R可能会变得更小,所以要保持上述的要求,就需要对寄存器进行由低位向高位的移位,同时空出来的低位补零,直到第一个非零位在寄存器允许的取值范围移到最高位。当然L也要通过移位与R保持一致的精度。采用MQ编码器,其区间重整过程较复杂,且吞吐量不高,一个周期最多处理一个符号。MQ编码器具体的区间重整过程可参见文献[3]。
3 高吞吐量算术编码器的原理
为了达到更高的吞吐量,提出了基于MQ编码器的双符号算法。在区间重整和分割时,采用在一个周期内同时处理两个符号的方法,这样可以使吞吐量变为原来的两倍。
在CABAC编码器中,待编码比特分为低概率符号(LPS)、高概率符号(MPS)和等概率符号(EQ)。等概率符号不存在概率模型,而三种概率符号均要进行区间分割与重整。双符号算法的要点就是把一个EQ和一个MPS或LPS同时处理或者是把两个EQ同时处理。即一个EQ可以和MPS、LPS、EQ中的任何一个符号同时处理。R和L在区间分割与重整过程中的具体流程如表2。也可以用这种方法把三个或更多的符号同时处理,但这会增加一个周期的时间。
4 硬件结构
由于算术编码的递归性,数据的延迟可能给流水线结构造成困难。但是从表2可以看出,L的重整要依赖于R,而R却不依赖于L,因此两个参数的重整可以分开进行。硬件设计采用两级流水线结构,这样可以提高处理速度。具体结构如图2所示。

图2 高吞吐量编码器基本结构图

图3 R更新图

图4 L预估计图
如图2所示,从输入到并行的六个寄存器为第一级流水线,以后为第二级流水线。在第一级流水线中,使用两个R更新模块同时对两个输入符号的区间宽度R进行更新和重整。R更新模块的结构如图3所示,对于MPS,选择减法器输出的结果进行重整并作为最后输出;对于LPS,选择rlps进行重整,由于要使R在[0x100,0x1FF]的范围内,因此采用和文献[4]相似的首一检测器(LOD)和移位电路,并作为最后输出;对于EQ,在R更新模块中不采取任何措施。对于L的重整,除了移位之外还包括减法和乘法运算,因此要进行L预估计,其结构如图4所示。它的结构流程如表2的最后一行所示,以待编符号1和待编符号2的移位值对L分别进行移位。当计算出L预估计和L的值后,将两者相加作为输出并将低十位再赋给L。由图2可知,第一级流水线的关键路径是R更新模块,因而同时处理两个符号并不会影响关键路径。
5 试验结果
本文的算法经过VC++仿真验证,可对H.264标准中的主要档次视频码流进行编码,其结果与H.264标准程序JM8.6相同。电路结构采用Verilog语言进行RTL级描述,并用modelsim6.0软件仿真通过,使用spartan3 FPGA进行综合、布局布线,面积和时间结果如表3。其中逻辑单元298(占16%),存储单元24(占13%),最高的时钟频率可达67.5MHz。
|
模块 |
面积/单元数 |
周期/ns |
|
R更新模块 |
168 |
14.8 |
|
L更新模块 |
154 |
9.1 |
|
总计 |
322 |
14.8 |
表3 高吞吐量算术编码器硬件实现资源表
本文对MQ编码器的最大改进是同时处理两个符号,和文献[5]H.264中的MQ编码器以及文献[4]JPEG2000中MQ编码器作比较,得出如表4所示的结果。
|
类别 |
速度(Mhz) |
吞吐量(bit/circle) |
延迟 |
面积 |
|
本文 |
67.5 |
2 |
3 |
322 |
|
常规 |
30 |
0.2 |
5 |
478 |
|
JPEG2000 |
50 |
2 |
4 |
898 |
表4 不同算术编码器硬件实现的资源对比
通过上表可以看出,与H.264中的常规MQ编码器以及JPEG2000中MQ编码器相比,本文设计的算术编码器无论在速度、吞吐量、延迟和面积上均有所的提高,因而不仅能完成H.264标准中基本档次,还有望应用于更大尺寸更高质量的实时视频压缩编码。
6 结论
本文在对H.264视频压缩标准所采用的MQ编码器进行研究和分析的基础上,提出了一种高吞吐量的电路结构,采用流水线方式实现了电路。本结构经spartan3 FPGA实现,吞吐量为每周期2bits,最大时钟频率为67.5Mhz,能够适应H.264中level3乃至其上档次实时视频编码的要求。
参考文献
[1] 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.
[2] R. Osorio, J. Bruguera, “Arithmetic coding architecture for H.264/AVC CABAC compression system,” in Proc. Euromicro Symposium on Digital System Design, 2004, pp. 62–69.
[3] Detlev Marpe, Heiko Schwarz, Thomas Wiegand. 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.
[4] 华林,朱珂,张倩苓等,一种适用于JPEG2000的高速MQ编码器的VLSI实现,固体电子学研究与进展,Vol:23, No.4, 2002
[5] V. H. Ha, W.-S. Shim, and J.-W. Kim, “Real-time MPEG-4 AVC/H.264 CABAC entropy coder,” in Proc. Int. Conf. Comsumer Electron. (ICCE), vol. 2005, pp. 255–256.
[6] 纪永昌,孙军温.H.264/AVC的复杂度分析以及实时实现[J] .微计算机信息,2007,
1-3 :P269-270
|