基于机器学习的读出数据错误处理的制作方法

文档序号:17318807发布日期:2019-04-05 21:25阅读:221来源:国知局
基于机器学习的读出数据错误处理的制作方法

本申请涉及存储领域,具体地,涉及对从nvm芯片中读出数据的错误处理。



背景技术:

闪存通过在存储单元中保持电荷量来存储信息。存储单元中的电荷量决定了存储单元的读出电压。在读取闪存数据时,比较存储单元的读出电压与阈值电压来识别存储单元所存储的信息。相变存储器、阻变存储器、磁旋存储器、dram各自利用基于不同原理的存储单元来存储信息。

存储介质一般不是完全可靠的。由于存储单元的电荷量受存储单元的质量、寿命、时间等多种因素的影响,以及从多个存储单元到敏感放大器的信号传输路径的非均一性,导致从存储单元读取的数据同写入的数据存在偏差,无法正确体现原始向存储单元写入的信息。

现有技术中采用一些手段来预防或应对因存储单元的电荷量等因素的变化而导致读取的数据无法正确体现写入的数据的问题,例如,在美国专利us9070454b1中,根据存储单元的擦写次数、保持时间等因素计算阈值电压(从存储单元中读取数据或向存储单元中写入数据时使用的阈值电压或判决电压),并使用计算出的阈值电压向存储单元写入数据。阈值电压可包括用于读操作的读阈值与用于写操作的写阈值。

在闪存芯片中,通过为读操作指示不同的参数,来选择读操作时所使用的阈值电压。通过具有不同阈值电压的读操作,从存储单元读出的数据会有不同的结果。有些结果具有较低的比特错误率(biterrorratio,错误比特与传输的总比特数的百分比),而有些结果具有较高的比特错误率。结合使用ecc(errorcorrectioncode,错误校正码)技术,具有较低的比特错误率的读取结果被ecc技术纠正的几率较高,从而通过尝试不同参数,来应对读操作中遇到的错误。参数可以合并在读操作中提供给闪存芯片,或者在闪存芯片中设置用于读操作的参数,而在闪存芯片处理读操作时,使用所设置的参数。

ecc技术的纠错能力是有限的,例如,最多能在1k字节数据(被称为ecc数据帧)中纠正40比特错误。当存储的数据的错误比特数量超出了ecc部件的纠错能力,需要尝试具有其他参数的读操作,以期待得到具有较少错误比特数的读出数据,以符合ecc部件的纠错能力要求。

存储介质上通常按页来存储和读取数据,而按块来擦除数据。通常,块包含多个页,存储介质上的页(称为物理页)具有固定的尺寸,例如17664字节,当然,物理页也可以具有其他的尺寸。在读出或写入数据时,一般为每个页的所有存储单元设置相同的阈值电压。



技术实现要素:

读操作具有多种参数,分别指示了不同的读阈值电压。在对读操作的错误处理中,需要提高选择读操作参数的效率,以加快数据读取过程,并减少从nvm芯片重复读数据的次数,以提升读数据的有效带宽。

本申请的目的在于提供数据恢复方法及固态存储设备,以提高读命令读出的数据的准确度。

根据本申请的第一方面,提供了根据本申请第一方面的第一数据恢复方法,其中,包括:接收主机发出的读访问命令;根据读访问命令向非易失性存储器发出读命令;接收非易失性存储器提供的读出数据;对读出数据进行错误校正;若错误校正成功,则将校正后的读出数据发送给主机;并且利用读命令被应用的场景和读命令指示的读命令参数训练神经网络。

根据本申请的第一方面的第一数据恢复方法,提供了根据本申请第一方面的第二数据恢复方法,其中,读命令被应用的场景作为神经网络的输入,读命令指示的读命令参数作为神经网络的输出。

根据本申请的第一方面的第一或第二数据恢复方法,提供了根据本申请第一方面的第三数据恢复方法,其中,神经网络对读命令被应用的场景分类。

根据本申请的第一方面的第三数据恢复方法,提供了根据本申请第一方面的第四数据恢复方法,其中,场景的类别与能在该场景下读出可被成功错误校正的数据的读命令参数对应。

根据本申请的第一方面的第三数据恢复方法,提供了根据本申请第一方面的第五数据恢复方法,其中,场景的类别与能在该场景下读出可被成功错误校正的几率大于第一值的数据的读命令参数对应。

根据本申请的第一方面的第三数据恢复方法,提供了根据本申请第一方面的第六数据恢复方法,其中,场景的类别与能在该场景下读出错误比特数低于第二值的数据的读命令参数对应。

根据本申请的第一方面的第三数据恢复方法,提供了根据本申请第一方面的第七数据恢复方法,其中,场景的类别与读命令参数序列对应。

根据本申请的第一方面的第七数据恢复方法,提供了根据本申请第一方面的第八数据恢复方法,其中,使用根据读命令参数序列产生的读命令序列从非易失性存储器读出的数据组合,可被成功错误校正或被成功错误校正的几率大于第三值。

根据本申请的第一方面的第七数据恢复方法,提供了根据本申请第一方面的第九数据恢复方法,其中,使用根据读命令参数序列产生的读命令序列从非易失性存储器读出的数据组合,通过软译码可被成功错误校正或被成功错误校正的几率大于第四值。

根据本申请的第一方面的第一至第九数据恢复方法,提供了根据本申请第一方面的第十数据恢复方法,其中,读命令被应用的场景的属性包括读命令访问的逻辑单元号、物理块、物理页类型、物理块上的数据自被写入至今的时间间隔、物理块的被擦除次数、物理块被读取次数和/或物理块是否被完整写入。

根据本申请的第一方面的第十数据恢复方法,提供了根据本申请第一方面的第十一数据恢复方法,其中,物理块上的数据自被写入至今的时间间隔包括或不包括固态存储设备处于掉电状态的时间。

根据本申请的第一方面的第十数据恢复方法,提供了根据本申请第一方面的第十二数据恢复方法,其中,场景的属性包括物理块的错误率。

根据本申请的第一方面的第一数据恢复方法,提供了根据本申请第一方面的第十三数据恢复方法,其中,场景的属性包括读命令访问的物理页以及上次对物理页读出的数据错误校正成功所对应的读命令参数。

根据本申请的第一方面的第一至第十三数据恢复方法,提供了根据本申请第一方面的第十四数据恢复方法,其中,响应于错误校正失败,生成重读命令重新获取读出数据。

根据本申请的第一方面的第十四数据恢复方法,提供了根据本申请第一方面的第十五数据恢复方法,其中,响应于对重新命令的读出数据的错误校正成功,利用重读命令对应的读命令参数和重读命令被应用的场景来训练神经网络。

根据本申请的第一方面的第十五数据恢复方法,提供了根据本申请第一方面的第十六数据恢复方法,其中,响应于对读出数据的错误校正失败,利用读命令对应的读命令参数和读命令被应用的场景来训练神经网络。

根据本申请的第一方面的第一至十六数据恢复方法,提供了根据本申请第一方面的第十七数据恢复方法,其中,响应于主机的命令,设置神经网络的参数,神经网络的参数被存储在非易失性存储器中或由主机提供。

根据本申请的第一方面的第一至第十七数据恢复方法,提供了根据本申请第一方面的第十八数据恢复方法,其中,响应于主机的命令,获取神经网络的参数,并将神经网络的参数提供给主机或将神经网络的参数存储在非易失性存储器中。

