当前位置: 首页 > 专利查询>福州大学专利>正文

一种用于VLSI设计的Huffman编码系统及其实现方法技术方案

技术编号:16082554 阅读:84 留言:0更新日期:2017-08-25 16:53
本发明专利技术涉及一种用于VLSI设计的Huffman编码系统及其实现方法,系统包括复位信号检测单元、开始信号检测单元、输入数据扫描单元、输入数据缓存单元、码字频数缓存单元、数据拼接单元、拼接数据缓存单元、Huffman树节点生成单元、构造Huffman树并编码单元、识别叶子节点单元、去掉根节点编码位单元、建立Huffman码表单元、编码输出单元、编码输出结束标志单元、返回开始信号检测单元;实现方法包括:码字频数统计;按照数据格式拼接数据;递归生成Huffman树中所有节点;构造Huffman树的同时得到所有节点对应的编码;从所有节点中识别出叶子节点及其对应的编码;去掉每个叶子节点所对应编码中的根节点编码位;建立Huffman码表并得到每个叶子节点所对应编码的长度;编码输出及其格式。

【技术实现步骤摘要】
一种用于VLSI设计的Huffman编码系统及其实现方法
本专利技术涉及编码系统领域,特别是涉及一种用于VLSI设计的Huffman编码实现系统及其实现方法。
技术介绍
目前,在对芯片面积、编码速率和压缩效率要求较高的数据无损压缩系统如视频和图像编码系统等一些领域,基于动态Huffman编码或者传统静态Huffman编码芯片已经很难满足要求。Huffman编码属于最佳熵编码法的同时也是一种前缀码,其数据压缩效率最高。为了提高编码压缩效率的需要通常可采用动态Huffman编码或者静态Huffman编码二种方案。动态Huffman编码对输入字符的统计是动态进行的,随着待压缩数据的输入,逐步构造Huffman树,因此随着编码的进行,同一个字符的编码可能发生改变(变得更长或更短)。动态Huffman编码算法中每输入一个字符就要更新一次Huffman树,这也导致动态Huffman编码算法非常复杂,需要更多的寄存器和逻辑运算电路。在待压缩数据量不大时,由于不用预先统计待压缩数据中每种字符的频数,相对静态Huffman编码可以节约时钟周期,但随着待压缩数据量的增加,消耗在更新Huffman树上的时钟周期数急剧增加,降低了系统编码速率,不适合对编码速率要求较高且数据量巨大的编码系统。此外,编码系统通常应该具有与之对应的同样优秀的解码系统才更具有实用价值,然而动态Huffman编码系统每编码完一个字符,解码系统都必须使用和编码系统相同的算法更新Huffman树后才能解压缩一个字符,解压缩效率的低下也导致动态Huffman编码实际应用并不广泛。静态Huffman编码系统通过对待压缩数据的一次扫描,统计每种字符的出现频数后构造Huffman树并得到每个字符对应的的编码,再对一次扫描中存储的待压缩数据进行遍历得到输出码流。在具备高速率编码功能的同时无需额外的存储器或复杂逻辑运算电路结构,节约芯片面积的同时也保证了整体编码系统的稳定性,这些特点使得其在对编码速率要求较高且数据量巨大的编码系统应用中成为一个很好的选择方案。然而传统静态Huffman编码系统一般是利用高级编程语言如C/C++语言中丰富的数据结构(如结构体变量和枚举变量)来描述构造Huffman树过程中每一个节点的数据特性(如频数、节点位置关系、在Huffman树中所处层数)并在软件开发平台上完成。在VHDL/VerilogHDL硬件描述语言中并没有高级编程语言中类似结构体或枚举的数据结构,无法将传统静态Huffman编码直接移植到VLSI设计中。因此,若想要实现适用于VLSI设计的Huffman编码系统,首先必须要在兼顾编码速率、芯片面积和系统功能稳定性的前提下,结合静态Huffman树的构造过程提出了一种新的适合Huffman编码器电路实现的数据格式另一个问题是传统静态Huffman编码系统中采用先构造Huffman树后编码的算法不适合硬件电路实现且效率很低,因此必须改进静态Huffman编码系统中构造Huffman树的算法。新算法必须要在构造Huffman树的过程中完成每次从队列里递归找到最小的两个节点,并且前一次的递归运算结果作为后一次的输入的同时完成对节点的编码,即在构造Huffman树的过程中完成所有节点的编码。最后根据新的数据格式特点,在Huffman树所有节点中快速匹配找到叶子节点及其对应的编码。
技术实现思路
有鉴于此,本专利技术的目的是提供一种用于VLSI设计的Huffman编码系统及其实现方法,可用于VLSI设计的对编码速率要求较高且待压缩数据量巨大的无损压缩编码系统。本专利技术采用以下方案实现:一种用于VLSI设计的Huffman编码系统,包括:一复位信号检测单元,用以在系统运行时检测到复位信号使能后,使系统异步复位,并重新初始化编码系统;一开始信号检测单元,用以当复位信号未使能且开始信号有效时启动编码系统,编码系统开始运行;一输入数据扫描单元,用以对输入的待压缩数据进行扫描;一输入数据缓存单元,用于保存扫描后的待压缩数据;一码字频数缓存单元,用以保存待压缩数据中每种字符和它出现的频数;一数据拼接单元,用以将频数、识别、字符、编码这四种寄存器变量按顺序拼接成与输入字符种类数目相同的寄存器变量;一拼接数据缓存单元,用以保存拼接后的数据;一Huffman树节点生成单元,用以按静态Huffman树生成节点的构造方法生成所有节点;一Huffman树节点缓存单元,用以存放生成的Huffman树的所有节点数据;一Huffman树构造编码单元,用以将生成的所有节点从上到下逐层构造Huffman树,并在构造Huffman树的同时完成对所有节点的编码;一叶子节点识别单元,用以从Huffman树的所有节点中识别出叶子节点及其对应的编码;一根节点编码位去除单元,用以去掉每个叶子节点所对应编码中的根节点编码位,去掉每个叶子节点所对应编码中的根节点编码位;一Huffman码表建立单元,用以建立Huffman码表并得到每个叶子节点所对应编码的长度;一编码输出单元,用以根据Huffman码表按位输出编码结果;一编码输出结束标志单元,用以表示编码输出是否结束;一返回开始信号检测单元,用以重新检测开始信号,等待编码系统再次运行。本专利技术还采用以下方案实现:一种用于VLSI设计的Huffman编码系统的实现方法,包括下述步骤:步骤S1:所述编码系统运行时对复位信号是否使能进行实时检测,若检测到复位信号使能,则使系统异步复位,并重新初始化编码系统;步骤S2:当复位信号未使能且开始信号有效时,启动编码系统,开始扫描输入的待压缩数据;步骤S3:对输入的待压缩数据进行一遍扫描,将输入的待压缩数据送入输入数据缓存单元,通过加法器实现每一种字符出现的频数进行统计,将频数统计结果送入码字频数缓存单元,将待压缩数据保存入寄存器中;步骤S4:将字符、频数这两种寄存器变量与识别、编码这两种寄存器变量,依次按频数、识别、字符、编码的顺序分配一定位宽后拼接成与输入字符种类数目相同的寄存器变量,此时初始时识别、编码位均为零,并送入拼接数据缓存单元保存;步骤S5:将按照新数据格式构造的数据,采用静态Huffman树生成节点的算法递归生成所有节点;步骤S6:对根节点编码1并初始化第一层的两个节点的编码,用第一层的节点匹配出下一层的节点,从上到下逐层构造出Huffman树,并在构造Huffman树的同时对所有节点进行编码;步骤S7:对Huffman树中所有的节点进行识别,找出所有叶子节点及其对应的编码;步骤S8:去掉每个叶子节点所对应编码中的根节点编码位,得到每个叶子节点所对应编码的长度,根据最后得到的叶子节点的编码和编码长度,建立Huffman码表;步骤S9:按照Huffman码表按位输出编码结果,编码结果全部输出后,编码输出结束标志单元置1,编码输出结束;步骤S10:返回开始信号检测,为系统下一次开始编码进行初始化。进一步地,所述步骤S4中,数据拼接单元对给定的总共m个n种字符(a0~an-1)和每种字符对应的频数、识别和编码进行拼接,其中拼接的数据格式总位宽,由低位至高位依次是编码n位,字符的整数位,即以2为底对n种字符总和取对数,识别log2(n+1)的整数位,频数log2(m)的整数位;按照新构造的数据本文档来自技高网
...
一种用于VLSI设计的Huffman编码系统及其实现方法

