2.CRC校验原理
2.1 总论
CRC码有两个组成部分,是由编码的串行在数据传输中发送的序列码,可以分为R位和K位的效验码。这两个效验码的功能和职能是不同的, K位的目的是进行数据的传输和有效信息的重组进行编码,R位则是根据K位提供的有效数据进行信息的产生和发送,通过计算后得到的R位的余数就是我们接收到的有效信息,证明信息是正确的,如果得到的效验码不是正确的,则需要重新发送或请求纠错。
CRC校验是一种异或操作,采用的是国际上通用的二进制来完成的。G(x)的生成在系统中可以通过多项式的方式来产生,在经过了系统经过严格的计算和相应的实验后确定的,有相应的国际标准。
CRC的生成是一个简单的过程,而效验码的生成是在接受数据后产生的。下面用一个简单的例子简单说明。
数据的设置以简单易用验证为主,我们将序列设置为110101110100.通过一系列的传输和数据生成,产生的结果是G(x)= + + +1,k=5,在结果中可以看到生成的序列是110101.生成多项式的序列除去发送数据的序列按照模2的算法,
(其中1000001是Q(x),,01111是R(x))获得的比特序列为01111,01111是r的余数,根据上述结果可以得到下列的校验结果:
110101111010 01111
比特的序列中发送的数据 比特的序列中CRC
通过计算可以得出下列结果,发送比特的序列中会出现CRC的校验结果。
在整个程序的设计中,既要有校验生成模块,也要有校验检错模块,这两个模块是必须具备的。在整个的数据传输过程中,校验结果是否准确的方法如上面的计算过程来显示。只有得到这些数据可以被相同的生成多项式的序列整除。只有这样才能证明整个数据的传输过程中不会出现问题,符合设计的科学严谨性。
2.2 CRC计算方法
首选要进行的是纠错码的设置,我们要将序列设置为10101111,依然按照惯例使用二进制的数字,如下的计算方式:
公式(2-1)
(2-1)中: 是信息代码的多项式,是得到的结果, 是一个二进制数的位置或者代码位置,这都是固定的参数设置 是表示代码的值,如果其是一个二进制的代码的话,我们可以取0来表示,或者可以选择1来表示,结果中仍然利用了异或运算。整个运算过程设计简单易懂,运算模式采用的是常用的方式,易于理解。
对于模式二来说我们也可以利用加法的运算方式来进行运算,得出的结果是一样的。
预设一个二进制的代码多项式,来检查一下检验公式是否合理,需要增加一个效验码可以用(n-k)来表示,在最后出现的结果中就会出现一个表示公式 ,如下图所示。
图2-1 信息代码多项式在新数据块中的表述图
设定的公式效验码,如果结果生成的多项式为 时,公式就是 公式(2-2)
由上述公式可以看出假定商为 ,根据公式计算出的余式为 。
运用公式的计算得出的结果我们会发现多项式加法得出的结果会和减法得出的结果是一致的结果相同,数值一样,可以按如下公式写:
公式(2-3) 循环冗余校验算法的FPGA设计(3):http://www.751com.cn/tongxin/lunwen_39216.html