《电子技术应用》
您所在的位置:首页 > 可编程逻辑 > 设计应用 > JPEG2000 MQ编码器的设计与实现
JPEG2000 MQ编码器的设计与实现
雷 磊,罗桂娥
(中南大学,湖南 长沙 410083)
摘要: 提出了一种JPEG2000 MQ编码器的硬件设计方案。通过状态更新超前预测、前导零检测、重归一化超前预测等方法以及字节输出的改进处理,使MQ编码器的工作速率可达1CxD/cycle。同时对各流水段中的路径进行优化改进,提高了系统的最高时钟频率。采用Verilog语言进行RTL级描述,并在Altera的FPGA上进行了仿真验证。结果表明,在Altera的EP2S60F67214上,该MQ编码器的最高工作时钟频率可达65.19 MHz。
Abstract:
Key words :

摘  要: 提出了一种JPEG2000 MQ编码器的硬件设计方案。通过状态更新超前预测、前导零检测、重归一化超前预测等方法以及字节输出的改进处理,使MQ编码器的工作速率可达1CxD/cycle。同时对各流水段中的路径进行优化改进,提高了系统的最高时钟频率。采用Verilog语言进行RTL级描述,并在Altera的FPGA上进行了仿真验证。结果表明,在Altera的EP2S60F67214上,该MQ编码器的最高工作时钟频率可达65.19 MHz。
关键词: 图像压缩;JPEG2000;算术编码;流水线

    JPEG2000是新一代的静态图像压缩标准。与JPEG相比,JPEG2000不仅具有更为优良的压缩性能,而且提供了更多的新特性,例如支持质量、分辨率的可伸缩性和感兴趣域编码等。JPEG2000编码包括了小波变换、量化、位平面编码和MQ编码这4个主要的编码流程。其中位平面编码和MQ编码是JPEG2000中复杂度较高的2个模块。这2个模块处理的时间花费了整个编码时间的一半以上。而当前的位平面编码处理速度已经远超过MQ编码的速度,也就是说MQ编码器的编码速率已经成为了JPEG2000处理速度快慢的关键所在。
  MQ编码器是一种改进的自适应算术编码器。虽然MQ编码器避免了乘法运算,但算法仍然比较复杂,同时采用串行处理方式的MQ编码标准算法用硬件实现起来效率低下。而目前国内外对MQ编码硬件实现有不少有效的处理方法。本文对面向软件的标准算法进行了改进以提高硬件实现的编码速率:采用FIFO进行输入输出的缓存处理,优化了状态更新及A、C区间处理过程以提高处理速度,改进了字节输出从而节约了资源面积。该设计方案采用了4级流水,能够达到比较高的数据吞吐量。
1 MQ编码器原理和算法流程
  MQ编码器可以理解为这样一种机器:它将二进制数据判决位D和相关的上下文内容CX所组成的序列映射成单个的压缩码字,即压缩数据CD。当数据判决位D和其上下文内容CX组成的数据对(CX,D)从位平面编码器输出到达MQ编码器后,由MQ编码器产生压缩数据位CD。
    MQ编码器通过使用CX状态表和概率估值表能够实现自适应的功能。其中CX状态表包括19个上下文,每个上下文都对应着不同的状态,每个状态包括索引值(index)和大概率符号值(mps)。而概率估值表是一个可以对原始数据快速适应的概率估计模型,包括47个索引值。每个索引都对应着不同的状态,这些状态包括下一个状态的索引值NMPS(6位)和NLPS(6位)、交换位SWITCH(1位)和小概率符号概率值Qe(15位)共28位。这2个表的具体内容可以从参考文献[2]中找到。
  MQ编码是基于自适应的算术编码改进而来的。而算术编码的基本操作是递归地划分当前的子区间:当编码器接收到一个新的待压缩码,当前子区间就被划分成2个子区间,被划分的边界更新成为新的区间的左边界,也即左区间值,子区间的间隔大小也更新成为新区间的间隔大小。
 因此,MQ编码器采用一个A寄存器来存储当前子区间的间隔大小,而用一个C寄存器来存储当前子区间的左区间值。当MQ编码器接收到输入数据对(CX,D),通过概率估计表和状态表找到相应的Qe值,根据当前的情况来决定A和C如何进行更新,其中包括了A、C寄存器值与Qe值的加减操作及对A、C寄存器的左移重归一化操作,同时伴随着压缩字节输出等过程。
