CRC校验的LabVIEW实现
扫描二维码
随时随地手机看文章
简介:支持Host及FPGA的CRC实现
内容:
循环冗余校验码(CRC)的手算过程:
原始报文为1010
生成多项式G(X)=X3+X+1: 生成多项式G(X)=X3+X+1转换成对应的二进制除数为1011。
用生成多项式对应的二进制数对左移3位后的原始报文进行模2除(高位对齐),相当于按位异或:
1010000
1011
------------------
0001000
0001011
------------------
0000011
得到的余位011,所以最终编码为:1010 011
编写程序模拟计算CRC的过程,可以得到CRC校验的结果。
同时还有另一种模拟CRC电路工作方式的CRC实现方法:
其电路的原理图如下:(32bit数据+8bit CRC,生成多项式为:X8+ X7+ X4+ X3+ X1+ 1)
这种方式下,从第一个比特数据直接开始异或计算,最后一个数据输入后,寄存器中的各个数据即为CRC校验位
LabVIEW下的CRC计算可以模拟上述电路图的工作过程。
对各寄存器中的数据向高位移位,并取得最高位数据,最低为在移位中补0。1中取得的最高位数据与输入数据异或,异或的结果决定后续是否进行3操作。如果2中异或结果为真,使用多项式对寄存器中数据异或。
具体LabVIEW代码见下图:
该CRC代码的主要特性有:
1.支持FPGA端的定时循环(FPGA定时循环内,CRC16的速率约460M)
2.支持实现任意位、任意生成多项式、任意寄存器初始值。
3.直接从第一个数据开始计算CRC,并在最末数据输入后,直接得到CRC结果,使用方便。
4.支持CRC计算与校验