【摘要】根据CRC(循环冗余校验码)算法的原理,和ISO/IEC18000-6标准中超高频射频识别系统对校验电路的要求,分析串行CRC算法,提出了一种并行CRC算法。经Verilog-HDL语言编写该算法程序,在QuartusⅡ9.0软件上仿真。最终给出仿真结果以及并行CRC生成模块和校验模块,仿真结果证明并行CRC算法有效提高了系统中数据的处理速度。
【关键词】循环冗余校验码;射频识别;并行算法;Verilog-HDL
RFID(射频识别)技术是一种非接触式的自动识别技术,被广泛用于诸如生产自动化、身份识别、物流等领域[1]。但在用于数据传输时,可能受噪声干扰等因素的影响使传输的数据发生错误,导致识别失败,因此RFID系统必须具备很强的发现和纠正差错的能力。按照ISO/IEC18000-6标准规定,在超高频RFID系统中采用CRC(循环冗余校验码)作为链路数据传输正确性校验的方法。
传统超高频RFID系统中采用串行CRC算法,此方法电路简单,通信可靠性强。但是随着社会的发展,串行计算方法已经不能满足大信息量条件下高传输速度的要求,因此有必要采用更快计算方法完成数据校验。本文介绍的并行CRC算法在保证通信的可靠性的同时也提高了数据处理的速度。
1.串行CRC算法分析及并行CRC算法推导
1.1 CRC的原理
CRC码是一种线性分组码,它的基本思想是利用线性编码理论[2],在发送方依据要传送的位信息码,按预先约定的规则生成一个校验用的位CRC校验码,并将其附在信息码后,构成一个新的位二进制码序列数,最后发送出去。在接收方,则根据生成CRC校验码时所遵循的规则进行校验,以确定传送的数据是否出错。具体实现方法如下:
(1)将待发送的位数据用多项式表示,其中,数据序列为多项式的系数。将左移位,即用乘以,作为被除式。
(2)发送时,被除式与发送方和接收方预先约定的生成多项式进行模2除法运算,求得一个余数多项式:
其中为商,为余数也就是生成的CRC校验码。在发送端发送数据时将校验码加在信息码之后一同发出,形成新的位数据序列,则有:
(3)接收时,与生成多项式进行模2除法,若余数为0则表明传输中未发生错误,发送数据与接收数据一致;若余数不为0则可判断传输发生错误,并给予纠正或要求重发。
ISO/IEC18000-6国际标准中规定,Type A和Type B型超高频RFID系统都使用16位CRC校验作为前向链路和返回链路的校验规则[3]。当Type A型满足防错保护电平时,需要对短命令采用CRC-5校验。5位CRC校验和16位CRC校验的设计和实现方法类似。另外,由于系统中需要进行CRC检验的数据位数为8的倍数,故本文以8位输入数据为例进行16位并行CRC校验CRC-CCITT(生成多项式为)的算法分析和模块设计。
在此电路中,移位寄存器存储当前输入数据经模2运算得到的余数值。当进行串行运算时,当前状态的余数值与当前信息码的输入值和前一状态的余数值有关。
设LFSR电路中输入数据为,按照从高位到低位的输入顺序,设为高位,则;表示图1中第个移位寄存器,其中为移位寄存器的编号,则表示输入第位信息码后移位寄存器移位次输出的余数值,为异或运算。最后寄存器从高位到低位的余数值,即为CRC校验码。状态方程如下:
采用串行CRC算法处理8位数据需要8个时钟周期,加之超高频RFID系统在通信过程编码和解码过程中两次用到串行CRC算法,导致系统中数据传输率低、处理速度慢。
1.3 并行CRC算法推导
2.超高频RFID系统中并行CRC码生成和校验模块的设计与仿真
依据上述并行CRC算法,选用Altera公司开发的FPGA芯片CycloneⅡ系列中的EP2C35F672C8,利用Verilog-hdl硬件描述语言在QuartusⅡ9.0软件平台上设计了两个模块(并行CRC码生成模块和校验模块),并进行仿真验证。
2.1 并行CRC码生成模块设计实现
并行CRC码生成模块流程框图如图2所示。
并行CRC码生成模块仿真结果如图3。
clk为时钟信号,reset为初始化信号,din[7:0]为信息码,control为控制信号,控制信号的目的是指示输入完成。运算中当control为高电平时,输入数据进行除法运算并将所得到的crc_reg高八位即crc_h翻转后输出;当control为低电平时,输入数据不进行除法运算,crc_reg高八位的值为前一个周期crc_reg低八位,低八位用0补,并将crc_reg[7:0]的低八位即crc_l翻转输出。crc[15:0]为生成的校验码。
根据并行CRC算法分析,并行CRC码校验模块的实现过程用流程框图描述如图4。
从接收到的CRC码datain中提取信息码和校验码,将信息码与生成多项式进行并行CRC运算,最后判断得到的crccode与提取的校验码dintail是否相同,若相同则信息发送正确,误码警告信号error为低电平;反之,则发送错误,error为高电平,重新发送数据。
并行CRC码校验模块仿真结果如图5。
从图5看出,提取的信息码经并行CRC运算生成校验码crccode在第3个时钟上升沿时输出。与之前提取的校验码dintail相比较后,error为低电平,则发送的信息正确,第4个时钟周期时输出信息码。
3.结论
综上所述,采用并行CRC算法生成CRC码只用3个时钟周期,超高频RFID系统一次通讯的生成和校验过程共需7个时钟周期(一个周期用来判断校验码的正误)。相比串行CRC算法生成CRC码,具有明显的速度优势。
本文基于FPGA设计的超高频RFID系统中并行CRC码生成模块和校验模块体现了电路设计“硬件软化”的特点,利用了并行CRC算法处理数据的速度优势,满足了超高频RFID系统的通信速率要求,有很好的实用价值。
参考文献
[2]王新梅,国镇.纠错码――原理与方法[M].西安:西安电子科技大学出版社,2003.
[6]石建平,黄乡生.基于FPGA的循环冗余校验模块实现[J].信息与电子工程,2008,6(5):394-396.