摘要:介绍了基于静止图像压缩标准JPEG解码器IP核的设计与实现。设计采用适于硬件实现的IDCT算法结构,通过增加运算并行度和流水线技术相结合的方法以提高处理速度。根据HufFMan码流特点,采用新的Huffman并行解码硬件实现结构,用简单的算术运算代替复杂的配对模式,解码速度快,硬件成本低。该IP核可方便地集成到诸如数码相机、手机以及扫描仪等各种应用中。
关键词:JPEG;IP核;Huffman;流水线设计
基于IP(Intellectual Property)核的设计和可复用已成为SoC(System on a Chip)设计方法的主流设计方法。本设计实现了基于静止图像压缩标准JPEG基本模式的解码器软IP核。JPEG(Joint Photograph ExpelsGroup)是1992年CCITT和ISO正式通过的连续色调静止图像压缩标准。图像的高数据量和广泛应用对图像的存储和传输提出了要求,有限的存储容量和传输带宽不能直接对图像进行存储与传输,因此需要先对图像进行压缩处理。JPEG压缩算法因其优异的压缩性能成为目前最流行的图像压缩工具。
1 JPEG解码IP核设计和实现
在JPEG解码器中,因为Huffman解码是变长的,本次解码结束后才能重新定位码流,难以实现流水线设计,所以本设计中主要通过提高功能部件并行度和在功能模块内部实现流水线来提高解码速度。因为解码速度不定,所以各功能模块间的握手信号很关键。每个模块的数据输出时也要考虑到后级模块的数据输入要求,这样才能达到整个解码过程的有序、高效进行。JPEG解码IP核总体架构,如图1所示。
1.1 JPEG解码IP核控制器设计
JPEG解码器控制器的作用是在不同解码环节为各个单元模块分配任务,以控制中间运算过程及最后输出结果。采用了有限状态机的设计方法,这是一种结构清晰、设计灵活的方法,它易于建立、理解和维护,特别是应用于大量状态转移和复杂时序控制系统中更显优势。控制器主要由一个Mealy型有限状态机实现,状态转移如图2所示。
初始化状态(IDLE):复位或者一幅图像解码完成时进入的状态,重新定位码流,在解码开始标志有效时跳转到标志符解码状态(DeMar-ker)。
标志符解码状态(DeMarker):按JPEG码流语法和JFIF文件格式解析标记符,根据解析出的标志符跳转到相应的标志段解码状态,如果解析到SOI标志符或者是0xFFFF状态不改变。
解码出错状态(False):若是在标志段解码出错跳转到False状态,通过输出端口将出错信号输出,在得到外部反馈后跳转到初始化状态IDLE。
应用扩展标志段APPn、帧开始标志段SOFO、量化表定义DQT标志段、Huffman码表定义DHT标志段和扫描行开始SOS标志段的解码过程是相似的,在相应标志符后是标志段的长度,可以根据这个长度值,结合JPEG码流语法,进行码流解析,将所需的图像信息如图像尺寸、图像格式、量化表、Huffman码表等写入相应寄存器或者存储器中,以便于后续压缩数据的解码。
Huffman码流解码状态(DeHuffman):在解析完扫描开始标志段SOS后跳转到Huffman码流解码状态,解码图像压缩数据,主要包括Huffman解码、反量化、反Z字形重排、IDCT和输出缓存等。
控制器还负责外部输入的调配工作,每个时钟周期,都将本次解码长度送至码流缓存模块,从而重新定位解码码流位置。因为有多种图像格式,所以控制器还要负责各个模块的亮度色度选择信号的输入。
1.3 HufFMan解码模块设计
Huffman码是变长编码,若采用传统的解码方法逐位读人码流,先判断码字长度,再进行解码,效率较低,其解码速率难以满足应用要求。本设计中提出了一种新的Huffman并行解码硬件结构,Huffman符号表可配置,通用性强。用简单的算术运算代替复杂的配对模式,解码速度快、硬件成本低。
1.3.1 Huffman解码算法分析
对于一组概率确定的符号,其最佳Huffman编码有多种码字分配方式。其中一种特殊的分配方式称为单调编码,这种编码中长度相等的码字在数值上是单调变化的,JPEG中Huffman编码采用这种方式。单调编码的单调性是指出现概率较大的符号其对应的码字的值一定小于概率小的符号对应的码字值。具体说来有两个特性:
(1)在某一特定长度对应的码字集当中,码字大小是连续变化的。
(2)长度短的码字Ck的值一定小于长度比它长的码字Cm,且Ck一定小于Cm的前k位前缀。
根据单调编码的特性,可以证明:对于一个长为X的码字,其长为K(1≤K<X)位前缀码的值总是大于长度为K的最大码字,同时其码字总是小于长度为Y(Y>X)的最小码字的K位前缀。这一结论表明当把一串足够长的码流并行输入码长检测器时,只可能得到惟一的有效码长。
1.3.2 Huffman解码模块的硬件实现
对于一个给定长度L的码字,可以用码长为L的最小码字和该码字相对于最小码字的偏差offset来表示。如果解码器将相同码长的解码符号顺序存储在RAM或者寄存器阵列中,则可以由最小码字的地址和偏差offset得到解码符号。解码符号的地址可由式(1)得到
在Huffman码表定义DHT标志段解码时,可以得到各长度对应的最小码字Min Code、各最小码字的地址Base Address和解码符号Symbol,为了后续解码需要,要将这些数据存入存储器中。因为解码包括了亮度DC系数、亮度AC系数、色度DC系数和色度AC系数4种情况,所以相应地需要多个存储器。
表1所示给出了本算法和其他算法的实现比较。可见,本算法的实现在速度和硬件成本综合权衡之下比较有优势。
www.55dianzi.com
因为HufFMan编码是无损压缩,不存在误差,所以Huffman解码出来的数据也是没有误差的。本设计采用一个简洁的Mealy型状态机实现,状态转移如图4所示。图5所示是相应的Huffman解码硬件结构图。
接下来结合图4和图5介绍Huffman并行解码流程。
(1)初始化状态(IDLE):复位或图像压缩数据解码完成时进入的状态,初始化相关寄存器。
(2)解码状态1(S1):首先寄存从码流缓冲模块输入26位图像码流,将高16位输入码长检测单元,与Min Code Memory中存储的各长度最小码字并行比较,码长检测单元由选择器、比较器和一个16选4的选择器组成,得到码字的长度L。接着由码长为L的Huffman码与相应长度的最小码字Min(L)计算出偏移量offset,从Base Address Memory中取出最小码字Min(L)的地址Base Address,将两者输入8位加法器中,由式(1)可计算出该码字对应的解码符号地址。然后根据这个地址从Symbol Memory中取出解码符号,对DC来说是SSSS,对AC来说是RRRRSSSS。同时将移位寄存器中的码字左移L位,将高11位编码输入到幅值寄存器中。
(3)解码状态2(S2):将解析出的字长SSSS和码长L输入到5位加法器中,得出本次解码总位长,输出到码流缓冲模块,用于重新定位码流,更新输入数据。将幅值寄存器的高SSSS位选择输入一个12位中间寄存器的低位,该中间寄存器的高(12-SSSS)位移入幅值寄存器的最高位的相反值,若得到的中间寄存器的最高位为“1”,按.JPEG标准,要再加1。这样解析出来的就是频率系数,即DCT系数,对于DC来说就是差值DIFF。解析完幅值后,进行DC/AC系数解码。
本文关键字:解码器 仪器仪表读写器,电子知识资料 - 仪器仪表读写器