发明内容
针对现有方案中数据表条目有限、很难全部覆盖多个电压阈值的最优组合,且很难找到特别合适的最优读顺序的问题,提出了快速在线查找NAND闪存最优读偏移值的方法和装置,该方法或装置可应用于SSD盘、U盘、EMMC、UFS等以TLC NAND闪存为存储介质的各类存储设备,可以提高TLC NAND闪存的读操作性能和延长产品的使用寿命。
为了实现上述目的,本发明通过如下的技术方案来实现:
快速在线查找NAND闪存最优读偏移值的方法,所述方法包括:
查找相应页类型下对应的SLC数据,在后续过程中一次读数并行处理多个电压阈值;
查找相应页类型下各电压阈值所需的读偏移起始值,作为最优区间搜索处理的读偏移起始值;
找到最优区间及最优区间的相邻区间;
根据最优区间及最优区间的相邻区间的计数信息,计算最优读偏移值。
作为本发明的一种优选方案,所述查找相应页类型下对应的SLC数据的方法具体包括:
向NAND控制器发出SLC格式读命令,从NAND闪存读出SLC数据;
统计每次SLC数据中1的计数,记为SLC计数信息;
生成每次SLC比对用的SLC参考区间信息;
比对所述SLC计数信息和所述SLC参考区间信息,根据比对结果判断所述SLC数据是否是有效的SLC数据,若所述SLC计数信息在所述SLC参考区间信息的范围内,则认定为有效的SLC数据,保存所述SLC数据到SLC数据处理暂存区;若不是,则根据比对结果增加或减少下次SLC读的读偏移值;重复上述操作,直至找到有效的SLC数据。
作为本发明的一种优选方案,所述查找相应页类型下各电压阈值所需的读偏移起始值的方法具体包括:
向NAND控制器发出TLC数据读命令,从NAND闪存读出第一TLC数据;
将每次读到的所述第一TLC数据和SLC数据处理暂存区中的SLC数据进行位运算,并统计位运算后数据中所需1的计数或0的计数,记为TLC计数信息;
生成每次TLC比对用的起始值参考区间信息;
比对所述TLC计数信息和所述起始值参考区间信息,根据比对结果判断页类型每个电压阈值是否找到所需的读偏移起始值,若所述TLC计数信息在所述起始值参考区间信息的范围内,则认定为找到所需的读偏移起始值,保存所述第一TLC数据到起始值搜索暂存区;若不是,则根据比对结果增加或减少该电压阈值对应的读偏移值;重复上述操作,直至找到每个电压阈值所需的读偏移起始值。
作为本发明的一种优选方案,所述找到最优区间及最优区间的相邻区间的方法具体包括:
从起始值搜索暂存区取回最后一次的第一TLC数据;
将所述第一TLC数据和SLC数据处理暂存区中的SLC数据进行位运算,并统计所需1的计数或0的计数,记为第一计数信息,将所述第一计数信息保存到最优区间搜索暂存区;
生成比对用的第一参考信息;
比对所述第一TLC数据和所述第一参考信息,根据比对结果增加或减少所需电压阈值对应的读偏移值;
使用新的读偏移值向NAND控制器发出TLC数据读命令,从NAND闪存读出第二TLC数据;
将所述第二TLC数据和SLC数据处理暂存区中的SLC数据进行位运算,并统计所需1的计数或0的计数,记为第二计数信息,将所述第二计数信息保存到最优区间搜索暂存区;
生成比对用的第二参考信息;
计算所述第二计数信息及所述第一计数信息之差,得到第一存储单元计数信息,并保存所述第一存储单元计数信息到最优区间搜索暂存区;将所述第二计数信息和所述第二参考信息进行结果比对,根据比对结果增加或减少所需电压阈值对应的读偏移值;
使用新的读偏移值,向NAND控制器发出TLC数据读命令,从NAND闪存读出第三TLC数据;
将所述第三TLC数据和SLC数据处理暂存区中的SLC数据进行位运算,并统计所需1的计数或0的计数,记为第三计数信息,将所述第三计数信息保存到最优区间搜索暂存区;
计算所述第三计数信息及其相邻数据的计数信息之差,得到第二存储单元计数信息,并保存所述第二存储单元计数信息到最优区间搜索暂存区;比对所述第一存储单元计数信息和所述第二存储单元计数信息,根据比对结果增加或减少所需电压阈值对应的读偏移值;
使用新的读偏移值向NAND控制器发出TLC数据读命令,从NAND闪存读出第四TLC数据;
将所述第四TLC数据和SLC数据处理暂存区中的SLC数据进行位运算,并统计所需1的计数或0的计数,记为第四计数信息,将所述第四计数信息保存到最优区间搜索暂存区;
计算所述第四计数信息及其相邻数据的计数信息之差,得到第三存储单元计数信息,并保存所述第三存储单元计数信息到最优区间搜索暂存区;比对相邻两个区间的存储单元计数大小;如果本次区间的存储单元计数小于或等于其相邻区间的存储单元计数,则增加或减少该电压阈值对应的读偏移值;重复上述步骤,直到本次区间的存储单元计数大于其相邻区间的存储单元计数,该相邻区间即是所需最优区间。
作为本发明的一种优选方案,所述根据最优区间及最优区间的相邻区间的计数信息,计算最优读偏移值的方法具体包括:根据不同干扰等级,以及相邻两个区间存储单元计数之差的等级,计算最优读偏移值;所述干扰等级分为弱干扰、中干扰和强干扰。
快速在线查找NAND闪存最优读偏移值的装置,所述装置包括:SLC数据搜索模块、起始值搜索模块、最优区间搜索模块以及最优读偏移搜索模块;
所述SLC数据搜索模块用于查找相应页类型下对应的SLC数据,在后续过程中一次读数并行处理多个电压阈值;
所述起始值搜索模块用于查找相应页类型下各电压阈值所需的读偏移起始值,作为最优区间搜索模块处理的读偏移起始值;
所述最优区间搜索模块用于找到最优区间及最优区间的相邻区间;
所述最优读偏移搜索模块用于根据最优区间及最优区间的相邻区间的计数信息,计算最优读偏移值。
作为本发明的一种优选方案,所述SLC数据搜索模块包括SLC格式读处理模块、SLC数据信息处理模块、SLC参考信息生成模块以及SLC中央处理模块;
所述SLC格式读处理模块用于向NAND控制器发出SLC格式读命令,从NAND闪存读出SLC数据,并将所述SLC数据发送至所述SLC数据信息处理模块;
所述SLC数据信息处理模块用于统计每次SLC数据中1的计数,记为SLC计数信息;
所述SLC参考信息生成模块用于生成每次SLC比对用的SLC参考区间信息;
所述SLC中央处理模块用于比对所述SLC计数信息和所述SLC参考区间信息,根据比对结果判断所述SLC数据是否是有效的SLC数据,若所述SLC计数信息在所述SLC参考区间信息的范围内,则认定为有效的SLC数据,保存所述SLC数据到SLC数据处理暂存区;若不是,则根据比对结果增加或减少下次SLC读的读偏移值,并由所述SLC格式读处理模块向NAND控制器再次发出SLC格式读命令,重复上述操作,直至找到有效的SLC数据;
首次SLC格式读的读偏移值选择默认读偏移值,后续读偏移值根据所述SLC中央处理模块的处理结果选择指定读偏移值。
作为本发明的一种优选方案,所述起始值搜索模块包括TLC数据读处理模块、起始值搜索数据信息处理模块、起始值搜索参考信息生成模块以及起始值搜索中央处理模块;
所述TLC数据读处理模块用于向NAND控制器发出TLC数据读命令,从NAND闪存读出第一TLC数据,并将所述第一TLC数据发送至所述起始值搜索数据信息处理模块;
所述起始值搜索数据信息处理模块用于将所述第一TLC数据和SLC数据处理暂存区中的SLC数据进行位运算,并统计位运算后数据中所需1的计数或0的计数,记为TLC计数信息;
所述起始值搜索参考信息生成模块用于生成比对用的起始值参考区间信息;
所述起始值搜索中央处理模块用于比对所述TLC计数信息和所述起始值参考区间信息,根据比对结果判断页类型每个电压阈值是否找到所需的读偏移起始值,若所述TLC计数信息在所述起始值参考区间信息的范围内,则认定为找到所需的读偏移起始值,保存所述第一TLC数据到起始值搜索暂存区;若不是,则根据比对结果增加或减少该电压阈值对应的读偏移值,并由所述TLC数据读处理模块再次向NAND控制器发出TLC数据读命令,重复上述操作,直至找到每个电压阈值所需的读偏移起始值;
首次TLC数据读命令的读偏移值选择默认读偏移值,后续读偏移值根据所述起始值搜索中央处理模块的处理结果选择指定读偏移值。
作为本发明的一种优选方案,所述最优区间搜索模块包括前置数据信息预处理模块、前置数据信息处理模块、前置参考信息生成模块、前置中央处理A模块、前置中央处理B模块、前置中央处理C模块以及最优区间搜索中央处理模块;
所述前置数据信息预处理模块用于从起始值搜索暂存区取回最后一次的第一TLC数据;
所述前置数据信息处理模块用于将所述第一TLC数据和SLC数据处理暂存区中的SLC数据进行位运算,统计位运算后数据中所需1的计数或0的计数,记为第一计数信息,将所述第一计数信息保存至最优区间搜索暂存区;
所述前置参考信息生成模块用于生成比对用的第一参考信息、第二参考信息;
所述前置中央处理A模块用于比对所述第一TLC数据和所述第一参考信息,根据比对结果增加或减少所需电压阈值对应的读偏移值;
TLC数据读处理模块使用所述前置中央处理A模块调整后的读偏移值向NAND控制器发出TLC数据读命令,从NAND闪存读出第二TLC数据;前置数据信息处理模块将所述第二TLC数据和SLC数据处理暂存区中的SLC数据进行位运算,并统计所需1的计数或0的计数,记为第二计数信息,将所述第二计数信息保存到最优区间搜索暂存区;
所述前置中央处理B模块用于计算所述第二计数信息及所述第一计数信息之差,得到第一存储单元计数信息,并保存所述第一存储单元计数信息至最优区间搜索暂存区,将所述第二计数信息和所述第二参考信息进行结果比对,根据比对结果增加或减少所需电压阈值对应的读偏移值;
TLC数据读处理模块使用所述前置中央处理B模块调整后的读偏移值向NAND控制器发出TLC数据读命令,从NAND闪存读出第三TLC数据;前置数据信息处理模块将所述第三TLC数据和SLC数据处理暂存区中的SLC数据进行位运算,并统计所需1的计数或0的计数,记为第三计数信息,将所述第三计数信息保存到最优区间搜索暂存区;
所述前置中央处理C模块用于计算所述第三计数信息及其相邻数据的计数信息之差,得到第二存储单元计数信息,并保存所述第二存储单元计数信息到最优区间搜索暂存区;比对所述第一存储单元计数信息和所述第二存储单元计数信息,根据比对结果增加或减少所需电压阈值对应的读偏移值;
TLC数据读处理模块使用所述前置中央处理C模块调整后的读偏移值向NAND控制器发出TLC数据读命令,从NAND闪存读出第四TLC数据;前置数据信息处理模块将所述第四TLC数据和SLC数据处理暂存区中的SLC数据进行位运算,并统计所需1的计数或0的计数,记为第四计数信息,将所述第四计数信息保存到最优区间搜索暂存区;
最优区间搜索中央处理模块用于计算所述第四计数信息及其相邻数据的计数信息之差,得到第三存储单元计数信息,并保存所述第三存储单元计数信息到最优区间搜索暂存区;比对相邻两个区间的存储单元计数大小;如果本次区间的存储单元计数小于或等于其相邻区间的存储单元计数,则增加或减少该电压阈值对应的读偏移值;重复上述操作,直到本次区间的存储单元计数大于其相邻区间的存储单元计数,该相邻区间即是所需最优区间。
作为本发明的一种优选方案,所述最优读偏移搜索模块包括最优值搜索处理模块,所述最优值搜索处理模块用于根据不同干扰等级,以及相邻两个区间存储单元技术之差的等级,计算最优读偏移值;
所述干扰等级分为弱干扰、中干扰和强干扰。
与现有技术相比,本发明的有益效果是:对于拥有多个读电压阈值的页类型,本发明通过SLC数据搜索模块找到合适的SLC数据;通过该SLC数据与TLC数据进行合适的运算,可以在线同时并行查找所需多个电压阈值相应的最优读偏移值;通过起始值搜索模块实现在TLC NAND闪存处于各种不同干扰组合下找到各电压阈值所对应的最优读偏移起始值,避免使用默认读偏移作为读偏移起始值而导致在NAND闪存恶劣条件找到错误的最优读偏移;本发明中的最优读偏移搜索模块根据当前干扰程度以及与最优区间相邻的两个区间之间存储单元计数之差的等级进行微调,可以找到更精确的最优读偏移。本发明采用一次读取并行查找多个电压阈值所对应的最优读偏移,试验证明最多需要10次读操作即可找到最优读偏移,提高了产品的读性能,降低了产品的动态功耗;应用本发明找到的最优读偏移值进行读数可能获得正确解码,则该数据块暂时不需标志为坏块,延长了产品的使用期限。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例的附图,对本发明实施例的技术方案进行清楚、完整地描述。显然,所描述的实施例是本发明的一部分实施例,而不是全部的实施例。基于所描述的本发明的实施例,本领域普通技术人员所获得的所有其他实施例,都属于本发明保护的范围。
如图1所示,TLC NAND闪存有三种数据页类型(page type),分别是最低有效位页(LSB page),中间有效位页(CSB page)和最高有效位页(MSB page)。TLC NAND闪存每个存储单元有7个电压阈值,依次表示为Va、Vb、Vc、Vd、Ve、Vf和Vg。这7个电压阈值把每个存储单元分成8种状态,依次表示为P0、P1、P2、P3、P4、P5、P6和P7,对应了其3种数据页类型。
TLC NAND闪存读操作的电压阈值表示为:读操作的电压阈值 = 默认电压阈值 +读偏移值;默认情况下,读偏移值为0。在TLC NAND闪存的状况良好时,即,擦写次数较少、读干扰次数较少以及数据保持时间不长的情况下,其数据分布大致如图1所示,数据没有太多的位翻转。我们只需要用默认读偏移值进行读操作,然后通过LDPC把数据中的少量翻转位纠正过来,就可以得到正确的数据。
随着TLC NAND存储单元的擦写次数增加,读干扰次数增加,以及数据保持时间增加,部分存储单元的状态会发生改变。如图2所示,部分P0状态的存储单元由于大量的读干扰影响,其电压越来越高,超过了默认电压阈值Va。如果这时我们还是采用默认读偏移值进行最低有效位页数据的读操作,会导致读到大量的位翻转。大量的位翻转会降低LDPC的解码速度,降低产品读性能。如果位翻转数量超过LDPC的纠错极限造成纠错失败,该数据所在的块可能被标记为坏块。但如果我们能使用Va_opt作为最低有效位页数据的读操作电压阈值,则可以最大程度减少数据的位翻转。因此,我们需要找到合适的读偏移值,即“Va_opt–Va”的差值,使用该偏移值进行读操作。图2中,默认电压阈值Vb、Vf和Vg也都有较多的位翻转,同样的,我们也需要找到这几个电压阈值相应的最优读偏移值。
通常情况下,TLC NAND闪存厂商会提供一个数据表给用户去尝试多种不同的读偏移值。数据表里的读偏移值是厂商的一些经验值,如表1所示:
表1 数据表
相应电压阈值 |
Va |
Vb |
Vc |
Vd |
Ve |
Vf |
Vg |
条目1 |
0xFE |
0x01 |
0x03 |
0xFC |
0x05 |
0x03 |
0xF8 |
条目2 |
0x02 |
0xFC |
0xFD |
0x05 |
0xFE |
0x02 |
0xFC |
条目3 |
0xFD |
0xFB |
0x07 |
0x0A |
0xFD |
0xFC |
0x05 |
条目4 |
0x0A |
0x09 |
0x04 |
0xFA |
0xFB |
0x05 |
0x0A |
… |
… |
… |
… |
… |
… |
… |
… |
条目31 |
0x06 |
0xF5 |
0x0A |
0x08 |
0x04 |
0xFD |
0xFA |
数据表包含多个条目,每个条目包含了各个电压阈值所对应的读偏移值。如果LDPC解码失败,则依次按照一定顺序去尝试采用各条目中的读偏移值继续重读数据,直到LDPC解码成功。这种方案的缺点,一是因为读取任何页的数据经常涉及相应多个电压阈值的读偏移组合,很难让多个电压阈值都比较精确地组合到最优偏移值。通常厂商给出的这个数据表也不会太大,也就是说它们的组合有限。二是很难找到特别合适的最优读顺序。TLC NAND闪存处于不同条件时,比如擦写次数,读干扰次数以及数据保持时间的不同组合很可能对应的最优读条目是不一样的。如表1中,如果我们按顺序从条目1到条目31去读,最后发现条目31才可以正确解码。或者如果我们按照从条目31到条目1去读,最后发现条目1才可以正确解码。这会显著影响产品的读写性能。为了解决这个问题,我们提出了快速在线查找NAND闪存最优读偏移值的方法和装置。
如图4-图6所示,为本发明的一个实施例,该实施例提供了快速在线查找NAND闪存最优读偏移值的方法。
编程写入到TLC NAND闪存中的数据必须先经过数据随机化处理,使得每个字线的存储单元尽可能地均匀分布在各个状态。假设某TLC NAND闪存中每个字线总共拥有T个存储单元,其被编程后,每个字线的存储单元(数据)分布大致如图3所示,每种状态大约拥有1/8 T个存储单元,该NAND闪存的LSB page数据和MSB page数据需要两个电压阈值,依次是Va和Ve以及Vc和Vg,而CSB page数据需要三个电压阈值是Vb,Vd和Vf。为了能够同时查找多个电压阈值的最优读偏移值,我们需要SLC读格式的数据。两个电压阈值的页数据需要一笔合适的SLC读格式的数据,三个电压阈值的页数据需要两笔合适的SLC读格式的数据。
快速在线查找NAND闪存最优读偏移值的方法具体包括如下步骤:
S1:查找相应页类型下对应的SLC数据,在后续过程中一次读数并行处理多个电压阈值;
在一个具体的实施例中,S1可以包括以下步骤:
S11:向NAND控制器发出SLC格式读命令,从NAND闪存读出SLC数据;首次SLC格式读的读偏移值选择默认读偏移值,后续读偏移值根据步骤S14的处理结果选择指定读偏移值;
S12:统计每次SLC数据中1的计数,记为SLC计数信息;
S13:生成每次SLC比对用的SLC参考区间信息;
S14:比对SLC计数信息和SLC参考区间信息,根据比对结果判断SLC数据是否是有效的SLC数据,若SLC计数信息在SLC参考区间信息的范围内,则认定为有效的SLC数据,保存SLC数据到SLC数据处理暂存区;若不是,则根据比对结果增加或减少下次SLC读的读偏移值;
重复步骤S11-S14,直至找到有效的SLC数据。
S2:查找相应页类型下各电压阈值所需的读偏移起始值,作为最优区间搜索处理的读偏移起始值;
在一个具体的实施例中,S2可以包括以下步骤:
S21:向NAND控制器发出TLC数据读命令,从NAND闪存读出第一TLC数据;首次TLC数据读的读偏移值选择默认读偏移值,后续读偏移值根据步骤S24的处理结果选择指定读偏移值;
S22:将每次读到的第一TLC数据和SLC数据处理暂存区中的SLC数据进行所需的位运算,并统计位运算后数据中所需1的计数或0的计数,记为TLC计数信息;
因为有了SLC格式的数据信息,所以这里及后续的操作都是基于一次TLC数据读来完成相应页类型下所有电压阈值的数据信息统计及读偏移的调整;
S23:生成每次TLC比对所需的起始值参考区间信息;
S24:比对TLC计数信息和起始值参考区间信息,根据比对结果判断页类型每个电压阈值是否找到所需的读偏移起始值,若TLC计数信息在起始值参考区间信息的范围内,则认定为找到所需的读偏移起始值,保存第一TLC数据到起始值搜索暂存区;若不是,则根据比对结果增加或减少该电压阈值对应的读偏移值;
重复步骤S21-S24,直至找到每个电压阈值所需的读偏移起始值。
S3:找到最优区间及最优区间的相邻区间;
在一个具体的实施例中,S3可以包括以下步骤:
S311:从起始值搜索暂存区取回所需的最后一次的第一TLC数据;
S312:将第一TLC数据和SLC数据处理暂存区中的SLC数据进行位运算,并统计所需1的计数或0的计数,记为第一计数信息,将第一计数信息保存到最优区间搜索暂存区;
S313:生成比对用的第一参考信息;
S314:比对第一TLC数据和第一参考信息,根据比对结果增加或减少所需电压阈值对应的读偏移值;
S321:使用步骤S314中调整的新的读偏移值向NAND控制器发出TLC数据读命令,从NAND闪存读出第二TLC数据;
S322:将第二TLC数据和SLC数据处理暂存区中的SLC数据进行位运算,并统计所需1的计数或0的计数,记为第二计数信息,将第二计数信息保存到最优区间搜索暂存区;
S323:生成比对用的第二参考信息;
S324:计算第二计数信息及第一计数信息之差,得到第一存储单元计数信息,并保存第一存储单元计数信息到最优区间搜索暂存区;将第二计数信息和第二参考信息进行结果比对,根据比对结果增加或减少所需电压阈值对应的读偏移值;
S331:使用步骤S324中调整的新的读偏移值,向NAND控制器发出TLC数据读命令,从NAND闪存读出第三TLC数据;
S332:将第三TLC数据和SLC数据处理暂存区中的SLC数据进行位运算,并统计所需1的计数或0的计数,记为第三计数信息,将第三计数信息保存到最优区间搜索暂存区;
S333:计算第三计数信息及其相邻数据的计数信息之差,得到第二存储单元计数信息,其相邻数据的计数信息为第一统计信息或第二统计信息;并保存第二存储单元计数信息到最优区间搜索暂存区;比对第一存储单元计数信息和第二存储单元计数信息,根据比对结果增加或减少所需电压阈值对应的读偏移值;
S341:使用步骤S333中调整的新的读偏移值向NAND控制器发出TLC数据读命令,从NAND闪存读出第四TLC数据;
S342:将第四TLC数据和SLC数据处理暂存区中的SLC数据进行位运算,并统计所需1的计数或0的计数,记为第四计数信息,将第四计数信息保存到最优区间搜索暂存区;
S343:计算第四计数信息及其相邻数据的计数信息之差,得到第三存储单元计数信息,其相邻数据的计数信息可能为第一计数信息、第二计数信息或第三计数信息;并保存第三存储单元计数信息到最优区间搜索暂存区;比对相邻两个区间的存储单元计数大小,如果本次区间的存储单元计数小于或等于其相邻区间的存储单元计数,则增加或减少该电压阈值对应的读偏移值;
重复步骤S341-S343,直到本次区间的存储单元计数大于其相邻区间的存储单元计数,该相邻区间即是所需最优区间。
S4:根据最优区间及最优区间的相邻区间的计数信息,计算最优读偏移值;具体包括:根据不同干扰等级,以及相邻两个区间存储单元计数之差的等级,计算最优读偏移值;干扰等级分为弱干扰、中干扰和强干扰。
在一个具体的实施例中,取最优区间中间值作为最优读偏移值,记为opt_offset;若左边区间存储单元计数大于右边区间存储单元计数,则选择最优读偏移右调处理,否则选择最优读偏移左调处理。
左右两边相邻两个区间存储单元计数之差记为diff_cells;划分三个等级参考值,若diff_cells不大于等级1参考值,则取opt_offset作为最终最优读偏移值;若diff_cells大于等级1参考值、不大于等级2参考值,则在opt_offset的基础上,向右(或向左)偏移半个区间大小的50%作为最终最优读偏移值;若diff_cells大于等级2参考值、不大于等级3参考值,则在opt_offset的基础上,向右(或向左)偏移半个区间大小的100%作为最终最优读偏移值;若diff_cells大于等级3参考值,则在opt_offset的基础上,向右(或向左)偏移半个区间大小的125%作为最终最优读偏移值;最终最优读偏移值记为opt_offset_final。
如图7所示,为本发明的另一实施例,该实施例提供了快速在线查找NAND闪存最优读偏移值的装置,具体包括SLC数据搜索模块、起始值搜索模块、最优区间搜索模块以及最优读偏移搜索模块。
SLC数据搜索模块用于查找相应页类型下对应的SLC数据,在后续过程中一次读数并行处理多个电压阈值;SLC数据搜索模块包括SLC格式读处理模块、SLC数据信息处理模块、SLC参考信息生成模块以及SLC中央处理模块;
SLC格式读处理模块用于向NAND控制器发出SLC格式读命令,从NAND闪存读出SLC数据,并将SLC数据发送至SLC数据信息处理模块;
SLC数据信息处理模块用于统计每次SLC数据中1的计数,记为SLC计数信息;
SLC参考信息生成模块用于生成每次SLC比对用的SLC参考区间信息;
SLC中央处理模块用于比对SLC计数信息和SLC参考区间信息,根据比对结果判断SLC数据是否是有效的SLC数据,若SLC计数信息在SLC参考区间信息的范围内,则认定为有效的SLC数据,保存SLC数据到SLC数据处理暂存区;若不是,则根据比对结果增加或减少下次SLC读的读偏移值,并由SLC格式读处理模块向NAND控制器再次发出SLC格式读命令,重复上述操作,直至找到有效的SLC数据;
首次SLC格式读的读偏移值选择默认读偏移值,后续读偏移值根据SLC中央处理模块的处理结果选择指定读偏移值。
起始值搜索模块用于查找相应页类型下各电压阈值所需的读偏移起始值,作为最优区间搜索模块处理的读偏移起始值;起始值搜索模块包括TLC数据读处理模块、起始值搜索数据信息处理模块、起始值搜索参考信息生成模块以及起始值搜索中央处理模块;
TLC数据读处理模块用于向NAND控制器发出TLC数据读命令,从NAND闪存读出第一TLC数据,并将第一TLC数据发送至起始值搜索数据信息处理模块;
起始值搜索数据信息处理模块用于将第一TLC数据和SLC数据处理暂存区中的SLC数据进行位运算,并统计位运算后数据中所需1的计数或0的计数,记为TLC计数信息;
起始值搜索参考信息生成模块用于生成比对用的起始值参考区间信息;
起始值搜索中央处理模块用于比对TLC计数信息和起始值参考区间信息,根据比对结果判断页类型每个电压阈值是否找到所需的读偏移起始值,若TLC计数信息在起始值参考区间信息的范围内,则认定为找到所需的读偏移起始值,保存第一TLC数据到起始值搜索暂存区;若不是,则根据比对结果增加或减少该电压阈值对应的读偏移值,并由TLC数据读处理模块再次向NAND控制器发出TLC数据读命令,重复上述操作,直至找到每个电压阈值所需的读偏移起始值;
首次TLC数据读命令的读偏移值选择默认读偏移值,后续读偏移值根据起始值搜索中央处理模块的处理结果选择指定读偏移值。
最优区间搜索模块用于找到最优区间及最优区间的相邻区间;最优区间搜索模块包括前置数据信息预处理模块、前置数据信息处理模块、前置参考信息生成模块、前置中央处理A模块、前置中央处理B模块、前置中央处理C模块以及最优区间搜索中央处理模块;
前置数据信息预处理模块用于从起始值搜索暂存区取回最后一次的第一TLC数据;
前置数据信息处理模块用于将第一TLC数据和SLC数据处理暂存区中的SLC数据进行位运算,统计位运算后数据中所需1的计数或0的计数,记为第一计数信息,将第一计数信息保存至最优区间搜索暂存区;
前置参考信息生成模块用于生成比对用的第一参考信息、第二参考信息;
前置中央处理A模块用于比对第一TLC数据和第一参考信息,根据比对结果增加或减少所需电压阈值对应的读偏移值;
TLC数据读处理模块使用前置中央处理A模块调整后的读偏移值向NAND控制器发出TLC数据读命令,从NAND闪存读出第二TLC数据;前置数据信息处理模块将第二TLC数据和SLC数据处理暂存区中的SLC数据进行位运算,并统计所需1的计数或0的计数,记为第二计数信息,将第二计数信息保存到最优区间搜索暂存区;
前置中央处理B模块用于计算第二计数信息及第一计数信息之差,得到第一存储单元计数信息,并保存第一存储单元计数信息至最优区间搜索暂存区,将第二计数信息和第二参考信息进行结果比对,根据比对结果增加或减少所需电压阈值对应的读偏移值;
TLC数据读处理模块使用前置中央处理B模块调整后的读偏移值向NAND控制器发出TLC数据读命令,从NAND闪存读出第三TLC数据;前置数据信息处理模块将第三TLC数据和SLC数据处理暂存区中的SLC数据进行位运算,并统计所需1的计数或0的计数,记为第三计数信息,将第三计数信息保存到最优区间搜索暂存区;
前置中央处理C模块用于计算第三计数信息及其相邻数据的计数信息之差,得到第二存储单元计数信息,并所述第二存储单元计数信息到最优区间搜索暂存区;比对第一存储单元计数信息和第二存储单元计数信息,根据比对结果增加或减少所需电压阈值对应的读偏移值;
TLC数据读处理模块使用前置中央处理C模块调整后的读偏移值向NAND控制器发出TLC数据读命令,从NAND闪存读出第四TLC数据;前置数据信息处理模块将第四TLC数据和SLC数据处理暂存区中的SLC数据进行位运算,并统计所需1的计数或0的计数,记为第四计数信息,将第四计数信息保存到最优区间搜索暂存区;
最优区间搜索中央处理模块用于计算第四计数信息及其相邻数据的计数信息之差,得到第三存储单元计数信息,并保存所述第三存储单元计数信息到最优区间搜索暂存区;
比对相邻两个区间的存储单元计数大小;如果本次区间的存储单元计数小于或等于其相邻区间的存储单元计数,则增加或减少该电压阈值对应的读偏移值;重复上述操作,直到本次区间的存储单元计数大于其相邻区间的存储单元计数,该相邻区间即是所需最优区间。
最优读偏移搜索模块用于根据最优区间及最优区间的相邻区间的计数信息,计算最优读偏移值;最优读偏移搜索模块包括最优值搜索处理模块,最优值搜索处理模块用于根据不同干扰等级,以及相邻两个区间存储单元技术之差的等级,计算最优读偏移值;干扰等级分为弱干扰、中干扰和强干扰。
以下为对本发明实施例的进一步说明。
该实施例中的SSD硬盘采用BiCS4型号TLC NAND闪存作为存储空间介质。
西部数据BiCS4 TLC NAND闪存的LSB和MSB页类型需要两个电压阈值,所以需要一笔相应的SLC数据,而CSB页类型的需要三个电压阈值,所以需要两笔相应的SLC数据。这里每次调整读偏移值的大小可以具体NAND闪存的试验结果自行定义,目前对于BiCS4 TLCNAND闪存,我们每次调整大小为8。
SLC格式读处理模块向NAND控制器发送Single_State_Read读命令,读回所需SLC数据;SLC数据信息处理模块统计SLC数据中1的计数;
对于LSB页类型,生成参考区间:3/8T±1/32T;
对于CSB页类型,生成参考区间1:3/8T±1/32T,生成参考区间2:5/8T±1/32T;
对于MSB页类型,生成参考区间:5/8T±1/32T;
SLC中央处理模块讲SLC数据中1的计数计数与所需参考区间进行比对,若SLC数据中1的计数小于所需参考区间,则递增或递减下次SLC读的读偏移值,直至找到所需的SLC数据,保存到SLC数据处理暂存区,SLC数据计数器自减1;重复上述步骤,直至查找出所有所需的SLC数据。
同样的,其起始值搜索需要根据不同页类型进行相应处理,每次调整读偏移值的大小可以具体NAND闪存的试验结果自行定义,目前对于BiCS4 TLC NAND闪存,我们每次调整大小为8。
BiCS4 LSB页类型搜索的具体流程如下:
TLC数据读处理模块向NAND控制器发送TLC数据读命令,读回所需TLC数据;
计算Va电压阈值相应的统计信息:将TLC数据和SLC数据进行按位与运算,统计运算后所得数据中1的计数,记为st_count_Va;
计算Ve电压阈值相应的统计信息:SLC数据按位取反后,再与TLC数据进行按位与运算,统计运算后所得数据中1的计数,记为count1_Ve,存储单元总数T减去count1_Ve,得到0的计数,记为st_count_Ve;
生成Va电压阈值所需的比对参考区间:1/8T±1/32T,记为st_ref_Va;
生成Ve电压阈值所需的比对参考区间:5/8T±1/32T,记为st_ref_Ve;
若st_count_Va在st_ref_Va区间范围内,则Va的本次读偏移值是所需起始值,否则判断st_count_Va是否小于st_ref_Va区间范围,若是则递增Va相应的读偏移值,若否则递减Va相应的读偏移值;
若st_count_Ve在st_ref_Ve区间范围内,则Ve的本次读偏移值是所需起始值,否则判断st_count_Ve是否小于st_ref_Ve区间范围,若是则递增Ve相应的读偏移值,若否则递减Ve相应的读偏移值;
直至Va和Ve相应的读偏移值都找到起始值。
BiCS4 MSB页类型搜索的具体流程如下:
TLC数据读处理模块向NAND控制器发送TLC数据读命令,读回所需TLC数据;
计算Vc电压阈值相应的统计信息:将TLC数据和SLC数据进行按位与运算,统计运算后所得数据中1的计数,记为st_count_Vc;
计算Vg电压阈值相应的统计信息:SLC数据按位取反后,再与TLC数据进行按位与运算,统计运算后所得数据中1的计数,记为count1_Vg,存储单元总数T减去count1_Vg,得到0的计数,记为st_count_Vg;
生成Vc电压阈值所需的比对参考区间:3/8T±1/32T,记为st_ref_Vc;
生成Vg电压阈值所需的比对参考区间:7/8T±1/32T,记为st_ref_Vg;
若st_count_Vc在st_ref_Vc区间范围内,则Vc的本次读偏移值是所需起始值,否则判断st_count_Vc是否小于st_ref_Vc区间范围,若是则递增Vc相应的读偏移值,若否则递减Vc相应的读偏移值;
若st_count_Vg在st_ref_Vg区间范围内,则Vg的本次读偏移值是所需起始值,否则判断st_count_Vg是否小于st_ref_Vg区间范围,若是则递增Vg相应的读偏移值,若否则递减Vg相应的读偏移值;
直至Vc和Vg相应的读偏移值都找到起始值。
BiCS4 CSB页类型搜索的具体流程如下:
TLC数据读处理模块向NAND控制器发送TLC数据读命令,读回所需TLC数据;
计算Vb电压阈值相应的统计信息:将TLC数据和SLC数据一进行按位与运算,统计运算后所得数据中1的计数,记为st_count_Vb;
计算Vf电压阈值相应的统计信息:SLC数据二按位取反,结果数据记为slc2_not,TLC数据按位取反,结果数据记为data_not,slc2_not与data_not按位与所得结果数据记为data_Vf,统计data_Vf中1的计数,记为count0_Vf,存储单元总数T减去count0_Vf,得到0的计数,记为st_count_Vf;
计算Vd电压阈值相应的统计信息:SLC数据一按位取反,结果数据记为slc1_not,TLC与slc1_not按位与所得结果数据记为data_Vdf,data_Vdf与data_Vf按位或所得结果数据记为data_Vd;统计data_Vd中1的计数,记为count1_Vd,存储单元总数T减去count1_Vd,得到0的计数,记为st_count_Vd;
生成Vb电压阈值所需的比对参考区间:2/8T±1/32T,记为st_ref_Vb;
生成Vd电压阈值所需的比对参考区间:4/8T±1/32T,记为st_ref_Vd;
生成Vf电压阈值所需的比对参考区间:6/8T±1/32T,记为st_ref_Vf;
若st_count_Vb在st_ref_Vb区间范围内,则Vb的本次读偏移值是所需起始值,否则判断st_count_Vb是否小于st_ref_Vb区间范围,若是则递增Vb相应的读偏移值,若否则递减Vb相应的读偏移值;
若st_count_Vd在st_ref_Vd区间范围内,则Vd的本次读偏移值是所需起始值,否则判断st_count_Vd是否小于st_ref_Vd区间范围,若是则递增Vd相应的读偏移值,若否则递减Vd相应的读偏移值;
若st_count_Vf在st_ref_Vf区间范围内,则Vf的本次读偏移值是所需起始值,否则判断st_count_Vf是否小于st_ref_Vf区间范围,若是则递增Vf相应的读偏移值,若否则递减Vf相应的读偏移值;
直至Vb、Vd和Vf相应的读偏移值都找到起始值。
最优区间搜索同样要根据不同页类型做相应处理,这里每次调整读偏移值的大小可以具体NAND闪存的试验结果自行定义,目前对于BiCS4 TLC NAND闪存,我们每次调整大小为8。
LSB页类型最优区间搜索的具体流程如下:
前置数据信息预处理模块从起始值搜索暂存区取回所需TLC数据;
计算Va电压阈值相应的统计信息:TLC数据和SLC数据进行按位与运算,统计运算后所得数据中1的计数,记为opt_count_Va_01;
计算Ve电压阈值相应的统计信息:SLC数据按位取反后,再与TLC数据进行按位与运算,统计运算后所得数据中1的计数,记为count1_Ve,存储单元总数T减去count1_Ve,得到0的计数,记为opt_count_Ve_01;
生成Va电压阈值所需的比对参考区间:1/8T,记为opt_ref_Va;
生成Ve电压阈值所需的比对参考区间:5/8T,记为opt_ref_Ve;
若opt_count_Va_01大于opt_ref_Va,则递减Va相应的读偏移值,若否则递增Va相应的读偏移值;
若opt_count_Ve_01大于opt_ref_Ve,则递增Ve相应的读偏移值,若否则递减Ve相应的读偏移值。
TLC数据读处理模块发送TLC数据读命令,读回所需TLC数据;
计算Va电压阈值相应的统计信息:TLC数据和SLC数据进行按位与运算,统计运算后所得数据中1的计数,记为opt_count_Va_02;
计算Ve电压阈值相应的统计信息:SLC数据按位取反后,再与TLC数据进行按位与运算,统计运算后所得数据中1的计数,记为count1_Ve,存储单元总数T减去count1_Ve,得到0的计数,记为opt_count_Ve_02;
生成Va电压阈值所需的比对参考区间:1/8T,记为opt_ref_Va;
生成Ve电压阈值所需的比对参考区间:5/8T,记为opt_ref_Ve;
计算opt_count_Va_02与opt_count_Va_01之差,得到该区间存储单元计数,记为opt_cells_Va_01,并保存到最优区间搜索暂存区;
计算opt_count_Ve_02与opt_count_Ve_01之差,得到该区间存储单元计数,记为opt_cells_Ve_01,并保存到最优区间搜索暂存区;
若opt_count_Va_02更接近opt_ref_Va,则向本次读偏移值相同方向外侧递增(或递减)读偏移值,否则向本次读偏移值相反方向外侧递增(或递减)读偏移值;
若opt_count_Ve_02更接近opt_ref_Ve,则向本次读偏移值相同方向外侧递增(或递减)读偏移值,否则向本次读偏移值相反方向外侧递增(或递减)读偏移值。
TLC数据读处理模块发送TLC数据读命令,读回所需TLC数据;
计算Va电压阈值相应的统计信息:TLC数据和SLC数据进行按位与运算,统计运算后所得数据中1的计数,记为opt_count_Va_03;
计算Ve电压阈值相应的统计信息:SLC数据按位取反后,再与TLC数据进行按位与运算,统计运算后所得数据中1的计数,记为count1_Ve,存储单元总数T减去count1_Ve,得到0的计数,记为opt_count_Ve_03;
生成Va电压阈值所需的比对参考区间:1/8T,记为opt_ref_Va;
生成Ve电压阈值所需的比对参考区间:5/8T,记为opt_ref_Ve;
计算opt_count_Va_03与opt_count_Va_01(或opt_count_Va_02)之差,得到该区间存储单元计数,记为opt_cells_Va_02,并保存到最优区间搜索暂存区;
计算opt_count_Ve_03与opt_count_Ve_01(或opt_count_Ve_02)之差,得到该区间存储单元计数,记为opt_cells_Ve_02,并保存到最优区间搜索暂存区;
若opt_cells_Va_02大于opt_cells_Va_01,则向本次读偏移值相反方向外侧递增(或递减)读偏移值,否则向本次读偏移值相同方向外侧递增(或递减)读偏移值;
若opt_cells_Ve_02大于opt_cells_Ve_01,则向本次读偏移值相反方向外侧递增(或递减)读偏移值,否则向本次读偏移值相同方向外侧递增(或递减)读偏移值。
TLC数据读处理模块发送TLC数据读命令,读回所需TLC数据;
计算Va电压阈值相应的统计信息:TLC数据和SLC数据进行按位与运算,统计运算后所得数据中1的计数,记为opt_count_Va_04;
计算Ve电压阈值相应的统计信息:SLC数据按位取反后,再与TLC数据进行按位与运算,统计运算后所得数据中1的计数,记为count1_Ve,存储单元总数T减去count1_Ve,得到0的计数,记为opt_count_Ve_04;
计算opt_count_Va_04与相邻读偏移所得统计数据(opt_count_Va_03或opt_count_Va_02或opt_count_Va_01)之差,得到该区间存储单元计数,记为opt_cells_Va_03,并保存到最优区间搜索暂存区;
计算opt_count_Ve_04与相邻读偏移所得统计数据(opt_count_Ve_03或opt_count_Ve_02或opt_count_Ve_01)之差,得到该区间存储单元计数,记为opt_cells_Ve_03,并保存到最优区间搜索暂存区;
若opt_cells_Va_03大于相邻区间的存储单元计数(opt_cells_Va_02或opt_cells_Va_01),则与本区间相邻的区间即是Va的最优区间,保持Va相应的读偏移值不变,否则向本次读偏移值相同方向外侧递增(或递减)读偏移值;
若opt_cells_Ve_03大于相邻区间的存储单元计数(opt_cells_Ve_02或opt_cells_Ve_01),则与本区间相邻的区间即是Ve的最优区间,保持Ve相应的读偏移值不变,否则向本次读偏移值相同方向外侧递增(或递减)读偏移值;
直至找到Va和Ve的最优区间。
MSB页类型最优区间搜索的具体流程如下:
前置数据信息预处理模块从起始值搜索暂存区取回所需TLC数据;
计算Vc电压阈值相应的统计信息:TLC数据和SLC数据进行按位与运算,统计运算后所得数据中1的计数,记为opt_count_Vc_01;
计算Vg电压阈值相应的统计信息:SLC数据按位取反后,再与TLC数据进行按位与运算,统计运算后所得数据中1的计数,记为count1_Vg,存储单元总数T减去count1_Vg,得到0的计数,记为opt_count_Vg_01;
生成Vc电压阈值所需的比对参考区间:3/8T,记为opt_ref_Vc;
生成Vg电压阈值所需的比对参考区间:7/8T,记为opt_ref_Vg;
若opt_count_Vc_01大于opt_ref_Vc,则递减Vc相应的读偏移值,若否则递增Vc相应的读偏移值;
若opt_count_Vg_01大于opt_ref_Vg,则递增Vg相应的读偏移值,若否则递减Vg相应的读偏移值。
TLC数据读处理模块发送TLC数据读命令,读回所需TLC数据;
计算Vc电压阈值相应的统计信息:TLC数据和SLC数据进行按位与运算,统计运算后所得数据中1的计数,记为opt_count_Vc_02;
计算Vg电压阈值相应的统计信息:SLC数据按位取反后,再与TLC数据进行按位与运算,统计运算后所得数据中1的计数,记为count1_Vg,存储单元总数T减去count1_Vg,得到0的计数,记为opt_count_Vg_02;
生成Vc电压阈值所需的比对参考区间:3/8T,记为opt_ref_Vc;
生成Vg电压阈值所需的比对参考区间:7/8T,记为opt_ref_Vg;
计算opt_count_Vc_02与opt_count_Vc_01之差,得到该区间存储单元计数,记为opt_cells_Vc_01,并保存到最优区间搜索暂存区;
计算opt_count_Vg_02与opt_count_Vg_01之差,得到该区间存储单元计数,记为opt_cells_Vg_01,并保存到最优区间搜索暂存区;
若opt_count_Vc_02更接近opt_ref_Vc,则向本次读偏移值相同方向外侧递增(或递减)读偏移值,否则向本次读偏移值相反方向外侧递增(或递减)读偏移值;
若opt_count_Vg_02更接近opt_ref_Vg,则向本次读偏移值相同方向外侧递增(或递减)读偏移值,否则向本次读偏移值相反方向外侧递增(或递减)读偏移值。
TLC数据读处理模块发送TLC数据读命令,读回所需TLC数据;
计算Vc电压阈值相应的统计信息:TLC数据和SLC数据进行按位与运算,统计运算后所得数据中1的计数,记为opt_count_Vc_03;
计算Vg电压阈值相应的统计信息:SLC数据按位取反后,再与TLC数据进行按位与运算,统计运算后所得数据中1的计数,记为count1_Vg,存储单元总数T减去count1_Vg,得到0的计数,记为opt_count_Vg_03;
生成Vc电压阈值所需的比对参考区间:3/8T,记为opt_ref_Vc;
生成Vg电压阈值所需的比对参考区间:7/8T,记为opt_ref_Vg;
计算opt_count_Vc_03与opt_count_Vc_01(或opt_count_Vc_02)之差,得到该区间存储单元计数,记为opt_cells_Vc_02,并保存到最优区间搜索暂存区;
计算opt_count_Vg_03与opt_count_Vg_01(或opt_count_Vg_02)之差,得到该区间存储单元计数,记为opt_cells_Vg_02,并保存到最优区间搜索暂存区;
若opt_cells_Vc_02大于opt_cells_Vc_01,则向本次读偏移值相反方向外侧递增(或递减)读偏移值,否则向本次读偏移值相同方向外侧递增(或递减)读偏移值;
若opt_cells_Vg_02大于opt_cells_Vg_01,则向本次读偏移值相反方向外侧递增(或递减)读偏移值,否则向本次读偏移值相同方向外侧递增(或递减)读偏移值。
TLC数据读处理模块发送TLC数据读命令,读回所需TLC数据;
计算Vc电压阈值相应的统计信息:TLC数据和SLC数据进行按位与运算,统计运算后所得数据中1的计数,记为opt_count_Vc_04;
计算Vg电压阈值相应的统计信息:SLC数据按位取反后,再与TLC数据进行按位与运算,统计运算后所得数据中1的计数,记为count1_Vg,存储单元总数T减去count1_Vg,得到0的计数,记为opt_count_Vg_04;
计算opt_count_Vc_04与相邻读偏移所得统计数据(opt_count_Vc_03或opt_count_Vc_02或opt_count_Vc_01)之差,得到该区间存储单元计数,记为opt_cells_Vc_03,并保存到最优区间搜索暂存区;
计算opt_count_Vg_04与相邻读偏移所得统计数据(opt_count_Vg_03或opt_count_Vg_02或opt_count_Vg_01)之差,得到该区间存储单元计数,记为opt_cells_Vg_03,并保存到最优区间搜索暂存区;
若opt_cells_Vc_03大于相邻区间的存储单元计数(opt_cells_Vc_02或opt_cells_Vc_01),则与本区间相邻的区间即是Vc的最优区间,保持Vc相应的读偏移值不变,否则向本次读偏移值相同方向外侧递增(或递减)读偏移值;
若opt_cells_Vg_03大于相邻区间的存储单元计数(opt_cells_Vg_02或opt_cells_Vg_01),则与本区间相邻的区间即是Vg的最优区间,保持Vg相应的读偏移值不变,否则向本次读偏移值相同方向外侧递增(或递减)读偏移值;
直至找到Vc和Vg的最优区间。
CSB页类型最优区间搜索的具体流程如下:
前置数据信息预处理模块从起始值搜索暂存区取回所需TLC数据;
计算Vb电压阈值相应的统计信息:TLC数据和SLC数据进行按位与运算,统计运算后所得数据中1的计数,记为opt_count_Vb_01;
计算Vf电压阈值相应的统计信息:SLC数据二按位取反,结果数据记为slc2_not,TLC数据按位取反,结果数据记为data_not,slc2_not与data_not按位与所得结果数据记为data_Vf,统计data_Vf中1的计数,记为count0_Vf,存储单元总数T减去count0_Vf,得到0的计数,记为opt_count_Vf_01;
计算Vd电压阈值相应的统计信息:SLC数据一按位取反,结果数据记为slc1_not,TLC数据与slc1_not按位与,记为data_Vdf,data_Vdf与data_Vf按位或所得结果数据记为data_Vd,统计data_Vd中1的计数,记为count1_Vd,存储单元总数T减去count1_Vd,得到0的计数,记为opt_count_Vd_01;
生成Vb电压阈值所需的比对参考区间:2/8T,记为opt_ref_Vb;
生成Vd电压阈值所需的比对参考区间:4/8T,记为opt_ref_Vd;
生成Vf电压阈值所需的比对参考区间:6/8T,记为opt_ref_Vf;
若opt_count_Vb_01大于opt_ref_Vb,则递减Vb相应的读偏移值,若否则递增Vb相应的读偏移值;
若opt_count_Vd_01大于opt_ref_Vd,则递增Vd相应的读偏移值,若否则递减Vd相应的读偏移值;
若opt_count_Vf_01大于opt_ref_Vf,则递增Vf相应的读偏移值,若否则递减Vf相应的读偏移值。
TLC数据读处理模块发送TLC数据读命令,读回所需TLC数据;
计算Vb电压阈值相应的统计信息:TLC数据和SLC数据进行按位与运算,统计运算后所得数据中1的计数,记为opt_count_Vb_02;
计算Vf电压阈值相应的统计信息:SLC数据二按位取反,结果数据记为slc2_not,TLC数据按位取反,结果数据记为data_not,slc2_not与data_not按位与所得结果数据记为data_Vf,统计data_Vf中1的计数,记为count0_Vf,存储单元总数T减去count0_Vf,得到0的计数,记为opt_count_Vf_02;
计算Vd电压阈值相应的统计信息:SLC数据一按位取反,结果数据记为slc1_not,TLC数据与slc1_not按位与,记为data_Vdf,data_Vdf与data_Vf按位或所得结果数据记为data_Vd,统计data_Vd中1的计数,记为count1_Vd,存储单元总数T减去count1_Vd,得到0的计数,记为opt_count_Vd_02;
生成Vb电压阈值所需的比对参考区间:2/8T,记为opt_ref_Vb;
生成Vd电压阈值所需的比对参考区间:4/8T,记为opt_ref_Vd;
生成Vf电压阈值所需的比对参考区间:6/8T,记为opt_ref_Vf;
计算opt_count_Vb_02与opt_count_Vb_01之差,得到该区间存储单元计数,记为opt_cells_Vb_01,并保存到最优区间暂存区;
计算opt_count_Vd_02与opt_count_Vd_01之差,得到该区间存储单元计数,记为opt_cells_Vd_01,并保存到最优区间暂存区;
计算opt_count_Vf_02与opt_count_Vf_01之差,得到该区间存储单元计数,记为opt_cells_Vf_01,并保存到最优区间暂存区;
若opt_count_Vb_02更接近opt_ref_Vb,则向本次读偏移量相同方向外侧递增(或递减)读偏移值,若否则向本次读偏移量相反方向外侧递增(或递减)读偏移值;
若opt_count_Vd_02更接近opt_ref_Vd,则向本次读偏移量相同方向外侧递增(或递减)读偏移值,若否则向本次读偏移量相反方向外侧递增(或递减)读偏移值;
若opt_count_Vf_02更接近opt_ref_Vf,则向本次读偏移量相同方向外侧递增(或递减)读偏移值,若否则向本次读偏移量相反方向外侧递增(或递减)读偏移值。
TLC数据读处理模块发送TLC数据读命令,读回所需TLC数据;
计算Vb电压阈值相应的统计信息:TLC数据和SLC数据进行按位与运算,统计运算后所得数据中1的计数,记为opt_count_Vb_03;
计算Vf电压阈值相应的统计信息:SLC数据二按位取反,结果数据记为slc2_not,TLC数据按位取反,结果数据记为data_not,slc2_not与data_not按位与所得结果数据记为data_Vf,统计data_Vf中1的计数,记为count0_Vf,存储单元总数T减去count0_Vf,得到0的计数,记为opt_count_Vf_03;
计算Vd电压阈值相应的统计信息:SLC数据一按位取反,结果数据记为slc1_not,TLC数据与slc1_not按位与,记为data_Vdf,data_Vdf与data_Vf按位或所得结果数据记为data_Vd,统计data_Vd中1的计数,记为count1_Vd,存储单元总数T减去count1_Vd,得到0的计数,记为opt_count_Vd_03;
生成Vb电压阈值所需的比对参考区间:2/8T,记为opt_ref_Vb;
生成Vd电压阈值所需的比对参考区间:4/8T,记为opt_ref_Vd;
生成Vf电压阈值所需的比对参考区间:6/8T,记为opt_ref_Vf;
计算opt_count_Vb_03与opt_count_Vb_01(或opt_count_Vb_02)之差,得到该区间存储单元计数,记为opt_cells_Vb_02,并保存到最优区间暂存区;
计算opt_count_Vd_03与opt_count_Vd_01(或opt_count_Vd_02)之差,得到该区间存储单元计数,记为opt_cells_Vd_02,并保存到最优区间暂存区;
计算opt_count_Vf_03与opt_count_Vf_01(或opt_count_Vf_02)之差,得到该区间存储单元计数,记为opt_cells_Vf_02,并保存到最优区间暂存区;
若opt_cells_Vb_02大于opt_cells_Vb_01,则向本次读偏移量相反方向外侧递增(或递减)读偏移值,若否则向本次读偏移量相同方向外侧递增(或递减)读偏移值;
若opt_cells_Vd_02大于opt_cells_Vd_01,则向本次读偏移量相反方向外侧递增(或递减)读偏移值,若否则向本次读偏移量相同方向外侧递增(或递减)读偏移值;
若opt_cells_Vf_02大于opt_cells_Vf_01,则向本次读偏移量相反方向外侧递增(或递减)读偏移值,若否则向本次读偏移量相同方向外侧递增(或递减)读偏移值。
TLC数据读处理模块发送TLC数据读命令,读回所需TLC数据;
计算Vb电压阈值相应的统计信息:TLC数据和SLC数据进行按位与运算,统计运算后所得数据中1的计数,记为opt_count_Vb_04;
计算Vf电压阈值相应的统计信息:SLC数据二按位取反,结果数据记为slc2_not,TLC数据按位取反,结果数据记为data_not,slc2_not与data_not按位与所得结果数据记为data_Vf,统计data_Vf中1的计数,记为count0_Vf,存储单元总数T减去count0_Vf,得到0的计数,记为opt_count_Vf_04;
计算Vd电压阈值相应的统计信息:SLC数据一按位取反,结果数据记为slc1_not,TLC数据与slc1_not按位与,记为data_Vdf,data_Vdf与data_Vf按位或所得结果数据记为data_Vd,统计data_Vd中1的计数,记为count1_Vd,存储单元总数T减去count1_Vd,得到0的计数,记为opt_count_Vd_04;
计算opt_count_Vb_04与相邻读偏移所得统计数据(opt_count_Vb_03或opt_count_Vb_02或opt_count_Vb_01)之差,得到该区间存储单元计数,记为opt_cells_Vb_03,并保存到最优区间搜索暂存区;
计算opt_count_Vd_04与相邻读偏移所得统计数据(opt_count_Vd_03或opt_count_Vd_02或opt_count_Vd_01)之差,得到该区间存储单元计数,记为opt_cells_Vd_03,并保存到最优区间搜索暂存区;
计算opt_count_Vf_04与相邻读偏移所得统计数据(opt_count_Vf_03或opt_count_Vf_02或opt_count_Vf_01)之差,得到该区间存储单元计数,记为opt_cells_Vf_03,并保存到最优区间搜索暂存区;
若opt_cells_Vb_03大于相邻区间的存储单元计数(opt_cells_Vb_02或opt_cells_Vb_01),则与本区间相邻的区间即是Vb的最优区间,保持Vb相应的读偏移值不变,否则向本次读偏移值相同方向外侧递增(或递减)读偏移值;
若opt_cells_Vd_03大于相邻区间的存储单元计数(opt_cells_Vd_02或opt_cells_Vd_01),则与本区间相邻的区间即是Vd的最优区间,保持Vd相应的读偏移值不变,否则向本次读偏移值相同方向外侧递增(或递减)读偏移值;
若opt_cells_Vf_03大于相邻区间的存储单元计数(opt_cells_Vf_02或opt_cells_Vf_01),则与本区间相邻的区间即是Vf的最优区间,保持Vf相应的读偏移值不变,否则向本次读偏移值相同方向外侧递增(或递减)读偏移值;
直至找到Vb、Vd和Vf的最优区间。
最优读偏移搜索模块找到最终的最优读偏移值.为了找到更精确的最优读偏移值,不同的NAND需要根据试验结果调整实际的本模块中控制参数。本实施例中根据试验结果,其相关控制参数采用的实际值如下:
干扰程度控制值有:弱干扰参考值20;中干扰参考值为80;
弱干扰最优搜索处理中的各等级参考值有:等级1参考值为20,等级2参考值为80,等级3参考值为120;
中干扰最优搜索处理中的各等级参考值有:等级1参考值为40,等级2参考值为120,等级3参考值为240;
强干扰最优搜索处理中的各等级参考值有:等级1参考值为80,等级2参考值为200,等级3参考值为320。
综上所述,对于拥有多个读电压阈值的页类型,本发明通过SLC数据搜索模块找到合适的SLC数据;通过该SLC数据与TLC数据进行合适的运算,可以在线同时并行查找所需多个电压阈值相应的最优读偏移值;通过起始值搜索模块实现在TLC NAND闪存处于各种不同干扰组合下找到各电压阈值所对应的最优读偏移起始值,避免使用默认读偏移作为读偏移起始值而导致在NAND闪存恶劣条件找到错误的最优读偏移;本发明中的最优读偏移搜索模块根据当前干扰程度以及与最优区间相邻的两个区间之间存储单元计数之差的等级进行微调,可以找到更精确的最优读偏移。本发明采用一次读取并行查找多个电压阈值所对应的最优读偏移,试验证明最多需要10次读操作即可找到最优读偏移,提高了产品的读性能,降低了产品的动态功耗;应用本发明找到的最优读偏移值进行读数可能获得正确解码,则该数据块暂时不需标志为坏块,延长了产品的使用期限。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包括于本申请的至少一个实施例或示例中。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或隐含地包括至少一个该特征。在本申请的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。
流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分。并且本申请的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到其各种变化或替换,这些都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。