一种数据读取的方法及闪存控制器与流程

文档序号:16989785发布日期:2019-03-02 00:52阅读:309来源:国知局
一种数据读取的方法及闪存控制器与流程

本申请涉及存储技术领域,尤其涉及一种数据读取的方法及闪存控制器。



背景技术:

闪存存储系统由于具有良好的随机访问性能、低密度、低功耗等优点,成为重要的存储介质,广泛应用于嵌入式系统、便携式笔记本、数据中心等需要存储的领域。目前,对闪存存储容量和存储密度的需求促使3d闪存的应用和发展,3d闪存通过存储元多层堆叠的方式实现存储容量和密度的增长,如图1所示。由于3d闪存的多层结构,其单个闪存块由更多的闪存页所组成,比2d闪存多几倍甚至上十倍,从而导致更加严重的读干扰问题。

闪存通过在存储元中存储一定量的电荷来表示数据,在每个存储元存储n比特数据的闪存中,存储元共有2n个不同的电压状态。图2表示的是每个存储元存储2比特信息的多层单元(multi-levelcell,mlc)的电压分布,由4个电压状态(11,10,01,00)来表示2比特数据。当读某一条字线(wordline,wl)上的数据时,如图1中的wl1,则在该wl上加读取电压vread,这个电压可以为图2中的vref1、vref2和vref3中的一个。如果存储元的阈值电压vth小于读取电压vread,则该存储元读出来的结果是打开状态,反之,则是关闭状态。由于不同wl的存储元通过比特线(bitline,bl)相连接,当读某一条wl上的数据时,其他字线上的存储元需要处于打开状态,来保证带读取的存储元上的数据可以传输到感知电路。因此,在其他wl上,即在图1中的wl0,以及wl2到wl63,施加一个导通电压vpass,该电压比所有存储元的阈值电压都大。在这个过程中,导通电压会额外充入一些电荷到这个闪存块中的非读存储元中,导致他们的阈值电压上升。尽管单次读操作带来的电压改变比较小,对电压状态的影响小,但持续的读操作会导致电压发生偏移,电压状态改变,最终导致闪存读干扰错误的出现。

根据现有工作对读干扰的研究,闪存读干扰可以用额外充入到闪存存储元的电子数目ne来表示,则存在以下关系:

ne=jfn*tread*nread

其中,tread和nread分别是施加导通电压vpass的时间和总次数,也就是在一个闪存块中对某其他wl的读时间和读次数,导致对某一条wl的影响。jfn是通过福勒诺德海姆(fowler-nordheim,fn)隧道的电流密度,和导通电压vpass的大小成指数关系。

根据以上关系可以看到,读干扰和闪存块的读次数成正比。通过对真实负载程序轨迹的闪存块读次数进行分析,包括读次数的分布和最大读次数,得到如图3的结果。从图3中可知,闪存块读次数随着闪存块中wl数目的增加而增加,最大读次数呈现指数增长。因此,由于单个闪存块拥有更多的wl,3d闪存中的读干扰问题比2d闪存中更加严重,导致3d闪存的可靠性严重下降。

为了解决3d闪存的可靠性问题,当前普遍采用的解决方案是使用低密度校验码(low-densityparity-check,ldpc)纠错机制,其纠错能力强,能够实现高误码率的纠错。ldpc解码通过置信传播算法实现,分为硬判决解码和软判决解码。以2比特每存储元的多级闪存为例,如图4中所示,硬判决解码在闪存存储元相邻状态之间只有一个参考电压,相邻两个状态通过与参考电压比较一次进行区分。软判决如图5所示,在相邻两个电压状态之间有多个参考电压,相邻两个状态之间的区域被划分成更细粒度的子区域,读取时两个状态之间需要与多个参考电压比较。由于ldpc的特性,相邻两个状态之间的参考电压越多,解码能力越强,解码能支持的错误率越高。硬判决解码效率高,所需读取和解码时间短,但只能对错误率低的数据解码。软判决能对错误率更高的数据实现正确的解码,但需要更长的读取和解码时延。使用ldpc作为校验码时,读请求时间和错误率存在关联。对高错误率的数据读请求所需时间更长,这里的读请求时间包含两部分:一部分是区分相邻状态的多次参考电压比较时间,如图5中需要与9个参考电压比较,相对于图4中的3个参考电压;另一部分是增多的区域需要更多的比特信息区分表示,如图5需要4bit来表示信息,相对于图4中的2bit,因而其从闪存芯片传输到控制器的时间更长。

ldpc虽然能解决闪存日益变差的可靠性问题,但是闪存性能也因此受到影响。图6是读时延和待读数据错误率之间的关系。读时延随着错误率上升而上升,当错误率高时,性能严重受损。如何有效利用闪存的读干扰以提高闪存读性能是亟待解决的问题。



技术实现要素:

本申请提供一种数据读取的方法及闪存控制器,以利用闪存的读干扰以改善闪存读性能。