根据本申请的第一方面的第一至十八数据恢复方法,提供了根据本申请第一方面的第十九数据恢复方法,其中,将神经网络的训练结果记录在存储器、动态随机存取存储器或者非易失性存储器中。

根据本申请的第一方面的第一至十九数据恢复方法,提供了根据本申请第一方面的第二十数据恢复方法,其中,对多个神经网络进行训练,每个神经网络服务于固态存储设备的一个或多个逻辑单元号或一个或多个物理块。

根据本申请的第一方面的第二十数据恢复方法,提供了根据本申请第一方面的第二十一数据恢复方法,其中,依据读命令被应用的场景中指示的逻辑单元号或物理块,将与读命令对应的读命令参数和读命令被应用的场景提供给对应的神经网络。

根据本申请的第一方面的第十四或十五数据恢复方法,提供了根据本申请第一方面的第二十二数据恢复方法,其中,响应于错误校正失败,神经网络根据接收的读命令被应用的场景推断与场景对应的读命令参数,并生成重读命令,将重读命令发送给非易失性存储器。

根据本申请的第一方面的第二十二数据恢复方法,提供了根据本申请第一方面的第二十三数据恢复方法,其中,接收非易失性存储器对重读命令的读出数据;对重读命令的读出数据进行错误校正;若错误校正失败,则重复生成重读命令,直至错误校正成功;若错误校正成功,则将校正后的重读命令的读出数据发送给主机。

根据本申请的第一方面的第一至二十三数据恢复方法,提供了根据本申请第一方面的第二十四数据恢复方法,其中,响应于错误校正失败,根据对应的读命令被应用的场景生成重读命令,并发送给介质接口控制器。

根据本申请的第一方面的第二十四数据恢复方法,提供了根据本申请第一方面的第二十五数据恢复方法,其中,响应于错误校正失败,根据对应的读命令被应用的场景和读命令参数生成重读命令,并发送给介质接口控制器。

根据本申请的第一方面的第一至二十五数据恢复方法,提供了根据本申请第一方面的第二十六数据恢复方法,其中,响应于对读出数据的错误校正首次失败,采用神经网络生成的第一重读命令;以及响应于错误校正的后续失败,生成第二重读命令,第二重读命令中指示第二重读命令的读命令参数,以及向非易失性存储器发送第二重读命令。

根据本申请的第一方面的第二十六数据恢复方法,提供了根据本申请第一方面的第二十七数据恢复方法,其中,为生成第二重读命令,统计读出数据中具有第一值的比特数量和/或具有第二值的比特数量,确定第二重读命令的读命令参数。

根据本申请的第一方面的第二十七数据恢复方法,提供了根据本申请第一方面的第二十八数据恢复方法,其中,第二重读命令的同读命令参数对应的读出阈值电压的调整方向和调整幅度依据读出数据中具有第一值的比特数量和/或具有第二值的比特数量确定。

根据本申请的第一方面的第二十八数据恢复方法,提供了根据本申请第一方面的第二十九数据恢复方法,其中,若从第一类型的物理页读出的数据中具有第一值的比特数量大于第一数量阈值,则向降低具有第一值的比特数量的方向调整第二重读命令所使用的对应于第一读出阈值电压的读命令参数,其中第一类型的物理页对应第一读出阈值电压。

根据本申请的第一方面的第一至二十五数据恢复方法,提供了根据本申请第一方面的第三十数据恢复方法,其中,响应于对读出数据的错误校正首次失败,采用重读部件生成的第三重读命令,第三重读命令指示第三重读命令的读命令参数;以及响应于错误校正后续失败,采用神经网络生成第四重读命令。

根据本申请的第一方面的第三十数据恢复方法,提供了根据本申请第一方面的第三十一数据恢复方法,其中,为生成第三重读命令,统计读出数据中具有第一值的比特数量和/或具有第二值的比特数量,确定第三重读命令的读命令参数。

根据本申请的第一方面的第三十一数据恢复方法,提供了根据本申请第一方面的第三十二数据恢复方法,其中,第三重读命令的读命令参数对应的读出阈值电压的调整方向和调整幅度依据读出数据中具有第一值的比特数量和/或具有第二值的比特数量确定。

根据本申请的第一方面的第三十二数据恢复方法,提供了根据本申请第一方面的第三十三数据恢复方法,其中,若从第一类型的物理页读出的数据中具有第一值的比特数量大于第一数量阈值,则向降低具有第一值的比特数量的方向调整第三重读命令所使用的对应于第一读出阈值电压的读命令参数,其中第一类型的物理页对应第一读出阈值电压。

根据本申请的第一方面的第一至三十三数据恢复方法,提供了根据本申请第一方面的第三十四数据恢复方法,其中,神经网络根据接收的读命令被应用的场景推断同当前场景最匹配的场景类别,并根据最匹配的场景类别选择读命令参数和/或读命令序列。

根据本申请的第一方面的第一至三十三数据恢复方法,提供了根据本申请第一方面的第三十五数据恢复方法,其中,神经网络根据读命令被应用的场景获得同当前场景最匹配的场景类别,并根据场景类别生成重读命令或重读命令序列,用重读命令或重读命令序列发送给非易失性存储器。

根据本申请的第一方面的第一至三十三数据恢复方法,提供了根据本申请第一方面的第三十六数据恢复方法,其中,神经网络根据读命令被应用的场景获得同当前场景最匹配的场景类别,并根据读命令被应用的场景以及与错误校正失败对应的当前读命令的读命令参数生成重读命令或重读命令序列。

根据本申请的第一方面的第一至三十六数据恢复方法,提供了根据本申请第一方面的第三十七数据恢复方法,其中,对多个神经网络进行训练,每个神经网络服务于固态存储设备的一个或多个逻辑单元号和/或一个或多个物理块;响应于错误校正失败,依据读命令被应用的场景中指示的逻辑单元号和/或物理块,将当前读命令被应用的场景提供给对应的神经网络,以推断出适合当前读命令被应用的场景的读命令参数和/或读命令序列。

根据本申请的第二方面,提供了根据本申请第二方面的第一固态存储设备,包括控制部件与非易失性存储器芯片,控制部件用于执行上述的数据恢复方法。

根据本申请的第三方面,提供了根据本申请第三方面的第一控制部件,包括命令下发队列、介质接口控制器、错误校正部件、人工智能部件和命令完成队列;命令下发队列与介质接口控制器耦合,命令下发队列接收主机的读访问命令,并将读访问命令转发给介质接口控制器;介质接口控制器向非易失性存储器发出读命令,并接收非易失性存储器的读出数据;错误校正部件与介质接口控制器耦合,错误校正部件对读出数据进行错误校正;命令完成队列与错误校正部件耦合,响应于错误校正成功,命令完成队列接收错误校正部件发送的错误校正后的数据并发送给主机;人工智能部件与错误校正部件耦合,人工智能部件利用读命令被应用的场景和读命令对应的读命令参数训练神经网络。

根据本申请的第三方面的第一控制部件,提供了根据本申请第三方面的第二控制部件,其中,人工智能部件与介质接口控制器耦合;响应于错误校正失败,人工智能部件生成重读命令,并将重读命令发送给介质接口控制器。

本申请实现的有益效果如下:

(1)本申请实施例通过人工智能部件利用读命令被应用的场景和读命令参数对神经网络进行训练,以通过训练结果为重读命令提供更匹配的读命令参数,以提高读命令读出的数据的准确度。

