2.1.3 校验码

首先说一下BCD码加法运算的修正规则:
我们都知道8421BCD码的有效码为:0000~1001
如果相加之和小于等于9,无需修正。
如果相加之和大于9或产生进位,需要加6进行修正。

然后进入到本篇文章的正题:校验码。

首先我们先要了解为什么需要校验码?也就是校验码的作用是什么?
在计算机中,要求数据、信息的存取、传输都要十分准确。设置校验码可以对传输的数据、信息进行校验,以便发现和纠正数据在存储、传输过程中产生的错误。

其次是校验码的一些术语:
码距: 将一种码制中各码字间最小距离称为码距。
校验位: 在有效信息数据代码之外,再扩充几位。增加的部分称为冗余位或校验位。

1、奇偶检验法
检验位为1位,通常放在最高位。
奇偶检验的码距为2。
【EG】0001和0010 相差为2
【EG】例如字母A的ASCII码为”01000001“
奇检验:1 01000001
偶检验:0 01000001
奇检验增加最高位的规则是使1的总数为奇数个。
偶检验增加最高位的规则是使1的总数为偶数个。

奇偶检验的优缺点:
优点: 是一种增加设备不多、成本低廉的查错校验方法。
缺点: 如果校验的数据一位发生错误可以校验出来,但是如果有两位同时发生错误,用奇偶检验就很难发现错误的地方。

2、循环冗余校验方法
向接收方发送n位的CRC码,接收以后除以G(X),若余数为0,则数据传输正确。
循环冗余校验方法涉及到了CRC码。
CRC码广泛应用于计算机通信和存储部件间的读写。
循环冗余校验法需要增加的冗余位较多,码距较大,所以不仅能够检测传送信息的对错,还具备了一定的纠错能力。

CRC整个编码长度为n=k+r位,故也叫做(n,k)码。
假设被传送的k位二进制信息用C(X)表示,生成多项式G(X)是一个事先约定好的除数,其位数一般是r+1位,C(X)左移r位,除以G(X),商用Q(X)表示,余数用R(X)表示,则有:
C(X)x2的r次幂/G(X)=Q(X)+R(X)/G(X)
两边同时乘以G(X)有:
C(X)x2的r次幂=Q(X)xG(X)+R(X)
因为CRC编码采用的是按位加减,不考虑进位和借位,所以加减相同 异或运算
C(X)x2的r次幂+R(X)=Q(X)xG(X)
等式的左边就是CRC

【EG】已知生成多项式G(X)=1011,被传送的信息C(X)=1001,求C(X) 的CRC码。
G(X)是r+1位,即C(X)左移三位,有:
R(X)=1001000/1011=1010+110
CRC=1001000+110=1001110

需要注意的地方

  • 并不是随意选择任何一个G(X)都可以作为生成多项式,G(X)应该满足:
  • 任何一位发生错误都应该使余数不为0
  • 不同的位发生错误应当使余数各不相同
  • 余数继续进行模2除法,应使余数循环

最后有一句话:
奇偶校验用于并行数据传送
循环冗余校验用于串行数据传送
我还特意百度了一下,链接如下:
并行传输和串行传输的区别

你可能感兴趣的:(计算机组成原理)