参考:
【科普向】谁都能看懂的CRC(循环冗余校验)原理_crc循环冗余校验原理-CSDN博客
CRC校验原理和推导过程及Verilog实现(一文讲透)_crc verilog-CSDN博客
介绍两个CRC源码生成工具,可生成Verilog和VHDL - nios II 爱好者 - 博客园 (cnblogs.com)
Generator for CRC HDL code (bues.ch)
http://www.easics.com/webtools/crctool
P(x)
P(x)是由一种称为本原元的特殊多项式计算而来的,P(x)应该满足:
最高位和最低位都是1
当被传送信息任何一位发生错误时 P(x)不被T(x)整除
不同位发生错误时,余数应该不同
对余数继续做模二除法时,应该使余数循环
基于这些限定条件,在有限域内求解本原元以及对P ( x ) P(x)P(x)的取值是通信领域的一个研究课题
这些是常用的循环冗余检验(CRC )算法及其应用的简要列表。CRC是一种常见的用于检测数据传输或存储中出现错误的技术。
-
CRC-8: 使用多项式
X^8 + X^2 + X + 1
,表示法为0x07
。这个简单的CRC通常用于小块数据的错误检测。 -
CRC-12: 使用多项式
X^12 + X^11 + X^3 + X^2 + X + 1
,表示法为0x80F
。主要用于电信系统中。 -
CRC-16: 使用多项式
X^16 + X^15 + X^2 + 1
,表示法为0x8005
。这是一个广泛使用的CRC,应用于Bisync, Modbus, USB, ANSI X3.28, SIA DC-07等多种标准和协议,也称为CRC-16或CRC-16-ANSI。 -
CRC-CCITT: 使用多项式
X^16 + X^12 + X^5 + 1
,表示法为0x1021
。它主要用于ISO HDLC, ITU X.25, V.34/V.41/V.42, PPP-FCS等通讯标准。 -
CRC-32: 使用多项式
X^32 + X^26 + X^23 + X^22 + X^16 + X^12 + X^11 + X^10 + X^8 + X^7 + X^5 + X^4 + X^2 + X + 1
,表示法为0x04C11DB7
。这是一个非常常见的CRC,用于ZIP, RAR文件格式,IEEE 802 LAN/FDDI, IEEE 1394, PPP-FCS等。 -
CRC-32C: 使用多项式
X^32 + X^28 + X^27 + X^26 + X^25 + X^23 + X^22 + X^20 + X^19 + X^18 + X^14 + X^13 + X^11 + X^10 + X^9 + X^8 + X^6 + 1
,表示法为0x1EDC6F41
。它用于iSCSI, SCTP, G.hn负载,SSE4.2指令集,以及Btrfs, ext4, Ceph等文件系统。