(2)本申请实施例通过人工智能部件和重读部件的配合产生重读命令,提高了数据处理速度。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域技术人员来讲,还可以根据这些附图获得其他的附图。

图1是根据本申请实施例一的固态存储设备的示意图;

图2是根据本申请实施例二的固态存储设备的示意图;

图3是现有技术的nand闪存的结构;

图4为一个例子中的存储单元的读出电压分布曲线图。

图5是又一例子中的存储单元的读出电压分布曲线图。

图6是再一例子中的存储单元的读出电压分布曲线图。

图7是根据本申请实施例三的固态存储设备的示意图。

图8为另一例子的存储单元的读出电压分布曲线图。

图9是图8中存储单元的状态与存储的比特的对应关系。

图10是一个例子中的存储单元存储的三个比特与物理页的对应关系。

图11是图8所示的实施例的阈值与存储单元的状态的对应关系。

图12是图8-10所示的实施例中与物理页类型对应的读出阈值电压的调整方式。

图13为再又一例子的存储单元的读出电压分布曲线图。

图14是图13中存储单元的状态与存储的比特的对应关系。

图15是另一个例子中的存储单元存储的三个比特与物理页的对应关系。

图16是图13所示的实施例的阈值与存储单元的状态的对应关系。

图17是图13-15所示的实施例中与物理页类型对应的读出阈值电压的调整方式。

图18是根据本申请实施例四的固态存储设备的示意图。

图19是根据图18的实施例的固态存储设备处理读命令的示意图。

具体实施方式

下面结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

实施例一

图1是根据本申请实施例一的固态存储设备的示意图。固态存储设备包括控制部件与耦合到控制器部件的一片或多片nvm(非易失性存储器)芯片。nvm芯片是例如nand闪存、相变存储器、阻变存储器、磁旋存储器。控制部件还耦合到主机,以响应主机发出的访问固态存储设备的命令。控制部件包括命令下发队列、命令完成队列、ecc部件以及介质接口控制器。

介质接口控制器耦合到nvm芯片,并以遵循nvm芯片的接口协议的方式向nvm芯片发出命令,以操作nvm芯片,并接收从nvm芯片输出的命令执行结果。已知的nvm芯片接口协议包括“toggle”、“onfi”等。

如图1所示,主机向固态存储设备发出访问固态存储设备的命令(1)。命令下发队列用于接收并缓存主机发出的访问固态存储设备的命令。主机发出的命令经过处理,并被转发给介质接口控制器(2)。介质接口控制器根据主机发出的命令向nvm芯片发出命令(3)。介质接口控制器还从nvm芯片获取命令处理结果(4)。以读命令为例,从nvm芯片读出的数据被提供给ecc部件进行错误校正(5)。处理完成的命令被添加到命令完成队列(6)。通过访问命令完成队列,主机获取命令处理结果(7)。

可以理解地,为使用ecc部件对读出数据进行错误校正,在向nvm芯片写入数据时,还用ecc部件对待写入数据进行错误校正编码(图1中未示出)。

ecc部件对从nvm芯片读出的数据进行的错误校正可能成功,也可能失败。在一个实施方式中,即使ecc部件对读出数据的错误校正失败,也向命令完成队列添加命令处理完成指示。若从命令完成队列中的命令处理完成指示中识别出数据的错误校正失败,则响应于错误校正失败,主机生成重读命令(重读命令指示与错误校正失败的读命令不同的读命令参数),发送给固态存储设备的命令下发队列。以及还重复步骤1-7,以再次尝试读取数据。

一般情况下,主机会尝试nvm芯片提供的多种或所有重读命令。如果尝试了所有的重读命令,依然没能获得错误校正成功的结果,则需要通过其他错误处理手段获取数据(例如,通过raid技术)。而当通过某个重读命令获得了错误校正成功的正确数据,则终止对其他重读命令的尝试。

可选地,一些nvm芯片提供不同形式的重读命令。例如,通过设置特征(setfeature)命令与读命令的组合来实现重读命令的功能。使用设置特征命令来设置读命令参数,并在读命令中,使用所设置的读命令参数。

依然可选地,在重读命令中指示与错误校正失败的读命令相同的读命令参数。

显然,由主机控制的重读过程,由于要在主机与固态存储设备之间进行多次数据与命令的交互,极大增加了命令处理的延迟。

实施例二

图2是根据本申请实施例二的固态存储设备的示意图。在该实施例中,固态存储设备的控制部件包括命令下发队列、命令完成队列、介质接口控制器、ecc部件以及重读部件。

重读部件耦合到ecc部件和介质接口控制器。响应于ecc部件指示错误校正失败,重读部件向介质接口控制器生成重读命令,并在重读命令中指示与错误校正失败的读命令不同的读命令参数。在重读部件的控制下,尝试nvm芯片提供的多种或所有重读命令。

以固态存储设备读命令处理流程为例,如图2所示,主机向固态存储设备的命令下发队列发出读访问命令(1)。主机发出的读访问命令经过处理后被转发给介质接口控制器(2)。介质接口控制器根据主机发出的读访问命令向nvm芯片发出读命令(3)。介质接口控制器还从nvm芯片获取命令处理结果,即读命令的读出数据(4)。从nvm芯片读出的数据被提供给ecc部件进行错误校正(5)。若ecc部件对读出数据的错误校正失败,则读命令或读命令访问地址、读取的数据长度、读命令使用的读命令参数等信息被转发给重读部件(6)。重读部件生成重读命令(可选地,重读命令选择读命令参数),并将重读命令发送给介质接口控制器(7)。介质接口控制器根据重读命令向nvm芯片发出重读命令(8)。介质接口控制器还从nvm芯片获取重读命令的处理结果(9)。重读命令读出的数据被提供给ecc部件(10)。若ecc部件对重读命令的读出数据的错误校正失败,则由重读部件再次发起从步骤(6)到步骤(10)的过程。若ecc部件对读出数据的错误校正成功,处理完成的命令(以及可选地,读出数据)被添加到命令完成队列(11)。通过访问命令完成队列,主机获取命令处理结果(12)。

本实施例中,在ecc部件错误校正失败的情况下,由重读部件控制发出一次或多次重读过程,减少了固态存储设备与主机的交互,降低了读命令处理延迟。

实施例三

图3展示了现有技术的nand闪存的结构。闪存块包括多条字线与位线。字线耦合了多个用于存储信息的晶体管,每个晶体管提供一个存储单元(cn,cn-1,…,c1,c0),每个存储单元能存储1比特或多比特数据。每条字线中的多个存储单元提供一个或多个物理页,构成一个物理页的比特存储在耦合到同一条字线的晶体管中。

图4为存储单元的读出电压分布曲线图。存储单元被编程后,依据被编程的值,在存储单元中存储了电荷。读存储单元时,从存储了不同电荷的存储单元会得到不同的读出电压。参看图4,钟形线l(0)是存储了“1”值的存储单元的读出电压分布,钟形线l(1)是存储了“0”值的存储单元的读出电压分布。当使用读出阈值电压vt1时,在读出阈值电压vt1左侧的具有“1”值的存储单元被正确读取,同时在读出阈值电压vt1右侧的具有“0”值的存储单元也被正确读取。