2 MQ编码器的硬件设计
    本文设计的MQ编码器采用4级流水线,并使用了一些加速技术对关键部分进行了改进,改进后的MQ编码器流水线总体架构如图1所示。


    第1阶段:用一个RAM对CX状态进行存储和更新。把从FIFO中输出的(CX,D)数据对做为输入,根据CX的值来得到概率估值表的索引和mps的值。然后由D值与mps值比较判断是进行大概率编码(mps)还是进行小概率编码(lps)。要注意的是,要确保RAM和ROM输出消耗的时间为1个时钟,否则就达不到本设计的时序要求。同时,由于目标是1个时钟输入1对数据对,而在编码过程中如果出现了连续2个输入的CX具有相同的值并且编码第1个数据发生了重归一化时,就会产生时序紊乱。一个解决的办法是对下一个索引值加入一个超前状态分析,这样就可以在编码同一个CX的数据时不必等待RAM的输出而直接读入由组合逻辑产生的下一个索引值,从而满足了时序的要求。图2所示为加入超前状态分析的CX表。


 第2阶段:用一个ROM对概率估值表进行存储和读取。把从RAM中输出的index和mps作为输入数据,数据位由高到低排列。根据index的值导出相应的Qe、NMPS、NLPS、SWITCH等值。本设计由于采用了超前状态预测,没必要把下一次的lps和mps的概率值加入到估值表中,而仅需添加前导零的个数,使得在第3阶段发生重归一化时能够一步完成移位操作,避免了重复和循环过程,大大提高了编码效率。具体的移位思想可以参看参考文献[3]。
 第3阶段:对A寄存器和C寄存器低17位进行更新处理。把28位的C寄存器分开处理可以有效缩短关键路径,因此在这个阶段先对C寄存器的低17位进行处理。另外,由于要对A和2Qe的大小进行比较从而判断是否需要进行归一化。为了减少路径消耗,可以把A<2Qe替换成A[14:0]-Qe[14:0],看是否有借位产生来处理,把它作为是否要进行重归一化的判断条件,同时把A和C寄存器的加减更新判断逻辑简化成2个由于1个时钟输入1对数据对的关系,A、C寄存器将在1个时钟周期后进行数据更新替换,所以A、C的数据处理过程必须要在1个时钟周期内完成,因此本设计不能对这段路径进行流水线分割处理。图3为对A寄存器处理的优化设计结构。C寄存器的处理结构和A类似。


 第4阶段:Chigh的处理和字节输出。按照标准的字节输出算法流程,需要1个缓冲寄存器B和1个减法计数器来辅助处理:先把高8位赋给B寄存器,看其值是否是0xFF和有没有进位位产生。如果为0xFF,则进行位填充处理,如果有进位位产生,则对B寄存器值进行加1处理,再看是否要进行位填充。这种处理方法具有很强的串行性,无法在1个时钟周期内完成全部的字节输出过程,因此,有必要对这种方式进行改进。由于原算法加入了3位间隔位来限制输出值的范围,为了符合标准,至少要左移19(即8+3+8)位才输出1个字节,同理,至少左移27位才输出2个字节,而小于19位的则不输出字节,处理好的数据全部放到剩余的数据存储器bitbuf中去。而MQ编码器的输出方式是增量输出的,因此可以把要左移处理的数据与上一次剩余的数据进行合并,这与标准算法的思想是完全一致的。
 首先把tempC中的数据进行掩膜处理得到包含左移数据位的Cmask,同时对Cmask进行左移17位,使Cresult的位数和augment的位数相同(augment为34位),再对其进行右移一定位数,使左移数据能够正确地合并到编码数据中去。Cresult可以表示为:
 Cresult={Cmask,17{1’b0}}>>CT-1
其中CT为一个5位的加法计数器,它对当前剩余的数据进行位数计数。为了减少路径开销,可以把Cresult改成:
    Cresult={Cmask,18{1’b0}}>>CT
  由于剩余的数据位最多为18位,因此bitbuf采用一个18位的寄存器作为处理空间。可以这样把左移数据合并到数据流中:
 augment[33:16]=bitbuf+Cresult[33:16]
 augment[15:0]=Cresult[15:0]
 这是因为仅有高18位的Cresult需要进行相加,而后16位只进行简单的复制即可。这样做就可以不必考虑进位位的值及缓冲值B加1后是否需要进行位填充这几个因素,可以在一个时钟周期内一步到位地进行字节输出。同时,为了与标准输出一致,把CT(5位)的初始值设为-1,即为11111。图4为改进的字节输出的bitbuf更新处理部分,图5为字节输出的计数更新处理部分。


    最后,由于输出的字节数可能为0、1、2这3种情况,有必要对输出数据进行缓冲,因此需要在最后添加一个FIFO对输出的数据进行缓冲。
3 实验结果和性能比较
 本文的MQ编码器采用Verilog语言进行RTL级描述,在Modelsim-Altera软件下进行仿真,仿真结果和标准算法的计算结果一致,如图6所示。在QuartusII中选用器件EP2S60F67214对代码进行综合、布局布线及时序分析。仿真结果表明,本设计结构最大的时钟频率可达65.19 MHz,吞吐量可达65.19 MCxD/s。与参考文献[5]中的方案的比较如表1所示。表2所示为MQ编码器的资源使用情况。

 结果显示,本设计占用资源很少的情况下,在最高时钟频率上不及参考文献[5],因为本设计结构为了节省时钟周期在关键路径上没有采用流水线分割,但在整体的处理速度上有较大的改进,可以满足硬件高速编码要求。
 本文针对JPEG2000MQ编码器的硬件实现,提出了一种4级流水的设计方案。对MQ编码器的原理和算法流程进行了分析,采用超前状态分析避免了时序上的冲突,同时优化了条件判断逻辑以及改进了字节输出的处理结构,减少了路径的开销。最终通过Aletra的FPGA的验证,处理速度可达65.19 MCxD/s。
参考文献
[1] TAUBMAN D S, MARCELLIM M W. JPEG2000图像压缩基础、标准和实践[M]. 魏立江,柏正尧,译. 北京:电子工业出版社,2005.
[2] ISO/IEC. FCD 1544421, final committee draft, JPEG2000 lmage coding systems[Z].
[3] HSIAO Y T, LIN H D, LEE K B, et al. High-speed memory-saving architecture for the embedded block coding in JPEG2000[C]//IEEE International Symposium on Circuits and Systems, 2002,5:133-136.
[4] DYER M, TAUBMAN D, NOOSHABADI S.Improved  throughput arithmetic coder for JPEG2000[J]. Proc.Internation Conference on Image Processing(ICIP’04),2004.
[5] 周赟. 基于JPEG2000的高速MQ算术编码器的研究与实现[A].Information technology, 2007(10):49-52.
[6] 王镇道,章兢,曾云,等.一种高速JPEG2000 MQ编码器的VLSI 实现[A].微计算机信息,2006,(9-3):232-233.

此内容为AET网站原创,未经授权禁止转载。