纠正NAND Flash中多比特错误的ECC装置
技术领域
本实用新型涉及存储器领域。更具体地,本实用新型涉及用于纠正NAND Flash中多比特错误的ECC装置。
背景技术
在移动产品应用领域中,NAND Flash设备已专用于人们解决高密度固态存储。NAND Flash因容量大、访问速度快,被广泛应用在各种需要大量数据存储的领域。由于NANDFlash的工艺不能保证它的存储器阵列在它的生命周期中可靠地保持性能,所以NANDFlash在生产和使用过程中会产生坏块,导致存储数据的丢失。而由于NAND Flash物理介质的特性,容易受到位翻转干扰。同时,NAND Flash出错的时候一般不会造成整个块(Block)或是页(Page)不能读取或是全部出错,而是整个页(例如,512字节)中只有一个或几个比特出错。因此,在应用NAND Flash的系统中,为保持数据的可靠性,必须同时使用ECC(ErrorCorrecting Code,纠错码),用于错误的检测和纠正。
早期的NAND Flash由于为SLC(Single-Level Cell)结构,对ECC纠错能力要求不高,所以使用Hamming码(汉明码)即可满足要求。随着多层NAND Flash的发展,MLC(Multi-Level Cell,多层单元)、TLC(Triple-Level Cell,三层单元)、QLC(Quad-Level Cell,四层单元)对ECC的要求也越来越高。单纯的Hamming码只能纠正一比特的纠错能力,已经不能满足要求,对ECC算法要求有多比特纠错能力。
目前多比特ECC算法应用最广泛的是BCH算法,这是一种有限域中的线性分组码。它使用有限域上的域论与多项式来实现多比特纠错,复杂度较高,占用系统资源较多。
总之,现有技术中的缺点是:Hamming算法复杂度低,但是只能纠正一比特;BCH算法可以纠正多比特错误,但复杂度高,对系统资源要求比较大。
实用新型内容
本实用新型提供了一种纠正NAND Flash中多比特错误的ECC装置。本实用新型解决了如何使用简单的一比特纠错算法完成纠正多比特错误的需求这一问题,而复杂度和资源需求却与一比特纠错算法相当。
本实用新型对Flash没有特殊要求,可以自由地应用在NAND Flash控制器和NANDFlash中,广泛应用在多种MLC/TLC/QLC NAND Flash上,比较灵活。而与BCH算法相比,本实用新型的算法复杂度低,占用资源较少。
总之,与现有的技术方案相比,本实用新型的优点为:
1.在NAND Flash中实现纠正多比特错误的ECC装置,应用类型包括但不限于SLC/MLC/TLC/QLC。根据本实用新型的装置,针对ECC编码时的基本单元,最少可以检测到4比特错误,最多可以检测到min(行数,列数)+1比特错误;最少可以纠正3比特错误,最多可以纠正min(行数,列数)比特错误。针对ECC编码时的基本单元,即针对M×N的矩阵,最少可以检测到4比特错误,最多可以检测到min(M,N)+1比特错误;最少可以纠正3比特错误,最多可以纠正min(M,N)比特错误。
2.根据本实用新型的装置可应用在不同NAND Flash控制器中,包括但不限于NVDIMM。
3.对待处理的数据进行ECC编码时的空间变换,包括但不限于一维到二维的变换。
本实用新型总体上提供了下文所述的纠正NAND Flash中数据的多比特错误的ECC装置。
根据本实用新型,提供了纠正NAND Flash中数据的多比特错误的ECC装置,所述ECC装置包括:
ECC编码模块,包括:
各维度变换模块,通过所述各维度变换模块对输入数据进行各维度变换,得到各维度数据;
各维度ECC编码模块,通过对应的所述各维度ECC编码模块对所述各维度数据进行ECC编码,得到各维度ECC编码数据;
ECC合并模块,通过所述ECC合并模块将所述输入数据和所述各维度ECC编码数据依据一存储规则存储在所述NAND Flash中;ECC译码模块,包括:
ECC分离模块,通过所述ECC分离模块将存储在所述NAND Flash中的所述输入数据和所述各维度ECC编码数据依据与所述存储规则对应的读出规则读出,且通过ECC分离模块将所述数据变换回到多维空间以及进行对应的ECC变换;
各维度ECC校验模块,通过所述各维度ECC校验模块利用对应的所述各维度ECC编码数据对所读出的各维度数据进行校验,得出各维度校验结果;
各维度错误纠正模块,通过各维度错误纠正模块根据所述各维度校验结果对所读出的各维度数据进行错误纠正,得出经错误纠正的各维度数据;
数据融合模块,通过所述数据融合模块依据一融合规则对经错误纠正的各维度数据进行融合,得出经融合的各维度数据。
上文所述的“经融合的各维度数据”为一维数据,能够通过数据输出模块输出。
根据本实用新型的纠正NAND Flash中数据的多比特错误的ECC装置的一个优选实施方案,所述多维空间为二维空间,其中所述ECC装置包括:
ECC编码模块,包括:
行变换模块,通过所述行变换模块对输入数据进行行变换,得到行数据;
列变换模块,通过所述列变换模块对所述输入数据进行列变换,得到列数据;
行ECC编码模块,通过所述行ECC编码模块对行数据进行行ECC编码,得到行ECC编码数据;
列ECC编码模块,通过所述列ECC编码模块对列数据进行列ECC编码,得到列ECC编码数据;
ECC合并模块,通过所述ECC合并模块将所述输入数据以及所述行ECC编码数据和所述列ECC编码数据依据一存储规则保存在所述NAND Flash中;
ECC译码模块,包括:
ECC分离模块,通过所述ECC分离模块将存储在所述NAND Flash中的所述输入数据以及所述行ECC编码数据和所述列ECC编码数据依据与所述存储规则对应的读出规则读出,且通过ECC分离模块将所述数据变换回到二维空间以及进行对应的ECC变换;
行ECC校验模块,通过所述行ECC校验模块利用所述行ECC编码数据对所读出的行数据进行行ECC校验,得出行校验结果;
列ECC校验模块,通过所述列ECC校验模块利用所述列ECC编码数据对所读出的列数据进行列ECC校验,得出列校验结果;
行错误纠正模块,通过行错误纠正模块根据所述行校验结果对所读出的行数据进行错误纠正,得出经错误纠正的行数据;
列错误纠正模块,通过列错误纠正模块根据所述列校验结果对所读出的列数据进行错误纠正,得出经错误纠正的列数据;
数据融合模块,通过所述数据融合模块依据一融合规则对经错误纠正的行数据和列数据进行融合,得出经融合的行数据和列数据。
上文中所提及的“二维空间”指的是实现ECC编码的基本单元所在空间的维数。
根据本实用新型的纠正NAND Flash中数据的多比特错误的ECC装置的一个优选实施方案,所述ECC编码为能够检测到两比特错误且纠正一比特错误的编码方法。
根据本实用新型的纠正NAND Flash中数据的多比特错误的ECC装置的一个优选实施方案,所述ECC编码为Hamming编码。
根据本实用新型的纠正NAND Flash中数据的多比特错误的ECC装置的一个优选实施方案,所述输入数据以页为基本存储单位,每页中具有M×N×K比特数据,其中K、M和N均为正整数,且M=2i和N=2j,其中i≥0且j≥0且i和j均为整数,
其中,在所述ECC编码模块中,
所述行变换模块将每页数据变换成M×K个N比特数据;
所述行ECC编码模块对所述M×K个N比特数据进行编码,得到M×K个行ECC编码数据;
所述列变换模块将每页数据变换成N×K个M比特数据;
所述列ECC编码模块对所述N×K个M比特数据进行编码,得到N×K个列ECC编码数据;
所述ECC合并模块将每页M×N×K比特数据以及所得到的M×K个行ECC编码数据和N×K个列ECC编码数据依据所述存储规则存储在NAND Flash中;
其中,在所述ECC译码模块中,
所述ECC分离模块将存储在所述NAND Flash中的M×N×K比特数据以及所得到的M×K个行ECC编码数据和N×K个列ECC编码数据依据与所述存储规则对应的读出规则的读出,且通过ECC分离模块将所述数据变换回到二维空间以及进行对应的ECC变换,得到所读出的K个M×N矩阵数据以及对应的M×K个行ECC编码数据和N×K个列ECC编码数据;
通过所述行ECC校验模块利用所述M×K个行ECC编码数据对应地对所读出的K个M×N矩阵数据中的行数据进行行ECC校验,得出行校验结果;
通过所述列ECC校验模块利用所述N×K个列ECC编码数据对应地对所读出的K个M×N矩阵数据中的列数据进行列ECC校验,得出列校验结果;
通过行错误纠正模块根据所述行校验结果对所读出的K个M×N矩阵数据中的行数据进行错误纠正,得出经错误纠正的行数据;
通过列错误纠正模块根据所述列校验结果对所读出的K个M×N矩阵数据中列数据进行错误纠正,得出经错误纠正的列数据;
数据融合模块,通过所述数据融合模块依据一融合规则对经错误纠正的行数据和列数据进行融合,得出经融合的行数据和列数据。
根据本实用新型的纠正NAND Flash中数据的多比特错误的ECC装置的一个优选实施方案,所述融合规则为:
如果所有所述行校验结果都为检测到至多一比特错误,则融合时不考虑经错误纠正的列数据,将经错误纠正的行数据通过数据输出模块输出;
如果存在所述行校验结果为检测到等于或大于两比特错误且如果所有列校验结果都为检测到至多一比特错误的情况,则融合时不考虑经错误纠正的行数据,将经错误纠正的列数据变换为行数据且通过数据输出模块输出。
根据本实用新型的纠正NAND Flash中数据的多比特错误的ECC装置的一个优选实施方案,如果所述列校验结果为检测到等于或大于两比特错误,则所述ECC装置还包括二次ECC译码模块,该二次ECC译码模块位于所述数据融合模块和所述输出模块之间,该二次ECC译码模块包括:
二次行ECC校验模块,所述二次行ECC校验模块接收所述经融合的行数据和列数据且对所述经融合的行数据和列数据进行二次行ECC校验,得到二次行ECC校验结果;
二次行错误纠正模块,所述二次行错误纠正模块对所述经融合的行数据和列数据进行二次行错误纠正,得到经二次行错误纠正的行数据。
根据本实用新型的纠正NAND Flash中数据的多比特错误的ECC装置的一个优选实施方案,所述ECC装置还包括译码状态机模块,所述译码状态机模块标志ECC译码模块中的状态。
根据本实用新型的纠正NAND Flash中数据的多比特错误的ECC装置的一个优选实施方案,如果所有所述行校验结果或者所述列校验结果都为检测到至多一比特错误,则所述译码状态机模块标志纠错成功;如果存在所述行校验结果或者所述列校验结果为检测到等于或大于两比特错误的情况,则所述译码状态机模块标志纠错失败。
根据本实用新型的纠正NAND Flash中数据的多比特错误的ECC装置的一个优选实施方案,所述ECC装置还包括译码状态机模块,所述译码状态机模块标志二次ECC译码模块中的状态。
根据本实用新型的纠正NAND Flash中数据的多比特错误的ECC装置的一个优选实施方案,如果所有所述二次行ECC校验结果都为检测到至多一比特错误,则所述译码状态机模块标志纠错成功;如果存在所述二次行ECC校验结果为检测到等于或大于两比特错误的情况,则所述译码状态机模块标志纠错失败。
根据本实用新型的纠正NAND Flash中数据的多比特错误的ECC装置的一个优选实施方案,所述存储规则为:先存储第m行数据,然后存储第m行数据的行ECC编码数据,接着存储第m列数据的列ECC编码数据;其中0<m≤max(M,N),m为整数;重复K次,完成该页数据和ECC编码数据的保存。
根据本实用新型的纠正NAND Flash中数据的多比特错误的ECC装置的一个优选实施方案,所述存储规则为:先存储每页M×N×K比特数据,然后再存储所得到的M×K个行ECC编码数据和N×K个列ECC编码数据。
附图说明
通过下文结合对附图的说明,将更容易理解本实用新型,在附图中:
图1是根据本实用新型的ECC编码和译码过程的示意图。
图2是根据本实用新型的纠正NAND Flash中多比特错误的ECC装置的整体结构图,其中将待处理数据从一维空间变换到二维空间。
图3是根据本实用新型的纠正NAND Flash中多比特错误的ECC装置的整体结构图,其中将待处理数据从一维空间变换到多维空间。
具体实施方式
下面结合附图对本实用新型进行详细描述。
本实用新型的总体思想是提供一种基于能够检测两比特错误且纠正一比特错误的编码实现纠正多比特错误的ECC装置。在本文下面的描述中,本实用新型基于Hamming编码。本领域技术人员应当能够理解,本实用新型的ECC装置同样能够基于Hsiao编码来实现。
另外,本实用新型在经过略微改型之后,也能够适用于通过具有更强大检错和纠错能力的编码算法(例如,检测三比特纠正两比特的编码等)来实现。
下面的描述以将待处理数据从一维空间变换到二维空间为例来进行说明。本实用新型同样适用于将待处理数据从一维空间变换到多维空间。本文中所提及的“二维空间”或“多维空间”指的是实现ECC编码的基本单元所在空间的维数。
本实用新型的装置通过将待处理数据进行空间变换,将数据从一维变换到二维空间,把数据位的错误分散到多个编码单元中,然后分别在行和列的维度上进行Hamming编码,之后将行ECC编码和列ECC编码以及数据一起保存在NAND Flash中。在数据读取时,将数据再次变换到二维空间,利用行ECC编码/列ECC编码分别进行校验,在行编码不能纠错的情况下,用列ECC校验成功的数据更新行数据,实现多比特纠错的目的。
图1是根据本实用新型的ECC编码和译码的示意图。本实用新型的装置分为两部分:编码和译码。
编码部分主要完成对输入的数据进行编码,输出编码后的数据。现在以将输入的数据从一维空间变换到二维空间为例进行说明。首先将数据从一维空间变换到二维空间,分别按行和列进行ECC编码,将编码后的数据输出,存储到NAND Flash上。如上面所提及的,本实用新型中的“二维空间”指的是ECC编码的基本单元所在空间的维数。在下面的描述中,由于ECC编码的基本单元是M行×N列数据,所以称为“二维空间”。
在将数据保存NAND Flash上时,必须按页(page)进行编程。把每页的数据分为M×N×K比特数据,其中K、M和N均为正整数,且M=2i和N=2j,其中i≥0且j≥0且i和j均为整数。M和N分别对应数据矩阵的行和列,每行有N比特数据,每列有M行,总共M×N比特的数据,K为每页所对应的矩阵数量。
对于每行的N比特数据,采用Hamming编码计算得出一组ECC数据;对于M行数据,得到M个行ECC编码数据。对于每列的M比特数据,采用Hamming编码计算得出另一组ECC数据;对于N列数据,得到N个列ECC编码数据。
遍历所有的M行和N列,计算得出该M×N矩阵的ECC数据,即可以得到M个行ECC编码数据和N个列ECC编码数据。
循环K次上述操作,获得该M×N×K矩阵的ECC数据,即可以得到M×K个行ECC编码数据和N×K个列ECC编码数据。
将该页数据和所生成的ECC数据依据一存储规则存放在NAND Flash对应的页存储器阵列中。
例如,该存储规则为先存储第m行数据,然后存储第m行数据的行ECC编码数据,接着存储第m列数据的列ECC编码数据;其中0<m≤max(M,N),m为整数;重复K次,完成该页数据和ECC编码数据的保存。在该存储规则时候,如果M和N不相等,例如M为128、N为64,则在存储第65行数据和第65行数据的行ECC编码之后,紧接着存储第66行数据和第66行数据的行ECC编码。在进行校验时,根据M和N的值,可以知晓在第65行数据和第65行数据的行ECC编码之后,并非是第65列数据的列ECC编码数据,而是第66行数据和第66行数据的行ECC编码。
或者,例如,该存储规则为先存储每页M×N×K比特数据,然后再存储所得到的M×K个行ECC编码数据和N×K个列ECC编码数据。
上面的存储规则仅仅是例示,并不意在表示本实用新型仅限于这些存储规则。本领域技术人员应当能够知晓多种存储规则都是可行的。
每次往NAND Flash中写入数据时,都按照上述流程完成页数据的ECC校验,然后把数据和ECC一起存储在对应的页中。
译码部分主要完成对从NAND Flash中读出的数据进行校验。首先,从NAND Flash中依据与所述存储规则对应的读出规则的读出数据。其次,从NAND Flash中读出的数据经过ECC分离,分别得到待校验数据和ECC编码,即得到M×N×K比特数据以及M×K个行ECC编码数据和N×K个列ECC编码数据。
在ECC分离模块中,将待校验数据从一维空间映射到二维空间。然后,在译码部分中,用ECC编码分别对其按行和列进行解校验。由于ECC编码的基本单元为M×N比特数据的矩阵,所以对应的解校验也以M×N比特数据为基本单元。
解校验的步骤如下:
首先,进行一次译码。使用M个行ECC编码数据对M×N比特数据进行行校验。如本领域技术人员公知的,Hamming编译码能够检测一比特错误并且纠正两比特错误。如果所有行校验结果都为检测到至多一比特错误,则表示行校验已经纠正了数据中的所有错误。在这种情况下,无需进行列校验,直接用行校验结果对行数据进行错误纠正。如果存在行校验结果为检测到等于或大于二比特的错误的情况,则表示存在行校验无法纠正的错误。在这种情况下,需要进行列校验。
如果所有列校验结果为检测到至多一比特错误,则表示列校验已经纠正了数据中的所有错误。此时,可以将列数据转换成行数据进行输出。
如果列校验结果为检测到等于或大于二比特的错误,则表示存在列校验无法纠正的错误。此时,使用列校验结果为检测到一比特错误且纠正一比特错误的列(即,错误已经完全纠正的列)对行数据进行错误纠正,得到部分错误纠正的M×N比特数数据。在部分错误纠正的M×N比特数数据中,那些列校验结果为检测到一比特错误且纠正一比特错误的列中的错误已经得以纠正。
在这种情况下,需要进行二次译码。二次译码重新使用M个行ECC编码数据对部分错误纠正的M×N比特数据进行行校验。
如果二次译码中所有行校验结果为检测到至多一比特,则代表二次译码中的行校验已经纠正了数据中的所有错误。此时,使用二次译码中行校验结果纠正行数据中的错误,代表纠错成功,则输出纠错成功标志。如果纠错失败,则输出纠错失败标志。
根据本实用新型的基于能够检测两比特错误且纠正一比特错误的编码方法针对M×N的矩阵,能够检测最少4比特错误以及最多min(M,N)+1比特错误,并且纠正最少3比特错误以及最多min(M,N)比特错误。实践中,已经得出,经过二次译码的行校验结果,已经基本上能够纠正M×N比特数据中的所有错误。
图2是根据本实用新型的用于纠正NAND Flash中多比特错误的ECC装置的整体结构图,其中将待处理数据从一维空间变换到二维空间。
如图2中所示,ECC装置包括:ECC编码模块和ECC译码模块。
ECC编码模块包括:行变换模块,通过所述行变换模块对输入数据进行行变换,得到行数据;列变换模块,通过所述列变换模块对所述输入数据进行列变换,得到列数据;行ECC编码模块,通过所述行ECC编码模块对行数据进行行ECC编码,得到行ECC编码数据;列ECC编码模块,通过所述列ECC编码模块对列数据进行列ECC编码,得到列ECC编码数据;ECC合并模块,通过所述ECC合并模块将所述数据以及所述行ECC编码数据和所述列ECC编码数据依据一存储规则保存在所述NAND Flash中。
ECC译码模块包括:ECC分离模块,通过所述ECC分离模块将存储在所述NAND Flash中的所述输入数据以及所述行ECC编码数据和所述列ECC编码数据依据与所述存储规则对应的读出规则读出,且通过ECC分离模块将所述数据变换回到二维空间且进行对应的ECC变换;行ECC校验模块,通过所述行ECC校验模块利用所述行ECC编码数据对所读出的行数据进行行ECC校验,得出行校验结果;列ECC校验模块,通过所述列ECC校验模块利用所述列ECC编码数据对所读出的列数据进行列ECC校验,得出列校验结果;行错误纠正模块,通过行错误纠正模块根据所述行校验结果对所读出的行数据进行错误纠正,得出经错误纠正的行数据;列错误纠正模块,通过列错误纠正模块根据所述列校验结果对所读出的列数据进行错误纠正,得出经错误纠正的列数据;数据融合模块,通过所述数据融合模块依据一融合规则对经错误纠正的行数据和列数据进行融合,得出经融合的行数据和列数据。
如果所述列校验结果为检测到等于或大于两比特错误,则所述ECC装置还包括二次ECC译码模块,该二次ECC译码模块位于所述数据融合模块和所述输出模块之间,该二次ECC译码模块包括:二次行ECC校验模块,所述二次行ECC校验模块接收所述经融合的行数据和列数据且对所述经融合的行数据和列数据进行二次行ECC校验,得到二次行ECC校验结果;二次行错误纠正模块,所述二次行错误纠正模块对所述经融合的行数据和列数据进行二次行错误纠正,得到经二次行错误纠正的行数据。
ECC装置还包括译码状态机模块,所述译码状态机模块标志ECC译码模块中的状态。如果所有所述行校验结果或者所述列校验结果都为检测到至多一比特错误,则所述译码状态机模块标志纠错成功;如果存在所述行校验结果或者所述列校验结果为检测到等于或大于两比特错误的情况,则所述译码状态机模块标志纠错失败。或者,如果所有所述二次行ECC校验结果都为检测到至多一比特错误,则所述译码状态机模块标志纠错成功;如果存在所述二次行ECC校验结果为检测到等于或大于两比特错误的情况,则所述译码状态机模块标志纠错失败。
图3是根据本实用新型的用于纠正NAND Flash中多比特错误的ECC装置的整体结构图,其中将待处理数据从一维空间变换到多维空间。
该装置包括ECC编码模块和ECC译码模块,包括:
该ECC编码模块包括:各维度变换模块,通过所述各维度变换模块对输入数据进行各维度变换,得到各维度数据;各维度ECC编码模块,通过对应的所述各维度ECC编码模块对所述各维度数据进行ECC编码,得到各维度ECC编码数据;ECC合并模块,通过所述ECC合并模块将所述输入数据和所述各维度ECC编码数据依据一存储规则存储在所述NAND Flash中;
该ECC译码模块,包括:ECC分离模块,通过所述ECC分离模块将存储在所述NANDFlash中的所述输入数据和所述各维度ECC编码数据依据与所述存储规则对应的读出规则读出,且通过ECC分离模块将所述数据变换回到多维空间以及进行对应的ECC变换;各维度ECC校验模块,通过所述各维度ECC校验模块利用对应的所述各维度ECC编码数据对所读出的各维度数据进行校验,得出各维度校验结果;各维度错误纠正模块,通过各维度错误纠正模块根据所述各维度校验结果对所读出的各维度数据进行错误纠正,得出经错误纠正的各维度数据;数据融合模块,通过所述数据融合模块依据一融合规则对经错误纠正的各维度数据进行融合,得出经融合的各维度数据。
本实用新型图3中示出的是将待处理数据从一维空间变换到多维空间时的一个总体框架图。在阅读本实用新型之后,本领域技术人员能够知晓其中的具体实施细节。
本实用新型不限于实施在NAND控制器或者NAND Flash中,不限于使用硬件或者软件来实现。
应理解,本文中的实施方案和实施例仅出于示例目的,本领域技术人员可以在不背离本实用新型的范围的前提下做出许多变体。