第一方面,提供一种数据读取的方法,包括:闪存控制器获取数据读取请求,所述数据读取请求包括待读取数据的地址;所述闪存控制器根据所述待读取数据的地址,确定所述待读取数据所在的闪存块。所述闪存控制器在所述待读取数据所在的闪存块所处的读取阶段为第一阶段时,根据所述闪存块当前导通电压的降低量,确定出所述闪存块的非读字线上降低后的导通电压,并设置待读字线的读取电压。其中,所述第一阶段为当前读操作所使用的参考电压小于等于ldpc当前支持的参考电压、且所述闪存块当前导通电压的降低量大于第一阈值的阶段。所述闪存控制器根据所述闪存块上非读字线上的降低后的导通电压和所述待读字线的读取电压,读取数据。

闪存控制器通过确定闪存块位于第一阶段时,将非读字线上的导通电压降低,可以降低数据的读干扰,从而改善闪存读性能,提高数据读取效率。

一种可能的设计中,在所述闪存控制器读取数据之后,还包括:所述闪存块控制器在确定所述当前读操作所使用的参考电压大于ldpc当前支持的参考电压、且所述闪存块当前导通电压的降低量大于第一阈值时,将所述闪存块当前导通电压的降低量减1。或所述闪存块控制器在确定所述当前读操作所使用的参考电压大于ldpc当前支持的参考电压、且所述闪存块当前导通电压的降低量小于等于第一阈值时,将所述ldpc当前支持的参考电压的值加1,并将所述闪存块当前导通电压的降低量设置为第二阈值,所述第二阈值大于所述第一阈值。

闪存控制器在第一阶段读取完数据后,需要确定此时闪存块是否还可以位于第一阶段,以便及时更新闪存块当前导通电压的降低量,使得下次读取时可以准确确定出闪存块所在的读取阶段,从而进一步提高数据读取效率。

一种可能的设计中,还包括:所述闪存控制器在确定所述待读取数据所在的闪存块所处的读取阶段为第二阶段时,从所述闪存块的所有非读字线中确定出热非读字线和冷非读字线;所述第二阶段为当前读操作所使用的参考电压大于ldpc当前支持的参考电压、且所述闪存块当前导通电压的降低量小于等于第一阈值的阶段。所述闪存控制器根据所述闪存块当前导通电压的降低量,确定出所述闪存块的热非读字线上降低后的导通电压,将初始导通电压作为冷非读字线上的导通电压,并设置待读字线的读取电压。所述闪存控制器根据所述闪存块的热非读字线上降低后的导通电压、所述冷非读字线上的导通电压和所述待读字线的读取电压,读取数据。

闪存控制器在确定闪存块的读取阶段位于第二阶段时,降低热非读字线上的导通电压,有益于改善热读字线的读干扰,提高热数据的读取速度,改善闪存块的整体读性能。

一种可能的设计中,所述闪存控制器从所述闪存块的所有非读字线中确定出热非读字线和冷非读字线,包括:所述闪存控制器将所述闪存块中读取次数大于第三阈值的非读字线确定为热非读字线,将所述闪存块中读取次数小于等于第三阈值的非读字线确定为冷非读字线。

闪存控制器在确定出热非读字线和冷非读字线之后,可以只降低热非读字线上的导通电压,有益于改善热读字线的读干扰,提高热数据的读取速度。

一种可能的设计中,在所述闪存控制器根据所述闪存块的热非读字线上降低后的导通电压、所述冷非读字线上的导通电压和所述待读字线的读取电压,读取数据之后,还包括:所述闪存控制器在确定所述当前读操作所使用的参考电压大于ldpc当前支持的参考电压、且所述闪存块当前导通电压的降低量大于第一阈值时,将所述闪存块当前导通电压的降低量减1;或,所述闪存块控制器在确定所述当前读操作所使用的参考电压大于ldpc当前支持的参考电压、且所述闪存块当前导通电压的降低量小于等于第一阈值时,确定所述ldpc当前支持的参考电压是否小于第四阈值;若是,则将所述ldpc当前支持的参考电压的值加1,并将所述闪存块当前导通电压的降低量设置为第二阈值;若否,则刷新所述闪存块;其中所述第二阈值大于所述第一阈值。

闪存控制器在第二阶段读取数据之后,还需要确定该闪存块当前是否还位于第二阶段,以便及时调整闪存块当前导通电压的降低量,使得下次读取时可以准确确定出闪存块所在的读取阶段,从而进一步提高数据读取效率。

第二方面,提供一种闪存控制器,包括:

输入输出(input/output,i/o)接口,用于获取数据读取请求,所述数据读取请求包括待读取数据的地址;

处理器,用于根据所述i/o接口获取的待读取数据的地址,确定所述待读取数据所在的闪存块;在确定所述待读取数据所在的闪存块所处的读取阶段为第一阶段时,根据所述闪存块当前导通电压的降低量,确定出所述闪存块的非读字线上降低后的导通电压,并设置待读字线的读取电压;其中,所述第一阶段为当前读操作所使用的参考电压小于等于低密度校验码ldpc当前支持的参考电压、且所述闪存块当前导通电压的降低量大于第一阈值的阶段;以及根据所述闪存块上非读字线上的降低后的导通电压和所述待读字线的读取电压,读取数据;

所述i/o接口,还用于输出所述处理器读取的数据。

