摘要 基于Flash存储器的Hamming编码原理,在ALTEra QuartusⅡ7.0开发环境下,实现ECC校验功能。测试结果表明,该程序可实现每256 Byte数据生成3 Byte的ECC校验数据,能够检测出1 bit错误和2 bit错误,对于1 bit错误还能找出其出错位置并予以纠正,可应用于NAND Flash读写控制器的FPGA设计,保证数据传输的可靠性。
关键词 ECC校验;FPGA;NAND Flash;读写控制器
移动产品应用领域,NAND Flash设备已成为人们解决高密度固态存储的专用方法。信息技术的飞速发展,人们对信息的需求量也越来越大。因此,大量数据在系统内部以及网络之间存储和传递时,对数据进行检测并更正可能出现的错误尤为重要。纠错码ECC(Error Correct-ion Code)满足这一需求,其被称为ECC校验,是一种常用于NAND Flash读写控制器的校验编码。
ECC校验负责检测错误、维护ECC信息、更正由原数值改变了的单比特错误。所有ECC的操作处理都可由一个ECC模块来控制,其作为一种简单地存储一映射接口,放置在NAND器件和处理器接口之间。该模块一般包含Hamming编码产生模块和出错位置模块,分别用于产生ECC校验码和计算出错位置。
1 HarEMIna编码
Hamming编码计算简单。广泛用于NAND Flash的Hamming算法,通过计算块上数据包得到2个ECC值。为计算ECC值,数据包中的比特数据要先进行分割,如1/2组、1/4组、1/8组等,直到其精度达到单个比特为止,以8 bit即1 Byte的数据包为例进行说明,如图1所示。
该数据按图1所示方式进行比特分割,分别得到上方的偶校验值ECCe和下方的奇校验值ECCo。其中,1/2校验值经“异或”操作构成ECC校验的最高有效位,同理1/4校验值构成ECC校验的次高有效位,最低有效位由具体到比特的校验值填补。图2展示了两个ECC校验值的计算过程。
即偶校验值ECCe为“101”,奇校验值ECCo为“010”。图1所示为只有1 Byte数据的数据包,更大的数据包需要更多的ECC值。事实上,每n bit的ECC数值可满足2nbit数据包的校验要求。又由于这种Hamming码算法要求一对ECC数据(奇偶),所以总共要求2n bit的ECC校验数据来处理2nbit的数据包。
计算之后,原数据包和ECC数值都要写入NAND器件。稍后,原数据包将从NAND器件中读取,此时ECC值将重新计算。如果新计算的ECC不同于先前编入NAND器件的ECC,那么表明数据在读写过程中出错。
例如,原始数据01010001中有1个单一的比特出现错误,出错后的数据是01010101。经前面所示方法计算,从图3中可以清楚地看到由于数据发生了变化,2个新的ECC数值已不同与原来的ECC值。