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
  

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

  • 2
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值