CRC32学习总结

CRC32学习总结

这几天一直在研究CRC相关的知识,本来通信网学习过相关的知识,但是比较浅。通过这几天的尤其是今天的学习,我对于CRC有了全新的认识。课本上主要着重介绍直接计算法,就是数据补零再和生成多项式做除法。这种方法利用循环来实现是比较容易的,但是在FPGA中,想要利用硬件的并发性来实现CRC的计算。最近一直在做网络协议栈相关的东西,所以开刀的对象就是CRC32了。上网找了很多相关博客,研究了串行CRC和并行CRC,对于驱动表法和直驱表法有些一知半解。当然最重要的是发现了CRC32是有“计算模式”的!!!!!

首先初始寄存器中的值不能是0,因为如果是零,对于数据0x00和0x00000000所得到的CRC32校验值都是0,所以要用FFFFFFFF作为初始值。这就涉及到CRC32的计算模式了

Name   : "CRC-32" 
Width  : 32 
Poly   : 04C11DB7 
Init   : FFFFFFFF 
RefIn  : True 
RefOut : True 
XorOut : FFFFFFFF 
Check  : CBF43926

RefIn=True,表示输入数据的每个字节需要“颠倒”,表示先发送最低位LSB。
RefOut=True,表示计算完成后,要将寄存器中的值再颠倒。
XorOut=FFFFFFFF,表示还需要将结果值与0xffffffff进行XOR,这样就能得到最终的CRC32值。

下载了一个专门计算CRC32的计算器,发现初始值不同,最终得到的校验值也不同,傻傻的我还以为算出来的是一样的 ==
CRC32学习总结_第1张图片
CRC32学习总结_第2张图片

参考文档
[1] http://www.cnblogs.com/Ray-chen/archive/2011/11/28/2266628.html
[2]http://www.cnblogs.com/poiu-elab/archive/2012/10/22/2734715.html

你可能感兴趣的:(FPGA)