【技术保护点】
一种用于VLSI设计的Huffman编码系统,其特征在于:包括:一复位信号检测单元,用以在系统运行时检测到复位信号使能后,使系统异步复位,并重新初始化编码系统;一开始信号检测单元,用以当复位信号未使能且开始信号有效时启动编码系统,编码系统开始运行;一输入数据扫描单元,用以对输入的待压缩数据进行扫描;一输入数据缓存单元,用于保存扫描后的待压缩数据;一码字频数缓存单元,用以保存待压缩数据中每种字符和它出现的频数;一数据拼接单元,用以将频数、识别、字符、编码这四种寄存器变量按顺序拼接成与输入字符种类数目相同的寄存器变量;一拼接数据缓存单元,用以保存拼接后的数据;一Huffman树节点生成单元,用以按静态Huffman树生成节点的构造方法生成所有节点;一Huffman树节点缓存单元,用以存放生成的Huffman树的所有节点数据;一Huffman树构造编码单元,用以将生成的所有节点从上到下逐层构造Huffman树,并在构造Huffman树的同时完成对所有节点的编码;一叶子节点识别单元,用以从Huffman树的所有节点中识别出叶子节点及其对应的编码;一根节点编码位去除单元,用以去掉每个叶子节点所对应编码中的根节点编码位,去掉每个叶子节点所对应编码中的根节点编码位;一Huffman码表建立单元,用以建立Huffman码表并得到每个叶子节点所对应编码的长度;一编码输出单元,用以根据Huffman码表按位输出编码结果;一编码输出结束标志单元,用以表示编码输出是否结束;一返回开始信号检测单元,用以重新检测开始信号,等待编码系统再次运行。...

