海明码是Richard Hamming于1950年提出的,目前仍是广泛采用的一种有效的校验码,主存ECC采用的就是与此类似的校验码。海明码实际上是一种多重奇偶校验,其实现原理是:在有效信息位中加入几个校验位形成海明码,使码距比较均匀的拉大,并把海明码的每一个二进制位分配到几个奇偶校验组中。当某一位出错后,就会引起有关的几个校验位的值发生变化,这不但可以发现错误,还能指出错误的位置,为自动纠错提供了依据。
二.编码原理
下面仅介绍能检测和自动校正一位错并能发现两位错的海明码的编码原理。此时校验位的位数K和信息位的位数N应满足下列关系:
.按上述不等式,信息位N值和校验位K值的对应关系如下表所示:
N值 | 最小K值 |
1~3 | 4 |
4~10 | 5 |
11~25 | 6 |
26~56 | 7 |
57~119 | 8 |
若海明码的最高位号为m,最低位号为1,即有
1.校验位和信息位之和为m,每个校验位Pi在海明码中被分到位号为
2.海明码每一位Hi由多个校验位校验,其关系是被校验的每一位位号等于校验他的各校验位的位号之和,即海明码的位号实质是参与
校验的各校验位权值之和。目的是希望校验的结果能正确的反应出错的位号。
3.在增大码距时应使所有编码的码距尽量均匀增大,以保证对所有代码的检测能力提高。
三.编码校验过程
(1)编码
一个字节由8位二进制位组成,此时N=8,从表中K=5,故海明码的总位数为13位,可表示为
5个校验位P5~P1对应的海明码位号应分别为H13,H8,H4,H2,H1除P5外,其余四位都满足Pi的位号等于的关系,而。。只能放在H13上,因为他已经是海明码的最高位了。因此有如下排列关系:
P5 D8 D7 D6 D5 P4 D4 D3 D2 P3 D1 P2 P1
校验位Pi(i=1~4)的偶校验结果为:在上述4个公式中,不同信息位出现在。。项中的次数是不一样的,其中。。和。出现了3次,而D4和D7仅出现了3次,而D1,D2,D3,D5,D6,D8仅出现了2次,此时不同代码的海明码的码距不等,为此,再补充一位。。校验位,使:
在这种安排下,每一位信息位都均匀地出现在3个Pi值形成的关系中。当任一信息位发生变化时,必将引起3个Pi值变化,即合法的海明码的码距都为4。
(2)校验
将接收到的海明码按如下关系进行偶校验,即:
校验得到的结果值S5~S1(指误字)能反应13位海明码的出错情况:
1.当S5~S1为00000,表明无措;
2.当S5~S1中仅有一位不为0时,表明是某一校验位出错或3位海明码(包括信息、校验位)同时出错。由于后一种出错可能性小,故认为是前一种出错,出错位应该是Si对应的Pi位;
3.当S5~S1中有两位不为0时,表明是;两位海明码同时出错,此时只能发现错误,而无法确定错误位置;
4.当S5~S1中有3位不为0 时,表明是一位信息位或3位校验位同时出错,由于后一种错误可能性小,故认为是前一种出错,出错位号有S4~S1 4位代码值指明,此时不仅能检查一位错误,而且能准确地定位,因此可以纠正这个错误(将该位变反)。
5.当S5~S1中有4位或5位不为0 时,表明出错情况严重,系统工作可能出现故障,应检查系统硬件的正确性。
PS:2和4两种情况可以查表
三.Quartus II 仿真
电路原理如图:
当输入8位信息位10101100时,仿真得海明码为1101001101011,即校验码为10111,结果如下: