1、LZW压缩简介
略,参考原⽂档
2、LZW压缩原理
略,参考原⽂档
3、LZW压缩实现难点
FPGA实现LZW算法要解决以下5个问题:
1)字典容量选择
在实现LZW压缩与解压缩算法的时候,需要构建⼀个字典,⽤来存放压缩过程中形成的字符串表。LZW算法的字典是⾃适应⽣成的,在实
际应⽤中,若⽆限制地增⼤字典的容量,虽然可能获得更好的压缩率,但进⾏字符串匹配时查找的时间会变长,并且随着编码的码字位数增
加,有时可能会导致压缩效率降低,影响压缩速率,因此字典的容量要受⼀定的限制。
2)压缩速度
利⽤RAM来构造字典,由于RAM查找是根据地址的累加进⾏串⾏查找的,这种查找⽅法将会影响数据的输出速度,最终造成输⼊数据的溢
出。例如,对于⼀个深度为512的字典,需要的查找时间为l~512个不等周期(若第N个地址查到,则需要N个时钟周期)。
3)压缩率
第⼀,设置字典的不同⼤⼩可以影响压缩率。当所设置的字典⽐较⼩的时候,字符串表在很短的时间内就会被填满,导致字典的匹配性不
强,这样就对数据的压缩效果产⽣影响,使得压缩率不⾼。
第⼆,字典更新策略可以影响压缩率。由于字典的容量有限,随着压缩过程的进⾏,字典会被填满,若是简单的不再向字典中增加内容,那
么后⾯的压缩率就会降低 ,⽽如果将字典全部清除重新建⽴字典,在字典建⽴初期压缩率也是很低的。
4)资源利⽤率
字典的建⽴使⽤FPGA⽚内资源来完成,⼤容量字典虽然会提⾼压缩⽐,但必须考虑到FPGA内部的资源(FPGA内部RAM资源)。
5)程序鲁棒性
FPGA设计过程中模块划分⾮常重要,好的模块划分能够⼤⼤减少逻辑所消耗的⾯积并优化功能的时序关键路径。对于系统时钟在200MHz
的以上逻辑设计,如果只考虑逻辑功能,⽽不考虑最终的代码综合和实现,时序结果出现⼤量的时序违规,可以说这个设计是不可靠的。
4、LZW压缩⽅案
1)字典容量应该选择多⼤?
略,参考原⽂档
2)如何提⾼压缩速度?
略,参考原⽂档
3)如何考虑压缩率?
略,参考原⽂档
4)如何考虑资源利⽤率?
略,参考原⽂档
5)如何设计程序鲁棒性
略,参考原⽂档
5 LZW压缩测试及性能
LZW算法测试主要分为软件测试、硬件测试、资源利⽤率、压缩率和压缩速度。软件测试也就是功能仿真,验证逻辑功能正确性;硬件测
试是代码运⾏在实际的FPGA芯⽚,通过在线逻辑分析仪调试LZW算法验证逻辑正确性;资源利⽤率测试是指代码综合或实现后占⽤FPGA
内部资源使⽤情况。
6 LZW算法结束语
基于xilinx FPGA实现LZW压缩算法。经过仿真验证与硬件验证 , 结果表明该算法的FPGA实现能获得20%左右的压缩⽐,⼯作速率
12.72MB/s(如果需要更⾼的⼯作速率,只需要提⾼系统时钟即可,250MHz时钟,⼯作速率为15.89MB/s),FPGA资源使⽤率⾮常
低,完全满⾜系统实时处理的需求。技术咨询请发邮件沟通:jhqwy888@163.com。
⽬前LZW算法改进后,压缩单个字节需要10个时钟周期,若周期T = 5ns,⼯作速率19.07MB/s;若周期T = 4ns,⼯作速率
23.84MB/s。说明:FPGA资源占⽤率相对增加⼀些。