一种可能的设计中,所述处理器还可以在读取数据之后,在确定所述当前读操作所使用的参考电压大于ldpc当前支持的参考电压、且所述闪存块当前导通电压的降低量大于第一阈值时,将所述闪存块当前导通电压的降低量减1;或在确定所述当前读操作所使用的参考电压大于ldpc当前支持的参考电压、且所述闪存块当前导通电压的降低量小于等于第一阈值时,将所述ldpc当前支持的参考电压的值加1,并将所述闪存块当前导通电压的降低量设置为第二阈值,所述第二阈值大于所述第一阈值。

一种可能的设计中,所述处理器还可以在确定所述待读取数据所在的闪存块所处的读取阶段为第二阶段时,从所述闪存块的所有非读字线中确定出热非读字线和冷非读字线;所述第二阶段为当前读操作所使用的参考电压大于ldpc当前支持的参考电压、且所述闪存块当前导通电压的降低量小于等于第一阈值的阶段;根据所述闪存块当前导通电压的降低量,确定出所述闪存块的热非读字线上降低后的导通电压,将初始导通电压作为冷非读字线上的导通电压,并设置待读字线的读取电压;根据所述闪存块的热非读字线上降低后的导通电压、所述冷非读字线上的导通电压和所述待读字线的读取电压,读取数据。

一种可能的设计中,所述处理器可以将所述闪存块中读取次数大于第三阈值的非读字线确定为热非读字线,将所述闪存块中读取次数小于等于第三阈值的非读字线确定为冷非读字线。

一种可能的设计中,所述处理器在根据所述闪存块的热非读字线上降低后的导通电压、所述冷非读字线上的导通电压和所述待读字线的读取电压,读取数据之后,还可以用于在确定所述当前读操作所使用的参考电压大于ldpc当前支持的参考电压、且所述闪存块当前导通电压的降低量大于第一阈值时,将所述闪存块当前导通电压的降低量减1;或在确定所述当前读操作所使用的参考电压大于ldpc当前支持的参考电压、且所述闪存块当前导通电压的降低量小于等于第一阈值时,确定所述ldpc当前支持的参考电压是否小于第四阈值;若是,则将所述ldpc当前支持的参考电压的值加1,并将所述闪存块当前导通电压的降低量设置为第二阈值;若否,则刷新所述闪存块;其中所述第二阈值大于所述第一阈值。

第三方面,提供一种闪存设备,该闪存设备具有实现上述方法实施例中闪存控制器的功能,该功能可以通过硬件实现,也可以通过硬件执行相应的软件实现,该硬件或软件包括一个或多个与上述功能相对应的模块。

在一种可能的设计中,该闪存设备包括:处理器、存储器、总线和i/o接口;该存储器存储有计算机执行指令,该处理器与该存储器通过该总线连接,当该设备运行时,该处理器执行该存储器存储的该计算机执行指令,通过i/o接口输入输出数据来使该设备执行如上述第一方面任意一项的数据读取的方法。

在一种可能的设计中,该闪存设备还可以是芯片,该芯片包括处理单元,可选地,还包括存储单元,该芯片可用于执行如上述第一方面任意一项的数据读取的方法。

第四方面,提供一种计算机可读存储介质,包括计算机可读指令,当计算机读取并执行所述计算机可读指令时,使得计算机执行如第一方面任意一项所述的方法。

第五方面,提供一种计算机程序产品,包括计算机可读指令,当计算机读取并执行所述计算机可读指令,使得计算机执行如第一方面任意一项所述的方法。

附图说明

图1为本申请提供的一种闪存块的结构示意图;

图2为本申请提供的一种电压状态的示意图;

图3为本申请提供的一种块中字线的数目与块读取计数的关系示意图;

图4为本申请提供的一种电压状态的示意图;

图5为本申请提供的一种电压状态的示意图;

图6为本申请提供的一种读取数据的错误率的示意图;

图7为本申请提供的一种闪存设备的结构示意图;

图8为本申请提供的一种拷贝数据的示意图;

图9为本申请提供的一种数据读取的方法的流程示意图;

图10为本申请提供的一种闪存设备的结构示意图;

图11为本申请提供的一种阶段划分的示意图;

图12为本申请提供的一种闪存块记录的信息结构示意图;

图13为本申请提供的一种数据读取的流程示意图;

图14为本申请提供的一种数据读取的流程示意图;

图15为本申请提供的一种读干扰错误和额外读干扰错误的分布示意图;

图16为本申请提供的一种数据读取的流程示意图;

图17为本申请提供的一种闪存控制器的结构示意图;

图18为本申请提供的一种闪存设备的结构示意图;

具体实施方式

图7示出了本申请适应的一种闪存设备,例如可以是固态硬盘。如图7所示,闪存设备可以包括主机接口701、闪存控制器702、闪存接口703以及闪存阵列704。

闪存设备的主机接口701用于连接主机,与主机进行通信。例如,用于接收主机下发的输入输出(input/output,i/o)请求,或将从闪存阵列704中读出的数据返回给主机。