图5是又一例子中的存储单元的读出电压分布曲线图。由于时间、编程次数、温度等原因,存储单元的读出电压分布发生了变化。钟形线l(0)是存储了“1”值的存储单元的读出电压分布,钟形线l(1)是存储了“0”值的存储单元的读出电压分布。当使用读出阈值电压vt1时,在读出阈值电压vt1左侧的具有“0”值的存储单元被错误读取为“1”值,而在读出阈值电压vt1右侧的具有“0”值的存储单元被正确读取。而若使用读出阈值电压vt2,在读出阈值电压vt2左侧的具有“1”值的存储单元被正确读取,同时在读出阈值电压vt2右侧的具有“0”值的存储单元也被正确读取。因而,在重读过程中,若通过读命令参数指示采用读出阈值电压vt2,则有较高几率读出正确数据,或者读出具有较低错误率的能被ecc部件成功进行错误校正的数据。

图7是根据本申请实施例三的固态存储设备的示意图。在该实施例中,固态存储设备的控制部件包括命令下发队列、命令完成队列、介质接口控制器、ecc部件、重读部件、加扰部件(图中未示出)以及解扰部件。重读部件耦合到ecc部件和介质接口控制器。解扰部件耦合ecc部件与命令完成队列。对ecc部件进行错误校正后的数据进行解扰,并将解扰结果提供给命令完成队列。

响应于ecc部件指示错误校正失败,重读部件向介质接口控制器生成重读命令,并在重读命令中指示不同的读命令参数。在重读部件的控制下,尝试nvm芯片提供的多种或所有重读命令。

根据图7的实施例中,响应于ecc部件多次对读出数据的错误校正失败,重读部件相应地多次发起从步骤(6)到步骤(10)的过程,并在生成的重读命令中,更新读命令的参数(例如对应于读出阈值电压的读命令参数)。若ecc部件对读出数据的错误校正成功,由解扰部件对经错误校正的数据解扰(11),以及处理完成的命令(以及可选地,解扰后的数据)被添加到命令完成队列(11)。通过访问命令完成队列,主机获取命令处理结果(12)。

该实施例中,数据被写入nvm芯片前,由加扰部件(未示出)对数据进行加扰。而在从nvm芯片读出数据并经错误校正后,解扰部件对数据按加扰过程相反的方式进行解扰。

加扰过程,是对数据进行随机化。例如,将指定的随机化种子同要写入的数据按指定的算法进行运算(例如,用随机化种子生成m序列,并同要写入数据做异或),得到经加扰的数据。经过加扰,被写入nvm芯片的数据具有指定的统计特性,例如,在nvm芯片的同一物理页、字线或ecc数据帧中读出的数据中,具有“0”值的比特与具有“1”值的比特数量大体相同,例如,均为50%。作为举例,物理页存储16k字节数据,被加扰后写入物理页的数据中,有大约8k*8比特具有“0”值,而有大约8k*8比特具有“1”值。

解扰过程,是前述随机化过程的逆过程,以得到加扰前的数据。

可选地,作为一个实施方式,对待写入nvm芯片的数据,先加扰,再进行错误校正编码。相应地,对于从nvm芯片读出的数据,先进行错误校正解码,再进行解扰。

可选地,作为另一个实施方式,对待写入nvm芯片的数据,被错误校正编码后,再进行加扰。相应地,对于从nvm芯片读出的数据,先进行解扰,再进行错误校正解码。

依然可选地,加扰与解扰过程,由介质接口控制器实施。

本实施例中,以读命令的标准参数(例如,图5中的vt1为读出阈值电压)读出数据,响应于ecc部件指示对读出数据的错误校正失败,重读部件对ecc部件错误校正前的数据或者经错误校正的数据进行统计,识别其中具有“0”值的比特数量与具有“1”值的比特数量。

在图7的例子中,在存储单元中被写入了经加扰的数据后,以读命令的标准参数(例如,图5中的vt1为读出阈值电压)读出数据。读出数据中,若具有“0”值的比特数量与具有“1”值的比特数量的比例明显低于1,从而可确定存储单元中的读出电压分布发生了如图5所示的偏移(存储单元的读出电压分布整体向左移动)。相应地,通过向左移动读出阈值电压(例如,将读出阈值电压从vt1修改为vt2),将有机会使得读出数据中,具有“0”值的比特与具有“1”值的比特数量的比例接近1。

类似地,以读命令的标准参数(例如,图5中的vt1为读出阈值电压)读出数据。读出数据中,若具有“0”值的比特数量与具有“1”值的比特数量的比例明显大于1,则可确定存储单元中的读出电压分布发生了“右移”(存储单元的读出电压分布整体向右移动)。相应地,通过向右移动读出阈值电压(例如,将读出阈值电压从vt1修改为大于vt1的值),将有机会使得读出数据中,具有“0”值的比特与具有“1”值的比特数量的比例接近1。

从而,根据图7的实施例,重读部件根据对读出数据中的“0”值和/或“1”的比特数量统计结果,识别相应存储单元的读出电压分布的偏移方向,进而确定更新读出阈值电压的方向,并生成重读命令,并使重读命令的读命令参数指示更新后的读出阈值电压,以期待重读命令对应的读出数据中具有“0”值的比特数量与具有“1”值的比特数量的比例接近1,以利于ecc部件有更高的错误校正成功的几率。

可以理解地,可将图5中,钟型线l(0)对应的读出电压分布的状态定义为存储了数值“0”,而将钟型线l(1)对应的读出电压分布的状态定义为存储了数值“1”,如图6所示。从而,响应于ecc部件识别错误校正失败,重读部件识别读出数据中,具有“0”值的比特与具有“1”值的比特数量的比例明显低于1(例如,低于0.96),而在生成的重读命令中,指示相对于在前的引起错误校正失败的读命令所对应的读出阈值电压,向右移动读出阈值电压。若重读部件识别读出数据中,具有“0”值的比特数量与具有“1”值的比特数量的比例明显大于1(例如,高于1.04),而在生成的重读命令中,指示相对于在前的引起错误校正失败的读命令所对应的读出阈值电压,向左移动读出阈值电压。

进一步地,若对重读命令的读出数据的错误校正再次失败,重读部件可再次依据读出数据中具有“0”值的比特数量与具有“1”值的比特数量的比例生成重读命令,并在重读命令中指示更新的读出阈值电压。

在可选的实施方式中,重读部件依据读出数据中具有“0”值的比特数量与具有“1”值的比特数量的比例,不仅确定重读命令所对应的更新的读出阈值电压相对于在前的读命令的读出阈值电压的改变方向(增大或减小),还确定更新的读出阈值电压相对于在前的读命令的读出阈值电压的改变幅度。例如,读出数据中具有“0”值的比特数量与具有“1”值的比特数量的比例距1越远,更新的读出阈值电压相对于在前的读命令的读出阈值电压的改变幅度越大。可选地,通过查找表或由拟合获得的函数,建立读出数据中具有“0”值的比特数量与具有“1”值的比特数量的比例同更新的读出阈值电压相对于在前的读命令的读出阈值电压的改变幅度(以及方向)的映射关系。映射关系可以在实验室中通过对存储器件的特性实验得出。

依然可选地,重读部件以单位步长为单位改变读出阈值电压,而以读出数据中具有“0”值的比特数量与具有“1”值的比特数量的比例来确定读出阈值电压的调整方向(增大或减小)。

可选地,在读出数据量已知的情况下(例如,物理页大小、ecc数据帧大小),重读部件统计读出数据中,具有“0”值的比特数量和/或具有“1”值的比特数量,依据各自的数量确定读出阈值电压的调整方向和/或调整幅度。

可选地,响应于在前的读命令的读出数据的错误校正失败,重读部件生成重读命令,重读命令访问与在前的读命令相同的地址。依然可选地,由于固态存储设备的nvm芯片大体上处于相似的工作环境(温度、擦除次数等),重读部件将重读命令所使用的读命令参数(例如读阈值电压)应用于访问nvm芯片的其他地址的读命令是有利的。可选地,重读部件指示介质接口控制器更新默认的读命令参数,使得介质接口控制器发出的一般读命令,都使用重读部件的默认读命令参数。进一步地,重读部件生成重读命令后,跟踪ecc部件的错误校正结果,并记录使错误校正成功的读命令参数,指示介质接口控制器使用该读命令参数,用于一般读命令。

在可选的实施方式中,响应于主机向固态存储设备写入数据的命令,待写入nvm芯片的数据,先进行加扰,再被错误校正编码。而从nvm芯片读出的数据,是经过加扰的数据。重读部件识别(错误校正解码前)读出数据中具有“0”值的比特数量与具有“1”值的比特数量的比例,生成重读命令,并在重读命令中指示更新的读出阈值电压。可选地,为具有“0”值的比特数量与具有“1”值的比特数量的比例提供阈值,比如1%或2%。若该比例大于阈值,推测出ecc部件对读出数据错误校正失败的几率较大,则重读部件生成重读命令,并且不将读出数据发送给ecc部件,以省去错误校正过程;若比例不大于阈值,重读部件不生成重读命令,而将读出数据发送给ecc部件进行错误校正,以及仅在错误校正失败后,再对错误校正之后或之前的读出数据统计数据中具有“0”值的比特数量与具有“1”值的比特数量的比例,并生成重读命令。可选地,在读出数据量已知的情况下,重读部件统计读出数据中,具有“0”值的比特数量和/或具有“1”值的比特数量,依据各自的数量确定读出阈值电压的调整方向和/或调整幅度。

依然可选地,重读部件对(错误校正解码前的)读出数据中具有“0”值的比特数量与具有“1”值的比特数量的统计,与ecc部件对读出数据的错误校正操作并发进行,以降低处理延迟。若ecc部件指示错误校正成功,则将正确数据(经过解扰后)作为对读命令的响应提供给主机。若ecc部件指示错误校正失败,由重读部件根据对读出数据中具有“0”值的比特数量与具有“1”值的比特数量的统计,生成重读命令。依然可选地,在一个例子中,重读部件对读出数据中具有“0”值的比特数量与具有“1”值的比特数量的统计延迟远低于ecc部件对读出数据的错误校正延迟,在ecc部件确定错误校正成功与否之前,重读部件已根据统计结果生成重读命令。可选地,重读部件暂存重读命令,以等待ecc部件的错误校正结果,响应于错误校正失败,向nvm芯片发出重读命令。依然可选地,重读部件不等待ecc部件的错误校正结果,而向nvm芯片发出重读命令,以及在ecc部件随后指示错误校正成功时,丢弃重读命令从nvm芯片读出的数据,而在ecc部件随后指示错误校正失败时,使用重读命令从nvm芯片读出的数据。

图8为另一例子的存储单元的读出电压分布曲线图。在图8的例子中,存储单元的类型是tlc(triplelevelcell,三值存储单元)。tlc存储单元的读出电压依据编程程度被分组为8种不同的状态,每种状态对应3比特组合之一。由“l0”到“l7”来指示存储单元的8种不同的状态,“l0”为存储单元被擦除后的状态,而“l7”为存储单元被充分编程后的状态。参看图8,从“l0”到“l7”,存储单元的读出电压单调变化。

用多个读出阈值电压来区分存储单元的状态。继续参看图8,用读出阈值电压th1区分状态“l3”与“l4”;用读出阈值电压th2区分状态“l1”与“l2”;用读出阈值电压th3区分状态“l5”与“l6”;用读出阈值电压th4区分状态“l0”与“l1”;用读出阈值电压th5区分状态“l2”与“l3”;用读出阈值电压th6区分状态“l4”与“l5”;用读出阈值电压th7区分状态“l6”与“l7”。作为举例,为每个读出阈值电压提供寄存器来存储读出阈值电压的值,并且通过比较器比较读出阈值电压的值与存储单元的读出电压,来识别存储单元所处的状态。

为存储单元的状态提供编码,每种状态对应一种三比特编码。图9展示了存储单元的状态与存储的比特的对应关系。作为举例,参看图9,状态“l0”代表三比特编码“111”,状态“l1”代表三比特编码“011”。图9中,使任意相邻的两个状态所对应的两个三比特值编码之间仅存在一比特变化,而另外两比特是相同的。

图10展示了存储单元存储的三个比特与物理页的对应关系。为提升物理页访问的并行性,每个存储单元中存储的三个比特分别属于不同的物理页。例如,图10中,存储单元存储了三比特“101”,按从左到右的顺序分别称为msb(最高有效位,mostsignificantbit)、csb(中间有效位,centralsignificantbit)和lsb(最低有效位,leastsignificantbit)。将由多个存储单元的msb构成的物理页称为msb页,将由多个存储单元的csb构成的物理页称为csb页,以及将由多个存储单元的lsb构成的物理页称为lsb页。使用对应一个或多个与物理页对应的读出阈值电压来从存储单元读出同物理页对应的比特的值。

tlc存储单元存储的三个比特具有不同的可靠度。返回参看图8,要识别存储单元的lsb,仅需将存储单元的读出电压与读出阈值电压th1比较,从而在存储的三个比特中,lsb具有较好的可靠度。要识别存储单元的csb,需要将存储单元的读出电压与读出阈值电压th2和/或th3比较。而要识别存储单元的msb,需要将存储单元的读出电压与读出阈值电压th4、th5、th6和/或th7进行比较。

从而,改变存储单元的读出阈值电压对从存储单元读出的结果的影响依赖于存储单元的状态。例如,若存储单元处于“l7”状态,通过改变读出阈值电压th1的值,将几乎不会影响存储单元的读出结果。作为另一个例子,改变读出阈值电压th6的值,读出数据时,若存储单元未处于“l4”与“l5”状态,那么存储单元的读出结果几乎不会被影响。

若存储单元的读出结果受某读出阈值电压的变化的影响很小,则无法通过改变该读出阈值电压的值来寻找适合该存储单元的该读出阈值电压的最佳值。一般地,向物理页写入的数据被加扰,使得写入物理页的数据是随机数序列,使得存储单元存储的状态在物理空间上随机分布。

图11展示了图8所示的实施例的读出阈值电压与存储单元的状态的对应关系。nand闪存的字线包括存储单元,这些存储单元提供了构成物理页的多个数据。

图11中(也参看图8),用读出阈值电压th1区分状态“l3”与“l4”,用读出阈值电压th2区分状态“l1”与“l2”,用读出阈值电压th3区分状态“l5”与“l6”,用读出阈值电压th4区分状态“l0”与“l1”,用读出阈值电压th5区分状态“l2”与“l3”,用读出阈值电压th6区分状态“l4”与“l5”,以及用读出阈值电压th7区分状态“l6”与“l7”。

