JPEG解码器IP核的设计与实现
1.2 码流缓存模块设计
JPEG码流是变长码,数据量大,如果采用传统的解码方法对码字的每个比特进行处理,其输出速率势必不能满足应用要求。JPEG标准中数据编码的最大码长为26,而在标志段解码时要求码长为8的整数倍,所以设计中采用两个32位寄存器、一个32位桶形移位器、一个加法器和一个减法器的组合来实现该功能。其中,寄存器Rn负责从外部模块读取数据,并和寄存器R1一起作为桶形移位器的输入缓存。每个解码周期,桶形移位器移出已解码流的同时装载新的待解码流。减法器用于计算已处理码长,传送桶形移位器移位长度,判断并控制R0的读取和R1的更新。加法器用于码流输入时更新寄存器码长和桶形移位器移位长度。这样就为后续处理单元提供了连续不间断的码流,满足了并行解码处理的需求。
桶形移位器的输出是32位,因此每个时钟周期R0、R1必须为其提供32位的有效码流。图3所示给出了桶形移位器输入缓存的更新示例。本文引用地址:https://www.eepw.com.cn/article/162053.htm
1.3 Huffman解码模块设计
Huffman码是变长编码,若采用传统的解码方法逐位读人码流,先判断码字长度,再进行解码,效率较低,其解码速率难以满足应用要求。本设计中提出了一种新的Huffman并行解码硬件结构,Huffman符号表可配置,通用性强。用简单的算术运算代替复杂的配对模式,解码速度快、硬件成本低。
1.3.1 Huffman解码算法分析
对于一组概率确定的符号,其最佳Huffman编码有多种码字分配方式。其中一种特殊的分配方式称为单调编码,这种编码中长度相等的码字在数值上是单调变化的,JPEG中Huffman编码采用这种方式。单调编码的单调性是指出现概率较大的符号其对应的码字的值一定小于概率小的符号对应的码字值。具体说来有两个特性:
(1)在某一特定长度对应的码字集当中,码字大小是连续变化的。
(2)长度短的码字Ck的值一定小于长度比它长的码字Cm,且Ck一定小于Cm的前k位前缀。
根据单调编码的特性,可以证明:对于一个长为X的码字,其长为K(1≤KX)位前缀码的值总是大于长度为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所示给出了本算法和其他算法的实现比较。可见,本算法的实现在速度和硬件成本综合权衡之下比较有优势。
评论