CRC计算原理(基于FPGA)

这里写自定义目录标题

  • CRC计算概述
  • CRC计算参数
  • CRC Verilog代码
  • 参考网址

CRC计算概述

概括来说,就是把要发送的数据用二进制表示出来后,后面加上m个0(CRC-32就加32个0,相当于原数据左移32位),去除以(FPGA中除法可以用xor异或来计算)该算法对应的一个标准的多项式(CRC-32标准的多项式去查xilinx pg051的FCS部分,其实就是个33位的二进制串100000100110000010001110110110111),得到的32位余数就是CRC结果。具体示例,可以参考循环冗余检验 (CRC) 算法原理[https://www.cnblogs.com/esestt/archive/2007/08/09/
848856.html]
,已经说得很清楚了。

CRC计算参数

  1. Width (in bits): 就是CRC结果的位宽(n bits)。
  2. Polynomial: 多项式
  3. Initial Value: 用来初始化CRC值的初始值。
  4. Input reflected: TRUE的话,字节内的比特位要倒序排列。例如对于0x82来说,倒序后是8‘b01000001=0x41(If this value is TRUE, each input byte is reflected before being used in the calculation. Reflected means that the bits of the input byte are used in reverse order. So this also means that bit 0 is treated as the most significant bit and bit 7 as least significant.Example with byte 0x82 = b10000010: Reflected(0x82) = Reflected(b10000010) = b01000001 = 0x41.)
  5. Result reflected: TRUE的话,整个32位 CRC结果要进行倒序排列。
    (If this value is TRUE, the final CRC value is reflected before being returned. The reflection is done over the whole CRC value, so e.g. a CRC-32 value is reflected over all 32 bits.)
  6. Final XOR value: 输出最终的CRC结果之前,要进行异或的值。(The Final XOR value is xored to the final CRC value before being returned. This is done after the ‘Result reflected’ step. Obviously a Final XOR value of 0 has no impact.)

CRC Verilog代码

网上生成CRC verilog/vhdl的网址:
[https://www.easics.com/webtools/crctool]
只不过这个代码还需要结合上面提到的6个参数进行适当修改。
CRC计算原理(基于FPGA)_第1张图片上图是计算CRC-32的计算器,从图右侧可看到CRC-32算法的参数。也就是说初始值是32’hFFFF_FFFF,要对输入数据进行字节内倒序,对输出数据进行32位的整体倒序,最后输出CRC结果前要与32’hFFFF_FFFF进行异或运算。

参考网址

1.http://www.sunshine2k.de/articles/coding/crc/understanding_crc.html#ch71
2.https://www.cnblogs.com/esestt/archive/2007/08/09/
848856.html]
3.https://blog.csdn.net/u012308586/article/details/105492084/
4.CRC计算软件.rar

你可能感兴趣的:(FPGA)