当固态存储设备的nvm芯片的存储单元类型为tlc时,重读部件(也参看图7)根据读出数据来自哪个类型的物理页(例如,msb页、csb页或lbs页)来相应的调整读命令参数(读出阈值电压)。

图12展示了根据图8-10所示的实施例中与物理页类型对应的读出阈值电压的调整方式。参看图12,若读出数据来自lsb页,重读部件(也参看图7)统计读出数据(经过错误校正之前或错误校正之后)中具有“0”值的比特数量与具有“1”值的比特数量(数量的值或者二者的比例)。作为举例,若读出数据中具有“1”值的比特数量与具有“0”值的比特数量之比明显大于1(例如,高于1.04),则生成重读命令,并在生成的重读命令中,指示相对于在前的读命令所对应的读出阈值电压th1,向左移动读出阈值电压th1。若读出数据中具有“1”值的比特数量与具有“0”值的比特数量之比明显小于1(例如,小于0.96),则生成重读命令,并在生成的重读命令中指示相对于在前的读命令所对应的读出阈值电压th1,向右移动读出阈值电压th1。可以理解地,重读部件可依据错误校正码的码率、nvm芯片的工作状态(擦除次数、温度、数据保持时间等)而选择根据读出数据中具有“0”值的比特与具有“1”值的比特数量来确定需要生成重读命令的条件。例如,对于高码率的错误校正码,可依据读出数据中具有“0”值的比特数量与具有“1”值的比特数量之比大于1.1来作为“明显大于1”的判断标准。依然可以理解地,向“左”或向“右”移动读出阈值电压,指在图8所示的水平轴上,以向左或向右的方向调整读出阈值电压的取值,使得通过重读命令得到的数据中,具有“0”值的比特数量与具有“1”值的比特数量大体上相同。

继续参看图12,若读出数据来自csb页,重读部件(也参看图7)统计读出数据(经过错误校正之前或错误校正之后)中具有“0”值的比特数量与具有“1”值的比特数量(数量的值或者比例)。作为举例,若读出数据中具有“1”值的比特数量与具有“0”值的比特数量之比明显大于1,则生成重读命令,并在生成的重读命令中指示相对于在前的读命令所对应的读出阈值电压th2与读出阈值电压th3,向左移动读出阈值电压th2和/或向右移动读出阈值电压th3。若读出数据中具有“1”值的比特数量与具有“0”值的比特数量之比明显小于1,则生成重读命令,并在生成的重读命令中指示相对于在前的读命令所对应的读出阈值电压th2与th3,向右移动读出阈值电压th2和/或向左移动读出阈值电压th3。根据本申请的实施例,在重读命令中,可以仅改变读出阈值电压th2与读出阈值电压th3之一,或者改变读出阈值电压th2与读出阈值电压th3二者。

继续参看图12,若读出数据来自msb页,重读部件(也参看图7)统计读出数据(经过错误校正之前或错误校正之后)中具有“0”值的比特数量与具有“1”值的比特数量(数量的值或者比例)。作为举例,若读出数据中具有“1”值的比特数量与具有“0”值的比特数量之比明显大于1,则生成重读命令,并在生成的重读命令中指示相对于在前的读命令所对应的读出阈值电压th4、读出阈值电压th5、读出阈值电压th6与读出阈值电压th7,向左移动读出阈值电压th4、向右移动读出阈值电压th7、向右移动读出阈值电压th5和/或向左移动读出阈值电压th6。若读出数据中具有“1”值的比特数量与具有“0”值的比特数量之比明显小于1,则生成重读命令,并在生成的重读命令中指示相对于在前的读命令所对应的读出阈值电压th4、读出阈值电压th5、读出阈值电压th6与读出阈值电压th7,向右移动读出阈值电压th4、向左移动读出阈值电压th7、向左移动读出阈值电压th5和/或向右移动读出阈值电压th6。根据本申请的实施例,在重读命令中,可以仅改变读出阈值电压th4、读出阈值电压th5、读出阈值电压th6与读出阈值电压th7之一,或者改变读出阈值电压th4、读出阈值电压th5、读出阈值电压th6与读出阈值电压th7中的两个或更多个。

可选地,重读部件还依据对读出数据中具有“0”值的比特数量和/或具有“1”值的比特数量,确定移动一个或多个读出阈值电压的方向和/或幅度。

图13为又一例子的存储单元的读出电压分布曲线图。在图13的例子中,存储单元的类型是tlc(triplelevelcell,三值存储单元)。tlc存储单元的读出电压依据编程程度被分组为8种不同的状态,每种状态对应3比特组合之一。由“l0”到“l7”来指示存储单元的8种不同的状态,“l0”为存储单元被擦除后的状态,而“l7”为存储单元被充分编程后的状态。从“l0”到“l7”,存储单元的读出电压单调变化。

用多个读出阈值电压来区分存储单元的状态。继续参看图13,用读出阈值电压th1区分状态“l3”与“l4”;用读出阈值电压th2区分状态“l1”与“l2”;用读出阈值电压th3区分状态“l5”与“l6”;用读出阈值电压th4区分状态“l0”与“l1”;用读出阈值电压th5区分状态“l2”与“l3”;用读出阈值电压th6区分状态“l4”与“l5”;用读出阈值电压th7区分状态“l6”与“l7”。通过比较读出阈值电压的值与存储单元的读出电压来识别存储单元所处的状态。

为存储单元的每个状态提供编码,编码代表了tlc存储单元所存储的三比特,每种状态对应一种三比特编码。图14展示了存储单元的状态与存储的比特编码的对应关系。作为举例,参看图14,状态“l0”代表三比特编码“111”,状态“l1”代表三比特编码“110”,状态“l2”代表三比特编码“100”。图14中,使任意相邻的两个状态所对应的两个三比特编码之间仅存在一比特变化,而另外两比特是相同的。

图15展示了存储单元存储的三个比特与物理页的对应关系。每个存储单元中存储的三个比特分别属于不同的物理页。例如,图15中,存储单元存储了三比特“101”,按从左到右的顺序分别称为msb、csb和lsb。将由多个存储单元的msb构成的物理页称为msb页,将由多个存储单元的csb构成的物理页称为csb页,以及将由多个存储单元的lsb构成的物理页称为lsb页。使用与某一类型的物理页对应的一个或多个读出阈值电压来从存储单元读出同该类型物理页对应的比特的值。

返回参看图13,要识别存储单元的lsb,需将存储单元的读出电压与读出阈值电压th4和/或th6比较。读出电压小于读出阈值电压th4时,存储单元的lsb为“1”,读出电压在th4与th6之间时,存储单元的lsb为“0”,读出电压大于th6时,存储单元的lsb为“1”。

要识别存储单元的csb,需要将存储单元的读出电压与读出阈值电压th1、th2和/或th3比较。读出电压小于th2时,存储单元的csb为“1”,读出电压在th2与th1之间时,存储单元的csb为“0”,读出电压在th1与th3之间时,存储单元的csb为“1”,读出电压大于th3时,存储单元的csb为“0”。

要识别存储单元的msb,需要将存储单元的读出电压与读出阈值电压th5和/或th7进行比较。读出电压小于th5时,存储单元的msb为“1”,读出电压在th5与th7之间时,存储单元的msb为“0”,读出电压大于th7时,存储单元的msb为“1”。

从而,改变存储单元的读出阈值电压,对从存储单元读出的结果的影响依赖于存储单元的状态。例如,若存储单元处于“l7”状态,通过改变读出阈值电压th1的值,将几乎不会影响存储单元的读出结果。作为另一个例子,改变读出阈值电压th6的值,读出数据时,若存储单元未处于“l4”与“l5”状态,那么存储单元的读出结果几乎不会被影响。

若存储单元的读出结果受某读出阈值电压的变化的影响很小,则无法通过改变该读出阈值电压的值来寻找适合该存储单元的该读出阈值电压的最佳值。一般地,向物理页写入的数据被加扰,使得写入物理页的数据是随机数序列,使得存储单元存储的状态在物理空间上随机分布。

图16展示了根据本申请实施例的读出阈值电压与存储单元的状态的对应关系。

图16中(也参看图13),用读出阈值电压th1区分状态“l3”与“l4”,用读出阈值电压th2区分状态“l1”与“l2”,用读出阈值电压th3区分状态“l5”与“l6”,用读出阈值电压th4区分状态“l0”与“l1”,用读出阈值电压th5区分状态“l2”与“l3”,用读出阈值电压th6区分状态“l4”与“l5”,以及用读出阈值电压th7区分状态“l6”与“l7”。

当固态存储设备的nvm芯片的存储单元类型为tlc时,重读部件(也参看图7)根据读出数据来自哪个类型的物理页(例如,msb页、csb页或lbs页)来相应的调整读命令参数(读出阈值电压)。

图17展示了图13-16所示的实施例与物理页类型对应的读出阈值电压的调节方式。参看图17,若读出数据来自lsb页,重读部件(也参看图7)统计读出数据(经过错误校正之前或错误校正之后)中具有“0”值的比特数量与具有“1”值的比特数量(数量的值或者比例)。作为举例,若读出数据中具有“1”值的比特数量与具有“0”值的比特数量之比明显大于1(例如,高于1.04),则生成重读命令,并在生成的重读命令中指示相对于在前的读命令所对应的读出阈值电压th4与读出阈值电压th6,向左移动读出阈值电压th4(即减小读出阈值电压th4的值),和/或向右移动读出阈值电压th6(即增大读出阈值电压th6的值)。若读出数据中具有“1”值的比特数量与具有“0”值的比特数量之比明显小于1(例如,小于0.96),则生成重读命令,并在生成的重读命令中指示相对于在前的读命令所对应的读出阈值电压th4与读出阈值电压th6,向右移动读出阈值电压th4,和/或向左移动读出阈值电压th6。可以理解地,重读部件可依据错误校正码的码率、nvm芯片的工作状态(擦除次数、温度、数据保持时间等)而根据读出数据中具有“0”值的比特与具有“1”值的比特数量来确定需要生成重读命令的条件。例如,对于高码率的错误校正码,可依据读出数据中具有“0”值的比特数量与具有“1”值的比特数量之比大于1.1来作为“明显大于1”的判断标准。依然可以理解地,向“左”或向“右”移动读出阈值电压,指在图13所示的水平轴上,以向左或向右的方向调整读出阈值电压的取值。调整读出阈值电压的目标,是使得通过重读命令得到的数据中,具有“0”值的比特数量与具有“1”值的比特数量大体上相同。根据本申请的实施例,在重读命令中,可以仅改变读出阈值电压th4与读出阈值电压th6之一,或者改变读出阈值电压th4与读出阈值电压th6二者。

继续参看图17,若读出数据来自csb页,重读部件(也参看图7)统计读出数据(经过错误校正之前或错误校正之后)中具有“0”值的比特数量与具有“1”值的比特数量(数量的值或者比例)。作为举例,若读出数据中具有“1”值的比特数量与具有“0”值的比特数量之比明显大于1,则生成重读命令,并在生成的重读命令中指示相对于在前的读命令所对应的读出阈值电压th1、读出阈值电压th2与读出阈值电压th3,向左移动读出阈值电压th2、向左移动读出阈值电压th3和/或向右移动读出阈值电压th1。若读出数据中具有“1”值的比特数量与具有“0”值的比特数量之比明显小于1,则生成重读命令,并在生成的重读命令中指示相对于在前的读命令所对应的读出阈值电压th1、读出阈值电压th2与读出阈值电压th3,向右移动读出阈值电压th2、向右移动读出阈值电压th3和/或向左移动读出阈值电压th1。根据本申请的实施例,在重读命令中,可以仅改变读出阈值电压th1、读出阈值电压th2与读出阈值电压th3之一,或者改变读出阈值电压th1、读出阈值电压th2与读出阈值电压th3中的两个或更多个。

继续参看图17,若读出数据来自msb页,重读部件(也参看图7)统计读出数据(经过错误校正之前或错误校正之后)中具有“0”值的比特数量与具有“1”值的比特数量(数量的值或者比例)。作为举例,若读出数据中具有“1”值的比特数量与具有“0”值的比特数量之比明显大于1,则生成重读命令,并在生成的重读命令中指示相对于在前的读命令所对应的读出阈值电压th5与读出阈值电压th7,向左移动读出阈值电压th5和/或向右移动读出阈值电压th7。若读出数据中具有“1”值的比特数量与具有“0”值的比特数量之比明显小于1,则生成重读命令,并在生成的重读命令中指示相对于在前的读命令所对应的读出阈值电压th5与读出阈值电压th7,向右移动读出阈值电压th5和/或向左移动读出阈值电压th7。根据本申请的实施例,在重读命令中,可以仅改变读出阈值电压th5与读出阈值电压th7之一,或者改变读出阈值电压th5与读出阈值电压th7二者。

可选地,重读部件还依据对读出数据中具有“0”值的比特数量和/或具有“1”值的比特数量,确定移动一个或多个读出阈值电压的方向和/或幅度。

实施例四

图18是根据本申请实施例四的固态存储设备的示意图。根据图18的实施例的固态存储设备的控制部件,包括命令下发队列、命令完成队列、介质接口控制器、ecc部件以及ai(人工智能,artificialintelligence)部件。ai部件耦合到ecc部件。响应于ecc部件指示错误校正成功,将当前读命令被应用的场景与当前读命令的读命令参数提供给ai部件,用于训练ai部件。例如,在实现了深度学习算法的ai部件中,训练ai部件的神经网络。可选地,ai部件还耦合到控制部件外部的dram,以缓存ai部件的神经网络的参数。ai部件可以是ip核、cpu核或耦合到控制器的asic芯片。

该实施例中,读命令被应用的场景是神经网络的输入,而读命令参数(例如,读出阈值电压、读出数据的错误比特数和/或读命令参数的序列)是同神经网络的输入对应的预期输出,用于对学习过程的监督。通过训练,神经网络对读命令被应用的多种场景进行分类,场景的类别与能在该场景下读出可被ecc部件成功错误校正的数据的读命令参数对应,与能在该场景下读出可被ecc部件以较高几率成功错误校正的数据的读命令参数对应,与能在该场景下读出错误比特数较低或低于阈值的数据的读命令参数对应,或者与读命令参数序列对应,其中使用根据读命令参数序列产生的读命令序列从nvm芯片读出的数据组合,能够以较高几率以及较少的重读次数被ecc部件成功错误校正,或者通过软译码可被ecc部件成功错误校正或以较高几率成功错误校正。

读命令被应用的场景的属性包括读命令访问的lun(由lun号识别)、物理块(由物理块地址识别)、物理页类型(lsb/csb/msb)、物理块上的数据被写入至今的时间间隔、物理块的被擦除次数、物理块的错误率、物理块被读取次数和/或物理块是否被完整写入(以及当前被写入的位置(由物理页地址识别))。

