【硬件科普】ECC內(nèi)存是如何發(fā)現(xiàn)錯(cuò)誤并糾正的?


這里以1號(hào)位和2號(hào)位作為奇偶檢驗(yàn)位,不存儲(chǔ)數(shù)據(jù),用來校驗(yàn)1、3列和2、3列,在數(shù)據(jù)發(fā)送之前分別根據(jù)1、3列和2、4列當(dāng)中1的個(gè)數(shù)是否為偶數(shù)來確定校驗(yàn)位為0或者1(奇數(shù)為1,偶數(shù)為0),接收方只要判斷是否為偶數(shù)即可。當(dāng)后面三列都沒有錯(cuò)誤,那么錯(cuò)誤就在第一列。

同理4號(hào)和8號(hào)位作為2、4行和3、4行的校驗(yàn)位。

經(jīng)過行和列的校驗(yàn),就得到了錯(cuò)誤位置。

為了避免0號(hào)數(shù)據(jù)位對(duì)糾錯(cuò)結(jié)果的影響,將0號(hào)位作為全盤校驗(yàn)位。

當(dāng)出現(xiàn)兩個(gè)錯(cuò)誤,漢明碼雖然不能判斷出錯(cuò)位置,但是保證能檢測到錯(cuò)誤。

對(duì)于同時(shí)出現(xiàn)三個(gè)錯(cuò)誤這種小概率事件,漢明碼無法保護(hù)。

由于漢明碼是基于二分法的檢錯(cuò),所以只需要在每個(gè)2^n位加入糾錯(cuò)位就可以支持任意長度的糾錯(cuò)。

ECC內(nèi)存每個(gè)糾錯(cuò)塊是72bit(8bit糾錯(cuò)碼+64bit數(shù)據(jù)),因硬件實(shí)現(xiàn)簡單廣泛用于內(nèi)存中。硬盤上有更高級(jí)的LDPC碼實(shí)現(xiàn)。

位置信息和奇偶校驗(yàn)結(jié)果存在著有趣的聯(lián)系,將1所對(duì)應(yīng)的二進(jìn)制編碼全部提取出來進(jìn)行異或運(yùn)算,結(jié)果是0說明沒有錯(cuò)誤,不為0的結(jié)果對(duì)應(yīng)錯(cuò)誤的位置。所以漢明碼只需要將所以1的位置進(jìn)行異或運(yùn)算就可以得出結(jié)果。