计算机组成原理笔记(十)——2.6数据校验码

数据校验码是为了在数据传输或存储中 检测或纠正错误 而设计的编码技术。其核心在于通过冗余信息(校验位)扩大码距,从而增强数据可靠性。

  • 码距(Hamming Distance):两个合法码字间不同的二进制位数最小值。
    • 码距=1:无法检错(任何单比特错误均转化为另一合法码字)。
    • 码距≥2:可检测错误;码距≥3:可纠正单比特错误。

2.6.1奇偶校验码

奇偶校验码是一种最简单的冗余校验方法,用于检测数据在传输或存储过程中发生的奇数位错误(如1位、3位等)。其核心思想是通过添加1位校验位,使数据位与校验位中“1”的个数始终为奇数(奇校验)或偶数(偶校验)。

一、基本概念

  1. 码距(Hamming Distance)
    码距是衡量数据冗余能力的关键参数,指两个合法码字之间不同的二进制位数最小值。

    • 码距=1:无法检错(任何单比特错误会变成另一个合法码字)。
    • 码距≥2:可检测错误。
  2. 奇偶校验分类

    • 奇校验:数据位 + 校验位中“1”的个数为奇数
    • 偶校验:数据位 + 校验位中“1”的个数为偶数

二、工作原理

1. 编码流程(发送端)

假设要传输8位有效信息 D₇D₆D₅D₄D₃D₂D₁D₀

  • 奇校验位公式P = !(D₇⊕D₆⊕D₅⊕D₄⊕D₃⊕D₂⊕D₁⊕D₀)
  • 偶校验位公式P = D₇⊕D₆⊕D₅⊕D₄⊕D₃⊕D₂⊕D₁⊕D₀

示例
有效信息 01010100(8位):

  • 奇校验码:0 01010100(校验位为0,保证总共有3个“1”)
  • 偶校验码:1 01010100(校验位为1,保证总共有4个“1”)

2. 校验流程(接收端)

接收端对所有位(含校验位)异或运算进行判断:

在这里插入图片描述

三、逻辑电路实现

用异或门塔式结构生成校验位:

在这里插入图片描述

公式推导

  • 偶形成P = D7⊕D6⊕D5⊕D4⊕D3⊕D2⊕D1⊕D0
  • 奇形成P = ¬(D7⊕D6⊕D5⊕D4⊕D3⊕D2⊕D1⊕D0)

四、交叉奇偶校验

为提升检错能力,横向和纵向双维度校验

数据块实例(每行/每列均为偶校验):

      D7 D6 D5 D4 D3 D2 D1 D0 → P行
Row1: 1  0  1  0  0  0  0  1 → 0
Row2: 0  **1**  1  0  0  1  0 → 1  (红字表示出错位置)
       ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
P列:  1  1  0  0  0  1  0  1
  • 优点:可检测多比特错误(如两位同一行列错误);
  • 缺点:冗余计算复杂度较高。

五、典型应用场景

  1. 1.内存读/写:如检查RAM芯片数据是否损坏。
  2. 2.ASCII字符传输:在7位ASCII码后附加1位校验位。
  3. 3.低要求短程通信:如早期串口通信。

六、优缺点对比

优点缺点
实现简单(仅需1位校验)只能检测奇数位错误
计算速度快(异或逻辑)无法定位错误位置
低资源消耗无法纠正错误

总结

在这里插入图片描述

  • 适用场景:要求低开销、低复杂度的简单检错场景(如内存数据校验)。
  • 替代方案:需纠错时用汉明码,抗高频噪声用CRC。

2.6.2汉明校验码

汉明校验码是一种多重奇偶校验码,由理查德·汉明(Richard Hamming)提出,能自动纠正单比特错误并检测双比特错误。其核心思想是通过添加校验位并分组覆盖不同数据位,使每个错误产生唯一的校验结果(指误字),从而实现快速纠错。

