算法流程:从输入端获取32位的压缩图像数据,分析输入的数据流,判断出码长,把输入的数据移位,同时从输入端补充新的数据。输入的数据通过Huffman表翻译成原始数据,提取出数据流中嵌入的符号位,经过一系列的除法、减法运算后得到编码前的频率数据,与之前得到的符号位合并后输送到输出缓存。
本文采用的算法灵活地利用了Huffman表的特点,消除了算法中的乘法运算,完成码长的判断只需要1个周期。把码表的数据按照码长分类从小到大排列,再把码长相同的数据按照码字的大小从小到大排列。每张表按照排列后的顺序把码字对应的解码结果DR(Decoding Results)存入到ROM中。这样既有利于查表,需要的ROM也是最小的,符合低功耗要求。查表的地址发生器由“长度匹配”模块传递到的码长得到1个基地址,码长从输入数据中截取连续的几个与码长相同位数的bit作为偏移地址,2个地址相加就是DR保存的地址[2]。
因关键bit出现的位置都是在码字的最后几位,因此根据码长将输入数据进行移位,使关键bit的最后1位出现在第n位,移位的结果只输出第n位以前的几个bit,这样的电路只需要1个只受码长控制的桶形移位寄存器。另外,再为每张表产生1个1串0加上1串1的地址修正串,有几个关键bit就有几个1,这部分电路逻辑简单且占用的电路不多。用这个地址修正串和桶形移位寄存器的输出做一个“与”逻辑运算,得到的就是正确的偏移地址。由于Huffman表需要的最长bit是9位,码长最大为19位,所以本文设计了1个19位输入、9位输出的桶形移位寄存器。改进后的电路面积缩小到改进前的50%左右。
3 IDCT处理器
逆向离散余弦变换IDCT(Inverse Discrete Cosine Transform)电路的总体实现框图和其中的2D IDCT框图如图2所示。DCT系数经过反量化和反扫描电路处理后输入到IDCT的缓存器,由全局控制电路控制输入到2D IDCT单元及将最终变换好的数据送到输出缓存器中,发送Ready信号到运动补偿单元,通知该单元可以读出IDCT数据。2D IDCT单元进行2次1D IDCT运算,首先进行基于行的1D IDCT,然后将第1次IDCT的中间结果经转置存储器进行转置处理和缓存,再进行基于列的1D IDCT变换,得到最终的IDCT变换结果[3]。