ECC-汉明码原理讲解

文摘   2024-10-31 10:00   吉林  

点击蓝字关注我们

关注、星标公众,精彩内容每日送达

来源:网络素材

ECC校验技术最常用的就是“汉明码(Hamming Code)”

汉明码可以实现--1-bit纠错2-bit检错

“1-bit纠错,即知道哪一bit错了,并纠正它”

“2-bit检错,即知道传输的码字中错了2-bit,但不知道哪2-bit错了。这种情况,数据只能重传”

大部分都讲了“1-bit纠错”,我们讨论“1-bit纠错2-bit检错

汉明码原理

数据位宽和校验码位宽的关系

汉明码编码中,数据位宽和校验码位宽的关系,如下表所示:

汉明码编码规则

以4-bit的数据码为例,假设数据码为:D3,D2,D1,D0。

从上表可知,校验码的位宽为“4-bit”,假设为:PP,P2,P1,P0

校验码的位置,在H=2^k的位置上(k=0,1,2),而最后一个校验码"PP"在最后一个位置,如下表所示。

求校验码的值

P0的值,为H=xxx1位置上所有数据码的“异或值”,即P0=D0⊕D1⊕D3。

P1的值,为H=xx1x位置上所有数据码的“异或值”,即P1=D0⊕D2⊕D3。

P2的值,为H=x1xx位置上所有数据码的“异或值”,即P2=D1⊕D2⊕D3。

PP的值,为前面所有数据的偶校验,即PP=P0⊕P1⊕D0⊕P2⊕D1⊕D2⊕D3。

按照上述方法,可以计算出对应数据的校验码,即chkbits = {PP,P2,P1,P0}

数据传输时,一般按照“PP,P2,P1,P0,D3,D2,D1,D0”的顺序传输到内存中。

解码规则

当接收端从内存中读出数据和校验码:dout={PPr,P2r,P1r,P0r,D3r,D2r,D1r,D0r},按照上节的编码规则,重新计算出数据“D3r,D2r,D1r,D0r”新的校验码“P2',P1',P0'”。

计算新的pp'=P2r⊕P1r⊕P0r⊕D3r⊕D2r⊕D1r⊕D0r。

得到新的4-bit校验码,如:PP',P2',P1',P0',即chkbits_new = {PP',P2',P1',P0'}

得到接收到的4-bit校验码:chkbits_r = {PPr,P2r,P1r,P0r}

chkbits_rchkbits_new进行异或,得到4-bit数据syndrome,即syndrome= chkbits_rchkbits_new

校验规则

1. 当syndrome[3] == 0时,

1) 如果syndrome[2:0] == 0,则表示传输的数据中H1~H8位置中,没有任何错误。

2) syndrome[2:0] != 0,则表示传输的数据H1~H8位置中,存在两个错误,需要重传数据。

2. 当syndrome[3] == 1时,

1) syndrome[2:0] > (校验码位宽+数据位宽),则传输的数据无效。

2) syndrome[2:0] <=(校验码位宽+数据位宽),则表示发生了1-bit错误,且错误位置在H[syndrome[2:0]]位置,只需要将对应位置的数据取反即可。

        a)  例如:如果syndrome[2:0] = 3,则表示H3位置的数据发生了错误,即D0传输过程中发生了错误,需要将D0取反。

注意:当数据错误1-bit和错误3-bit的结果是一样的,这种情况是无法区分的。

在通信系统中的一个传输块中,错误1-bit的概率很低,同时错误2-bit的概率更低,那同时错误3-bit以上的概率就更~更低了。但现在通信传输速度越来越高,每秒几十G的速率,而且传输的cable线也越来越长,同时错多bit的概率还是比较高。

但汉明码作为校验码,因其简单高效以及低成本的特点,依然是通信传输系统中常用的校验手段,主要用于内存数据的校验。

想要了解FPGA吗?这里有实例分享,ZYNQ设计,关注我们的公众号,探索


Hack电子
电子设计、FPGA设计、实例分享、ZYNQ设计等,欢迎大家关注!
 最新文章