在主机接口701下面是闪存控制器702,主要包括处理器7021和缓存器7022,他们通过通信总线完成相互间的通信。缓存器7022是位于处理器7021与内存之间的临时存储器,它的容量比内存小但是交换速度却比内存要快。缓存器7022用于缓存处理器待写入闪存阵列704的数据或者用于缓存内存传输的从闪存阵列704读取的数据。处理器7021可以是一个中央处理器(centralprocessingunit,cpu),或者是特定集成电路(applicationspecificintegratedcircuit,asic),或者是被配置成实施本申请实施例的一个或多个集成电路。在处理器7021中安装有软件程序,不同的软件程序可以视作一个处理模块,具有不同的功能。在本申请中,处理器包含字线(wordline,wl)冷热识别功能以及导通电压调整功能。除此之外,处理器7021可以实现对闪存阵列704的访问请求,并对闪存阵列704中的数据进行管理。

闪存接口703,与闪存阵列704连接,用于与闪存阵列704进行通信,闪存控制器702与闪存阵列704之间的数据传输。例如,可以用于管理对处理器7021下发的对闪存阵列704的访问命令以及进行数据传输。

闪存阵列704,用于存储数据。在本申请中,闪存阵列704为3d闪存,存储单元多阶存储单元(multi-levelcell,mlc)。

目前的改善闪存读性能的方案有两种,其中之一是减少单个闪存块的读次数。闪存的读干扰与闪存块的读次数成正比,在闪存中,由于数据存在冷热之分,部分数据频繁被访问,给闪存块带来大量的读操作。反之,大部分数据很少被读或者不读,导致闪存块读次数比较少。通过将频繁读取的数据均匀分布到不同闪存块中,避免某些闪存块频繁读取,导致读干扰的累加。具体实现方法如图8所示,记录闪存块中数据的读次数,当该次数达到一定阈值,则认为该数据是频繁访问数据。对其执行拷贝操作,将多个频繁读数据分布到不同的闪存块中。但是将频繁读取的数据均匀分布在不同的闪存块中,需要额外的数据拷贝操作。尤其是对于一些读及其频繁但几乎不更新的数据,会带来大量的额外操作。另一方面,在处理同样数目的请求时,单个3d闪存块上发生读操作次数更多,因此拷贝的阈值更小,带来更多的拷贝操作。由于3d闪存能支持的p/e次数少,一千至几千次,频繁的拷贝操作会极大影响3d闪存的寿命。

第二种方案是降低导通电压。闪存读干扰与导通电压大小指数相关,降低非读wl上的导通电压,就可以极大减少读干扰的影响。然而,如图2所示,当在非读wl上施加降低后的导通电压vpass(表示为vpassl),部分阈值电压vth大于vpassl的存储元会使得其所在的bl不导通,因此给待读的存储元带来额外读错误。为了解决这部分额外读错误,有两种技术来实现。第一种通过利用当数据保存时间较短时,保存时间错误较少,错误率较低,ecc存在冗余纠错能力,利用这部分冗余的纠错内网里来保证额外读错误的纠错。第二种技术为了降低导通电压vpass,在数据写入时采取慢速的写操作来使得电压分布更密集,存储元最大阈值电压vth降低,保证所有存储元的阈值电压都比降低后的导通电压要小。但是通过对额外读错误的分析发现,降低导通电压导致额外读错误随着闪存块中wl数目指数增长,由于3d闪存块中包含更多的wl,由此带来的额外读错误极大,甚至超过错误检查和纠正(errorcorrectingcode,ecc)的纠错能力。因此,该方法不适用于解决3d闪存读干扰问题。

如前所述,读干扰随着vpass电压大小指数增长,降低vpass可以极大降低读干扰。其中的问题在于降低非读wl上的vpass会给待读wl带来额外读错误。

分别使用vpassn和vpassl来表示原始(normal)和降低后(lowered)的导通电压vpass。当某个非读存储元的vth高于vpassl,处于同一条bl上的待读存储元将会被读为关闭状态,不管其原始状态是什么。假设f(x)是闪存存储元的阈值电压分布函数,p是由于非读存储元的干扰而将待读存储元读为关闭状态的概率,在单个块中有m条wl的闪存中,p可以计算为:

当待读存储元本身状态应该为打开状态而被读为关闭状态,则会大致额外的读错误。假设存在mlc闪存中的数据在四个状态中均匀分布,即“11”“10”“00”“01”四个状态均匀分布,则由于降低导通电压导致的额外读错误e大小为:

因此,额外读错误e和闪存块中的wl数目m成指数相关。通过实验来进一步验证这一关系。如图9所示,当m较大时,由于降低vpass带来的额外读错误巨大,甚至超过ecc的纠错能力(目前ldpc最大可纠错值为0.013)。为了解决这个问题,本申请提出选择性的降低部分wl的vpass,而保持其他wl上的vpass大小不变,由此来减少额外读错误的大小。

为了提高闪存读访问性能,本申请改进了闪存控制器中执行读操作时的电压控制,以达到性能优化的目的。在控制器中,读引擎控制读操作的执行。将预设读取电压和导通电压传输到闪存芯片对应的闪存块中,分别施加在待读wl和非读wl上。本申请在控制器中增加两个模块,即读热度识别模块和导通电压调整模块,辅助读引擎的执行,改变导通电压大小的设置,降低闪存块中部分非读wl上的导通电压。以此来保证在额外读错误不影响性能的前提下,减少热wl上的读干扰错误,提高闪存访问性能。

