数据校验码
Error
hard failure
soft error
Question: soft error 中 纠错和检测哪个更难?
Error Correction
基本思想
储存额外的信息进行检错和校正
处理过程
数据输入: 使用函数f在M位数据D上生成K位校验码C
数据输出:使用函数f在M位数据D’上生成新的K位校验码C’’,并与取出的C’进行比较
-
没有检测到差错:使用D’(不代表没有error)
-
检测到差错并且可以校正:校正数据D’来生成数据D’’,并用数据D’
-
检测到差错但无法纠正:报告
奇偶校验码
基本思想
增加一位校验码来表示1的数量是奇数还是偶数
处理过程
假 设 数 据 为 D = D M ⋅ ⋅ ⋅ D 2 D 1 假设数据为 D = D_M···D_2D_1 假设数据为D=DM⋅⋅⋅D2D1
数 据 输 入 数据输入 数据输入
奇 校 验 : C = D M ⨁ ⋅ ⋅ ⋅ ⨁ D 2 ⨁ D 1 ⨁ 1 奇校验: C = D_M\bigoplus\cdot\cdot\cdot \bigoplus D_2\bigoplus D_1\bigoplus1 奇校验:C=DM⨁⋅⋅⋅⨁D2⨁D1⨁1
偶 校 验 : C = D M ⨁ ⋅ ⋅ ⋅ ⨁ D 2 ⨁ D 1 偶校验:C = D_M\bigoplus\cdot\cdot\cdot \bigoplus D_2\bigoplus D_1 偶校验:C=DM⨁⋅⋅⋅⨁D2⨁D1
∗ 数 据 输 出 ∗ *数据输出* ∗数据输出∗
奇 校 验 : C ′ ′ = D M ′ ⨁ ⋅ ⋅ ⋅ ⨁ D 2 ′ ⨁ D 1 ′ ⨁ 1 奇校验: C''= D'_M\bigoplus\cdot\cdot\cdot \bigoplus D'_2\bigoplus D'_1\bigoplus1 奇校验:C′′=DM′⨁⋅⋅⋅⨁D2′⨁D1′⨁1
** 偶 校 验 : C ′ ′ = D M ′ ⨁ ⋅ ⋅ ⋅ ⨁ D 2 ′ ⨁ D 1 ′ 偶校验: C''= D'_M\bigoplus\cdot\cdot\cdot \bigoplus D'_2\bigoplus D'_1 偶校验:C′′=DM′⨁⋅⋅⋅⨁D2′⨁D1′**
S = C’’ ⨁ \bigoplus ⨁C’
S = 0 : 正确/错误的位数为偶数
S =1:数据中出错的位数为奇数
代价低,适用于对较短长度的数据进行检错
海明码
基本思想
数据分组,对每一组使用奇偶校验码进行检错
处理过程
-
将M位数据分成K组
-
数据输入: 为数据D中每组生成一位校验码,合并得到K位校验码C
-
数据输出:为数据D’中每组生成一位校验码,合并得到新的K位校验码C’’
-
检错:将校验码C’'和取出的校验码C’按位进行异或,生成K 位故障字(syndrome word)
校验码长度
假设最多一位出错
可能的差错
数据中有1位出现错误:M
校验码中有1位出现错误:K
没有出错:1
校验码的长度: 2 K ≥ M + K + 1 2^K \geq M + K +1 2K≥M+K+1
故障字的作用
1. 全部是0 : 没有错误
2. 有且仅有一位是1 : 错误发生在校验码
3. 多位为1:错误发生在数据的某一位,将$D'$中对应数据位取反即可纠正
数据位划分
补充阅读
SEC-DED(海明码升级版)
单纠错,双检错。