图4中,首先由预处理器判断目前比特所进行的编码,在EGK编码中,主要采用首一检测及桶形移位技术实现,最后将两种编码相加输出。
对于UEGK0和UEGK3编码模块,只需选取不同阈值可实现。对于语法元素mb_qp_delta,采用有正负符号的EGK编码,正负号由语法元素值的奇偶性决定。对于语法元素coded_block_patterm,则采用FL与TU相结合的编码方式,因FL与TU编码的数据量均不大,故采用查表方式实现,这样可提高速度,其中FL编码的界限值为15,TU编码的界限值为2。
第3级流水线的主要功能是选择。第2级输出包括已编元素(binary_value)和上下文模型参量(ctxOffset0、ctxOff-set),在第3级中,通过选择信号(selector)对不同输出作以选择。第4级流水线为32位先进先出(FIFO)存储器。对结果进行缓存,有利于下一级处理。
第5级为串行化器,主要对二进制化的数据进行处理,使其按位输出,并将二进制化后的每一位加入其对应的上下文模型,以便后续处理。整个系统的输出即为二进制化后的每位数据(sda)及其偏移(ctxIdxl)。
5 电路仿真及性能分析
该算法经VC++仿真验证,可对H.264标准中的主要档次视频码流进行编码,其结果与H.264标准程序JM8.6相同。电路结构采用Verilog语言进行RTL级描述,并用mod-elsim6.0软件仿真,后仿真波形如图5所示。
由图5可看出,每个周期中,在使能信号有效的情况下,在时钟的上升沿,可产生1 bit数据sda及相应的偏移量ctx-Idx1,满足设计时序要求。电路在Spartan3 FPGA上综合、布局布线,使用Synplify丁具进行综合,最高时钟频率为100 MHz,影响时钟频率的关键路径为先进先出存储器模块。将综合好的edif电路网表文件输入到后端FPGA厂商Xilinx的Foundation软件进行布局布线,生成二进制流文件,逻辑单元为171,占总资源的4%。使用设计的电路对H.264标准中一些标准视频序列进行测试,序列质量为QP=28,并与H.264标准程序JM8.6中二进制化部分的编码时间比较,结果如表2所示。
综上,本文对H.264编码器二进制化部分的优化使其在速度上较软件实现有较大提升,资源占用率也较少。二进制化部分的硬件设计不仅能完成H.264标准中基本档次的编码,还有望应用于更大尺寸更高质量的实时视频压缩编码。
6 结论
在对H.264标准中二进制化部分研究和分析的基础上,提出其FPGA电路结构,采用并行结构及流水线方式设计电路。该结构经Spartan3 FPGA实现,其吞吐量为每周期1 bit,最大时钟频率为100 MHz,能够满足H.264中第3级及其以上档次实时视频编码的要求。