CN113364467B - 一种哈夫曼解码系统、方法、设备及存储介质 - Google Patents
一种哈夫曼解码系统、方法、设备及存储介质 Download PDFInfo
- Publication number
- CN113364467B CN113364467B CN202110626867.8A CN202110626867A CN113364467B CN 113364467 B CN113364467 B CN 113364467B CN 202110626867 A CN202110626867 A CN 202110626867A CN 113364467 B CN113364467 B CN 113364467B
- Authority
- CN
- China
- Prior art keywords
- data
- vector
- code
- length
- segment
- 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
Images
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
本申请公开了一种哈夫曼解码系统、方法、设备及存储介质。本申请提供的系统包括:输入控制模块、比较器组阵列、内容寻址存储器和解码引擎计算模块,基于这些模块在确定需要解码的一个待解码数据帧后,能够并行确定该待解码数据帧中的每个数据段的码长和偏移量,然后根据每个数据段的码长和偏移量确定每个数据段对应的码字信息;根据每个数据段的码长和偏移量、每个数据段对应的码字信息、以及传递数据,从而可以将待解码数据帧中的所有有效码字一起进行解码。相比于对逐个码字进行解码,提高了解码效率。相应地,本申请提供的一种哈夫曼解码方法、设备及存储介质,也同样具有上述技术效果。
Description
技术领域
本申请涉及计算机技术领域,特别涉及一种哈夫曼解码系统、方法、设备及存储介质。
背景技术
当今社会,随着5G,物联网,云计算,大数据,人工智能等技术的飞速发展,高速而又安全的数据存储服务面临着新的挑战。在这些技术当中,云计算技术相当于人的大脑,提供着大量的数据存储以及高效的数据计算方式,同时也让计算资源和存储资源更加集中。随着海量的数据呈指数级增长,对现有的存储设备带来前所未有的巨大压力。因此,高效安全的数据压缩技术成为降低存储成本,节省存储资源的有效方法。
哈夫曼编码是数据压缩中常用的一种编码算法。该算法根据待压缩文本中数据出现的频率来对数据进行可变长度的编码。出现频次最大的文本使用最短的编码,出现频次最小的文本使用最长的编码,以此达到最大化的数据压缩率。
哈夫曼解码时通过码流和恢复得到的码表进行解码,由上面的编码过程可以知道,哈夫曼编码是一种可变长度的编码,所以某一个待解码码字的长度在解码前是未知的,因此在当前待解码码字没有完成解码之前,下一个待解码码字的位置是无法确定的,所以需要对压缩后的码字一个一个的进行解码,导致解码效率较低。
因此,如何提高哈夫曼解码效率,是本领域技术人员需要解决的问题。
发明内容
有鉴于此,本申请的目的在于提供一种哈夫曼解码系统、方法、设备及存储介质,以提高哈夫曼解码效率。其具体方案如下:
第一方面,本申请提供了一种哈夫曼解码系统,包括:
输入控制模块,用于将任意位宽的待解码数据帧与下一帧拼接,得到传递数据,并将所述传递数据发送至比较器组阵列和解码引擎计算模块;
所述比较器组阵列,用于按照压缩最大码长划分所述待解码数据帧,得到多个数据段,并行确定每个数据段的码长和偏移量;
内容寻址存储器,用于根据每个数据段的码长和偏移量确定每个数据段对应的码字信息;
所述解码引擎计算模块,用于根据每个数据段的码长和偏移量、每个数据段对应的码字信息、以及所述传递数据,并行解码所述待解码数据帧中的所有有效码字。
优选地,所述比较器组阵列包括P个比较器组,P为所述待解码数据帧的位宽与所述压缩最大码长M之和,任一个比较器组包括M个比较器,M个比较器的位宽分别为1、2、3…M。
优选地,所述比较器组阵列具体用于:
将多个数据段同时输入多个比较器组,以并行确定每个数据段的码长和偏移量。
优选地,所述内容寻址存储器具体用于:
针对任一个数据段,将该数据段的码长和偏移量,并行与内容寻址存储器的各个存储单元中的码字信息进行对比,以确定与该数据段的码长和偏移量均匹配的码字信息。
优选地,所述解码引擎计算模块包括:
状态机,用于控制L向量、P向量以及R向量的计算状态;
计算单元,用于基于每个数据段的码长和偏移量构建得到L0向量,并基于所述L0向量计算多个L向量,任一个L向量的计算公式包括:
Lm[n].len=Lm-1[n].len+Lm-1[Lm-1[n].len+n].len
Lm[n].vld=Lm-1[n].vld&Lm-1[Lm-1[n].len+n].vld&Lm[n].len<MAX
其中,Lm[n].len表示当前正在计算的向量Lm的第n个位置的长度值,Lm-1[n].len表示前一个向量Lm-1的第n个位置的长度值,Lm-1[Lm-1[n].len+n].len表示前一个向量Lm-1的第n个位置所指向的下一个有效位置的长度值;Lm[n].vld表示当前正在计算的向量Lm的第n个位置的长度是否有效,Lm-1[n].vld表示前一个向量Lm-1的第n个位置的长度是否有效,Lm-1[Lm-1[n].len+n].vld表示前一个向量Lm-1的第n个位置所指向的下一个有效位置的长度是否有效,MAX为所述待解码数据帧的位宽与所述压缩最大码长之和;
基于多个L向量计算P向量;所述P向量用于记录所有数据段中的有效码字的位置;
基于所述P向量,每个数据段对应的码字信息、以及所述传递数据计算R向量;所述R向量用于记录有效码字的位置、每个数据段对应的码字信息、extra_bit信息、所述待解码数据帧中的最后一个有效码字的下一个码字位置;
基于所述R向量确定所述待解码数据帧中的所有有效码字的解码结果。
第二方面,本申请提供了一种哈夫曼解码方法,应用于上述任一项所述的系统,包括:
利用输入控制模块获取任意位宽的待解码数据帧后,将任意位宽的待解码数据帧与下一帧拼接,得到传递数据,并将所述传递数据发送至比较器组阵列和解码引擎计算模块;
利用所述比较器组阵列按照压缩最大码长划分所述待解码数据帧,得到多个数据段,并行确定每个数据段的码长和偏移量;
利用内容寻址存储器根据每个数据段的码长和偏移量确定每个数据段对应的码字信息;
利用所述解码引擎计算模块根据每个数据段的码长和偏移量、每个数据段对应的码字信息、以及所述传递数据,并行解码所述待解码数据帧中的所有有效码字。
优选地,所述利用所述比较器组阵列并行确定每个数据段的码长和偏移量,包括:
利用所述比较器组阵列针对任一个数据段,从该数据段的起始位置截取与各个长度相等的各个片段;各个长度取值1、2、3…M,M为所述压缩最大码长;
若各个片段中的任一个目标片段包含有效码字,且所述目标片段大于与所述目标片段具有相等长度的目标基码,则判断下一片段是否小于下一基码;
其中,所述下一片段比所述目标片段的长度大1,所述下一基码与所述下一片段具有相等长度;
若是,则将所述目标片段的长度确定为该数据段的码长,并将所述目标片段与所述目标基码的差值确定为该数据段的偏移量。
优选地,所述利用内容寻址存储器根据每个数据段的码长和偏移量确定每个数据段对应的码字信息,包括:
利用内容寻址存储器针对任一个数据段,将该数据段的码长和偏移量,并行与码表进行对比,以确定该数据段对应的码字信息。
优选地,所述利用所述解码引擎计算模块根据每个数据段的码长和偏移量、每个数据段对应的码字信息、以及所述传递数据,并行解码所述待解码数据帧中的所有有效码字,包括:
利用所述解码引擎计算模块基于每个数据段的码长和偏移量构建得到L0向量,并基于所述L0向量计算多个L向量,任一个L向量的计算公式包括:
Lm[n].len=Lm-1[n].len+Lm-1[Lm-1[n].len+n].len
Lm[n].vld=Lm-1[n].vld&Lm-1[Lm-1[n].len+n].vld&Lm[n].len<MAX
其中,Lm[n].len表示当前正在计算的向量Lm的第n个位置的长度值,Lm-1[n].len表示前一个向量Lm-1的第n个位置的长度值,Lm-1[Lm-1[n].len+n].len表示前一个向量Lm-1的第n个位置所指向的下一个有效位置的长度值;Lm[n].vld表示当前正在计算的向量Lm的第n个位置的长度是否有效,Lm-1[n].vld表示前一个向量Lm-1的第n个位置的长度是否有效,Lm-1[Lm-1[n].len+n].vld表示前一个向量Lm-1的第n个位置所指向的下一个有效位置的长度是否有效,MAX为所述待解码数据帧的位宽与所述压缩最大码长之和;
基于多个L向量计算P向量;所述P向量用于记录所有数据段中的有效码字的位置;
基于所述P向量,每个数据段对应的码字信息、以及所述传递数据计算R向量;所述R向量用于记录有效码字的位置、每个数据段对应的码字信息、extra_bit信息、所述待解码数据帧中的最后一个有效码字的下一个码字位置;
基于所述R向量确定所述待解码数据帧中的所有有效码字的解码结果。
优选地,针对任一个L向量中的各个位置并行计算。
优选地,所述利用所述解码引擎计算模块根据每个数据段的码长和偏移量、每个数据段对应的码字信息、以及所述传递数据,并行解码所述待解码数据帧中的所有有效码字之后,还包括:
利用所述解码引擎计算模块将所述待解码数据帧中的最后一个有效码字的下一个码字位置,确定为下一待解码数据帧的起始位置。
第三方面,本申请提供了一种哈夫曼解码设备,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序,以实现前述公开的哈夫曼解码方法。
第四方面,本申请提供了一种存储介质,用于保存计算机程序,其中,所述计算机程序被处理器执行时实现前述公开的哈夫曼解码方法。
通过以上方案可知,本申请提供了一种哈夫曼解码系统,包括:输入控制模块,用于将任意位宽的待解码数据帧与下一帧拼接,得到传递数据,并将所述传递数据发送至比较器组阵列和解码引擎计算模块;所述比较器组阵列,用于按照压缩最大码长划分所述待解码数据帧,得到多个数据段,并行确定每个数据段的码长和偏移量;内容寻址存储器,用于根据每个数据段的码长和偏移量确定每个数据段对应的码字信息;所述解码引擎计算模块,用于根据每个数据段的码长和偏移量、每个数据段对应的码字信息、以及所述传递数据,并行解码所述待解码数据帧中的所有有效码字。
可见,本申请中的输入控制模块能够将任意位宽的待解码数据帧与下一帧拼接,得到传递数据,并将传递数据发送至比较器组阵列和解码引擎计算模块;比较器组阵列能够按照压缩最大码长划分待解码数据帧,得到多个数据段,并行确定每个数据段的码长和偏移量;内容寻址存储器能够根据每个数据段的码长和偏移量确定每个数据段对应的码字信息;解码引擎计算模块能够根据每个数据段的码长和偏移量、每个数据段对应的码字信息、以及传递数据,并行解码待解码数据帧中的所有有效码字,从而可以将待解码数据帧中的所有有效码字一起进行解码。相比于对逐个码字进行解码,提高了解码效率。
相应地,本申请提供的一种哈夫曼解码方法、设备及存储介质,也同样具有上述技术效果。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本申请公开的一种哈夫曼解码方法流程图;
图2为本申请公开的一种哈夫曼树示意图;
图3为本申请公开的一个数据段中各个比特位的示意图;
图4为本申请公开的一种哈夫曼解码系统示意图;
图5为本申请公开的一种相邻数据帧拼接示意图;
图6为本申请公开的一种比较器组结构示意图;
图7为本申请公开的一种内容寻址存储器的内部结构示意图;
图8为本申请公开的一种状态机控制状态流转的示意图;
图9为本申请公开的一种计算L向量的电路结构示意图;
图10为本申请公开的适用于哈夫曼解码系统的解码流程图;
图11为本申请公开的一种哈夫曼解码设备示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
目前,需要对压缩后的码字一个一个的进行解码,导致解码效率较低。为此,本申请提供了一种哈夫曼解码方案,能够并行确定该待解码数据帧中的每个数据段的码长和偏移量,然后根据每个数据段的码长和偏移量确定每个数据段对应的码字信息;根据每个数据段的码长和偏移量、每个数据段对应的码字信息、以及传递数据,从而可以将待解码数据帧中的所有有效码字一起进行解码。相比于对逐个码字进行解码,提高了解码效率。
参见图1所示,本申请实施例公开了一种哈夫曼解码方法,包括:
S101、利用输入控制模块获取任意位宽的待解码数据帧后,将任意位宽的待解码数据帧与下一帧拼接,得到传递数据,并将传递数据发送至比较器组阵列和解码引擎计算模块。
其中,本实施例提供的哈夫曼解码方法可以针对任意位宽的待解码码流进行解码。待解码数据帧指待解码码流中的某一帧。也即输入控制模块可以针对任意位宽的待解码码流进行数据帧拼接。
S102、利用比较器组阵列按照压缩最大码长划分待解码数据帧,得到多个数据段,并行确定每个数据段的码长和偏移量。
压缩最大码长由压缩过程确定,其为哈夫曼树的最大深度。哈夫曼树是一种特殊的二叉树,这种树的所有的叶子节点都带有权值,哈夫曼树是构造出的带权值路径最短的二叉树。假设二叉树存在s个带权值的叶子节点。那么根节点到各个叶子节点的长度与叶子节点相应的乘积和叫做二叉树的带权路径,可用下面公式表示:
其中,wi为第i个叶子节点的权值,li为此节点的路径长度。利用上述的哈夫曼树进行二进制编码就是哈夫曼编码。
如图2所示,是一段文本经过统计构造后的哈夫曼树,其深度为5。通过下面的哈夫曼树可以对二叉树中每一个叶子节点进行编码。例如,字符“H”的编码就是“00”,字符“M”的编码就是“1000”。依次类推可以得到文本中所有字符的哈夫曼编码。其中,哈夫曼编码对各个字符的编码不会冲突,也即:不会存在某一个编码是另外一个编码的前缀。
若待解码数据帧的位宽为64比特,压缩最大码长为7,那么划分64比特可得到如下数据段:
数据段0:第0~6比特;
数据段1:第1~7比特;
数据段2:第2~8比特;
数据段3:第3~9比特;
数据段4:第4~10比特;
……
可见,每个数据段都包括7个比特,并且相邻数据段的起始位置、结束位置差一个比特位;也即:后一数据段的起始位置为前一数据段的起始位置加一,后一数据段的结束位置为前一数据段的结束位置加一。针对这些数据段,同时确定其码长和偏移量。
在一种具体实施方式中,利用所述比较器组阵列并行确定每个数据段的码长和偏移量,包括:利用所述比较器组阵列针对任一个数据段,从该数据段的起始位置截取与各个长度相等的各个片段;各个长度取值1、2、3…M,M为压缩最大码长;若各个片段中的任一个目标片段包含有效码字,且目标片段大于与目标片段具有相等长度的目标基码,则判断下一片段是否小于下一基码;其中,下一片段比目标片段的长度大1,下一基码与下一片段具有相等长度;若是,则将目标片段的长度确定为该数据段的码长,并将目标片段与目标基码的差值确定为该数据段的偏移量。
针对某一个7比特的数据段,其中包括7个比特,具体请参见图3。那么所截取的各个片段分别为,片段1:第1个比特,片段2:第1+2个比特,片段3:第1+2+3个比特,片段4:第1+2+3+4个比特,片段5:第1+2+3+4+5个比特,片段6:第1+2+3+4+5+6个比特,片段7:第1+2+3+4+5+6+7个比特(即整个数据段)。
相应的,片段1~片段7分别对应一个相等长度的基码。即:片段1对应1比特的基码1,片段2对应2比特的基码2,片段3对应3比特的基码3……基码为某一固定长度下的所有编码中的最短编码,这些基码从编码压缩过程得到。例如:图2中的U、F、N所对应的编码的长度相等,那么可从中选择最短长度的一个作为基码。
S103、利用内容寻址存储器根据每个数据段的码长和偏移量确定每个数据段对应的码字信息。
在一种具体实施方式中,利用内容寻址存储器根据每个数据段的码长和偏移量确定每个数据段对应的码字信息,包括:利用内容寻址存储器针对任一个数据段,将该数据段的码长和偏移量,并行与码表进行对比,以确定该数据段对应的码字信息。
码表即哈夫曼码表,其中记录了各个有效编码的码字信息以及该码字所带的extra_bit的长度。
S104、利用解码引擎计算模块根据每个数据段的码长和偏移量、每个数据段对应的码字信息、以及传递数据,并行解码待解码数据帧中的所有有效码字。
在一种具体实施方式中,利用解码引擎计算模块根据每个数据段的码长和偏移量、每个数据段对应的码字信息、以及传递数据,并行解码待解码数据帧中的所有有效码字,包括:利用所述解码引擎计算模块基于每个数据段的码长和偏移量构建得到L0向量,并基于L0向量计算多个L向量,任一个L向量的计算公式包括:
Lm[n].len=Lm-1[n].len+Lm-1[Lm-1[n].len+n].len
Lm[n].vld=Lm-1[n].vld&Lm-1[Lm-1[n].len+n].vld&Lm[n].len<MAX
其中,Lm[n].len表示当前正在计算的向量Lm的第n个位置的长度值,Lm-1[n].len表示前一个向量Lm-1的第n个位置的长度值,Lm-1[Lm-1[n].len+n].len表示前一个向量Lm-1的第n个位置所指向的下一个有效位置的长度值;Lm[n].vld表示当前正在计算的向量Lm的第n个位置的长度是否有效,Lm-1[n].vld表示前一个向量Lm-1的第n个位置的长度是否有效,Lm-1[Lm-1[n].len+n].vld表示前一个向量Lm-1的第n个位置所指向的下一个有效位置的长度是否有效,MAX为待解码数据帧的位宽与压缩最大码长之和;
基于多个L向量计算P向量;P向量用于记录所有数据段中的有效码字的位置;
基于P向量,每个数据段对应的码字信息、以及传递数据计算R向量;R向量用于记录有效码字的位置、每个数据段对应的码字信息、extra_bit信息、待解码数据帧中的最后一个有效码字的下一个码字位置;
基于R向量确定待解码数据帧中的所有有效码字的解码结果。
由于当前L向量中的各个位置仅与前一个L向量中的相应位置有关,因此在一种具体实施方式中,针对任一个L向量中的各个位置可以并行计算。
在一种具体实施方式中,利用解码引擎计算模块根据每个数据段的码长和偏移量、每个数据段对应的码字信息、以及传递数据,并行解码待解码数据帧中的所有有效码字之后,还包括:利用解码引擎计算模块将待解码数据帧中的最后一个有效码字的下一个码字位置,确定为下一待解码数据帧的起始位置,以便基于该起始位置确定下一待解码数据帧的第一个有效码字。
由上可见,本实施例基于输入控制模块、比较器组阵列、内容寻址存储器和解码引擎计算模块进行哈夫曼并行解码。在确定需要解码的一个待解码数据帧后,能够并行确定该待解码数据帧中的每个数据段的码长和偏移量,然后根据每个数据段的码长和偏移量确定每个数据段对应的码字信息;根据每个数据段的码长和偏移量、每个数据段对应的码字信息、以及传递数据,从而可以将待解码数据帧中的所有有效码字一起进行解码。相比于对逐个码字进行解码,提高了解码效率。
下面对本申请实施例提供的一种哈夫曼解码系统进行介绍,下文描述的一种哈夫曼解码系统与上文描述的一种哈夫曼解码方法可以相互参照。
参见图4所示,本申请实施例公开了一种哈夫曼解码系统,包括:
输入控制模块,用于将任意位宽的待解码数据帧与下一帧拼接,得到传递数据,并将传递数据发送至比较器组阵列和解码引擎计算模块;
比较器组阵列,用于按照压缩最大码长划分待解码数据帧,得到多个数据段,并行确定每个数据段的码长和偏移量;
内容寻址存储器(CAM,Content Addressable Memory),用于根据每个数据段的码长和偏移量确定每个数据段对应的码字信息;
解码引擎计算模块,用于根据每个数据段的码长和偏移量、每个数据段对应的码字信息、以及传递数据,并行解码待解码数据帧中的所有有效码字。
可见,本实施例主要包括四个模块,下面对这四个模块的具体实现做详细阐述。
1、输入控制模块主要完成对输入数据流的控制,即拼接两个相邻的数据帧。对于任意位宽的数据流的解码过程,一帧数据中的最后一个码字通常会跨越解码位宽的额定边界,解码结束的比特位置信息传递到下一帧数据流的解码周期,因此发送到解码引擎计算模块的比特流中需至少包含下一帧数据流中的部分比特,将此部分比特称作交叠区比特。具体请参见图5,A待解码数据帧的下一位置加上当前压缩最大码长即交叠区比特。输入控制模块在第n个周期内将A、B两个待解码数据帧拼接,然后送入比较器组阵列和解码引擎计算模块,在第n+1个周期内将B、C两个待解码数据帧拼接,然后送入比较器组阵列和解码引擎计算模块。
需要说明的是,交叠区的比特数等于哈夫曼码的压缩最大码长,该交叠区包括下一帧的起始位置。起始位置肯定大于63(一帧数据的比特数),小于63+交叠区的比特数。
2、比较器组阵列能够同时将一帧待解码数据中的各个数据段与不同长度的基码进行比较和计算,从而得到各个数据段的有效码长和偏移。因此在一种具体实施方式中,比较器组阵列具体用于:将多个数据段同时输入多个比较器组,以并行确定每个数据段的码长和偏移量。
可见,比较器组阵列中的每个比较器组具有如下功能:针对任一个数据段,从该数据段的起始位置截取与各个长度相等的各个片段;各个长度取值1、2、3…M,M为压缩最大码长;若各个片段中的任一个目标片段包含有效码字,且目标片段大于与目标片段具有相等长度的目标基码,则判断下一片段是否小于下一基码;其中,下一片段比目标片段的长度大1,下一基码与下一片段具有相等长度;若是,则将目标片段的长度确定为该数据段的码长,并将目标片段与目标基码的差值确定为该数据段的偏移量。请参见图3,若目标片段为片段1,那么下一片段为片段2。
在一种具体实施方式中,比较器组阵列包括P个比较器组,P为待解码数据帧的位宽与压缩最大码长M之和,任一个比较器组包括M个比较器,M个比较器的位宽分别为1、2、3…M。
比较器组具体可参照图6,图6示意了3个比较器组,每个比较器组中的b1(第1个比特)、b2、b3、b4、b5、b6、b7可对照图3中的7个比特。其中,一个比较器组由7个不同位宽的比较器组成,每个比较器的一端输入为哈夫曼码表的不同长度的基码,另一端的输入为待解码的各数据段的各片段。
3、内容寻址存储器中的每一个存储单元都包含一个内嵌的比较逻辑,输入CAM的数据会和其内部每一个存储单元存储的数据内容(码表中的码字信息)进行比较,然后返回与输入数据匹配的存储单元的地址。因此在一种具体实施方式中,内容寻址存储器具体用于:针对任一个数据段,将该数据段的码长和偏移量,并行与内容寻址存储器的各个存储单元中的码字信息进行对比,以确定与该数据段的码长和偏移量均匹配的码字信息。
内容寻址存储器的内部结构具体可参照图7,图7中的各个存储单元将哈夫曼码表中的每一个码字的长度(sch_len)和偏移值(sch_ofs)作为所存储的数据内容。图7中的MUX为数据选择器。
CAM将输入的码长和内部每一个存储单元所存储的码长做比较,相等时比较器(CMP)输出1,不等时输出0;同样对输入的偏移值进行比较,得当两个结果序列。根据哈夫曼编码的唯一性原则,根据两个结果序列确定一个独热码序列,根据该独热码序列可以得到相匹配的存储单元中所存储的长度和偏移值在码表中的位置,该位置对应的码字即为输入数据对应的码字。因此CAM可以匹配输入数据对应的码字结果,该结果可定义为原文向量D。
4、解码引擎计算模块包括:状态机和计算单元。具体的,状态机用于控制L向量、P向量以及R向量的计算状态;计算单元用于计算L向量、P向量以及R向量。
如图8所示,状态机的一个循环过程对应一个解码周期,在一个解码周期内需要计算得到多个L向量(如CAL_L1~CAL_L6),P向量(即CAL_P),R(即CAL_R)向量以及下一解码周期需要的起始位置信息。
如图9所示,计算单元中用于计算L向量的电路结构可以参照图9。可见,L向量的计算可以通过加法器和选择器来实现。
需要说明的是,CAL_L0向量(即基于每个数据段的码长和偏移量构建得到L0向量)为初始向量,该向量中记录有各个数据段的码长、偏移量、长度是否有效的信息。根据CAL_L0可依次计算CAL_L1~CAL_L6。CAL_L1~CAL_L6中任一个L向量的计算公式包括:
Lm[n].len=Lm-1[n].len+Lm-1[Lm-1[n].len+n].len
Lm[n].vld=Lm-1[n].vld&Lm-1[Lm-1[n].len+n].vld&Lm[n].len<MAX
其中,Lm[n].len表示当前正在计算的向量Lm的第n个位置的长度值,Lm-1[n].len表示前一个向量Lm-1的第n个位置的长度值,Lm-1[Lm-1[n].len+n].len表示前一个向量Lm-1的第n个位置所指向的下一个有效位置的长度值;Lm[n].vld表示当前正在计算的向量Lm的第n个位置的长度是否有效,Lm-1[n].vld表示前一个向量Lm-1的第n个位置的长度是否有效,Lm-1[Lm-1[n].len+n].vld表示前一个向量Lm-1的第n个位置所指向的下一个有效位置的长度是否有效,MAX为待解码数据帧的位宽与压缩最大码长之和。
如果等式右边表达式中对应位置的长度无效,则等式左侧的长度无效;如果Lm[n].len超过MAX,则等号Lm[n].len无效。由此计算公式可以看出,当前计算周期中向量Lm中的元素只与前一个计算周期中向量Lm-1中的对应位置的元素有关,因此向量Lm中的所有位置的计算可以并行完成。
第二个阶段是P向量的计算。当向量Lm的所有元素都为无效时,状态机进入CAL_P状态,开始P向量计算。P向量的第一个计算周期根据第一个有效码字的起始位置开始计算,该位置为前文中提到的上一解码周期中得到的位于交叠区的起始位置。
P向量的计算是L向量计算的反过程,每一个P向量的计算周期都需要消耗一个L向量。当计算完P向量后,可以得到当前解码周期中数据中所包含的所有有效码字的位置编号信息,因此可以根据当前解码周期的码字结束位置确定下一解码周期的起始位置。
计算P向量,先令:
P0[trustpos].vld=1
P0[trust_pos].idx=0
其中,trust_pos为前一解码周期为当前解码周期计算所得的第一个有效位置信息,其余位置上的元素都为0。然后对位置向量Pn中的所有元素Pn[m]进行计算,如果:
则令:
当P向量计算完成后,如果P[m]是P向量中的一个有效的位置,则对应的D[m]中的有效字符就是当前比特流的解码输出。
计算得到P向量后,状态机进入到CAL_PID状态,将当前解码周期中数据中所包含的所有有效码字的位置编号信息根据序号进行正序排列,用于最终解码结果的并行输出。
第三个阶段是R向量的计算。在CAL_R状态下,根据前文中提到的CAM输出的原文向量D、P向量以及当前周期的待解码数据帧,可以得到记录有有效码字的位置、每个数据段对应的码字信息、extra_bit信息、待解码数据帧中的最后一个有效码字的下一个码字位置等内容的R向量,最后可基于R向量确定待解码数据帧中的所有有效码字的解码结果。
综上,整个解码流程可参照图10,具体包括:
步骤1、将待解码数据帧逐位分割为Mbit的多个数据段:X0~Xn,M为压缩最大码长;
步骤2、用比较器CMP对比任一个数据段与各个基码(BC0~BCn),以确定码长和偏移;
步骤3、基于码长和偏移查询码表;
步骤4、引擎计算L向量、P向量以及R向量,从而得到解码结果。
从上述流程图可以看出,整个解码流程的核心在于引擎中L向量和P向量的计算。前面的码流分割,比较器组阵列和码表查询操作可以通过组合逻辑电路实现,并在单一时钟周期内完成。L向量和P向量计算的周期数取决于码流中有效的码字数目,有效码字数目越多消耗的时钟周期就越多,因此该解码方式中单位长度的数据中包含的码字越多,解码效率越高。由于传统的哈夫曼解方式中解码效率和单位长度的码流中的码字数量成线性关系,但该并行解码方式的解码效率和单位长度中的码字数量成指数关系,因此具有更高的解码效率。
可见,本实施例提供的解码系统在一个解码周期内可以处理包含若干个码字的数据帧,且并行的计算出该帧数据中所有的码字结果,具有较高的解码效率。该系统适用于任意位宽的数据流的并行计算,并行输入数据的位宽越大,并行计算的吞吐率越大。同时,该系统中的数据选择器,加法器,比较器等运算单元可以基于实际情况进行优化,以减少开销。系统中的组合逻辑单元的关键路径也可以基于实际情况进行优化,以提升工作时钟的频率。
下面对本申请实施例提供的一种哈夫曼解码设备进行介绍,下文描述的一种哈夫曼解码设备与上文描述的一种哈夫曼解码方法及系统可以相互参照。
参见图11所示,本申请实施例公开了一种哈夫曼解码设备,包括:
存储器1101,用于保存计算机程序;
处理器1102,用于执行所述计算机程序,以实现上述任意实施例公开的方法。
下面对本申请实施例提供的一种存储介质进行介绍,下文描述的一种存储介质与上文描述的一种哈夫曼解码方法、系统及设备可以相互参照。
一种存储介质,用于保存计算机程序,其中,所述计算机程序被处理器执行时实现前述实施例公开的哈夫曼解码方法。关于该方法的具体步骤可以参考前述实施例中公开的相应内容,在此不再进行赘述。
本申请涉及的“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或模块的过程、方法或设备不必限于清楚地列出的那些步骤或模块,而是可包括没有清楚地列出的或对于这些过程、方法或设备固有的其它步骤或模块。
需要说明的是,在本申请中涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本申请要求的保护范围之内。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
Claims (13)
1.一种哈夫曼解码系统,其特征在于,包括:
输入控制模块,用于将任意位宽的待解码数据帧与下一帧拼接,得到传递数据,并将所述传递数据发送至比较器组阵列和解码引擎计算模块;
所述比较器组阵列,用于按照压缩最大码长划分所述待解码数据帧,得到多个数据段,并行确定每个数据段的码长和偏移量;
内容寻址存储器,用于根据每个数据段的码长和偏移量确定每个数据段对应的码字信息;
所述解码引擎计算模块,用于根据每个数据段的码长和偏移量、每个数据段对应的码字信息、以及所述传递数据,并行解码所述待解码数据帧中的所有有效码字。
2.根据权利要求1所述的系统,其特征在于,所述比较器组阵列包括P个比较器组,P为所述待解码数据帧的位宽与所述压缩最大码长M之和,任一个比较器组包括M个比较器,M个比较器的位宽分别为1、2、3…M。
3.根据权利要求2所述的系统,其特征在于,所述比较器组阵列具体用于:
将多个数据段同时输入多个比较器组,以并行确定每个数据段的码长和偏移量。
4.根据权利要求1所述的系统,其特征在于,所述内容寻址存储器具体用于:
针对任一个数据段,将该数据段的码长和偏移量,并行与内容寻址存储器的各个存储单元中的码字信息进行对比,以确定与该数据段的码长和偏移量均匹配的码字信息。
5.根据权利要求1所述的系统,其特征在于,所述解码引擎计算模块包括:
状态机,用于控制L向量、P向量以及R向量的计算状态;
计算单元,用于基于每个数据段的码长和偏移量构建得到L0向量,并基于所述L0向量计算多个L向量,任一个L向量的计算公式包括:
Lm[n].len=Lm-1[n].len+Lm-1[Lm-1[n].len+n].len
Lm[n].vld=Lm-1[n].vld&Lm-1[Lm-1[n].len+n].vld&Lm[n].len<MAX
其中,Lm[n].len表示当前正在计算的向量Lm的第n个位置的长度值,Lm-1[n].len表示前一个向量Lm-1的第n个位置的长度值,Lm-1[Lm-1[n].len+n].len表示前一个向量Lm-1的第n个位置所指向的下一个有效位置的长度值;Lm[n].vld表示当前正在计算的向量Lm的第n个位置的长度是否有效,Lm-1[n].vld表示前一个向量Lm-1的第n个位置的长度是否有效,Lm-1[Lm-1[n].len+n].vld表示前一个向量Lm-1的第n个位置所指向的下一个有效位置的长度是否有效,MAX为所述待解码数据帧的位宽与所述压缩最大码长之和;
基于多个L向量计算P向量;所述P向量用于记录所有数据段中的有效码字的位置;
基于所述P向量,每个数据段对应的码字信息、以及所述传递数据计算R向量;所述R向量用于记录有效码字的位置、每个数据段对应的码字信息、extra_bit信息、所述待解码数据帧中的最后一个有效码字的下一个码字位置;
基于所述R向量确定所述待解码数据帧中的所有有效码字的解码结果。
6.一种哈夫曼解码方法,其特征在于,应用于如权利要求1至5任一项所述的系统,包括:
利用输入控制模块获取任意位宽的待解码数据帧后,将任意位宽的待解码数据帧与下一帧拼接,得到传递数据,并将所述传递数据发送至比较器组阵列和解码引擎计算模块;
利用所述比较器组阵列按照压缩最大码长划分所述待解码数据帧,得到多个数据段,并行确定每个数据段的码长和偏移量;
利用内容寻址存储器根据每个数据段的码长和偏移量确定每个数据段对应的码字信息;
利用所述解码引擎计算模块根据每个数据段的码长和偏移量、每个数据段对应的码字信息、以及所述传递数据,并行解码所述待解码数据帧中的所有有效码字。
7.根据权利要求6所述的方法,其特征在于,所述利用所述比较器组阵列并行确定每个数据段的码长和偏移量,包括:
利用所述比较器组阵列针对任一个数据段,从该数据段的起始位置截取与各个长度相等的各个片段;各个长度取值1、2、3…M,M为所述压缩最大码长;
若各个片段中的任一个目标片段包含有效码字,且所述目标片段大于与所述目标片段具有相等长度的目标基码,则判断下一片段是否小于下一基码;
其中,所述下一片段比所述目标片段的长度大1,所述下一基码与所述下一片段具有相等长度;
若是,则将所述目标片段的长度确定为该数据段的码长,并将所述目标片段与所述目标基码的差值确定为该数据段的偏移量。
8.根据权利要求6所述的方法,其特征在于,所述利用内容寻址存储器根据每个数据段的码长和偏移量确定每个数据段对应的码字信息,包括:
利用内容寻址存储器针对任一个数据段,将该数据段的码长和偏移量,并行与码表进行对比,以确定该数据段对应的码字信息。
9.根据权利要求6所述的方法,其特征在于,所述利用所述解码引擎计算模块根据每个数据段的码长和偏移量、每个数据段对应的码字信息、以及所述传递数据,并行解码所述待解码数据帧中的所有有效码字,包括:
利用所述解码引擎计算模块基于每个数据段的码长和偏移量构建得到L0向量,并基于所述L0向量计算多个L向量,任一个L向量的计算公式包括:
Lm[n].len=Lm-1[n].len+Lm-1[Lm-1[n].len+n].len
Lm[n].vld=Lm-1[n].vld&Lm-1[Lm-1[n].len+n].vld&Lm[n].len<MAX
其中,Lm[n].len表示当前正在计算的向量Lm的第n个位置的长度值,Lm-1[n].len表示前一个向量Lm-1的第n个位置的长度值,Lm-1[Lm-1[n].len+n].len表示前一个向量Lm-1的第n个位置所指向的下一个有效位置的长度值;Lm[n].vld表示当前正在计算的向量Lm的第n个位置的长度是否有效,Lm-1[n].vld表示前一个向量Lm-1的第n个位置的长度是否有效,Lm-1[Lm-1[n].len+n].vld表示前一个向量Lm-1的第n个位置所指向的下一个有效位置的长度是否有效,MAX为所述待解码数据帧的位宽与所述压缩最大码长之和;
基于多个L向量计算P向量;所述P向量用于记录所有数据段中的有效码字的位置;
基于所述P向量,每个数据段对应的码字信息、以及所述传递数据计算R向量;所述R向量用于记录有效码字的位置、每个数据段对应的码字信息、extra_bit信息、所述待解码数据帧中的最后一个有效码字的下一个码字位置;
基于所述R向量确定所述待解码数据帧中的所有有效码字的解码结果。
10.根据权利要求9所述的方法,其特征在于,针对任一个L向量中的各个位置并行计算。
11.根据权利要求6至10任一项所述的方法,其特征在于,所述利用所述解码引擎计算模块根据每个数据段的码长和偏移量、每个数据段对应的码字信息、以及所述传递数据,并行解码所述待解码数据帧中的所有有效码字之后,还包括:
利用所述解码引擎计算模块将所述待解码数据帧中的最后一个有效码字的下一个码字位置,确定为下一待解码数据帧的起始位置。
12.一种哈夫曼解码设备,其特征在于,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序,以实现如权利要求6至11任一项所述的哈夫曼解码方法。
13.一种存储介质,其特征在于,用于保存计算机程序,其中,所述计算机程序被处理器执行时实现如权利要求6至11任一项所述的哈夫曼解码方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110626867.8A CN113364467B (zh) | 2021-06-04 | 2021-06-04 | 一种哈夫曼解码系统、方法、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110626867.8A CN113364467B (zh) | 2021-06-04 | 2021-06-04 | 一种哈夫曼解码系统、方法、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113364467A CN113364467A (zh) | 2021-09-07 |
CN113364467B true CN113364467B (zh) | 2022-07-08 |
Family
ID=77532472
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110626867.8A Active CN113364467B (zh) | 2021-06-04 | 2021-06-04 | 一种哈夫曼解码系统、方法、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113364467B (zh) |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102244518A (zh) * | 2010-05-10 | 2011-11-16 | 百度在线网络技术(北京)有限公司 | 并行解压缩的硬件实现的系统及方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7095341B2 (en) * | 1999-12-14 | 2006-08-22 | Broadcom Corporation | Programmable variable-length decoder |
CN107925418B (zh) * | 2015-05-21 | 2021-06-01 | 零点科技公司 | 用于混合式数据压缩和解压缩的方法、设备和系统 |
-
2021
- 2021-06-04 CN CN202110626867.8A patent/CN113364467B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102244518A (zh) * | 2010-05-10 | 2011-11-16 | 百度在线网络技术(北京)有限公司 | 并行解压缩的硬件实现的系统及方法 |
Non-Patent Citations (1)
Title |
---|
An Effective Flow-Rule-Reducing Algorithm for Flow Tables in Software-Defined Networks;Ming-Hua Cheng等;《IEEE》;20210223;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN113364467A (zh) | 2021-09-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP1397866B1 (en) | Method and apparatus for adaptive data compression | |
KR101118089B1 (ko) | 가변장 복호화 장치 및 방법 | |
CN107666370B (zh) | 编码方法和设备 | |
JPH06224777A (ja) | 符号化方法、符号化装置、復号方法、復号器、データ圧縮装置、ビットストリーム生成方法及び遷移マシン生成方法 | |
EP1779522A1 (en) | System and method for static huffman decoding | |
JP2002252563A (ja) | ハフマン符号の復号方法、復号装置、ハフマン符号復号用テーブルおよびその作成方法 | |
CN116594572B (zh) | 浮点数流式数据压缩方法、装置、计算机设备及介质 | |
US11075715B2 (en) | Encoding method and apparatus | |
CN113630125A (zh) | 数据压缩、编码解压缩方法、装置、电子设备及存储介质 | |
US6121905A (en) | Method and apparatus for decoding JPEG symbols | |
CN113364467B (zh) | 一种哈夫曼解码系统、方法、设备及存储介质 | |
CN104143991A (zh) | 极性Polar码的译码方法和装置 | |
CN114301468A (zh) | 一种fse编码方法、装置、设备及存储介质 | |
CN114510368A (zh) | 一种基于rs纠删码的编解码加速方法及系统 | |
US6919827B2 (en) | Method and apparatus for effectively decoding Huffman code | |
US7205915B2 (en) | Method of decoding variable length prefix codes | |
KR101030726B1 (ko) | 확률적 테이블에 의해 생성된 심볼을 기반으로 호프만 테이블을 적용한 메모리 효율이 개선된 멀티미디어용 호프만 디코딩 방법 및 장치 | |
CN115952517A (zh) | 一种杂凑值计算方法及系统 | |
CN115801021A (zh) | 一种ans分组编解码方法、计算机设备及存储介质 | |
US10931303B1 (en) | Data processing system | |
Rahman et al. | A faster decoding technique for Huffman codes using adjacent distance array | |
WO2003081783A1 (en) | Method and apparatus for lossless compression and decompression of data | |
EP2883326A1 (en) | Short string compression | |
CN113839678A (zh) | 一种哈夫曼解码系统、方法、设备及计算机可读存储介质 | |
Dubé et al. | Using bit recycling to reduce Knuth's balanced codes redundancy |
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 |