基于上述描述,图9示例性的示出了本申请提供的一种数据读取的方法的流程,该流程可以由闪存控制器执行,该流程具体包括:

步骤901,闪存控制器获取数据读取请求。数据读取请求中包括有待读取数据的地址,该地址用于查询待读取数据所在的闪存块,以及在闪存块中存储的位置,也就是待读取数据所在的待读字线的位置。

步骤902,所述闪存控制器根据所述待读取数据的地址,确定所述待读取数据所在的闪存块。闪存控制在得到待读取数据的地址之后,可以查询到待读取数据所在的闪存块,以及待读取数据在闪存块中存储的位置,也就是待读取数据所在的待读字线的位置。

步骤903,所述闪存控制器在确定所述待读取数据所在的闪存块所处的读取阶段为第一阶段时,根据所述闪存块当前导通电压的降低量,确定出所述闪存块的非读字线上降低后的导通电压,并设置待读字线的读取电压。

闪存控制器在确定待读取数据所在的闪存块所处的读取阶段为第二阶段时,从闪存块的所有非读字线中确定出热非读字线和冷非读字线。

本申请中的第一阶段是指当前读操作所使用的参考电压小于等于ldpc当前支持的参考电压、且闪存块当前导通电压的降低量大于第一阈值的阶段,由于在该阶段中,数据处于刚写入,还没有读干扰或者读干扰很小,数据错误率低,可以接受降低全部非读wl的导通电压带来的额外读错误,使用降低全部非读wl的导通电压可以最大化降低数据的读干扰。该第一阈值可以依据经验设置,比如可以设置为0。

第二阶段是指当前读操作所使用的参考电压大于ldpc当前支持的参考电压、且闪存块当前导通电压的降低量小于等于第一阈值的阶段。随着读操作累加以及数据存储时间的增加,数据错误率上升,不能接受降低全部非读wl的导通电压带来的额外读错粗,只能降低热非读wl的导通电压,这样有益于改善热非读wl的读干扰,提升热数据的读取速度,从而改善闪存的整体读性能。

在本申请中,可以使用flag来表示闪存块所处的读取阶段,用以区分第一阶段和第二阶段。flag为0表示当前块第一阶段,此时所有非读wl上的导通电压全部降低。flag为1表示当前块处于第二阶段,只降热非读wl的导通电压。也可以是flag为1表示当前块第一阶段,flag为0表示当前块第二阶段,本申请仅是实例作用,对此不作限制。

本申请可以使用lower来代表当前闪存块导通电压的降低量,可以设置其取值范围为0~5,其中,0表示vpass不降,1~5分别对应vpass降低1%~5%。本申请中选择的数值仅是实例作用,其他表示方法并不限制。

本申请可以使用ll(least_level)表示在没有额外错误的情况下相邻两个电压状态最少需要的参考电压的数量,可以设置其取值范围为1~7,即当前ldpc支持的参考电压的数量。可以使用sensinglevel表示参考电压。当ll为1时,表示最快的读操作,数据错误率少,在相邻电压状态之间只有一个参考电压。随着数据错误率越多,相邻电压状态之间需要更多的参考电压。每个参考电压纠正一个范围内的错误。本申请中选择的数值仅是实例作用,其他表示方法并不限制。

上述闪存控制器从闪存块的所有非读字线中确定出热非读字线和冷非读字线时,具体可以为:闪存控制器将所述闪存块中读取次数大于第三阈值的非读字线确定为热非读字线,将所述闪存块中读取次数小于等于第三阈值的非读字线确定为冷非读字线。该第三阈值可以依据经验设置,可以设为任意合理数值。当某条wl上的数据的读取次数大于该第三阈值时,表明该wl上的数据经常被读取,其导通电压需要被调整,否则有可能低于闪存块上存储元的阈值电压。

在确定出热非读字线和冷非读字线之后,闪存控制器可以根据闪存块当前导通电压的降低量,确定出闪存块的热非读字线上降低后的导通电压,将初始导通电压设置为冷非读字线上的导通电压,设置待读字线的读取电压。根据闪存块当前导通电压的降低量,来设置热非读字线上的导通电压,并将热非读字线上的导通电压设置为降低后的导通电压,也就是说根据当前导通电压的降低量来降低热非读字线上的导通电压,得到降低后的导通电压。由于冷非读字线时不经常读取的字线,其上导通电压可以使用初始导通电压,并不会低于闪存块上存储元的阈值电压。设置待读字线上的读取电压,可以使得闪存控制器通过该读取电压读取待读字线上存储的数据。

闪存控制器在得到上述闪存块的热非读字线上降低后的导通电压、冷非读字线上的导通电压和待读字线的读取电压之后,就可以读取待读字线上存储的数据。

在根据闪存块的热非读字线上降低后的导通电压、冷非读字线上的导通电压和待读字线的读取电压,读取数据之后,还需要确定是否调整闪存块的当前导通电压的降低量、ldpc当前支持的参考电压,以及读取阶段。具体的,可以为:

