欢迎来到天天文库
浏览记录
ID:28160469
大小:78.50 KB
页数:4页
时间:2018-12-08
《基于fpga的crc32校验查找表算法的设计》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、基于FPGA的CRC32校验查找表算法的设计摘要:循环冗余码校验CRC广泛应用于数字通信和数据存储的数据检错。CRC校验分为串行方式校验、并行方式校验。串行方式校验采用串行移位寄存器,每1个elk计算lbit,处理速度慢。并行方式采用査找表算法,处理速度快。本文介绍了CRC32校验算法的FPGA实现方法,并通过Modelsim仿真,验证了算法的可行性和正确性。关键词:循环冗余校验码;CRC32;FPGAD0I:10.16640/j.enki.37-1222八.2016.10.1880引言循环冗余校验码CRC是一种实现简单、校验能力强、在申行通信领域广泛
2、采用的校验编码[1]。CRC校验的基本思想是利用线性编码理论,在发送端,对要传送的k位二进制码序列,以一定的规则产生一个校验用的监督码(即CRC码)r位,附在信息后边,构成了一个新的二进制码序列数共(k+r)位,然后发送出去[2]。在接收端,贝U根据信息码和CRC码之间所遵循的规则进行校验,以确定传送中是否出错。1CRC32生成査找表和CRC32数据校验CRC32校验查找表算法采用正规查询表查询,该查询表是将“直接查询表”的索引值和表值直接镜像,正规査找表多项式POLY是0x04CllDB7。生成查找表的流程是首先对索引值0到OxFF数值镜像。以索引值
3、1为例,镜像值为0x80,已对该8bit镜像值0x80左移24位变成32位CRC32值。对该值一次左移1位,移出的值若为1,则对移后的CRC32值与POLY进行异或操作得到新的CRC32值,否则不做运算。进行8次左移运算,最后的CRC32值在做镜像后的值即为索引值1的CRC32査找表值,按照该算法进行256次操作,可得到256个CRC32查找表值。得到査找表后,则对数据进行CRC校验,其校验步骤是将待校验数椐与32位寄存器的低8位做XOR运算得到一个指向查询表的索引值,将所将索引所指的表值与寄存器的高24位做XOR运算,得到的值更新到32位寄存器中,同
4、时该值也为校验过的值,如数据没有全部处理完,则跳到开始进行运算。1FPGA硬件实现FPGA实现CRC32校验时,一种方法是校验之前将CRC32生成的查找表值直接存入ROM巾,按照索引值去取表内值。第二种方法是在校验前根据算法生成CRC32的查找表值,依次存入RAM屮,生成查找表之后再按照索引值去取表内值。本文是按照第二种方式进行校验。这种方式的优点是灵活、易于操作。FPGA实现的流程图如图1所示,待校验数据Din与CRC32低8位异或的值产生查找表的索引值,由于查找表是RAM存储器,为了数据输出稳定,输出寄存一拍,从RAM出来的值会有两拍延迟。Din数
5、据寄存一拍,CRC32数据输出寄存一拍,共有4拍数据延迟,所以CRC32会比串行校验提高8倍时钟周期。生成査找表值代码段如下,其屮ta.b_cnt_next一个周期的高电平将tab_cnt_reflcct镜像值更新到crc32_tablc,ulPolynomial是校验多项式值32’hO4CllDB7,循环256次,并将256个crc32table值镜像之后存入RAM中。if(tabcntnext==l’bl)crc32_table<={tabcntreflect,24’hO};elseif(crc32_table[31]==l’bl)crc32_ta
6、ble<={crc32_table[30:0],fbO}ulPolynomial;elsecrc32_tablc<={crc32_table[30:0],1’bO};对Din数据进行校验的主要代码如下,dat_valid是一个周期的高电平,crc_value初始值为0,tab_index是RAM的读地址,两拍后从RAM读的值rd_ram_data和crc_value高24位界或更新到新的crc_value值。if(datvalid==l’bl)tabindex<=crcvalue[7:0]"din;elseif(datvalid2d—l’bl)crc_
7、value<=rd_ram_datacrc_value[31:8];1CRC32的仿真验证CRC32生成杳找表要循环256次完成査找表所有值的遍历,其用Modelsim仿真如图2所示,crc32_tablc的镜像值crc32_tablc_rcflcct即为查找表的值,图2中显示的32’h0、32’h77073096、32’hEE0E612C、32’h990951BA即为CRC32正规査询表值0到3的值。选取待校验值OxAA,0x44,0x13其CRC32校验值crc_value如图3所示,最后一个值0xc4441369即为校验值,经验证正确。4结束语木
8、文介绍了CRC32校验算法的FPGA实现方法,详细介绍了CRC32查找表的生成、CRC32的数
此文档下载收益归作者所有