天天看点

32位crc校验码程序_CRC编码

32位crc校验码程序_CRC编码
实验资源来自于MOOC-华中科技大学-计算机硬件系统设计

计算机硬件系统设计_华中科技大学_中国大学MOOC(慕课)

32位crc校验码程序_CRC编码

一、CRC编码运算

对CRC不太清楚的同学可以看看,这位up主做的很直观。

[CRC校验]手算与直观演示_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili

二、CRC串行编码电路

实现参照上面视频。

设计需求:求原始数据的CRC校验和。多项式为10011。

需要四个D触发器,将原始数据流从高位开始,一位一位传入,从Q1(D触发器)流向Q4。

最前端需要一个探测器,探测到1 就进行反转。

反转的位置和多项式后四位相同,多项式为10011。就反转第1个触发器的输出和第2个出发器的输出。

传入数据需要使用位选择器和计数器,将计数器的值从最高位开始逆向计数。即可实现数据流从高位开始传入。

由此,设计电路可得

32位crc校验码程序_CRC编码

CRC串行编码

反转器使用异或的效果是相同的。这里使用选择器知识便于理解。

三、CRC编码电路

设计需求:将16位的数据并行转换为CRC编码,要求在解码是可以检出并纠正一位错,以及检出两位错。

首先计算校验码位数:

2^r-1>=N=k+r

k = 16

r = 5

,共需要

21位

。为了后续检验两位错,我们需要另外加一位

总偶校验位。

根据k和r,选择多项式为100101。(查常用多项式表即可)

编码原理:

原始16位数据左移5位得到新的21位数据(后面补5个0)。

将新得到的21位数据与多项式100101做模2运算,得到5位的余数(CRC校验和)(P5P4P3P2P1),P5为高位。

将5位余数替换21位数据尾部的5位。

将最后的得到的21位数据异或即可得到P6(总偶校验位)。

由于要求并行处理。可使用结合律。

模2除法余数运算满足结合律。

两数的余数异或等于两数异或后的余数。

有公式:

(M(x)%G(x))⊕(N(x)%G(x))=(M(x)⊕N(x))%G(x)

eg:多项式1011

编码:1101 000 = 1000 000

0100 000

0001 000

解码:1101 011 = 1000 000

0100 000 ⊕ 0001 000 ⊕ 011

因为011小于多项式,模2运算余数为本身,直接异或即可。

那么先对16位数据按位和多项式100101进行模2运算,最后合并异或即可。

原始数据在第21位到第6位上。

32位crc校验码程序_CRC编码

计算过程:

eg:

第6位:按位异或

32位crc校验码程序_CRC编码

由上,可得电路

注意校验和的顺序,P5是高位。

32位crc校验码程序_CRC编码

CRC编码电路

四、CRC解码电路

设计需求:将22位CRC编码转换为16位原始数据,要求能够检出并纠正1位错,以及检出两位错。

若CRC编码正确,那么和多项式100101模2除后得到的余数为0。

32位crc校验码程序_CRC编码

CRC编码和多项式100101模2运算

若余数全为0表明除P6外,剩余21位数据全部正确。

纠错原理:

本部分因为我才疏学浅,有一个点并没有理解透彻,在这里希望有会的大佬可以在评论区指点一下。

将传输过来的16位数据位与多项式100101进行模2除法,得到的余数再和传输的CRC校验和进行异或,即可得到出错位置相对应的余数。记为W。(为什么呢?)见评论区大佬回答

将得到的余数W和每一位相对应的余数进行异或。若最后得到的值全为0,即表示这一位出错。

根据这一特性,可以在最后得到的值后加或非门(当值全为0时,输出1,其余全部输出0)。

此时得到16位出错比特串,0表示没出错,1表示出错。

当取0时,不变,当取1是,取反。使用异或即可实现。

将16位出错比特串和对应位的数据进行异或,即可得到纠错后的数据。

注意,P6和P5P4P3P2P1无法纠错,因为没有和他们相对应的余数。

32位crc校验码程序_CRC编码

纠错模块

总偶校验码为22位CRC编码异或后的值。

32位crc校验码程序_CRC编码

记 F = 0 为 CRC编码和多项式100101模2运算后得到余数全为0

记 F = 1 为 CRC编码和多项式100101模2运算后得到余数不全为0

记总偶校验码为B

当F = 0,B = 0时,表示无错误

当F = 0,B = 1时,表示P6出错,一位错

当F = 1,B = 1时,表示一位错

当F = 1,B = 0时,表示两位错

32位crc校验码程序_CRC编码

检错模块

整体电路

32位crc校验码程序_CRC编码

五、测试电路

视频建议电脑看,我试了试手机上不清晰。

CRC串行电路

32位crc校验码程序_CRC编码

https://www.zhihu.com/video/1235350468944793600

CRC并行电路

32位crc校验码程序_CRC编码

https://www.zhihu.com/video/1235353493327462400

如果本文对你有用,点个赞再走吧!或者关注我,我会带来更多优质的内容。