基于FPGA的LZW控制器设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于FPGA的LZW控制器设计
谢凯;张伟;伍鹏;彭敏放
【摘要】为了实现对大容量数据进行远距离、快速无损传输,设计了一种基于FPGA的LZW实时硬件无损压缩系统.采用ALTERA公司Cyclone Ⅱ系列
EP2C5Q208C8N,利用VerilogHDL语言实现各模块的验证、时序仿真.结果表明,
利用FPGA实现LZW的硬件压缩,能够有效的提高数据的存储和传输效率.
【期刊名称】《长江大学学报(自然版)理工卷》
【年(卷),期】2012(009)012
【总页数】3页(P120-122)
【关键词】无损压缩;LZW;FPGA;VerilogHDL
【作者】谢凯;张伟;伍鹏;彭敏放
【作者单位】长江大学电子信息学院,油气信息处理与识别研究所,湖北荆州434023;长江大学电子信息学院,油气信息处理与识别研究所,湖北荆州434023;长
江大学电子信息学院,油气信息处理与识别研究所,湖北荆州434023;湖南大学电气
与信息工程学院,湖南长沙410082
【正文语种】中文
【中图分类】TN791
为了实现信息的有效、快速、大容量传输,近年来,关于数据压缩的方法成为热点问题。

数据压缩分为有损压缩和无损压缩[1],有损压缩一般应用于语音、图像和
视频数据的压缩,而对数据要求比较高,不允许数据失真的场合就要用到无损压缩。

笔者的研究来源于对油田数据的传输处理。

为了准确的了解井下的地质状况,必须对井下采集到的数据进行无失真传输。

由于数据量比较大,对数据压缩成为必要,如何对大量数据进行无损压缩传输成为急需解决的问题。

很多压缩、解压方案都是基于软件实现,其致命的弱点就是过多地消耗宝贵的CPU 资源,速度慢[2]。

基于FPGA实现的压缩器因其速度快、处理能力强而获得人们的重视。

但在通用数据的无损压缩领域,基于FPGA的硬件压缩、解压方案
还不多见[3]。

下面,笔者探讨了一种基于FPGA的LZW 算法的数据无损压缩算法,主要研究了其控制器的设计方法。

基于FPGA的LZW的设计主要划分成数据输入、数据处理和数据输出,其中核心在于数据处理部分(见图1),这几部分在控制器的控制作用下协调运转。

1)数据输入部分数据输入部分完成所有数据的传输工作,为了保证异步时钟源的
同步,使用异步FIFO来对被压缩数据进行压缩前的缓存。

2)数据处理部分数据处理部分主要包括字典存储器模块和算法实现模块。

字典存
储器模块需要存放字典项编码、前缀码、当前码3部分内容。

算法实现模块主要
实现字符串的查找,判断字典相应地址内容是否为空,比较字典地址相应内容是否匹配或冲突,冲突时重新生成地址,压缩编码输出控制,压缩结束控制等功能。

3)数据输出模块在数据的输出模块,外接数据宽度为8位,所以压缩后输出数据位数需要转换。

数据转换模块就是实现压缩后数据由9位向8位的转换。

4)控制部分控制单元主要完成时钟的匹配与控制,对个功能模块分配时钟,并初
始化各使能端信号。

根据外界指令,产生各模块控制信号,保证系统正确协调工作。

当外部复位信号有效时,输入控制器会根据外界要求对各模块进行复位操作。

当使能信号有效时,输入控制单元会同时对输入、输出、字典模块及输出控制几个单元进行控制。

1) 对FIFO模块的控制设计在控制模块中最难控制的是产生FIFO的读写控制逻辑
[4]。

在一般利用FIFO对数据进行缓存较理想的状况下,采用计数器来分别计读写数据的个数然后作出比较即可判断FIFO的空满状态。

由于实际数据是16位的,
所以FIFO的数据宽度设计为16/8的FIFO,设计容量为1K,这就需要确定FIFO 的深度。

考虑到字典模块在处理数据的过程中可能会产生冲突,这也会影响到对FIFO的控制,因此笔者综合考虑外部控制信号和FIFO的深度来产生正确的空满
信号。

关于FIFO的深度问题,已有的FIFO 深度经验公式[5]。

文献[6]基于排队论的FIFO中,写分布是参数为λ的负指数分布,读分布是参数为μ的负指数分布,该模型考虑了周围环境因素的变化得出的深度公式为:
m=
在设计过程中,写数据速率和读数据速率都是处于一个动态变化的范围内,一旦读写速率在这个范围内确定即可利用式(1)确定其深度。

FIFO在接收到控制器发出的启动信号后开始进行写数据操作,在写数据的过程中同时判断FIFO是否满了,当第1次FIFO满时开始进行读数据。

在读数据的过程中同时进行写数据操作,并且利用计数器比较读和写数据的个数,当读写个数相等的时候停止读,写继续,直到FIFO再次满的时候开始读数据,然后重复上述操作。

读时钟受到2个信号的控制:一个是读使能信号,另一个是字典模块给出的数据压缩成功信号。

