CN113839678B - 一种哈夫曼解码系统、方法、设备及计算机可读存储介质 - Google Patents
一种哈夫曼解码系统、方法、设备及计算机可读存储介质 Download PDFInfo
- Publication number
- CN113839678B CN113839678B CN202111011870.5A CN202111011870A CN113839678B CN 113839678 B CN113839678 B CN 113839678B CN 202111011870 A CN202111011870 A CN 202111011870A CN 113839678 B CN113839678 B CN 113839678B
- Authority
- CN
- China
- Prior art keywords
- vector
- code length
- decoding
- data frame
- current bit
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 40
- 239000013598 vector Substances 0.000 claims abstract description 249
- 230000004927 fusion Effects 0.000 claims abstract description 85
- 230000015654 memory Effects 0.000 claims abstract description 45
- 238000004364 calculation method Methods 0.000 claims description 29
- 238000004590 computer program Methods 0.000 claims description 9
- 230000000694 effects Effects 0.000 abstract description 2
- 238000004422 calculation algorithm Methods 0.000 description 9
- 238000007906 compression Methods 0.000 description 9
- 238000010586 diagram Methods 0.000 description 7
- 230000006835 compression Effects 0.000 description 6
- 238000013144 data compression Methods 0.000 description 3
- 239000012634 fragment Substances 0.000 description 3
- 230000006978 adaptation Effects 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
Classifications
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本申请公开了一种哈夫曼解码系统,包括:解码控制单元,用于接收待解码数据帧并向比较器组阵列与解码引擎计算单元下发待解码数据帧;比较器组阵列,用于将待解码数据帧划分为多组数据,并确定各组数据对应的两种码长与两种偏移值;内容寻址存储器,用于根据第一码长与第一偏移值,得到第一向量;根据第二码长与第二偏移值,得到第二向量;向量融合单元,用于融合第一向量与第二向量,得到融合向量;解码引擎计算单元,用于根据融合向量解码待解码数据帧。该系统适用于deflate格式的编码,可以完成任意位宽码流的解码。本申请还公开了一种哈夫曼解码方法、设备以及计算机可读存储介质,均具有上述技术效果。
Description
技术领域
本申请涉及解码技术领域,特别涉及一种哈夫曼解码系统;还涉及一种哈夫曼解码方法、设备以及计算机可读存储介质。
背景技术
随着海量数据呈指数级的增长,对现有的存储设备带来前所未有的巨大压力。高效、安全的数据压缩技术成为降低存储成本,节省存储资源的有效方法。Deflate编码便是数据压缩中常用的一种编码算法。该算法主要由两个部分的算法组成,一个是哈夫曼编码算法,另一个是LZ77压缩算法。LZ77算法是一种基于字典的“滑动窗口”式的无损压缩算法。在压缩过程中,硬件在滑动窗口内寻找当前文本内容是否出现过,如果出现过,则记录当前文本距离上一次出现的位置的距离以及当前重复文本的长度,组合成一个匹配对存在当前位置。滑动窗口的大小对于LZ77编码效率存在很大的影响,理论上滑动窗口越大压缩率会越大,但是随着滑动窗口的增加,压缩过程将会非常耗时,而且获得的压缩率的提升并不理想,所以需要找到一个合理的滑动窗口大小。在Deflate编码中,窗口大小设置为32K,所以distance的取值范围是0~35536。Length的最大值是258,当length大于258时会被截断成多个匹配对。经过LZ77编码后的数据有三种类型的信息,分别是原文,length和distance。原文和length组成liter_length,liter_length和distance分别被两个码表进行编码。如图1和图2所示的两个码表。将literal,length,distance按照上面的码表进行编码后,得到对应的码字,Huffman编码就是对上述的码字出现的频率进行编码,频率越多的码字编码长度越短,反之编码长度越长。两个码表的extra bits不参与编码。
虽然现在已存在一些解码电路可以用作哈夫曼解码,但是仍缺乏针对deflate格式的编码的行之有效的解码方案,因此,提供一种适用于deflate编码的解码系统已成为本领域技术人员亟待解决的技术问题。
发明内容
本申请的目的是提供一种哈夫曼解码系统、方法、设备以及计算机可读存储介质,能够适用于deflate编码,可以完成任意位宽码流的解码。
为解决上述技术问题,本申请提供了一种哈夫曼解码系统,包括:
解码控制单元、比较器组阵列、内容寻址存储器、向量融合单元以及单路解码引擎计算单元;
所述解码控制单元,用于接收待解码数据帧,并向所述比较器组阵列与所述解码引擎计算单元下发所述待解码数据帧;
所述比较器组阵列,用于将所述待解码数据帧划分为多组数据,并确定各组数据对应的码长与偏移值;其中,所述码长包括第一码长与第二码长;所述偏移值包括第一偏移值与第二偏移值;
所述内容寻址存储器,用于根据所述第一码长与所述第一偏移值,得到第一向量;根据所述第二码长与所述第二偏移值,得到第二向量;
所述向量融合单元,用于融合所述第一向量与所述第二向量,得到融合向量;
所述解码引擎计算单元,用于根据所述融合向量解码所述待解码数据帧。
可选的,所述向量融合单元具体用于:
当所述第一向量的当前比特位的类型是长度且有效时,如果所述当前比特位的码长所指向的下一个位置大于边界值,则将所述融合向量的所述当前比特位标记为有效且不完整,所述融合向量的所述当前比特位的码长为所述第一向量的所述当前比特位的码长;
当所述第一向量的当前比特位的类型是长度且有效时,如果所述当前比特位的码长所指向的下一个位置小于或等于所述边界值,则将所述融合向量的所述当前比特位标记为有效且完整,所述融合向量的所述当前比特位的码长为所述第一向量的所述当前比特位的码长与所述当前比特位的码长所指向的所述第二向量的比特位的码长的和;
当所述第一向量的所述当前比特位无效时,所述融合向量无效;
当所述第一向量的所述当前比特位为原文时,所述融合向量的所述当前比特位标记为原文有效且完整。
可选的,所述解码控制单元具体用于:
对相邻的两帧所述待解码数据帧进行拼接,得到第一拼接数据帧,并将所述第一拼接数据帧下发给所述解码引擎计算单元;
对所述待解码数据帧与下一帧待解码数据帧的前预设位宽的数据进行拼接,得到第二拼接数据帧,并将所述第二拼接数据帧下发给所述比较器组阵列。
可选的,所述内容寻址存储器包括:
第一内容寻址存储器,用于根据所述第一码长与所述第一偏移值,得到所述第一向量;
第二内容寻址存储器,用于根据所述第二码长与所述第二偏移值,得到所述第二向量。
可选的,所述解码引擎计算单元具体用于:
根据所述融合向量计算得到长度向量;
根据所述长度向量计算得到位置向量;
根据所述位置向量计算得到结果向量,并根据所述结果向量输出解码结果。
为解决上述技术问题,本申请还提供了一种哈夫曼解码方法,包括:
通过解码控制单元接收待解码数据帧,并向比较器组阵列与解码引擎计算单元下发所述待解码数据帧;
通过所述比较器组阵列将所述待解码数据帧划分为多组数据,并确定各组数据的码长与偏移值;其中,所述码长包括第一码长与第二码长;所述偏移值包括第一偏移值与第二偏移值;
通过内容寻址存储器根据所述第一码长与所述第一偏移值,得到第一向量;以及根据所述第二码长与所述第二偏移值,得到第二向量;
通过向量融合单元融合所述第一向量与所述第二向量,得到融合向量;
通过所述解码引擎计算单元根据所述融合向量解码所述待解码数据帧。
可选的,所述通过向量融合单元融合所述第一向量与所述第二向量包括:
当所述第一向量的当前比特位的类型是长度且有效时,如果所述当前比特位的码长所指向的下一个位置大于边界值,则将所述融合向量的所述当前比特位标记为有效且不完整,所述融合向量的所述当前比特位的码长为所述第一向量的所述当前比特位的码长;
当所述第一向量的当前比特位的类型是长度且有效时,如果所述当前比特位的码长所指向的下一个位置小于或等于所述边界值,则将所述融合向量的所述当前比特位标记为有效且完整,所述融合向量的所述当前比特位的码长为所述第一向量的所述当前比特位的码长与所述当前比特位的码长所指向的所述第二向量的比特位的码长的和;
当所述第一向量的所述当前比特位无效时,所述融合向量无效;
当所述第一向量的所述当前比特位为原文时,所述融合向量的所述当前比特位标记为原文有效且完整。
可选的,所述通过解码控制单元接收待解码数据帧,并向比较器组阵列与解码引擎计算单元下发所述待解码数据帧包括:
通过所述解码控制单元对相邻的两帧所述待解码数据帧进行拼接,得到第一拼接数据帧,并将所述第一拼接数据帧下发给所述解码引擎计算单元;
通过所述解码控制单元对所述待解码数据帧与下一帧待解码数据帧的前预设位宽的数据进行拼接,得到第二拼接数据帧,并将所述第二拼接数据帧下发给所述比较器组阵列。
为解决上述技术问题,本申请还提供了一种哈夫曼解码设备,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如上任一项所述的哈夫曼解码方法的步骤。
为解决上述技术问题,本申请还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上任一项所述的哈夫曼解码方法的步骤。
本申请所提供的哈夫曼解码系统,包括:解码控制单元、比较器组阵列、内容寻址存储器、向量融合单元以及单路解码引擎计算单元;所述解码控制单元,用于接收待解码数据帧,并向所述比较器组阵列与所述解码引擎计算单元下发所述待解码数据帧;所述比较器组阵列,用于将所述待解码数据帧划分为多组数据,并确定各组数据对应的码长与偏移值;其中,所述码长包括第一码长与第二码长;所述偏移值包括第一偏移值与第二偏移值;所述内容寻址存储器,用于根据所述第一码长与所述第一偏移值,得到第一向量;根据所述第二码长与所述第二偏移值,得到第二向量;所述向量融合单元,用于融合所述第一向量与所述第二向量,得到融合向量;所述解码引擎计算单元,用于根据所述融合向量解码所述待解码数据帧。
由于deflate格式的编码是通过两个哈夫曼码表进行压缩,因此本申请相适应的通过比较器组阵列得到两种码长与偏移值,并通过内容寻址存储器根据两种码长与偏移值得到两种向量。在此基础上,通过向量融合单元对所得的两种向量进行向量融合,进而解码引擎计算单元基于融合得到的融合向量进行解码,最终使得通过两个哈夫曼码表压缩后的deflate格式的解码过程与普通的哈夫曼解码过程一样,由此可以较好的适用于deflate格式的哈夫曼解码。并且本申请所提供的哈夫曼解码系统对输入位宽不做限制,对于任意位宽的码流都可以高效的解码。
本申请所提供的哈夫曼解码方法、设备以及计算机可读存储介质均具有上述技术效果。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对现有技术和实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例所提供的一种liter_length码表的示意图;
图2为本申请实施例所提供的一种distance码表的示意图;
图3为本申请实施例所提供的一种哈夫曼解码系统的示意图;
图4为本申请实施例所提供的一种哈夫曼解码流程示意图;
图5为本申请实施例所提供的一种向量融合示意图;
图6为本申请实施例所提供的另一种向量融合的示意图;
图7为本申请实施例所提供的一种哈夫曼解码方法的流程示意图。
具体实施方式
本申请的核心是提供一种哈夫曼解码系统、方法、设备以及计算机可读存储介质,能够适用于deflate编码,可以完成任意位宽码流的解码。
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
请参考图3,图3为本申请实施例所提供的一种哈夫曼解码系统的示意图,参考图3所示,该系统主要包括:解码控制单元10、比较器组阵列20、内容寻址存储器30、向量融合单元40以及单路解码引擎计算单元50。
所述解码控制单元10,用于接收待解码数据帧,并向所述比较器组阵列20与所述解码引擎计算单元50下发所述待解码数据帧;
所述比较器组阵列20,用于将所述待解码数据帧划分为多组数据,并确定各组数据对应的码长与偏移值;其中,所述码长包括第一码长与第二码长;所述偏移值包括第一偏移值与第二偏移值;
所述内容寻址存储器30,用于根据所述第一码长与所述第一偏移值,得到第一向量;根据所述第二码长与所述第二偏移值,得到第二向量;
所述向量融合单元40,用于融合所述第一向量与所述第二向量,得到融合向量;
所述解码引擎计算单元50,用于根据所述融合向量解码所述待解码数据帧。
具体的,解码控制单元10主要完成对输入的待解码数据帧的控制。待解码数据帧输入解码控制单元10,解码控制单元10进一步将待解码数据帧下发给比较器组阵列20与解码引擎计算单元50。
其中,在一种具体的实施方式中,解码控制单元10具体用于:对相邻的两帧所述待解码数据帧进行拼接,得到第一拼接数据帧,并将所述第一拼接数据帧下发给所述解码引擎计算单元50;对所述待解码数据帧与下一帧待解码数据帧的前预设位宽的数据进行拼接,得到第二拼接数据帧,并将所述第二拼接数据帧下发给所述比较器组阵列20。
具体而言,对于任意位宽的数据流,一帧数据中的最后一个码字通常会跨越解码位宽的额定边界,解码结束的比特位置进入下一帧数据流中。因此,输入到解码引擎计算单元50的前一帧数据流需包含下一帧数据流的部分比特,在前一帧数据流包含的所有码字解码后,得到下一帧待解码的起始位置,进而根据该起始位置对下一帧数据流继续进行解码。
为此,本实施例中,待解码数据帧输入解码控制单元10后,解码控制单元10首先对相邻的两帧待解码数据帧进行拼接,得到第一拼接数据帧,然后再将拼接得到的第一拼接数据帧传递给解码引擎计算单元50。
例如,一帧待解码数据帧包含64bit,那么解码控制单元10将相邻的两帧待解码数据帧进行拼接,得到128bit的第一拼接数据帧,进而将这128bit的第一拼接数据帧下发给解码引擎计算单元50。
另外,待解码数据帧输入解码控制单元10后,解码控制单元10对待解码数据帧与下一帧待解码数据帧的前预设位宽的数据进行拼接,得到第二拼接数据帧,并将拼接得到的第二拼接数据帧下发给所述比较器组阵列20。
例如,一帧待解码数据帧的位宽为64bit,预设位宽为16bit,那么解码控制单元10将64bit的待解码数据帧与下一帧待解码数据帧的前16bit进行拼接,得到80bit的第二拼接数据帧,进而将这80bit的第二拼接数据帧下发给比较器组阵列20。
所述比较器组阵列20用于将其接收到的待解码数据帧划分为多组数据,并确定各组数据对应的码长与偏移值。比较器组阵列20的工作原理是每一个码长都会对应一个基码,在编码中该基码是唯一且不可重复的,比较器组阵列20实现的是将数据流中某一特定长度的数据与哈夫曼码表中的不同长度的基码进行比较和计算,得到该数据在哈夫曼码表中对应的基码长度和该基码的偏移量。
deflate格式压缩过程中存在两张哈夫曼码表,liter-length码表与distance码表。在解码过程中,由于无法知道输入的数据流中码字的位置以及码字压缩时采用的码表,因此对于数据流的每一个分组,都需要与distance基码和liter-length基码做比较,得到每一个分组对应的liter-length码长和相应的偏移值,以及distance码长和相应的偏移值。上文中的第一码长指代liter-length码长,第二码长指代distance码长。第一偏移值指代与liter-length码长相对应的偏移值,第二偏移值指代与distance码长相对应的偏移值。
在deflate格式的压缩中,数据压缩后的码长的最大值为15bit,因此可将输入比较器组阵列20的数据流以每一组15bit,逐位进行分组,并分别与基码进行比较,得到每一组对应的码长与偏移值。
以每一组15bit,逐位进行分组可以得到如下数据段:
包含第0~14比特的数据段1;包含第1~15比特的数据段2;包含第2~16比特的数据段3;……,以此类推可知其他数据段。
对于每一个15bit的数据段,从其开始位置起按照比特位逐渐增加一位的方式,对数据段进行划分得到多个片段。以数据端的开始位置为bit0为例,那么各个片段分别为,片段1:bit0;片段2:bit0+bit1;片段3:bit0+bit1+bit2;片段4:bit0+bit1+bit2+bit3;依次类推,片段15:bit0+bit1+bit2+bit3+…+bit14。
针对每一个片段,将该片段与码长与该片段相等的liter-length基码进行比较,以及将该片段与码长与该片段相等的distance基码进行比较。当某片段与某一个liter-length基码比较时符合条件,那么数据段对应的liter-length码长就等于该liter-length基码的码长。同理,当某片段与某一个diatance基码比较时符合条件,那么数据段对应的diatance码长就等于该diatance基码的码长。
例如,对应于上述片段1至片段15,bit0与码长为1的liter-length基码和distance基码比较;bit0+bit1与码长为2的liter-length基码和distance基码比较;bit0+bit1+bit2与码长为3的liter-length基码和distance基码比较;以此类推,bit0+bit1+…+bit14与码长为15的liter-length基码和distance基码进行对较。如若bit0+bit1+…+bit6与码长为7的liter-length基码比较后符合条件,那么对应的liter-length码长就是7。bit0~bit6这7位都将代表一个码字的信息。
片段与基码比较时符合条件是指若片段包含有效码字,且片段大于与片段具有相等长度的基码,则判断下一个片段是否小于下一个基码。其中,下一片段比该片段的长度大1,下一个基码与下一个片段具有相等长度。如果下一个片段小于下一个基码,则将该片段的长度确定为该数据段对应的码长,并将该片段与具有相等长度的基码的差值确定为该数据段对应的偏移量。
对于15bit的数据段来说,每一个比特位都会存在15个不同码长的比较器,输入比较器组阵列20的待解码数据帧若为80bit,那么比较器组阵列20就需要有80*15个比较器。
内容寻址存储器30的每一个单元都包含一个内嵌的比较逻辑,写入内容寻址存储器30的数据会和内部存储的每一个数据内容做对比。在哈夫曼解码过程中,输入内容寻址存储器30的数据有两个,一个是码长,另一个是偏移值。通过查询码长和基码的值,就可以得到码字的值。针对deflate格式的解码,相适应的需要两个内容寻址存储器30。一个存储liter-length的码字的内容寻址存储器即第一内容寻址存储器,另外一个存储distance的码字的内容寻址存储器即第二内容寻址存储器。如图4所示,第一内容寻址存储器也就是LL内容寻址存储器,第二内容寻址存储器也就是DIST内容寻址存储器。
第一内容寻址存储器用于根据第一码长与第一偏移值,得到第一向量,即根据liter-length码长与相应的偏移值,得到liter-length向量。第二内容寻址存储器用于根据所述第二码长与所述第二偏移值,得到第二向量,即根据distance码长与相应的偏移值得到distance向量。
向量融合单元40用于融合所述第一向量与所述第二向量,得到融合向量。
参考图5所示,向量融合单元40的输入是liter-length向量与distance向量。图4中的LL向量表示liter-length向量,DIST向量表示distance向量。每种向量主要包含两类的信息,一个是通过查找内容寻址存储器30得到的向量的符号信息,也就是当前比特位所代表的哈夫曼码字。另外一个是通过比较器组阵列20得到的向量的长度信息,也就是当前位置所代表的码字的长度。Deflate格式的编码不包括对extra bit的编码,因此在比较器组阵列20中所得到的码长信息是不包括码字的extra bit的长度。向量融合单元40的一个功能就是根据码字的值确定码字是否包含extra bits以及extra bits的长度,具体可以得到liter-length码字或者distance码字所包含extra bits信息。
Deflate格式解码后的内容包含两种类型,一种是原文,另一种是匹配对。匹配对包含长度和距离。一次解码中长度和距离必须完整的解码后才可以产生有效的匹配对。由此,对融合向量定义以下三个属性:
1、有效性:用于标记当前比特位所解码的码字是否有效。
2、完整性:用于标记当前比特位代表的码字是否完整。如果当前比特位是匹配对时,且匹配对中的长度进入到下一帧的码流中,则将此匹配对标记不完整,需要在下一帧码流中进行解码。
3、长度:代表当前位置解码符号的码长。如果是匹配对,则应该是长度的总码长值加上距离的总码长值。
长度向量融合的规则如下:
当第一向量的当前比特位的类型是长度且有效时,如果当前比特位的码长所指向的下一个位置大于边界值,则将融合向量的当前比特位标记为有效且不完整,融合向量的当前比特位的码长为第一向量的当前比特位的码长;
当第一向量的当前比特位的类型是长度且有效时,如果当前比特位的码长所指向的下一个位置小于或等于边界值,则将融合向量的当前比特位标记为有效且完整,融合向量的当前比特位的码长为第一向量的当前比特位的码长与当前比特位的码长所指向的第二向量的比特位的码长的和;
当第一向量的当前比特位无效时,融合向量无效;
当第一向量的当前比特位为原文时,融合向量的当前比特位标记为原文有效且完整。
向量融合单元40基于上述规则进行向量融合,得到融合向量。
例如,参考图6所示,liter-length向量(即图6中所示LL向量)的bit0解码得到原文,且bit0对应的码长为4,故bit0至bit3代表原文。bit4解码得到长度,并且bit4对应的码长为6,那么下一个位置应该为distance即距离,并且distance在bit10。bit10所在的位置就代表距离,并且距离的码长为5。由此,融合向量的bit0标记为有效且完整,并且码长为4。融合向量的bit4标记为有效且完整,并且码长为6+5=11。
解码引擎计算单元50是解码的核心模块,解码引擎计算单元50内部通过状态机来调度各个计算有序的进行。计算过程包括三个阶段:
长度向量即L向量计算、位置向量即P向量计算以及结果向量即R向量计算与输出。
第一个阶段是根据融合后的长度向量即融合向量进行L向量计算,包括:
以融合向量作为L0向量;根据L0向量计算其他的L向量。其他的L向量的计算方式如下:
Lm[n]=Lm-1[n]+Lm-1[Lm-1[n]+n];
其中,Lm[n]表示当前正在计算的Lm向量的第n个位置的长度。如果等号右边表达式中有一个代表的位置无效,则Lm[n]为无效。当前状态下,当所有Lm[n]向量的位置都是无效时,状态机进入CAL_P状态开始计算位置向量P。
第二个阶段是P向量的计算,P向量的计算过程相对于L向量来说是一个逆向的计算过程。首先根据上一次计算得到的起始位置将P向量的起始位置标记为有效。然后根据每一轮L向量的长度将P向量对应的位置标记为有效。当和L0向量相关的位置计算结束后,P向量的计算完成。在P向量的计算过程中如果有效位置超过了了边界,则应该保存下一个位置的信息,在下一轮数据解码中作为起始位置开始解码。
CAL_PID状态将所有的有效位置通过结构体P_ID_R重新记录,结构体P_ID_R中包括有效标记以及位置ID,重新连续排列后方便解码符号的并行输出。
第三个阶段是R向量的计算以及结果输出,R向量的结构体中记录了每一个位置码长信息和解码符号信息以及偏移值,同时也会记录当前解码符号的类型,有效性以及完整性。如果当前符号有效且完整,表示符号解码成功,可以输出。
对于L向量、P向量以及R向量的更为具体的计算过程,本申请在此不做赘述,参考现有解码电路中的相关计算过程即可。
综上所述,由于deflate格式的编码是通过两个哈夫曼码表进行压缩,因此本申请相适应的通过比较器组阵列得到两种码长与偏移值,并通过内容寻址存储器根据两种码长与偏移值得到两种向量。在此基础上,通过向量融合单元对所得的两种向量进行向量融合,进而解码引擎计算单元基于融合得到的融合向量进行解码,最终使得通过两个哈夫曼码表压缩后的deflate格式的解码过程与普通的哈夫曼解码过程一样,由此可以较好的适用于deflate格式的哈夫曼解码。并且本申请所提供的哈夫曼解码系统对输入位宽不做限制,对于任意位宽的码流都可以高效的解码。
本申请还提供了一种哈夫曼解码方法,请参考图7,图7为本申请实施例所提供的一种哈夫曼解码方法的流程示意图,结合图7所示,该方法包括:
S101:通过解码控制单元接收待解码数据帧,并向比较器组阵列与解码引擎计算单元下发所述待解码数据帧;
S102:通过所述比较器组阵列将所述待解码数据帧划分为多组数据,并确定各组数据的码长与偏移值;其中,所述码长包括第一码长与第二码长;所述偏移值包括第一偏移值与第二偏移值;
S103:通过内容寻址存储器根据所述第一码长与所述第一偏移值,得到第一向量;以及根据所述第二码长与所述第二偏移值,得到第二向量;
S104:通过向量融合单元融合所述第一向量与所述第二向量,得到融合向量;
S105:通过所述解码引擎计算单元根据所述融合向量解码所述待解码数据帧。
在上述实施例的基础上,可选的,所述通过向量融合单元融合所述第一向量与所述第二向量包括:
当所述第一向量的当前比特位的类型是长度且有效时,如果所述当前比特位的码长所指向的下一个位置大于边界值,则将所述融合向量的所述当前比特位标记为有效且不完整,所述融合向量的所述当前比特位的码长为所述第一向量的所述当前比特位的码长;
当所述第一向量的当前比特位的类型是长度且有效时,如果所述当前比特位的码长所指向的下一个位置小于或等于所述边界值,则将所述融合向量的所述当前比特位标记为有效且完整,所述融合向量的所述当前比特位的码长为所述第一向量的所述当前比特位的码长与所述当前比特位的码长所指向的所述第二向量的比特位的码长的和;
当所述第一向量的所述当前比特位无效时,所述融合向量无效;
当所述第一向量的所述当前比特位为原文时,所述融合向量的所述当前比特位标记为原文有效且完整。
在上述实施例的基础上,可选的,所述通过解码控制单元接收待解码数据帧,并向比较器组阵列与解码引擎计算单元传递所述待解码数据帧包括:
通过所述解码控制单元对相邻的两帧所述待解码数据帧进行拼接,得到第一拼接数据帧,并将所述第一拼接数据帧下发给所述解码引擎计算单元;
通过所述解码控制单元对所述待解码数据帧与下一帧待解码数据帧的前预设位宽的数据进行拼接,得到第二拼接数据帧,并将所述第二拼接数据帧下发给所述比较器组阵列。
在上述实施例的基础上,可选的,所述通过内容寻址存储器根据所述第一码长与所述第一偏移值,得到第一向量;以及根据所述第二码长与所述第二偏移值,得到第二向量包括:
通过第一内容寻址存储器根据所述第一码长与所述第一偏移值,得到所述第一向量;
通过第二内容寻址存储器根据所述第二码长与所述第二偏移值,得到所述第二向量。
在上述实施例的基础上,可选的,所述通过所述解码引擎计算单元根据所述融合向量解码所述待解码数据帧包括:
通过所述解码引擎计算单元根据所述融合向量计算得到长度向量;根据所述长度向量计算得到位置向量;根据所述位置向量计算得到结果向量,并根据所述结果向量输出解码结果。
本申请还提供了一种哈夫曼解码设备,该设备包括存储器和处理器。存储器,用于存储计算机程序;处理器,用于执行计算机程序实现如上所述的哈夫曼解码方法的步骤。
对于本申请所提供的设备的介绍请参照上述方法实施例,本申请在此不做赘述。
本申请还提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时可实现如上所述的哈夫曼解码方法的步骤。
该计算机可读存储介质可以包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
对于本申请所提供的计算机可读存储介质的介绍请参照上述方法实施例,本申请在此不做赘述。
说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置、设备以及计算机可读存储介质而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
以上对本申请所提供的哈夫曼解码系统、方法、设备以及计算可读存储介质进行了详细介绍。本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围。
Claims (6)
1.一种哈夫曼解码系统,其特征在于,包括:
解码控制单元、比较器组阵列、内容寻址存储器、向量融合单元以及单路解码引擎计算单元;
所述解码控制单元,用于接收待解码数据帧,并向所述比较器组阵列与所述解码引擎计算单元下发所述待解码数据帧;
所述比较器组阵列,用于将所述待解码数据帧划分为多组数据,并确定各组数据对应的码长与偏移值;其中,所述码长包括第一码长与第二码长;所述偏移值包括第一偏移值与第二偏移值;所述第一码长为liter-length码长,所述第二码长为distance码长;所述第一偏移值为与所述liter-length码长相对应的偏移值,所述第二偏移值为与所述distance码长相对应的偏移值;
所述内容寻址存储器,用于根据所述第一码长与所述第一偏移值,得到第一向量;根据所述第二码长与所述第二偏移值,得到第二向量;
所述向量融合单元,用于融合所述第一向量与所述第二向量,得到融合向量;
所述解码引擎计算单元,用于根据所述融合向量解码所述待解码数据帧;
所述解码控制单元具体用于:
对相邻的两帧所述待解码数据帧进行拼接,得到第一拼接数据帧,并将所述第一拼接数据帧下发给所述解码引擎计算单元;
对所述待解码数据帧与下一帧待解码数据帧的前预设位宽的数据进行拼接,得到第二拼接数据帧,并将所述第二拼接数据帧下发给所述比较器组阵列;
所述向量融合单元具体用于:
当所述第一向量的当前比特位的类型是长度且有效时,如果所述当前比特位的码长所指向的下一个位置大于边界值,则将所述融合向量的所述当前比特位标记为有效且不完整,所述融合向量的所述当前比特位的码长为所述第一向量的所述当前比特位的码长;
当所述第一向量的当前比特位的类型是长度且有效时,如果所述当前比特位的码长所指向的下一个位置小于或等于所述边界值,则将所述融合向量的所述当前比特位标记为有效且完整,所述融合向量的所述当前比特位的码长为所述第一向量的所述当前比特位的码长与所述当前比特位的码长所指向的所述第二向量的比特位的码长的和;
当所述第一向量的所述当前比特位无效时,所述融合向量无效;
当所述第一向量的所述当前比特位为原文时,所述融合向量的所述当前比特位标记为原文有效且完整。
2.根据权利要求1所述的哈夫曼解码系统,其特征在于,所述内容寻址存储器包括:
第一内容寻址存储器,用于根据所述第一码长与所述第一偏移值,得到所述第一向量;
第二内容寻址存储器,用于根据所述第二码长与所述第二偏移值,得到所述第二向量。
3.根据权利要求1所述的哈夫曼解码系统,其特征在于,所述解码引擎计算单元具体用于:
根据所述融合向量计算得到长度向量;
根据所述长度向量计算得到位置向量;
根据所述位置向量计算得到结果向量,并根据所述结果向量输出解码结果。
4.一种哈夫曼解码方法,其特征在于,包括:
通过解码控制单元接收待解码数据帧,并向比较器组阵列与解码引擎计算单元下发所述待解码数据帧;
通过所述比较器组阵列将所述待解码数据帧划分为多组数据,并确定各组数据的码长与偏移值;其中,所述码长包括第一码长与第二码长;所述偏移值包括第一偏移值与第二偏移值;所述第一码长为liter-length码长,所述第二码长为distance码长;所述第一偏移值为与所述liter-length码长相对应的偏移值,所述第二偏移值为与所述distance码长相对应的偏移值;
通过内容寻址存储器根据所述第一码长与所述第一偏移值,得到第一向量;以及根据所述第二码长与所述第二偏移值,得到第二向量;
通过向量融合单元融合所述第一向量与所述第二向量,得到融合向量;
通过所述解码引擎计算单元根据所述融合向量解码所述待解码数据帧;
所述通过解码控制单元接收待解码数据帧,并向比较器组阵列与解码引擎计算单元下发所述待解码数据帧包括:
通过所述解码控制单元对相邻的两帧所述待解码数据帧进行拼接,得到第一拼接数据帧,并将所述第一拼接数据帧下发给所述解码引擎计算单元;
通过所述解码控制单元对所述待解码数据帧与下一帧待解码数据帧的前预设位宽的数据进行拼接,得到第二拼接数据帧,并将所述第二拼接数据帧下发给所述比较器组阵列;
所述通过向量融合单元融合所述第一向量与所述第二向量包括:
当所述第一向量的当前比特位的类型是长度且有效时,如果所述当前比特位的码长所指向的下一个位置大于边界值,则将所述融合向量的所述当前比特位标记为有效且不完整,所述融合向量的所述当前比特位的码长为所述第一向量的所述当前比特位的码长;
当所述第一向量的当前比特位的类型是长度且有效时,如果所述当前比特位的码长所指向的下一个位置小于或等于所述边界值,则将所述融合向量的所述当前比特位标记为有效且完整,所述融合向量的所述当前比特位的码长为所述第一向量的所述当前比特位的码长与所述当前比特位的码长所指向的所述第二向量的比特位的码长的和;
当所述第一向量的所述当前比特位无效时,所述融合向量无效;
当所述第一向量的所述当前比特位为原文时,所述融合向量的所述当前比特位标记为原文有效且完整。
5.一种哈夫曼解码设备,其特征在于,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如权利要求4所述的哈夫曼解码方法的步骤。
6.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求4所述的哈夫曼解码方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111011870.5A CN113839678B (zh) | 2021-08-31 | 2021-08-31 | 一种哈夫曼解码系统、方法、设备及计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111011870.5A CN113839678B (zh) | 2021-08-31 | 2021-08-31 | 一种哈夫曼解码系统、方法、设备及计算机可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113839678A CN113839678A (zh) | 2021-12-24 |
CN113839678B true CN113839678B (zh) | 2023-11-03 |
Family
ID=78961833
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111011870.5A Active CN113839678B (zh) | 2021-08-31 | 2021-08-31 | 一种哈夫曼解码系统、方法、设备及计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113839678B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114095036B (zh) * | 2022-01-18 | 2022-04-22 | 苏州浪潮智能科技有限公司 | 一种动态哈夫曼编码的码长生成装置 |
Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4888645A (en) * | 1984-01-16 | 1989-12-19 | International Business Machines Corporation | Method for encoding and decoding a digital image |
JPH06104769A (ja) * | 1992-09-17 | 1994-04-15 | Oki Electric Ind Co Ltd | ハフマン符号復号装置 |
US5406279A (en) * | 1992-09-02 | 1995-04-11 | Cirrus Logic, Inc. | General purpose, hash-based technique for single-pass lossless data compression |
US5686915A (en) * | 1995-12-27 | 1997-11-11 | Xerox Corporation | Interleaved Huffman encoding and decoding method |
US5740460A (en) * | 1994-07-29 | 1998-04-14 | Discovision Associates | Arrangement for processing packetized data |
US6865668B1 (en) * | 1998-09-15 | 2005-03-08 | Trustees Of Columbia University In The City Of New York | Variable-length, high-speed asynchronous decoder circuit |
JP2007043595A (ja) * | 2005-08-05 | 2007-02-15 | Nec Corp | 可変長符号復号化方法および装置ならびにデータ伸長装置 |
CN102244518A (zh) * | 2010-05-10 | 2011-11-16 | 百度在线网络技术(北京)有限公司 | 并行解压缩的硬件实现的系统及方法 |
CN106027066A (zh) * | 2015-03-28 | 2016-10-12 | 国际商业机器公司 | 用于解码的并行霍夫曼数据解码器、设计结构和方法 |
CN108573069A (zh) * | 2018-05-04 | 2018-09-25 | 西安交通大学 | 一种加速压缩流量正则表达式匹配的Twins方法 |
US10083034B1 (en) * | 2017-09-22 | 2018-09-25 | Intel Corporation | Method and apparatus for prefix decoding acceleration |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7642935B2 (en) * | 2008-04-07 | 2010-01-05 | Mediatek Inc. | Huffman decoding method and apparatus |
US8610606B2 (en) * | 2011-11-24 | 2013-12-17 | International Business Machines Corporation | Compression algorithm incorporating dynamic selection of a predefined huffman dictionary |
US9513919B2 (en) * | 2015-04-28 | 2016-12-06 | Intel Corporation | Method and apparatus for speculative decompression |
US10862513B2 (en) * | 2019-01-16 | 2020-12-08 | Fungible, Inc. | Data processing unit having hardware-based parallel variable-length codeword decoding |
-
2021
- 2021-08-31 CN CN202111011870.5A patent/CN113839678B/zh active Active
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4888645A (en) * | 1984-01-16 | 1989-12-19 | International Business Machines Corporation | Method for encoding and decoding a digital image |
US5406279A (en) * | 1992-09-02 | 1995-04-11 | Cirrus Logic, Inc. | General purpose, hash-based technique for single-pass lossless data compression |
JPH06104769A (ja) * | 1992-09-17 | 1994-04-15 | Oki Electric Ind Co Ltd | ハフマン符号復号装置 |
US5740460A (en) * | 1994-07-29 | 1998-04-14 | Discovision Associates | Arrangement for processing packetized data |
US5686915A (en) * | 1995-12-27 | 1997-11-11 | Xerox Corporation | Interleaved Huffman encoding and decoding method |
US6865668B1 (en) * | 1998-09-15 | 2005-03-08 | Trustees Of Columbia University In The City Of New York | Variable-length, high-speed asynchronous decoder circuit |
JP2007043595A (ja) * | 2005-08-05 | 2007-02-15 | Nec Corp | 可変長符号復号化方法および装置ならびにデータ伸長装置 |
CN102244518A (zh) * | 2010-05-10 | 2011-11-16 | 百度在线网络技术(北京)有限公司 | 并行解压缩的硬件实现的系统及方法 |
CN106027066A (zh) * | 2015-03-28 | 2016-10-12 | 国际商业机器公司 | 用于解码的并行霍夫曼数据解码器、设计结构和方法 |
US10083034B1 (en) * | 2017-09-22 | 2018-09-25 | Intel Corporation | Method and apparatus for prefix decoding acceleration |
CN108573069A (zh) * | 2018-05-04 | 2018-09-25 | 西安交通大学 | 一种加速压缩流量正则表达式匹配的Twins方法 |
Non-Patent Citations (3)
Title |
---|
H. Shizhen, L. Wei and L. Teng.PNG graphics hardware decoding of High-speed Huffman decoder design. 2009 WRI World Congress on Computer Science and Information Engineering.2009,全文. * |
S. Satpathy et al..34.4Mbps 1.56Tbps/W DEFLATE Decompression Accelerator Featuring Block-Adaptive Huffman Decoder in 14nm Tri-Gate CMOS for IoT Platforms.ESSCIRC 2018 - IEEE 44th European Solid State Circuits Conference (ESSCIRC).2018,全文. * |
刘思军.运动姿态视频测量分析仪高速JPEG译码器设计.知网.2021,全文. * |
Also Published As
Publication number | Publication date |
---|---|
CN113839678A (zh) | 2021-12-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
WO2017193716A1 (zh) | 一种极化码的编码和速率匹配方法、装置及设备 | |
US20140040214A1 (en) | Entropy Coding and Decoding Using Polar Codes | |
KR100527891B1 (ko) | 허프만 디코딩을 수행하는 방법 | |
CN106202213B (zh) | 一种fpga二进制文件压缩、解压方法及压缩、解压装置 | |
CN113839678B (zh) | 一种哈夫曼解码系统、方法、设备及计算机可读存储介质 | |
CN113630125A (zh) | 数据压缩、编码解压缩方法、装置、电子设备及存储介质 | |
CN112398484B (zh) | 一种编码方法及相关设备 | |
US11184034B2 (en) | Method and device for decoding staircase code, and storage medium | |
JP3080149B2 (ja) | パタン符号化方法及び復号化方法とこの方法を用いた符号化装置及び復号化装置 | |
CN116471337A (zh) | 一种基于bwt和lzw的报文压缩与解压缩方法及设备 | |
EP3731418A1 (en) | Decoding method and device | |
CN113687976B (zh) | 面向dna信息存储的编码和解码方法与装置 | |
CN116302670A (zh) | 编解码方法、编解码器、芯片、硬盘、通讯系统 | |
CN114614832A (zh) | 基于前后游程长度编码的测试数据压缩及解压方法 | |
CN107615839B (zh) | 处理子信令段的方法、处理装置、接入点和站点 | |
CN102891730B (zh) | 基于bcd码卫星短报文的编码方法和装置 | |
US10742783B2 (en) | Data transmitting apparatus, data receiving apparatus and method thereof having encoding or decoding functionalities | |
CN113839679B (zh) | 一种哈夫曼解码系统、方法、设备及计算机可读存储介质 | |
CN106559085A (zh) | 一种范式哈夫曼解码方法及其装置 | |
CN112260699A (zh) | 属性通讯编解码方法、编码装置、解码装置及系统 | |
US12010352B2 (en) | Coding method and related device | |
US6611211B2 (en) | Data mask coding | |
CN113708887B (zh) | 极化码编码及译码方法和装置、信息传输系统 | |
CN112511171B (zh) | 一种压缩数据解码方法、装置、设备及可读存储介质 | |
US6622279B1 (en) | Computer for data processing and method for data processing using a computer |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |