当前位置:   article > 正文

CRC循环校验码硬件电路并行实现方法推导过程_crc并行公式推导

crc并行公式推导

在进行以太网传输项目中,需要使用到CRC循环校验,虽然有一些辅助工具能够帮助我们自动生成并行的crc硬件电路,但是它到底是如何实现的呢?带着这个疑问我找到了一个大佬的文章,其详细解释了如何实现并行CRC。接下来我将简单介绍一下实现步骤:
1.以CRC5为例:
(1)输入数据宽度为:4即data_in[3:0];
(2)CRC5;
(3)生成多项式为:在这里插入图片描述
2.根据多项式绘制串行电路:
在这里插入图片描述
3.实现串行CRC电路

//上述电路实现的功能,其中lfsr_q为每个触发器的当前态,lfsr_c为触发器下一个状态;
always @(*) begin
    lfsr_c[0] = lfsr_q[4] ^ data_in[0];
    lfsr_c[1] = lfsr_q[0];
    lfsr_c[2] = lfsr_q[1] ^ lfsr_q[4] ^ data_in[0];
    lfsr_c[3] = lfsr_q[2];
    lfsr_c[4] = lfsr_q[3];

  end
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

4.以当前状态为零即lfsr_q=5‘d0,输入data_in分别为(0x01,0x02,0x04,0x08)依次串行输入;
可以得到在这里插入图片描述
同样输入data_in为0x02,0x04,0x08,也可以分别得到一组lfsr_c的值。所以可以得到一个矩阵:
在这里插入图片描述
Mout就是lfsr_c,Nin就是data_in;
同理,以输入data_in全为0,初始状态分别为0x01,0x02,0x04,0x08,0x10;
得到另一个矩阵:(其中Min就是lfsr_q)
在这里插入图片描述
5.根据上述两个矩阵我们就可以得到并行电路:
在这里插入图片描述
由上我们可知Mout就是lfsr_c,Nin就是data_in;
5.通过CRC生成器生成的代码和我们的进行比较
可以看到完全一样:在这里插入图片描述

总结:其他数据位宽或者生成多项式的实现方法是类似的。只不过要注意,初始状态为零时,输入数据值是one-hot编码输入,输入为零时,初始状态值是one-hot编码。
最后附上大佬论文地址:http://outputlogic.com/?p=158
CRC自动生成器网址:http://outputlogic.com/?page_id=321

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小桥流水78/article/detail/811662
推荐阅读
相关标签
  

闽ICP备14008679号