Verilog上机实验题目4:哈夫曼编码器
相关文章:
[Verilog上机实验题目1:8位数字显示的简易频率计]
[Verilog上机实验题目2:11位巴克码序列峰值检测器]
[Verilog上机实验题目3:FIR滤波器]
[Verilog上机实验题目4:哈夫曼编码器]
哈夫曼编码器
要求对一段数据序列进行哈夫曼编码,使得平均码长最短,输出各元素编码和编码后的数据序列。
- 组成序列的元素是[0-9]这10个数字,每个数字其对应的4位二进制数表示。比如5对应0101,9对应1001。
- 输入数据序列的长度为256。
- 先输出每个元素的编码,然后输出数据序列对应的哈夫曼编码序列。
以上转载自百度文库
本题是第一届(2016-2017)全国大学生集成电路创新创业大赛全国总决赛FPGA设计方向的第一题,利用Xilinx的Vivado软件平台进行仿真综合实现,在EEPW网站有许多获奖作品(例如成电的三等奖、二等奖)。
在研究学习了FPGA作业题verilog源文件 哈夫曼编码代码后发现了一些问题,此代码是大连理工大学某同学使用赛灵思的ISE软件平台,所用芯片型号为xc4vsx25。
在此代码中采用的SORT排序方法和HTREE生成树方法较为复杂,并且无法生成不定码长的哈夫曼码,因此本次上机实验意图采用其他方式获取一组256位数字序列,并计算出其元素对应的哈夫曼码。其他部分采用RTL级代码编写。
代码的难点在于:
-
将输入的256位数据存储起来,待output_start信号有效时,再输出给编码器,编码后变为不定长的哈夫曼码
-
将输入的256位数统计频率形成哈夫曼树得出不定长的哈夫曼码,也可以放在定长的寄存器,但是要记录每个元素的哈夫曼码字长,以便在编码输出时准确的输出每个元素相对应的不定长哈夫曼码
-
将每一位数据编码形成不定长的哈夫曼码再一位一位输出,可以采用状态机的形式,按字长将1-9的哈夫曼码分类