【技术特征摘要】
1.一种用于VLSI设计的Huffman编码系统,其特征在于:包括:一复位信号检测单元,用以在系统运行时检测到复位信号使能后,使系统异步复位,并重新初始化编码系统;一开始信号检测单元,用以当复位信号未使能且开始信号有效时启动编码系统,编码系统开始运行;一输入数据扫描单元,用以对输入的待压缩数据进行扫描;一输入数据缓存单元,用于保存扫描后的待压缩数据;一码字频数缓存单元,用以保存待压缩数据中每种字符和它出现的频数;一数据拼接单元,用以将频数、识别、字符、编码这四种寄存器变量按顺序拼接成与输入字符种类数目相同的寄存器变量;一拼接数据缓存单元,用以保存拼接后的数据;一Huffman树节点生成单元,用以按静态Huffman树生成节点的构造方法生成所有节点;一Huffman树节点缓存单元,用以存放生成的Huffman树的所有节点数据;一Huffman树构造编码单元,用以将生成的所有节点从上到下逐层构造Huffman树,并在构造Huffman树的同时完成对所有节点的编码;一叶子节点识别单元,用以从Huffman树的所有节点中识别出叶子节点及其对应的编码;一根节点编码位去除单元,用以去掉每个叶子节点所对应编码中的根节点编码位,去掉每个叶子节点所对应编码中的根节点编码位;一Huffman码表建立单元,用以建立Huffman码表并得到每个叶子节点所对应编码的长度;一编码输出单元,用以根据Huffman码表按位输出编码结果;一编码输出结束标志单元,用以表示编码输出是否结束;一返回开始信号检测单元,用以重新检测开始信号,等待编码系统再次运行。2.一种根据权利要求1所述的用于VLSI设计的Huffman编码系统的实现方法,其特征在于:包括下述步骤:步骤S1:所述编码系统运行时对复位信号是否使能进行实时检测,若检测到复位信号使能,则使系统异步复位,并重新初始化编码系统;步骤S2:当复位信号未使能且开始信号有效时,启动编码系统,开始扫描输入的待压缩数据;步骤S3:对输入的待压缩数据进行一遍扫描,将输入的待压缩数据送入输入数据缓存单元,通过加法器实现每一种字符出现的频数进行统计,将频数统计结果送入码字频数缓存单元,将待压缩数据保存入寄存器中;步骤S4:将字符、频数这两种寄存器变量与识别、编码这两种寄存器变量,依次按频数、识别、字符、编码的顺序分配一定位宽后拼接成与输入字符种类数目相同的寄存器变量,此时初始时识别、编码位均为零,并送入拼接数据缓存单元保存;步骤S5:将按照新数据格式构造的数据,采用静态Huffman树生成节点的算法递归生成所有节点;步骤S6:对根节点编码1并初始化第一层的两个节点的编码,用第一层的节点匹配出下一层的节点,从上到下逐层构造出Huffman树,并在构造Huffman树的同时对所有节点进行编码;步骤S7:对Huffman树中所有的节点进行识别,找出所有叶子节点及其对应的编码;步骤S8:去掉每个叶子节点所对应编码中的根节点编码位,得到每个叶子节点所对应编码的长度,根据最后得到的叶子节点的编码和编码长度,建立Huffman码表;步骤S9:按照Huffman码表按位输出编码结果,编码结果全部输出后,编码输出结束标志单元置1,编码输出结束;步骤S10:返回开始信号检测,为系统下一次开始编码进行初始化。3.根据权利要求2所...

【专利技术属性】
技术研发人员:魏榕山张鑫刚张晟马智愚胡志杰
申请(专利权)人:福州大学
类型:发明
国别省市:福建,35

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1