【硬件科普】ECC内存是如何发现错误并纠正的?


这里以1号位和2号位作为奇偶检验位,不存储数据,用来校验1、3列和2、3列,在数据发送之前分别根据1、3列和2、4列当中1的个数是否为偶数来确定校验位为0或者1(奇数为1,偶数为0),接收方只要判断是否为偶数即可。当后面三列都没有错误,那么错误就在第一列。

同理4号和8号位作为2、4行和3、4行的校验位。

经过行和列的校验,就得到了错误位置。

为了避免0号数据位对纠错结果的影响,将0号位作为全盘校验位。

当出现两个错误,汉明码虽然不能判断出错位置,但是保证能检测到错误。

对于同时出现三个错误这种小概率事件,汉明码无法保护。

由于汉明码是基于二分法的检错,所以只需要在每个2^n位加入纠错位就可以支持任意长度的纠错。

ECC内存每个纠错块是72bit(8bit纠错码+64bit数据),因硬件实现简单广泛用于内存中。硬盘上有更高级的LDPC码实现。

位置信息和奇偶校验结果存在着有趣的联系,将1所对应的二进制编码全部提取出来进行异或运算,结果是0说明没有错误,不为0的结果对应错误的位置。所以汉明码只需要将所以1的位置进行异或运算就可以得出结果。