闪存控制器在确定当前读操作所使用的参考电压大于ldpc当前支持的参考电压、且闪存块当前导通电压的降低量大于第一阈值时,将闪存块当前导通电压的降低量减1。此时表明闪存块的读取阶段还可以不需要调制,因此,只需要调整当前导通电压的降低量,无需调整其他的参数。

闪存块控制器在确定当前读操作所使用的参考电压大于ldpc当前支持的参考电压、且闪存块当前导通电压的降低量小于等于第一阈值时,需要确定ldpc当前支持的参考电压是否小于第四阈值。该第四阈值可以依据经验设置,比如设置为7,也就是说,ldpc当前支持的参考电压的个数为7。若小于第四阈值将该ldpc当前支持的参考电压的值加1,并将闪存块当前导通电压的降低量设置为第二阈值,该第二阈值可以依据经验设置,比如可以设置为5,表示,闪存块当前导通电压可以降低5%,该第二阈值大于上述第一阈值。否则,刷新该闪存块,并将读取阶段设置为第一阶段,也就是将flag设置为0。可选的,上述第四阈值可以设置为5,ldpc当前支持的参考电压大于5时,可以执行刷新闪存块操作。闪存块刷新是目前已有技术,主要是在数据保存一段时间后,错误变多,为了保证数据的可靠性,将闪存块中的有效数据拷贝到其他地方的方法。当刷新闪存块时,首先依次读出块中的有效页,进行ecc纠错后恢复到没有错误的数据情况下,再将正确的数据写入到空闲的闪存块中。

步骤904,所述闪存控制器根据所述闪存块上非读字线上的降低后的导通电压和所述待读字线的读取电压,读取数据。

可选的,在闪存控制器根据闪存块上非读字线上的降低后的导通电压和待读字线的读取电压,读取数据之后,闪存块控制器在确定当前读操作所使用的参考电压大于ldpc当前支持的参考电压、且闪存块当前导通电压的降低量大于第一阈值时,将闪存块当前导通电压的降低量减1。

闪存块控制器在确定当前读操作所使用的参考电压大于ldpc当前支持的参考电压、且闪存块当前导通电压的降低量小于等于第一阈值时,将ldpc当前支持的参考电压的值加1,并将闪存块当前导通电压的降低量设置为第二阈值,以及将读取阶段设置为第二阶段,也就是将flag设置为1。

为了更好的解释本申请的技术内容,下面将在具体实施场景下描述,数据读取的流程。

如图10所示,本申请在图1闪存设备的闪存控制器702的处理器7021中增加3个新的模块:读热度识别模块70211,用于识别闪存数据的冷热;导通电压调整模块70212,根据数据热度,调整数据所在wl的导通电压;读引擎模块70213,实施读操作执行。

在具体实施中,对一个读请求访问进行处理时,首先使用读热度识别模块70211判断请求访问的数据所在的闪存块中其他非读wl的读热度,根据热度,使用导通电压调整模块70212对每条非读wl上的vpass电压进行调整,最后使用读引擎模块70213为每条非读wl设置对应的vpass电压,执行闪存读操作。

在本申请中,在基于数据冷热调整导通电压时,首先需要准确的读热度识别。在读热度识别模块70211中,采用记录历史访问次数的方法识别。在闪存转换层(flashtranslationlayer,ftl)中扩展区域,用于记录数据的读次数。设置阈值t,当某一条wl的读次数大于阈值,则该wl中的数据为热数据,反之为冷数据。通过现有工作和实验证明,每条wl数据只需要2比特就可以保证识别的准确率。

在获得读热度识别模块70211识别到的数据冷热之后,需要通过导通电压调整模块70212对每条非读wl的导通电压vpass进行调整,如图11所示,共分为3个阶段。阶段1,闪存块中所有非读wl全降,这是由于数据刚写入,没有读干扰或者读干扰很小,数据错误率低,可以接受全部降低带来的额外读错误,使用全部降低可以最大化降低数据的读干扰。阶段2,只降低块中的热非读wl。随着读操作累加以及保存时间的增加,数据错误率上升,不能接受全降带来的额外读错误,只降低热非读wl的vpass,有益于改善热非读wl的读干扰,提升热数据的读取速度而改善闪存的整体读性能。阶段3,刷新闪存块,当数据的错误率上升到接近ecc纠错能力,需要对数据进行刷新操作,避免数据的丢失。

为了实现上述3个阶段的导通电压调整,在导通电压调整模块70212中为每个块记录一下三个变量:flag,lower和ll,如图12,三个变量共需要8比特来表示。其中,flag占1比特,lower需要3比特,ll需要3比特。为了便于对齐,可以使用8比特表示。

由于ldpc读时延是错误的分段函数,如图6所示。由于数据读取时的错误率包含数据本身的读干扰和保存时间错误等,加上降低非读wl上导通电压导致的额外读错误,在前两个阶段,尽量使得降低导通电压导致的额外错误在其所在分段的错误范围内。即降低导通电压在改善非读wl上读干扰的同时,不会影响当前读wl的读性能。3个阶段的具体执行流程描述如下。