以多种属性信息描述读命令应用的场景,并提供给ai部件。作为举例,物理块上的数据被写入至今的时间间隔包括或不包括固态存储设备处于掉电状态的时间。

可选地,读命令被应用的场景的属性信息还包括读命令访问的物理页(由物理页地址指示),上次对该物理页读出的数据错误校正成功的读命令参数(例如,读出阈值电压、读出数据的错误比特数、读命令参数的序列、软译码错误校正成功的读命令参数的序列和/或之前读出数据错误校正成功率高的一个或多个读命令参数)。

多种属性信息之一或其多种组合可被用来训练ai部件的神经网络。

在根据本申请的一种实施方式中,ecc部件对读出数据的错误校正会失败,并且作为响应,通过重读等手段重新读取数据。而响应于通过重读等手段获取了可能成功地错误校正的数据,将对应的读命令参数与读命令被应用的场景用于训练ai部件的神经网络。

在根据本申请的进一步实施方式中,响应于ecc部件对读出数据的错误校正失败,将对应的读命令参数与读命令被应用的场景也用于训练ai部件的神经网络。

在根据本申请的又一种实施方式中,控制部件的cpu核(图中未示出)识别ecc部件对读出数据的错误校正结果,并将对应的读命令参数与读命令被应用的场景提供给ai部件,以训练ai部件的神经网络。cpu核通过执行软件,控制ai部件的训练、推断、开启和/或关闭。

依然可选地,响应于主机的命令或指示,为ai部件设置神经网络的参数,所设置的神经网络的参数可以存储在固态存储设备的nvm芯片中或由主机提供。可选地,响应于主机的命令或指示,从ai部件获取经学习得到的神经网络参数,并提供给主机或存储在固态存储设备的nvm芯片中,以供其他固态存储设备使用。

继续参看图18,以固态存储设备读命令处理流程为例,主机向固态存储设备的命令下发队列发出读访问命令(1)。主机发出的读访问命令经过处理,并被转发给介质接口控制器(2)。介质接口控制器根据主机发出的读访问命令向nvm芯片发出命令(3)。介质接口控制器还从nvm芯片获取读命令的处理结果(4)。对于读命令,从nvm芯片读出的数据被提供给ecc部件进行错误校正(5)。若ecc部件对数据的错误校正成功,处理完成的读命令被添加到命令完成队列(6),并且当前读命令被应用的场景与读命令参数还被转发给ai部件(6),用于训练ai部件的神经网络。训练ai部件所得的结果被记录在控制部件的存储器、动态随机存取存储器(dram)或者nvm芯片中。

可选地,在ai部件中提供多个神经网络,每个神经网络服务于固态存储设备lun或物理块中的一个或多个,从而降低提供给ai部件的每个神经网络的参数的数量,进而降低对神经网络的规模和/或训练/推断时间的需求。例如,固态存储设备包括32个lun,而ai部件提供同32个lun对应的4个或32个神经网络,每个神经网络负责处理指定的8个或1个lun的读命令。ai部件依据读命令被应用的场景中指示的lun,将读命令参数与读命令被应用的场景提供给对应的神经网络以训练该神经网络。

图19是根据图18的实施例的固态存储设备处理读命令的示意图。

在图19的实施例中,主机向固态存储设备的命令下发队列发出读访问命令(1)。主机发出的读访问命令经过处理,并被转发给介质接口控制器(2)。介质接口控制器根据主机发出的读访问命令向nvm芯片发出读命令(3)。介质接口控制器还从nvm芯片获取命令处理结果(4)。对于读命令,从nvm芯片读出的数据被提供给ecc部件进行错误校正(5)。若ecc部件对数据的错误校正失败,读命令被应用的场景(可选地,还包括读命令参数(例如,读出阈值电压、读出数据的错误比特数和/或读命令参数的序列))被转发给ai部件(6)。ai部件根据接收的读命令被应用的场景推断最佳的读命令参数(例如,读出阈值电压或具有不同读出阈值电压的读命令序列),生成重读命令,将重读命令发送给介质接口控制器(7)。介质接口控制器根据重读命令向nvm芯片发出重读命令(8)。介质接口控制器还从nvm芯片获取重读命令的处理结果(9)。重读命令读出的数据被提供给ecc部件(10)。若ecc部件对读出数据的错误校正失败,由ai部件再次发起从步骤(6)到步骤(10)的过程。若ecc部件对读出数据的错误校正成功,处理完成的命令被添加到命令完成队列(11)。通过访问命令完成队列,主机获取命令处理结果(12)。

在根据本申请的又一种实施方式中,控制部件的cpu核(未示出)识别ecc部件对读出数据的错误校正结果,并将对应的读命令被应用的场景(可选地,还包括读命令参数)提供给ai部件,ai部件生成重读命令,并在控制部件的cpu核(未示出)的控制下将重读命令发送给介质接口控制器。

可选地,控制部件还包括重读部件(参看图2与图7)。重读部件与ai部件并行工作。作为举例,响应于ecc部件对读出数据的错误校正首次失败,采用ai部件生成重读命令,以及响应于ecc部件对读出数据的错误校正的后续失败,采用重读部件生成的重读命令。作为又一个例子,响应于ecc部件对读出数据的错误校正首次失败,采用重读部件生成重读命令,以及响应于ecc部件对重读部件建议的重读命令读出数据的错误校正失败,再采用ai部件生成的重读命令。重读命令中指示重读命令的读命令参数,产生读命令参数的方法请参照关于图8-17的描述。

可选地,ai部件的神经网络根据接收的读命令被应用的场景推断同当前场景最匹配的场景类别,并根据最匹配的场景类别选择读命令参数和/或读命令序列。

在一个例子中,ai部件的神经网络根据读命令被应用的场景获得同当前场景最匹配的场景类别,并根据该场景类别生成重读命令或重读命令序列,并通过介质接口控制器将重读命令或重读命令序列发送给非易失性存储器。在又一个例子中,ai部件的神经网络根据读命令被应用的场景获得同当前场景最匹配的场景类别,并根据读命令被应用的场景以及对应于错误校正失败的当前读命令的读命令参数生成重读命令或重读命令序列,并通过介质接口控制器将重读命令或重读命令序列发送给非易失性存储器。

依然可选地,若ai部件包括多个神经网络,每个神经网络服务于固态存储设备逻辑单元号(lun)或物理块中的一个或多个。响应于ecc部件对读出数据的错误校正失败,依据读命令被应用的场景中指示的lun和/或物理块,将当前读命令参数和/或读命令被应用的场景提供给对应的神经网络,以推断出适合与当前读命令被应用场景的读命令参数和/或读命令序列。

根据图18与图19的实施例中,在ecc部件错误校正失败的情况下,由ai部件控制发出一次或多次重读过程,提升了重读命令读出数据的错误校正成功率,减少了固态存储设备与主机的交互,降低了读命令处理延迟。

本发明实施例的阈值设置方法可应用于基于nvm芯片的固态存储设备,包括但不限于固态硬盘、u盘、sd卡,还可以应用于手机、平板电脑等便携式电子设备,以及其他多种使用nvm芯片(诸如nand闪存、相变存储器、feram、mram等是常见的nvm。)的需要存储信息的电子设备。

尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

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