一、设计原理

  1. 校验位与数据位的关系
    设信息位数为 N N N,校验位数 K K K需满足:

    • 单纠错模式(纠正1位错误) 2 K ≥ N + K + 1 2^K \geq N + K + 1 2KN+K+1
    • **单纠错 2 K − 1 ≥ N + K + 1 2^{K-1} \geq N + K + 1 2K1N+K+1

    例如,8位信息需4个校验位( 2 4 = 16 ≥ 8 + 4 + 1 = 13 2^4 = 16 \geq 8+4+1=13 24=168+4+1=13)。

  2. 校验位位置
    校验位必须位于汉明码位号的 2 i 2^i 2i位置(如 H 1 , H 2 , H 4 , H 8 H_1, H_2, H_4, H_8 H1,H2,H4,H8),其余位置为信息位。
    示例:8位信息位的校验位分布

    汉明码位号:H13 H12 H11 H10 H9 H8 H7 H6 H5 H4 H3 H2 H1  
    对应内容:  P5  D8  D7  D6  D5 P4 D4 D3 D2 P3 D1 P2 P1  
    
  3. 校验组分配规则
    每个校验位负责二进制位号中某一位为1的所有比特

    • P1 H 1 H_1 H1):覆盖位号二进制末位为1的位(如 H 1 , H 3 , H 5 , . . . H1, H3, H5, ... H1,H3,H5,...
    • P2 H 2 H2 H2):覆盖二进制倒数第二位为1的位(如 H 2 , H 3 , H 6 , . . . H2, H3, H6, ... H2,H3,H6,...
    • 以此类推,每个校验位通过逻辑异或(⊕)生成校验值。

二、编码过程实战

题目

以8位信息位 10110100 为例,生成汉明码(偶校验)。

步骤解析
1. 校验位位置分配

汉明码的校验位位于 2的幂次方位置(H1, H2, H4, H8),其余为信息位。总位数为 8(信息位) + 4(校验位) = 12位,排列如下:

位号1 (H1)2 (H2)34 (H4)5678 (H8)9101112
内容P1P2D1P3D2D3D4P4D5D6D7D8
2. 填入信息位

将原始信息位 10110100 按顺序填入非校验位(D1-D8):

位号1 (P1)2 (P2)3 (D1=1)4 (P3)5 (D2=0)6 (D3=1)7 (D4=1)8 (P4)9 (D5=0)10 (D6=1)11 (D7=0)12 (D8=0)
3. 计算校验位值

使用 偶校验(即校验位使对应位置的1的个数为偶数):

  • P1(H1):覆盖位号 [1,3,5,7,9,11]
    对应值:P1 ⊕ D1 ⊕ D2 ⊕ D4 ⊕ D5 ⊕ D7
    计算:P1 ⊕ 1 ⊕ 0 ⊕ 1 ⊕ 0 ⊕ 0 = 0P1=0

  • P2(H2):覆盖位号 [2,3,6,7,10,11]
    对应值:P2 ⊕ D1 ⊕ D3 ⊕ D4 ⊕ D6 ⊕ D7
    计算:P2 ⊕ 1 ⊕ 1 ⊕ 1 ⊕ 1 ⊕ 0 = 0P2=1

  • P3(H4):覆盖位号 [4,5,6,7,12]
    对应值:P3 ⊕ D2 ⊕ D3 ⊕ D4 ⊕ D8
    计算:P3 ⊕ 0 ⊕ 1 ⊕ 1 ⊕ 0 = 0P3=0

  • P4(H8):覆盖位号 [8,9,10,11,12]
    对应值:P4 ⊕ D5 ⊕ D6 ⊕ D7 ⊕ D8
    计算:P4 ⊕ 0 ⊕ 1 ⊕ 0 ⊕ 0 = 0P4=0

4. 最终汉明码

将校验位填入对应位置:

位号1 (H1)2 (H2)3 (D1=1)4 (H4)5 (D2=0)6 (D3=1)7 (D4=1)8 (H8)9 (D5=0)10 (D6=1)11 (D7=0)12 (D8=0)
内容011001100100

最终汉明码为:
0 1 1 0 0 1 1 0 0 1 0 0(按位号顺序排列)。

验证
  • 总码距:汉明码的最小码距为3,可检测2位错误或纠正1位错误。
  • 示例纠错:若传输中某位翻转(如H3变为0),通过重新计算校验位可定位并修正错误。

三、接收端纠错与检错

接收端通过重新计算校验组并生成**指误字(Syndrome)**定位错误:

  1. 指误字计算
    每组偶校验重新计算:

    • S 1 = P 1 ⊕ D 1 ⊕ D 2 ⊕ D 4 ⊕ D 5 ⊕ D 7 S_1 = P1 ⊕ D1 ⊕ D2 ⊕ D4 ⊕ D5 ⊕ D7 S1=P1D1D2D4D5D7
    • S 2 = P 2 ⊕ D 1 ⊕ D 3 ⊕ D 4 ⊕ D 6 ⊕ D 7 S_2 = P2 ⊕ D1 ⊕ D3 ⊕ D4 ⊕ D6 ⊕ D7 S2=P2D1D3D4D6D7
    • S 3 = P 3 ⊕ D 2 ⊕ D 3 ⊕ D 4 ⊕ D 8 S_3 = P3 ⊕ D2 ⊕ D3 ⊕ D4 ⊕ D8 S3=P3D2D3D4D8
    • S 4 = P 4 ⊕ D 5 ⊕ D 6 ⊕ D 7 ⊕ D 8 S_4 = P4 ⊕ D5 ⊕ D6 ⊕ D7 ⊕ D8 S4=P4D5D6D7D8
  2. 错误定位
    S 4 S 3 S 2 S 1 S_4S_3S_2S_1 S4S3S2S1转换为十进制,即为错误位号:
    在这里插入图片描述

  3. 纠错与检错能力

    • 纠正1位错误:指误字唯一对应错误位号。
    • 检测2位错误:指误字非0但无法对应单比特错误位置。

四、汉明码应用场景

场景作用
ECC内存自动纠正单比特错误,防止系统崩溃
卫星通信芯片纠正传输中的单点干扰错误
固态硬盘(SSD)数据存储容错,保障数据完整性

五、总结

汉明码通过巧妙的校验位分组覆盖机制,能精确定位并修复单比特错误,是实现高可靠计算的核心技术之一。理解其编码规则与检错逻辑是掌握计算机校验体系的重要基础。

2.6.3循环冗余校验码

循环冗余校验码(Cyclic Redundancy Check,CRC)是一种基于多项式运算的校验方法,用于检测数据传输或存储中的错误。其核心思想是通过生成多项式对数据进行编码,生成校验码,接收方通过相同的多项式验证数据的合法性。

一、基本原理

  1. 数学基础
    数据被表示为多项式 M ( x ) M(x) M(x)。例如,数据 1100 对应多项式 M ( x ) = x 3 + x 2 M(x) = x^3 + x^2 M(x)=x3+x2
    生成多项式 G ( x ) G(x) G(x) 是收发双方约定的一个高次多项式,例如 G ( x ) = x 3 + x + 1 G(x) = x^3 + x + 1 G(x)=x3+x+1(对应二进制 1011)。

  2. 校验位的生成

    • 数据左移 k k k 位(生成多项式度数为 k k k),得到 M ( x ) ⋅ x k M(x) \cdot x^k M(x)xk
    • M ( x ) ⋅ x k M(x) \cdot x^k M(x)xk 进行模2除法运算,除以 G ( x ) G(x) G(x),得到余数 R ( x ) R(x) R(x)
    • 将余数 R ( x ) R(x) R(x) 附加到原始数据后,形成完整的 CRC 码。
  3. 校验过程
    接收方将收到的数据用相同多项式 G ( x ) G(x) G(x) 进行模2除法运算,余数为0表示无错误;余数非0则检测到错误。

二、编码过程

1. 示例:数据 1100 生成 CRC 码(生成多项式 1011

步骤说明

  1. 数据 M = 1100 M = 1100 M=1100 M ( x ) = x 3 + x 2 M(x) = x^3 + x^2 M(x)=x3+x2

  2. 左移 k = 3 k = 3 k=3 位(生成多项式度数为3)得到 1100000(对应 M ( x ) ⋅ x 3 M(x) \cdot x^3 M(x)x3)。

  3. 模2除法运算:

         1100000 (被除数)  
     ÷   1011    (除数)  
     → 余数 R = 010  
    
  4. 最终 CRC 码:1100010(数据左移3位后附加余数)。

模2除法流程

在这里插入图片描述

三、检错与纠错
  1. 接收端检错

在这里插入图片描述

  1. 纠错能力(有限)

    • CRC通常用于检错而非纠错。若需纠错,需结合其他机制(如重传)。
    • 通过余数的唯一性可定位错误位(精确纠错需复杂算法支持)。

四、生成多项式要求

  1. 标准生成多项式举例
名称多项式表示应用场景
CRC-16x16+x15+x2+1x16+x15+x2+1工业控制(Modbus)
CRC-32x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1ZIP, 以太网
  1. 生成多项式特性

    • 必须确保任何单比特错误都能产生唯一余数。
    • 高次多项式可提升检错能力(如检测突发错误)。

五、关键特性与对比

特性奇偶校验汉明码CRC
检错能力单比特/奇数位错误单比特错误 + 双比特检测长突发错误检测
纠错能力单比特纠错无(需扩展算法)
冗余位比例1位 log ⁡ 2 ( N ) \log_2(N) log2(N)16/32位(依标准定)
典型应用内存单字节校验ECC内存网络、磁盘存储

六、CRC在实践中的应用

  1. 网络传输:以太网帧尾附加4字节CRC校验字段(见MAC帧结构)。
  2. 存储设备:磁盘扇区校验,保障数据完整性。
  3. 通信协议:USB、SATA协议数据传输均依赖CRC检测错误。

七、总结

循环冗余校验码通过多项式模2运算高效检测数据传输错误,是大规模数据传输(如网络、存储)的核心检错技术。虽然其纠错能力有限,但检错可靠性极高,结合重传机制可构建稳健的通信系统。

总结

  • 奇偶校验用于简单检测,代价低但能力有限。
  • 汉明码适合需纠错的场景,如内存错误恢复。
  • CRC适用于高吞吐量数据传输中的高可靠检测。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiao--xin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值