CRC校验的原理、算法、电路结构和verilog代码实现

1. CRC校验的原理

CRC,即循环冗余校验。能检错,能纠正。
常用于:外设接口通讯的数据校验。

主要原理就是二进制的取余过程。二进制数的取余,基础是二进制数的除法,二进制数的除法,基础是XOR,异或。

电路整体结构,依据LFSR实现。线性反馈移位寄存器。

以后,再遇到CRC问题, 按下述步骤操作即可。

2. CRC算法

举例,条件有,

  • 数据串:1101011011
  • 生成多项式:x6 + x4 + x2 + x + 1【最高次方是6,即此例题是CRC-6;常见CRC-16/CRC-32】【多项式,就是对应LSFR电路的一种描述方法】

需要得出结果,

  • CRC校验码 或 完整带CRC校验码的数据串

过程分析:

  • 确定除数

根据多项式,n次方的n即除数的第 n bit值。
例子对应的除数是:1010111(第6/4/2/1/0 bit都是1,其它bit是0)

  • 确定被除数

被除数= 数据串 后面补 n个0(其中n是指多项式的最高n次方)
例子对应的被除数是:1101011011000000

  • 得出余数

1101011011000000除以1010111,取余数是111011
注意:余数必须比除数的数据长度少1
主要是异或。具体看网上视频,本文也是基于这个视频理解的
[CRC校验]手算与直观演示 – 哔哩哔哩

  • 组成CRC校验码

CRC校验码,即上一步骤求出的余数

  • 发送的数据=数据串+CRC校验码

1101011011 111011

3. 电路实现原理

3.1 LFSR的多项式和电路结构

G(x)= gn*xn+ …+g1*x1+ g0;

在这里插入图片描述

3.2 CRC-8举例

以简单的CRC8举例,多项式G(x)=X8 +X7 +X6 +X4 +X2 +1 的电路示意图如下:
在这里插入图片描述

4. verilog代码实现

《verilog编程艺术》里,有通用CRC模块的verilog源代码。
其中:CRC_EQUATION是多项式的二进制表示,即上文的除数。

参考文献:

  • 10
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值