阶段1的执行流程如图13所示,在闪存块完成数据的写入,块上还没有发生读操作或者极少的读操作,且数据的保存时间较短。这时,数据的读干扰错误和保存时间错误都较小,ecc可以接受较大的额外读错误。初始设置lower为5,即最大可降低值5%,ll为1。开始执行读操作。如果读操作所需要的相邻两个电压状态之间的参考电压(sensinglevel)的数量大于1,表示额外读错误过高,将lower减1;反之,如果读操作所需要的sensinglevel的数量等于1,表示额外读错误加上数据本身的错误较小,可以保持当前设置。在下一个读操作到来时,重复上述比较过程,确定是否需要将lower的值减1。由于数据错误会随着读操作增加和保存时间的增长而增高,可以接受的导通电压值会逐步降低,直到0,即所有非读wl都不降。这时,进入阶段2。

需要注意的是,当单个闪存块中的wl数目较大时,比如通过实验验证的2048条wl,将不能执行阶段1。根据前面的额外读错误模型,额外读错误与wl数目成指数相关,即使只降1%,也会导致其额外读错误超过ecc纠错范围。因此,闪存块将直接进入阶段2。

阶段2的执行流程如图14所示,随着数据读干扰增加,只降低热wl上的导通电压。初始设置lower为5,即最大可降低值5%,ll为2。开始执行读操作。循环执行以下步骤:如果读操作的sensinglevel的数量大于当前记录ll的数量,此时,分两种情况,第一,如果lower大于0,则表示额外读错误过高,则将lower执行减1操作;第二,如果lower等于0,即没有额外读错误,读操作的sensinglevel数量仍然高于记录的ll的数量,表示当前读干扰错误的累加使得数据在没有额外读错误的情况下需要更高级别的读操作,因此,将ll执行加1操作,同时设置lower为5,使导通电压从最大可降值开始执行。该循环执行到当ll为7,即ldpc最大可支持的sensinglevel时,退出循环。这是为了避免数据丢失,当需要7个level才能保证数据本身的错误率的正确纠错时,数据已经临近ecc纠错能力上限,因此,进入阶段3。

在阶段3,对闪存块数据执行刷新操作。刷新后的数据没有读干扰和保存时间错误,将重新从阶段1开始执行。

在上述阶段1与阶段2中对导通电压调整,也就是对额外读错误的调整如图15所示。当闪存读干扰错误已达到ldpc纠错的某一个区间时,控制导致的额外读错误加上读干扰错误不会超过该区间,即对数据的读取所需要的时间仍保持不变。因此,本申请提供的方法在不影响性能的情况下,改善热数据的读干扰,从而改善闪存平均访问性能。

本申请通过在闪存控制器中增加的3个模块,读热度识别模块,并控制导通电压调整模块对vpass进行调整,最后由读引擎模块执行读操作。除此之外,在ftl的地址映射中,扩展一个区域(根据现有工作和实验验证,只需要2比特信息用以表示)为wl的读次数记录,作为读热度识别的依据,以及为每个块记录8比特的信息,作为动态调整导通电压的依据。

本申请针对闪存读操作时的电压设置进行优化,数据读取操作执行流程如图16所示。当接收到一个请求待读取数据时,从步骤1601开始执行,然后进入步骤1602。

在步骤1602,根据待读数据地址确定数据所在的闪存块,然后进入步骤1603。

在步骤1603,判断闪存块当前所处的阶段,如果flag为0,则处于第一阶段,进入步骤1604;如果flag为1,则处于第二阶段,然后进入步骤1610。

在步骤1604,根据记录的lower值设置导通电压的降低量,并将所有非读wl上的导通电压设置为降低后的导通电压,待读wl上设置为读取电压,然后步骤1605。

在步骤1605,执行读操作并解码,数据成功解码后进入步骤1606。

在步骤1606,比较本次读操作所使用的sensinglevel与记录的ll值,如果前者小于等于ll,则进入步骤1619结束;反之,则进入步骤1607。

在步骤1607,判断记录的lower是否大于0,如果大于0,则进入步骤1608;反之进入步骤1609。

在步骤1608,将lower的值执行减1操作,然后进入步骤1619结束。

在步骤1609,将ll的值执行加1操作,lower的值置为5,然后进入步骤1619结束。

在步骤1610,根据上述的冷热识别方法,识别闪存块中所有非读wl的冷热,然后进入步骤1611。

在步骤1611,根据lower设置导通电压的降低量,所有热非读wl上导通电压设置为降低后的导通电压,冷非读wl上导通电压设置为原始导通电压,待读wl上设置为读取电压,然后进入步骤1612。

在步骤1612,执行读操作并解码,数据成功解码后进入步骤1613。

在步骤1613,比较本次读操作所使用的sensinglevel与记录的ll值,如果前者小于等于ll,则进入步骤1619结束;反之,则进入步骤1614。

在步骤1614,判断记录的lower是否大于0,如果大于0,则进入步骤1615;反之进入步骤1616。

在步骤1615,将lower的值执行减1操作,然后进入步骤1619结束。

在步骤1616,判断记录的ll值是否小于7,如果小于7则进入步骤1617,反之进入步骤1618。

