计算机组成原理-校验码学习笔记

本文介绍了两种常见的校验码——奇偶校验码和海明校验码的基本原理及使用方法。奇偶校验码用于检测单个位错误,而海明校验码不仅可以检测错误还能定位错误的具体位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

要不是考研要考,我才不高兴学呢!!!
开始正题吧!

一.奇偶校验码

在这里插入图片描述

0 0 0 1 1 0 1 0 0

校验码:0 原码:0 0 1 1 0 1 0 0
因为有3个1,3为奇数,所以为奇数校验码,p设为0
有奇数个1的时候,P(P为校验位)也可以 这么求(求出来是0):

P=X1⊕X2⊕X3⊕..⊕Xn⊕1

1 0 1 0 1 0 1 0 1

校验码:1 原码:0 1 0 1 0 1 0 1
因为有4个1,4为奇数,所以为偶数校验码,p设为1
有偶数个1的时候,P也可以这么求(求出来是1):

P=X1⊕X2⊕X3⊕..⊕Xn

缺点:只提供奇数个位错误检测,无法检测偶数个位错误。(细节我无法用自己的话组织,自己看书吧)

讲的通俗一点就是:

  1. 你先 输入 一个二进制数,然后确定这个数里有多少个1,奇数个就让P=0(偶数P=1)
  2. 比较 输出 结果中的1的个数,根据先前P的值作比较
  3. 如果P=0,那就看结果中的1是不是奇数个,如果是奇数则没有发生错误,反之则错误。
    如果P=0,那就看结果中的1是不是偶数个,如果是偶数则没有发生错误,反之则错误。

二. 海明校验码(Hamming)也叫汉明码

海明码是一种多重奇偶校验码,它不但可以发现错误,还可以指明哪一位发生了错误。

设校验位的位数为q位(能表示2^q种状态)
设数据位的位数位n位
有个公式2^q>=1+n+q , 即2^q-1>=n+q
(至于为什么不必深究啦)

可以根据上面的公式和n,求出符合条件的q的最小值。
          海明校验码的位数 :m=n+q

假设有一个8位数:X=X8X7X6X5X4X3X2X1
         n=8
      由 2^q>=1+n+q可以求出q=4
设海明码为:HmHm-1…H2H1
      m=q+n=4+8=12
所以可以列出这样的表格:

海明码H12H11H10H9H8H7H6H5H4H3H2H1
数据位/校验位X8X7X6X5P4X4X3X2P3X1P2P1

接下来让我们把不是校验位的海明码,用校验码的海明码表示:

H1=H1(P1)
H2=H2(P2)
H3=H2+H1
H4=H4(P3)
H5=H1+H4
H6=H2+H4
H7=H1+H2+H4
H8=H8(P4)
H9=H8+H1
H10=H8+H2
H11=H8+H2+H1
H12=H8+H4

通过上面的关系式,我们可以看出,右边在海明码中的数位,正好都是校验码的位置,下面来正式求校验码了。
 (H1在那个位置出现了就那个位置加上去,多看看应该就明白了)

  P1(H1)   = H3⊕H5⊕H7⊕H9⊕H11   =X1⊕X2⊕X4⊕X5⊕X7
    P2(H2) = H3⊕H6⊕H7⊕H10⊕H11  =X1⊕X3⊕X4⊕X6⊕X7
    P3     = H5⊕H6⊕H7⊕H12      =X2⊕X3⊕X4⊕X8
    P4(H8) = H9⊕H10⊕H11⊕H12    =X5⊕X6⊕X7⊕X8

设置故障位:S4,S3,S2,S1

S1=P1⊕X1⊕X2⊕X4⊕X5⊕X7
S2=P2⊕X1⊕X3⊕X4⊕X6⊕X7
S3=P3⊕X2⊕X3⊕X4⊕X8
S4=P4⊕X5⊕X6⊕X7⊕X8
故障位数S4,S3,S2,S1出错情况
0 0 0 0没错错误
0 0 0 1第1位出错
0 0 1 0第2位出错
0 0 1 1第3位出错
0 1 0 0第4位出错
0 1 0 1第5位出错
0 1 1 0第6位出错
0 1 1 1第7位出错
1 0 0 0第8位出错
1 0 0 1第9位出错
1 0 1 0第10位出错
1 0 1 1第11位出错
1 1 0 0第12位出错

哪一位出错了,然后将其数值取反,就能让其正确输出啦!

第二种求法

我们来举一个例子
设8位有效信息为 :0 1 1 0 1 1 0 1
一样,海明码为12位,校验位4位,原码8位
确定位置

位置123456789101112
内容P1P21P3011P40110

将位置换成二进制

位置000100100011010001010110011110001001101010111100
内容P1P21P3011P40110

为了求出P1,要使所有位置的第二位是1的数据(即形如xxx1的位置的数据)的异或值为0。

P1 ⊕1 (0011) ⊕ 0 (0101) ⊕ 1 (0111) ⊕ 0 (1001) ⊕ 1 (1011) =0
解得:P1=1

为了求出P2,要使所有位置的第二位是1的数据(即形如xx1x的位置的数据)的异或值为0。

P2⊕ 1 (0011) ⊕ 1 (0110) ⊕ 1 (0111) ⊕ 1 (1010) ⊕ 1 (1011) =0
解得:P2=1

为了求出P3,要使所有位置的第二位是1的数据(即形如x1xx的位置的数据)的异或值为0。

P3⊕0⊕1⊕1⊕0=0
    解得:P3=0

为了求出P4,要使所有位置的第二位是1的数据(即形如1xxx的位置的数据)的异或值为0。

P4⊕0⊕1⊕1⊕0=0
  解得:P4=0

海明码:1 1 1 0 0 1 1 0 0 1 1 0

然后再求S4 S3 S2 S1判断是哪一位出错了,就ok啦

循环冗余校验码

这个还没有看,等以后复习的时候再回过头来写!!!!

@转载请注明出处~~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值