CRC校验
CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。
基本信息
- 中文名
循环冗余校验码
- 外文名
Cyclic Redundancy Check1
- 提出者
W. Wesley Peterson
- 提出时间
1961年
- 应用学科
计算机科学
基础定义
循环冗余校验码(cyclic redundancy check)简称CRC(循环码),是一种能力相当强的检错、纠错码,并且实现编码和检码的电路比较简单,常用于串行传送(二进制位串沿一条信号线逐位传送)的辅助存储器与主机的数据通信和计算机网络中。
循环码是指通过某种数学运算实现有效信息与校验位之间的循环校验(而海明码是一种多重校验)。
这种编码基本思想是将要传送的信息M(X)表示为一个多项式L,用L除以一个预先确定的多项式G(X),得到的余式就是所需的循环冗余校验码。
这种校验又称多项式校验。
理论上可以证明循环冗余校验码的检错能力有以下特点:①可检测出所有奇数位错;②可检测出所有双比特的错;③可检测出所有小于、等于校验位长度的突发错。
应用举例
以下以CRC8x8+x5+x4+1为例说明,其它可以以此类推
生成算法
一个简单的RTL解释,是上文“生成方法”的Verilog描述
module CRC8(EN,data,crc);
parameter WIDTH=12;
input EN;
output[7:0]crc;
input[WIDTH-1:0]data;
reg[7:0]crc;
wire[7:0]poly=8'h31;//x8+x5+x4+1-->0x131,ignore MSB
reg[WIDTH-1+8:0]crc_reg;
integer len;