在步骤1617,将ll的值执行加1操作,lower的值置为5,然后进入步骤1619结束。

在步骤1618,该闪存块进入阶段3,对闪存块执行刷新操作,然后进入步骤1619结束。

本申请在现有2d闪存的读干扰改善方法无法适用于3d闪存的前提下,提出3d闪存读干扰问题的解决方法。

一方面,根据数据冷热调整导通电压,带来的额外读错误极大减小,给3d闪存读干扰改善方案带来实施的可能性;另一方面,对热wl上读干扰的降低,使得热数据可靠性提高,闪存平均性能得到改善。

基于相同的技术构思,图17示出了本申请提供的一种闪存控制器17,该闪存控制器17可以执行上述数据读取的流程。

如图17所示,该闪存控制器17具体包括:i/o接口1701,用于获取数据读取请求,所述数据读取请求包括待读取数据的地址;处理器1702,用于根据所述i/o接口1701获取的待读取数据的地址,确定所述待读取数据所在的闪存块;在所述待读取数据所在的闪存块所处的读取阶段为第一阶段时,根据所述闪存块当前导通电压的降低量,确定出所述闪存块的非读字线上降低后的导通电压,并设置待读字线的读取电压;其中,所述第一阶段为当前读操作所使用的参考电压小于等于低密度校验码ldpc当前支持的参考电压、且所述闪存块当前导通电压的降低量大于第一阈值的阶段;以及根据所述闪存块上非读字线上的降低后的导通电压和所述待读字线的读取电压,读取数据。所述i/o接口1701,还用于输出所述处理器1702读取的数据。

在读取数据之后,所述处理器1702还可以在确定所述当前读操作所使用的参考电压大于ldpc当前支持的参考电压、且所述闪存块当前导通电压的降低量大于第一阈值时,将所述闪存块当前导通电压的降低量减1;或在确定所述当前读操作所使用的参考电压大于ldpc当前支持的参考电压、且所述闪存块当前导通电压的降低量小于等于第一阈值时,将所述ldpc当前支持的参考电压的值加1,并将所述闪存块当前导通电压的降低量设置为第二阈值,所述第二阈值大于所述第一阈值。

此外,所述处理器1702还可以在所述待读取数据所在的闪存块所处的读取阶段为第二阶段时,从所述闪存块的所有非读字线中确定出热非读字线和冷非读字线;所述第二阶段为当前读操作所使用的参考电压大于ldpc当前支持的参考电压、且所述闪存块当前导通电压的降低量小于等于第一阈值的阶段;根据所述闪存块当前导通电压的降低量,确定出所述闪存块的热非读字线上降低后的导通电压,将初始导通电压作为冷非读字线上的导通电压,并设置待读字线的读取电压;根据所述闪存块的热非读字线上降低后的导通电压、所述冷非读字线上的导通电压和所述待读字线的读取电压,读取数据。

其中,所述处理器1702可以将所述闪存块中读取次数大于第三阈值的非读字线确定为热非读字线,将所述闪存块中读取次数小于等于第三阈值的非读字线确定为冷非读字线。

所述处理器1702在根据所述闪存块的热非读字线上降低后的导通电压、所述冷非读字线上的导通电压和所述待读字线的读取电压,读取数据之后,还可以在确定所述当前读操作所使用的参考电压大于ldpc当前支持的参考电压、且所述闪存块当前导通电压的降低量大于第一阈值时,将所述闪存块当前导通电压的降低量减1;或在确定所述当前读操作所使用的参考电压大于ldpc当前支持的参考电压、且所述闪存块当前导通电压的降低量小于等于第一阈值时,确定所述ldpc当前支持的参考电压是否小于第四阈值;若是,则将所述ldpc当前支持的参考电压的值加1,并将所述闪存块当前导通电压的降低量设置为第二阈值;若否,则刷新所述闪存块,其中所述第二阈值大于所述第一阈值。

基于相同的技术构思,本申请实施例还提供了一种闪存设备1800,如图18所示,该闪存设备1800可包括:i/o接口1801、处理器1802和存储器1803。处理器1802用于控制闪存设备1800的操作;存储器1803可以包括只读存储器和随机存取存储器,存储有处理器1802可以执行的指令和数据。存储器1803的一部分还可以包括非易失行随机存取存储器(nvram)。i/o接口1801、处理器1802和存储器1803等各组件通过总线1809连接,其中总线1809除包括数据总线之外,还可以包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图中将各种总线都标为总线1809。

本申请实施例揭示的一种数据读取方法可以应用于处理器1802中,或者由处理器1802实现。在实现过程中,处理流程的各步骤可以通过处理器1802中的硬件的集成逻辑电路或者软件形式的指令完成。处理器1802可以是通用处理器、数字信号处理器、专用集成电路、现场可编程门阵列或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件,可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器1803,处理器1802读取存储器1803中存储的信息,结合其硬件完成一种数据读取的步骤。

本申请实施例揭示的一种数据读取的方法可以应用于处理器1802中,或者由处理器1802实现。处理器1802用于读取存储器1803中代码,以用于执行上述方法实施例中数据读取的流程。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。

所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1