基于Verilog的CRC算法实现

CRC(循环冗余校验)是一种广泛用于数字通信的校验技术,用于检测错误。本文介绍了CRC码的组成,包括信息码和校验码,并详细阐述了校验码的生成与检验过程,特别是模2除法的概念。通过Verilog实现CRC算法,强调了在Verilog代码中正确读取din_r的重要性。
摘要由CSDN通过智能技术生成

CRC概述

CRC即Cyclic Redundancy Check,循环冗余校验,是一种数字通信中的常用信道编码技术。能识别是否出错,接收端检验时余数为0就没出错,但不具有纠错功能。

CRC码的组成

CRC码是由两部分组成的,前部分是信息码,就是需要校验的信息,后部分是校验码,如果CRC码长共n bit,信息码长k bit,就称为(n,k)码,剩余的r bit即为校验位。如:(7,3)码:110 1001,前三位110为信息码,1001为校验码。

校验码的生成与检验

  1. 生成多项式的最高次幂表明了校验位的位宽,将原信息码左移r bit,右侧补零,如 G(X)=X^3+X+1, 则1100–> 1100 000;
  2. 用1100 000除以g(x) (注意,使用的是模2除法,见下文),得到的余数即为CRC校验码;
  3. 将校验码续接到信息码的尾部,形成CRC码。
    注:生成多项式的系数就是二进制除数比如:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

模2除法

模2加减法
模2除法每一步用到模2加减法,关于模2加减法,其实就是按位异或,规则如下:

//不需要考虑进位和借位
0 ± 0 = 0
1 ± 1 = 0
0 ± 1 = 1
1 ± 0 = 1: 1101 ± 1001 = 0100
计算如下:
		  1 1 0 1 
		± 1 0 0 1 
		-----------
		  0 1 0 0

模2除法:
同样不需要考虑进位和借位
规则:假设被除数X,和除数P,余数R

X除以P,对X和P做模2加减法,即按位异或
所得余数R去除首位,即左移一位:

若R第一位为0,将其作为新的被除数,除以0。此时其首位为0,商即为0
若R第一位为1,将其作为新的被除数,除以P。此时其首位为1,商即为1

重复第2步直到R位数少于P位数
例:1111000对除数1101做模2除法:

      1 0 1 1     //商
---------------
1 1 1 1 0 0 0     //被除数,注意首位为1
1 1 0 1	          //被除数首位为1,除以除数
----------
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值