1.简介
现代数据通信要求信息传输具有高度的可靠性,即误码率要求足够低,然而,数据传输过程中不可避免地会受到噪声干扰,或者信道不理想,从而造成码间串扰而产生差错,即出现误码,因此在UDP数据传输中引入CRC校验机制,通过CRC校验来丢弃受到干扰的数据包。CRC校验原理总的来说非常简单,它的根本思想就是利用线性编码原理,在数据发送端将要传输的K位信息码后面根据一定的规则产生一个校验码即CRC校验的R位,从而形成一个长度为(K+R)的数据帧,在接收端根据信息码和校验码之间遵循的规则进行校验,从而确定数据传输过程中是否出现差错。通常来说使用的多为CRC32校验,即产生4个字节的校验数据,这里分享一个好用的在线CRC校验工具,可以选择各种CRC校验,输入数据就可以生成校验码,地址为:CRC(循环冗余校验)在线计算_ip33.com
2.实现
CRC校验主要是在数据发送端和接收端事先约定好一个多项式G(x)作为除数多项式,G(x)的最高次幂为r,将数据发送端将要发送的K位信息吗作为多项式M(x)的系数,将待编码的K位数据编码成M(x),多项式M(x)的表达式为:
对于R位的CRC校验,校验产生的过程为:
将M(x)左移R位然后除以一个G(x)多项式(模2除法),所得的余数就是CRC校验码,即:
上式中R(x)就是CRC校验码,其中G(x)为生成多项式。
对于不同的校验格式,G(x)有不同的表达式,对于CRC32校验来说,G(x)的表达式为:
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
对于CRC校验,手动计算还是比较麻烦的,所以还是推荐使用上面的在线CRC计算工具进行计算,如果我们需要在FPGA里事项自动CRC计算,这里推荐给大家一个工具,直接选择需要的CRC计算公式,就可以给出相应的verliog实现,地址为:http://www.easics.com/webtools/crctool。