由于字典模块的压缩速度非常快,在读使能信号的一个时钟之内便能完成,所以在字典部分正常的压缩情况下,读使能信号的时钟周期能够与给出压缩成功标准信号的时钟周期相匹配。

当字典在处理冲突的过程中,考虑到处理冲突的时间长短不确定,此时必须关闭读信号时钟的计数器,以免影响正常的计数。

2)对字典模块的控制设计 LZW编码的原理如下:读入第一个字符赋值给C,读入下一个字符赋值给K,编码器逐个输入字符K并累积成一个字符串CK赋给C。

每输入一个新的字符就被串接在C后面,然后在串表中查找C:只要在串表中找到
C,该过程就继续进行;直到在某一点,添加下一个字符K导致搜索失败,字符串C在字典中,而CK(字符K串接在C后)却不在,这时编码器:①输出指向字符串
C的字典指针;②在下一个可用的字典词条中,存储字符串CK;③把字符串CK
预置为C;④循环重复上述过程。

在每次读入新字符的时候都需要先判断读入是否为空,如果为空则编码结束,如果不为空则继续。

该算法的关键是在数据压缩的过程中会根据输入的数据动态的建立一个字典。

当以后的数据同字典中的数据相匹配时,则输出该数据在字典中的地址。

由于字典索引的比特数远小于数据串的比特数,从而达到压缩效果。

巧妙的是该字典不需要与压缩数据流一道进行传输和存储,并且只需要对数据扫描一次,在对数据进行解压时也能够通过压缩数据流重新建立一个字典,来完成解压缩。

字典存储器容量设计为1K,则其地址宽度为10位。

当前码为8位,前缀项编码为
9位,字典项编码也为9位,则字典存储器总的数据宽度为26位。

为了防止字典满时重建清空字典,设计2个相同的字典存储器,使2个字典存储器交替工作,
来提高压缩速度。

对字典模块的外部控制主要有以下几个方面:算法实现模块主要实现字符串的查找,判断字典相应地址内容是否为空,比较字典地址相应内容是否匹配或冲突,冲突时要对冲突进行处理。

3)对输出模块的控制输出模块的输入数据宽度是9位,输出数据是8位,输出模
块重点是完成数据位的转换。

当数据在字典部分被成功的压缩之后,控制器会给输出部分一个输出信号,当字典部分给控制器的是字符的信号,则输出部分将数据放入寄存器进行正常的数据转换,即输出有效;如字典给出的是清空信号,则输出部分不作任何响应;如字典部分给出的是结束信号,则输出部分结束。

将FIFO模块、字典模块、数据输出模块3部分综合起来进行控制,得到的功能仿真波形图如图2所示,状态转换如图3所示。

图3中,s0表示整个系统开始工作;
s1表示开始进行写数据并判断FIFO是否写满,并在写满的时候将写的计数器信号清;s2表示开始读数据,并判断是否读空;s3表示字典对数据进行压缩处理,出现冲突时停止读回到状态s1只写信号状态。

图2仿真结果说明了功能上的正确性,同时说明在时序上电路也是符合性能要求的。

该设计的优点是可以对代码进行综合分析生成RTL图,从RTL模型中可以直
观看出不同寄存器直接的数据传输。

该硬件压缩电路的核心是使用Verilog HDL
语言进行描述设计的FPGA芯片实现的功能模块,以QuartusⅡ为软件开发平台。

FPGA芯片资源占用情况如图4所示。

在图4中,Total logic elements
16/4608(<1%):该芯片中共有4608个LE资源,其中的16个资源在这个工程的
编译中得到使用;Total combinational functions 16/4608(<1%):该芯片的4608个LE资源中,16个资源用于实现组合逻辑;Dedicated logic registers
8/4608(<1%):该芯片的4608个LE资源中,8个用于实现寄存器,即时序逻辑。

从而可以看出该系统占用的逻辑资源较少。

经过相关的仿真和验证发现,笔者所设计的无损压缩系统占用的逻辑资源较少,可移植性强,功能扩展容易,有效的提高了数据的存储和传输效率,特别在大容量数据采集和传输系统中应用前景广阔。

并且利用LZW压缩重复出现的字符串,无需事先统计各字符的出现概率,一次扫描即可,相对于其他算法,更有利于硬件实现。

【相关文献】
[1]李锦明,张文栋,毛海央.实时无损数据压缩算法硬件实现的研究[J].哈尔滨工业大学学报,2006,38(2):315-317.
[2]缪志宏.数据压缩算法的实现研究[D].杭州:浙江大学,2007.
[3]刘洪庆,王新才,沈海斌.一种基于LZW算法的数据无损压缩硬件实现[J].计算机应用,
2008,25(8):1-4.
[4]魏欣,王勇.一种高效的异步FIFO设计方法[J].仪器仪表学报,2009,16(1): 102-103.
[5]陈征.FIFO 缓冲存储器的结构及其应用[J].汕头大学学报(自然科学版),1998,13(1): 85-89.
[6]宋宇鲲,王锐,胡永华,等.使用排队论模型对FIFO深度的研究[J].仪器仪表学报,2006,27(6):2486-2487.。

相关文档
最新文档