Huffman并行解码
上篇提出的串行Huffman解码优化方法可以有效地提高解码速度。但其缺点是一种电路设计只能用于一种编码(或针对所有具有相同状态转换的编码)的解码。因此,我们将在下文中介绍一种可配置的Huffman并行解码方法。
编解码操作除了可以使用固定算法映射得到的组合逻辑或状态机实现,也可以采用ROM实现。ROM的输入(地址)为编解码前的数据,ROM的输出(每个条目的值)为编解码后的数据。对于定长编码,只需要一个预先写好内容的ROM(或RAM)即可实现对应的编解码器。而对于如Huffman编码这样的不定长编码,则需要加入额外的电路实现。
Shaw-Min Lei在1991年发表的一篇论文”An Entropy Coding System for Digital HDTV
Applications”就提到了这种Huffman并行解码电路。
假设一个Huffman编码的最长编码长度为n,则我们需要一个长度至少为n的移位寄存器、一个大小为的CODE RAM和一个大小为的LEN RAM。CODE RAM用于存储解码后的字符,LEN RAM存储每个Huffman编码的长度。以下图中的编码为例,最大编码长度为5,在CODE RAM中,地址为00xxx的条目存储的值都为字符a的编码,地址为01xxx的条目存储的值都为b的编码;在LEN RAM中,地址为00xxx的条目存储的值都为2,地址为01xxx的条目存储的值都为2。
Buffer用于存储待解码的二进制序列,buffer的长度一般大于最大编码长度,但只有一个最小长度为最大编码长度的窗口作为解码ROM地址输入用于解码。每当LEN RAM读出的数值(编码长度)小于等于当前buffer中有效数据的长度时,CODE RAM读出的值即为解码结果。Buffer在解码完一个字符后进行相应的移位操作(数据移位或者窗口移位)。
例如上图中解码流程:
1. Buffer中存有32位有效数据
2. 时刻1,解码得到字符b,窗口右移2位
3. 时刻2,解码得到字符g,窗口右移7位
4. 以此类推
5. 时刻6,解码的到e,右移2位,并且buffer读入新数据
6. 以此类推
7. 最终完成解码过程
文章作者:速易芯 李昊翔