具有应用程序感知纠错码的非易失性存储系统的制作方法

文档序号:18902212发布日期:2019-10-18 22:05阅读:216来源:国知局
具有应用程序感知纠错码的非易失性存储系统的制作方法

非易失性半导体存储器用于固态驱动器(ssd)中。随着互联网规模的服务不断增长,通过对大量数据进行即席查询的实时数据处理和数据分析正在成为关键应用。另外,随着存储器密度不断扩大,ssd容量继续呈指数增长。当前的企业系统配备较差以致于无法管理这些趋势,因为它们依赖于将大量数据移入系统的主存储器以进行处理。这些解决方案依赖于将数据存储在一个位置(即,如同ssd的存储设备)处,并且将数据移动到不同的位置(通常是dram)以进行计算。虽然该方法适用于数据量有限的一些应用,但由于传输数据所浪费的时间以及在此类系统中包含大规模(例如,拍字节)dram容量的过高成本和功耗,具有大规模数据的应用无法使用该方法。

ssd或其他存储器系统的一个用途是用于数据库的存储。数据库中的记录可能由多个字段组成。查询可以测试某些字段并选择满足指定条件的记录。此外,查询可以仅检索所选择的记录中的字段中的一些。为了保护存储在存储器系统中的数据的完整性,数据通常由纠错码(ecc)保护。通常,ecc码字中包括了一个或多个记录。在传统ecc方案诸如ldpc或bch代码中,码字中的所有位需要在生成任何解码位之前解码。因此,即使对数据库的查询仅涉及几个字段,也需要解码整个记录。解码复杂性和功率浪费在那些不相关的字段上,从而阻止实现非常高的吞吐量。

附图说明

类似编号的元件是指不同图中的共同部件。

图1是固态驱动器的一个实施方案的框图,该固态驱动器包括控制器、用于存储数据的非易失性存储器以及在数据位置附近的可用于执行公用数据操纵操作的计算引擎。

图2是固态驱动器的一个实施方案的框图,该固态驱动器包括控制器、用于存储数据的非易失性存储器以及在数据位置附近的可用于执行公用数据操纵操作的计算引擎。

图3是具有计算引擎的前端处理器电路的一个实施方案的框图。前端处理器电路是控制器的一部分。

图4是后端处理器电路的一个实施方案的框图。在一些实施方案中,后端处理器电路是控制器的一部分。

图5是存储器封装件的一个实施方案的框图。

图6是存储器管芯的一个实施方案的框图。

图7是固态驱动器的一个实施方案的框图,该固态驱动器包括控制器、用于存储数据的非易失性存储器以及在数据位置附近的可用于执行公用数据操纵操作的计算引擎。

图8是固态驱动器的一个实施方案的框图,该固态驱动器包括控制器、用于存储数据的非易失性存储器以及在数据位置附近的可用于执行公用数据操纵操作的计算引擎。

图9是没有计算引擎的前端处理器电路的一个实施方案的框图。在一些实施方案中,前端处理器电路是控制器的一部分。

图10是固态驱动器的一个实施方案的框图,该固态驱动器包括控制器、用于存储数据的非易失性存储器以及在数据位置附近的可用于执行公用数据操纵操作的计算引擎。

图11是具有计算引擎的后端处理器电路的一个实施方案的框图。在一些实施方案中,后端处理器电路是控制器的一部分。

图12是固态驱动器的一个实施方案的框图,该固态驱动器包括控制器、用于存储数据的非易失性存储器以及在数据位置附近的可用于执行公用数据操纵操作的计算引擎。

图13a是固态驱动器的一个实施方案的框图,该固态驱动器包括控制器、用于存储数据的非易失性存储器以及在数据位置附近的可用于执行公用数据操纵操作的计算引擎。

图13b是固态驱动器的一个实施方案的框图,该固态驱动器包括控制器、用于存储数据的非易失性存储器以及在数据位置附近的可用于执行公用数据操纵操作的计算引擎。

图14是具有计算引擎的存储器封装件的一个实施方案的框图。

图15是固态驱动器的一个实施方案的框图,该固态驱动器包括控制器、用于存储数据的非易失性存储器以及在数据位置附近的可用于执行公用数据操纵操作的计算引擎。

图16是具有计算引擎的存储器管芯的一个实施方案的框图。

图17是固态驱动器的一个实施方案的框图,该固态驱动器包括控制器、用于存储数据的非易失性存储器以及在数据位置附近的可用于执行公用数据操纵操作的计算引擎。

图18是具有在存储器阵列下方的电路的存储器管芯的一个实施方案的框图。

图19是具有在存储器阵列下方的电路的存储器管芯的一个实施方案的框图。

图20是示出用于实现应用程序感知纠错码的实施方案中涉及的元件中的一些的框图。

图21示出了示例性集成交织(ii)ecc代码的结构。

图22是描述将使用集成交织代码编码的用户数据写入到存储器管芯中的一个实施方案的流程图。

图23示出了用于面向行的数据库的应用程序感知集成交织(ii)解码的示例。

图24是描述从存储器管芯读取使用集成交织代码编码的用户数据的一个实施方案的流程图。

图25示出用于面向列的数据库的应用程序感知集成交织(ii)解码的示例。

图26示出使用列代码和行代码两者的乘积码的结构。

图27是描述将使用乘积码结构编码的用户数据写入到存储器管芯中的一个实施方案的流程图。

图28示出用于面向行的数据库的应用程序感知乘积码解码的示例。

图29是描述从存储器管芯读取使用乘积码结构编码的用户数据的一个实施方案的流程图。

图30示出用于面向列的数据库的应用程序感知乘积码解码的示例。

具体实施方式

为了提高数据分析的数据吞吐率,提出了以数据为中心的模型,该模型将计算资源分配到非易失性存储器系统的存储元件附近。数据在存储元件旁边或附近进行处理、分析或两者,并且结果通过有限带宽i/o路径发送到主机。这种存储装置中或附近计算不仅弥合大数据分析所需的非常高的吞吐量与有限存储设备i/o带宽之间的差异,而且还大大地减少跨存储堆栈移动数据所需的能量。

纠错码(ecc)用于帮助确保数据完整性。从nand或其他存储介质读取的数据经过纠错解码器,使得在任何计算和分析涉及可能错误之前校正可能错误。为了匹配存储装置中或附近数据处理可实现的高速,纠错引擎可以以高吞吐率(例如,10gb/s或更高)运行。即使考虑到集成电路技术的可能进步,传统ecc方案也很难实现如此高的吞吐量。

下面呈现的是ecc方案,该ecc方案利用分析查询的细节,并且仅对相关字段和所选择的记录进行解码,而忽略其他字段。在选择记录的一小部分和/或涉及几个字段的情况(其发生在大多数的大数据分析查询中)下,这种查询感知ecc方案可以在解码吞吐量和复杂性方面带来数量级改进。

应用程序感知ecc方案利用有关数据库模式和数据查询的知识,并且尽可能地仅对与查询相关的字段进行解码。具体地,根据实施方案,ecc解码器可能可用以下信息:

1.逻辑和物理数据库模式,包括数据库行的大小、列或字段的数量及其大小,以及布局是面向行的还是面向列的。

2.在逐个查询的基础上告知解码器关于将如下的字段集(或记录的列):

–由查询在测试条件中(诸如在“选择…其中”表达中)使用;

–被预测来根据查询从所选择的行检索;以及/或者

–不关心的(逻辑、数字、分支和界限)

3.ecc算法可以任选地知道执行用于搜索数据库的查询的指定次序(测试估计次序),诸如“a列上的条件将在列b上的条件之前测试”。

两种ecc方案被描述为仅对与查询相关的字段进行解码,而忽略其他字段。它们是集成交织(ii)代码和乘积码。与在将由分析使用的任何字段可用之前解码整个记录的传统ecc方案相比,应用程序感知ecc方案可以实现数量级吞吐量提升和/或显著地降低的解码器复杂性。

在进一步考虑ecc和纠错引擎之前,下面将研究在存储器系统内并更具体地是在ssd内集成纠错引擎的各种选项中的一些。在下面考虑的实施方案中,存储器封装件可以是指含有nand管芯、reram管芯、其他非易失性技术或这些的某种组合的封装。术语存储器封装件还可以指受管理存储器,即含有存储器管芯的存储器封装件,该存储器管芯具有嵌入式纠错码(“ecc”)引擎/控制器,以校正在对存储器的读取操作期间检测到的错误。

图1是ssd10的一个实施方案的框图,该ssd包括控制器(ssd控制器)12,用于存储数据的非易失性存储器封装件14,dram/reram16,以及数据位置附近的可用于执行公用数据操纵操作的计算引擎22。图1呈现了高级设计,其中计算引擎22集成在ssd控制器12内。计算引擎22可以是例如作为ssd控制器片上系统(“soc”)的一部分的asic,或者可以被(更深地)集成为ssd控制器内的硬件电路。图1示出ssd控制器12,soc,其包括现有ssd控制器部件,该ssd控制器部件包括ftl引擎32、纠错(ecc)引擎34和用于控制dram/reram16的ddr存储器控制器36。包括在ssd控制器12内的是新提出的计算引擎22,该计算引擎可用于对存储在存储器封装件的非易失性存储器中的数据执行计算操作。计算操作的示例包括扫描数据、搜索、过滤、排序、聚合数据,将数据连接在一起,以及数据上的其他功能。图1示出与dram/reram16通信并且与一组一个或多个存储器封装件14通信的ssd控制器12。在一个实施方案中,ssd控制器12使用切换模式接口与存储器封装件(和/或存储器管芯)通信,该切换模式接口是能够以32gb/s通信的异步接口。可供选择的实施方案可使用onfi接口(开放nand闪存接口),该接口是同步的并且利用时钟。

存储器封装件包括一个或多个存储器管芯。在一个实施方案中,每个存储器管芯将包括其本身的芯片使能,该芯片使能可由ssd控制器12控制。在其他实施方案中,多个存储器管芯可共享芯片使能,这要求ssd控制器12使用寻址来在共享芯片使能的存储器管芯之间进行选择。在一个实施方案中,存储器封装件14中的存储器管芯使用nand闪存存储器。在其他实施方案中,存储器封装件可包括交叉点reram非易失性存储器,其在下文中有所讨论。

图2是固态驱动器100的一个实施方案的框图,该固态驱动器包括控制器102,用于存储数据的非易失性存储器104,dram/reram106以及数据位置附近的可用于执行公用数据操纵操作的计算引擎114。图2的实施方案包括ssd控制器102,该ssd控制器包括前端处理器电路(fep)110以及一个或多个后端处理器电路(bep)112。在一个实施方案中,fep电路110在asic上实现。在一个实施方案中,每个bep电路112在单独asic上实现。用于bep电路112和fep电路110中的每个的asic在相同半导体上实现,使得ssd控制器102被制造为soc。fep110和bep112均包括其本身的处理器。在一个实施方案中,fep110和bep112用作主从配置,其中fep110是主设备,并且每个bep112是从设备。例如,fep电路110实现闪存转换层,包括执行存储器管理(例如,垃圾收集、损耗均衡等)、逻辑到物理地址转换、与主机的通信、dram(本地易失性存储器)的管理以及ssd(或其他非易失性存储系统)的整体操作的管理。bep电路112根据fep电路110的请求来管理存储器封装件/管芯中的存储器操作。例如,bep电路112可进行读取、擦除和编程过程。另外,bep电路112可执行缓冲器管理,设置fep电路110所需的特定电压电平,执行纠错(ecc),控制到存储器封装件的切换模式接口等。在一个实施方案中,每个bep电路112负责其本身的一组存储器封装件。图2示出以4gb/s的带宽与bep电路112中的每个通信的fep电路110。在图2的实施方式中,计算引擎114被设计为fep110内的硬件电路。计算引擎可使用ddr接口访问高速、高带宽存储器以访问dram106。在该实施方式中,计算引擎可用的带宽受到将fep110连接到bep112的带宽的限制。

图3是fep电路的一个实施方案的框图,其中计算引擎114被设计到电路中。图3的fep电路是图2的fep电路110的一个示例性实施方式。图3示出与主机通信的pcie接口150,以及与pcie接口通信的主机处理器152。主机处理器152可以是本领域中已知的适用于实现的任何类型的处理器。主机处理器152与片上网络(noc)154通信。noc是集成电路上的通信子系统,通常在soc中的核心之间。noc可跨越同步和异步时钟域,或者使用非时钟的异步逻辑。noc技术将网络理论和方法应用于片上通信,并且与常规总线和交叉开关互连相比带来了显著的改善。与其他设计相比,noc提高了soc的可扩展性以及复杂soc的功效。noc的导线和链路由许多信号共享。由于noc中的所有链路可在不同的数据包上同时运行,因此实现了高水平的并行性。因此,随着集成子系统的复杂性不断增长,与先前的通信体系结构(例如,专用的点对点信号线、共享总线或具有桥的分段总线)相比,noc提供增强的性能(诸如吞吐量)和可扩展性。连接到noc154并且与noc154通信的是存储器处理器156、计算引擎114、sram160和dram控制器162。dram控制器162用于操作dram(例如,dram106)并且与该dram通信。sram160是由计算引擎114或存储器处理器156使用的本地ram存储器。存储器处理器156用于运行fep电路并且执行各种存储器操作。与noc通信的还有两个pcie接口164和166。在图3的实施方案中,ssd控制器将包括两个bep电路;因此,存在两个pcie接口164/166。每个pcie接口与bep电路中的一个通信。在其他实施方案中,可存在多于或少于两个bep电路;因此,可存在多于两个pcie接口。在这些布置中,计算引擎114(从主机的角度来看)定位在到主机的接口150后面(例如,在到主机的接口的存储器系统侧上),并且在由控制器暴露(例如,由fep电路暴露)的api后面。

图4是bep电路的一个实施方案的框图。图4的bep电路是图2的bep电路112的一个示例性实施方式。图4示出用于与fep电路通信(例如,与图3的pcie接口164和166中的一个通信)的pcie接口200。pcie接口200与两个noc202和204通信。在一个实施方案中,两个noc可以被组合成一个大的noc。每个noc(202/204)通过xor引擎(224/254)和纠错ecc引擎(226/256)连接到sram(230/260)、缓冲器(232/262)、处理器(220/250)和数据路径控制器(222/252)。ecc引擎226/256用于执行纠错,如本领域所知。xor引擎224/254用于对数据进行异或,使得可在存在编程错误的情况下以可恢复的方式组合和存储数据。数据路径控制器连接到接口模块,以用于通过四个信道与存储器封装件进行通信。因此,顶部noc202与用于与存储器封装件通信的四个信道的接口228相关联,并且底部noc204与用于与存储器封装件通信的四个附加信道的接口258相关联。每个接口228/258包括四个切换模式接口(tm接口)、四个缓冲器和四个调度器。对于信道中的每个信道存在一个调度器、缓冲器和tm接口。处理器可以是本领域中已知的任何标准处理器。数据路径控制器222/252可以是处理器、fpga、微处理器、或其他类型的控制器。xor引擎224/254和ecc引擎226/256是专用的硬件电路,称为硬件加速器。在其他实施方案中,xor引擎224/254和ecc引擎226/256可在软件中实现。调度器、缓冲器和tm接口是硬件电路。

图5是存储器封装件的一个实施方案的框图。例如,图5的存储器封装件是包括在图1的存储器封装件14或图2的存储器封装件104中的存储器封装件的示例性实施方式。图5示出连接到存储器总线(数据线和芯片使能线)294的多个存储器管芯292。存储器总线294连接到切换模式接口296以用于与bep电路的tm接口进行通信(参见例如图4)。在一些实施方案中,存储器封装件可包括连接到存储器总线和tm接口的小控制器。存储器封装件可具有一个或多个存储器管芯。在一个实施方案中,每个存储器封装件包括8或16个存储器管芯;然而,也可以实现其他数量的存储器管芯。本文描述的技术不限于任何特定数量的存储器管芯。

图6是存储器管芯300的一个实施方案的功能框图。应当注意,存储器是图5的存储器管芯292的一个示例性实施方式。图6中描绘的部件为电子电路。存储器管芯300包括存储器单元的三维存储器结构326(诸如存储器单元的3d阵列)、控制电路310和读取/写入电路328。在其他实施方案中,可使用存储器单元的二维阵列。存储器结构326能够经由行解码器324由字线来寻址,并且经由列解码器332由位线来寻址。读取/写入电路328包括多个感测块350并且允许存储器单元页面被并行读取或并行编程,该感测块包括sb1、sb2、…、sbp(感测电路)。命令和数据经由线路318向/从存储器管芯300传输。在一个实施方案中,存储器管芯300包括连接到线路318的一组输入和/或输出(i/o)引脚。

存储器结构326可以包括一个或多个存储器单元阵列,该存储器单元阵列包括3d阵列。存储器结构可包括单片三维存储器结构,其中多个存储器级形成在诸如晶片的单个基板上方(不在其中),没有居间衬底。存储器结构可包括任何类型的非易失性存储器,该非易失性存储器在具有设置在硅基板上方的有源区域的存储器单元阵列的一个或多个物理级中单片地形成。存储器结构可在非易失性存储器设备中,该非易失性存储器设备具有与存储器单元的操作相关联的电路,无论相关联的电路是在基板上方还是在基板内。

控制电路310与读取/写入电路328配合以在存储器结构326上执行存储器操作(例如,擦除、编程、读取等),并且包括状态机312、芯片上地址解码器314以及功率控制模块316。在一个实施方案中,状态机312可由软件编程。在其他实施方案中,状态机312不使用软件并且完全以硬件(例如,电子电路)实现。在一个实施方案中,控制电路310包括寄存器、rom熔丝和用于存储默认值(诸如基准电压和其他参数)的其他存储设备。

片上地址解码器314将主机或控制器使用的地址之间的地址接口提供给解码器324和332使用的硬件地址。功率控制模块316控制在存储器操作期间提供给字线和位线的功率和电压。其可包括用于3d配置中的字线层(下文所讨论)的驱动器、选择晶体管(例如,下文所述的sgs和sgd晶体管)和源极线。功率控制模块316可以包括用于产生电压的充电泵。感测块包括位线驱动器。

存储器结构326中的多个存储器元件可以被配置为使得它们串联连接或使得每个元件是可单独访问的。作为非限制性示例,nand配置(nand闪存存储器)中的闪存存储器设备通常包含串联连接的存储器元件。nand字符串是一组串联连接的存储器单元和选择栅晶体管的示例,其可用于将存储器结构326实现为三维存储器结构。

可配置nand闪存存储器阵列,使得阵列由多个nand字符串构成,该nand字符串由多个共享单一位线并作为组访问的存储器单元构成。另选地,可配置存储器元件,使得每个元件可被单独访问,例如nor存储器阵列。nand和nor存储器配置是示例性的,并且可以其他方式配置存储器单元。

存储器单元可以有序阵列布置在单个存储器设备中,诸如以多个行和/或列布置。然而,存储器元件可以非规则配置或非正交配置排列,或者以不视作阵列的结构排列。

布置三维存储器阵列,使得存储器单元占据多个平面或多个存储器设备级,从而形成三维结构(即x,y和z方向,其中z方向基本上垂直,并且x方向和y方向基本上平行于基板的主表面)。

作为非限制性示例,三维存储器结构可被垂直地布置为多个二维存储器设备级的叠堆。作为另一个非限制性示例,三维存储器阵列可被布置为多个垂直列(例如,基本上垂直于基板的主表面延伸的列,即沿y方向),每列具有多个存储器单元。垂直列可以二维配置布置,例如,在x-y平面中由存储器单元的三维布置产生的配置,其中存储器单元位于多个垂直堆叠的存储器平面上。三维存储器元件的其他配置也可构成三维存储器阵列。

作为非限制性示例,在三维nand存储器阵列中,存储器元件可耦接在一起以形成横穿多个水平存储器设备级的具有电荷捕集材料的垂直nand字符串。可用于实现存储器结构326的三维nand存储器阵列的一个示例可以见于美国专利9,343,156,该专利全文以引用方式并入本文。

可设想到其他三维配置,其中一些nand字符串包含在单个存储器级中的存储器元件,而其他字符串则包含跨越多个存储器级的存储器元件。三维存储器阵列也可以nor配置以及reram配置来设计。

本领域普通技术人员将认识到,本文所述的技术不限于单个特定存储器结构,但涵盖了在本文所述和如本领域普通技术人员所理解的技术实质与范围内的许多相关的存储器结构。

虽然示例性存储器系统是包括具有电荷捕集材料的垂直nand字符串的三维存储器结构,但是其他(2d和3d)存储器结构也可与本文所述的技术一起使用。例如,也可使用浮栅存储器(例如,nand型和nor型闪存存储器)、reram存储器、磁阻存储器(例如,mram)和相变存储器(例如,pcram)。

reram存储器的一个示例包括可逆电阻切换元件,其布置在由x线和y线(例如,字线和位线)访问的交叉点阵列中。可用于实现存储器结构326的三维存储器阵列的一个示例可以见于名称为“highendurancenon-volatilestorage(高耐久性非易失性存储装置)”的美国专利申请2016/0133836,该申请全文以引用方式并入本文。

在另一个实施方案中,存储器单元可包括导电桥存储器元件。导电桥存储器元件也可称为可编程金属化单元。基于固体电解质内的离子的物理重新定位,导电桥存储器元件可用作状态改变元件。在一些情况下,导电桥存储器元件可包括两个固体金属电极,一个是相对惰性的(例如,钨),而另一个是电化学活性的(例如,银或铜),在两个电极之间具有固体电解质的薄膜。随着温度升高,离子的迁移率也增加,这导致导电桥存储器单元的编程阈值降低。因此,导电桥存储器元件可在整个温度范围内具有宽范围的编程阈值。

磁阻存储器(mram)通过磁存储元件存储数据。元件由两个铁磁板形成,每个铁磁板可保持磁化,由薄的绝缘层隔开。两个板中的一个板是设置为特定极性的永磁体;可以改变另一个板的磁化以匹配外磁场的磁化以存储内存。该配置称为自旋阀,并且是mram位的最简单结构。存储器设备由此类存储器单元的网格构建。在用于编程的一个实施方案中,每个存储器单元位于一对写入线之间,该对写入线被布置成彼此成直角,与单元平行,一个在单元上方并且一个在单元下方。当电流通过它们时,产生感应磁场。

相变存储器(pcram)利用了硫属化物玻璃的独特行为。一个实施方案使用gete-sb2te3超晶格通过简单地用激光脉冲(或来自另一个源的光脉冲)改变锗原子的配位状态来实现非热相变。因此,编程的剂量是激光脉冲。可以通过阻止存储器单元接收光来抑制存储器单元。应当注意,在该文件中使用“脉冲”不需要正方形脉冲,但包括声音、电流、电压光或其他波的(连续或非连续)振动或脉冲串。

图7是固态驱动器400的一个实施方案的框图,该固态驱动器包括控制器402、用于存储数据的非易失性存储器封装件404、dram/reram406,以及该数据位置附近的可用于执行公用数据操纵操作的计算引擎412。控制器402包括fep电路410。在图7的实施方案中,将计算引擎412集成在fep电路410内,并且一个或多个bep电路422现在结合在存储器封装件404内。在该实施方式中,ssd控制器包含用于fep电路的仅一个asic。也就是说,ssd控制器402与存储器封装件404通信,其中每个存储器封装件包括多个存储器管芯420以及一个或多个bep电路422。存储器管芯420的一个示例性实施方案在图6中描绘。bep电路422的一个示例在图4中描绘。具有集成计算引擎412的fep电路410的一个示例在图3中描绘。

图8是固态驱动器450的一个实施方案的框图,该固态驱动器包括控制器460、用于存储数据的非易失性存储器封装件454、dram/reram456,以及数据位置附近的可用于执行公用数据操纵操作的计算引擎464。在图8的实施方案中,计算引擎464是独立的asic(专用集成电路),其与ssd控制器460集成为soc。在该实施方式中,控制器460包括与一个或多个bep电路462通信的fep电路460。计算引擎464在fep电路462的外部并连接到fep电路462,连接到bep电路,并且通过单独的接口连接到高速dram存储器。计算引擎464可用的带宽低于或等于图2的实施方案的带宽。当fep电路462和计算引擎464的开发需要保持分离时,该实施方式是优选的。bep电路422的一个示例在图4中描绘。存储器封装件454的一个示例在图5中描绘。

图9是没有计算引擎的fep电路的一个实施方案的框图,该fep电路适用于图8的实施方案(例如,fep电路460)。图9示出图3的所有部件,但是没有计算引擎。也就是说,图9描绘了pcie接口150、主机处理器152、noc154、存储器处理器156、sram160、dram控制器162,以及pcie接口164和166。在图9的实施方案中,ssd控制器将包括两个bep电路;因此,存在两个pcie接口。每个pcie接口与bep电路中的一个通信。在其他实施方案中,可存在多于或少于两个bep电路;因此,可存在多于或少于两个pcie接口。

图10是固态驱动器600的一个实施方案的框图,该固态驱动器包括控制器602、用于存储数据的非易失性存储器封装件604、dram/reram606,以及数据位置附近的可用于执行公用数据操纵操作的计算引擎616。控制器602包括连接到一个或多个bep电路614的fep电路612。在该实施方案中,计算引擎616与bep电路614集成。也就是说,计算引擎616在用于bep电路614的asic中实现。现在,计算引擎可用的带宽由每个bep电路中存在的切换模式信道的数量和切换模式信道的带宽确定。bep电路614还可包含任选的接口620以连接到dram/reram芯片。到高速存储器的直接接口为计算引擎616提供对存储器的快速访问以存储临时工作数据。在不存在直接接口的情况下,临时工作数据通过将bep电路连接到fep电路的接口流式传输。fep电路612的一个示例在图9中描绘。存储器封装件604的一个示例在图5中描绘。

图11是包括计算引擎的bep电路的一个实施方案的框图。图11的bep电路的实施方案适用于图10的实施方案(例如,作为bep电路614)。图11的部件与图4的部件相同,但是还包括连接到顶部noc202的计算引擎702和连接到底部noc204的第二计算引擎704。在另一个实施方案中,一个计算引擎可连接到两个noc。在另一个实施方案中,两个noc连接在一起,并且组合的noc将连接到一个、两个或多个计算引擎。在图11的实施方案中,每组四个信道有一个计算引擎。在其他实施方案中,分组在一起的信道可包括多于或少于四个信道。

图12是固态驱动器800的一个实施方案的框图,该固态驱动器包括控制器802、用于存储数据的非易失性存储器封装件804、dram/reram806,以及数据位置附近的可用于执行公用数据操纵操作的计算引擎824。控制器802包括连接到一个或多个bep电路822的fep电路820。在图12的实施方案中,计算引擎824是独立的asic,其直接连接到来自bep电路的切换模式(tm)信道。在此类实施方式中,计算引擎应当任选地包括纠错引擎,以便在由计算引擎处理之前解码和校正从闪存存储器(或存储器封装件中的其他类型的非易失性存储器)读取的数据。计算引擎824还可通过到dram/reram芯片以及到fep电路820的标准ddr接口连接到高速、高带宽dram存储器806。fep电路820的一个示例在图9中描绘。存储器封装件804的一个示例在图5中描绘。bep电路822的一个示例在图4中描绘。

下表列出了到目前为止所展示设计的特性:

上面讨论的实施方案示出了将计算引擎与控制器集成的各种实施方式。在一组不同的实施方式中,计算引擎可与存储器封装件集成,称为存储器封装件级集成。

图13a是包括存储器封装件级集成的固态驱动器850的一个实施方案的框图,该固态驱动器包括控制器852、用于存储数据的非易失性存储器封装件854、dram/reram856,以及在数据位置附近的可用于执行公用数据操纵操作的计算引擎862。控制器852包括连接到一个或多个bep电路860的fep电路858。一个或多个bep电路860连接到非易失性存储器封装件854。fep电路858的一个示例在图9中描绘。bep电路860的一个示例在图4中描绘。在图13a中描绘的实施方案中,计算引擎与每个存储器封装件集成。现在修改通常包括多个存储器管芯(例如,nand非易失性存储器或其他类型的非易失性存储器)的存储器封装件,以在存储器封装件内包括计算引擎asic。在一个实施方案中,存储器封装件还应包括纠错引擎(或纠错引擎的至少解码器部分),以解码从存储器读取的码字,并且在由计算引擎处理之前校正从非易失性存储器管芯读取的数据。因此,计算引擎862包括纠错(ecc)引擎。在其他实施方案中,计算引擎可对未经过ecc解码的数据进行操作。存储器封装件可任选地包括如同dram的高速存储器以支持计算引擎访问临时工作数据。由于数据管理操作在存储器封装件内,因此计算引擎可用的带宽可远高于存储器封装件外部可用的切换模式(tm)带宽。

图13b是固态驱动器880的一个实施方案的框图,该固态驱动器包括控制器882、用于存储数据的非易失性存储器封装件884、以及dram/reram886。控制器882包括fep电路888,该fep电路连接到一个或多个bep电路890。一个或多个bep电路890连接到非易失性存储器封装件884。fep电路888的一个示例在图9中描绘。bep电路890的一个示例在图4中描绘。图13b中描绘的实施方案包括多个(或分布式)计算引擎,使得计算引擎892定位在控制器882中,并且一组计算引擎(具有内置ecc引擎)894定位在非易失性存储器封装件884中。例如,计算引擎892是独立的asic,其直接连接到来自bep电路(bep电路和存储器封装件/管芯之间的接口)的切换模式(tm)信道。计算引擎892还可通过到dram/reram芯片以及到fep电路888的标准ddr接口连接到高速、高带宽dram存储器886。计算引擎894与每个存储器封装件集成。在一个实施方案中,存储器封装件还包括纠错引擎(或ecc引擎的至少解码器部分),以解码从存储器读取的码字,并且在由计算引擎处理之前校正从非易失性存储器管芯读取的数据。因此,计算引擎894包括ecc引擎。在其他实施方案中,计算引擎可对未经过ecc解码的数据进行操作。存储器封装件可任选地包括如同dram的高速存储器以支持计算引擎访问临时工作数据。由于一些数据操纵操作在存储器封装件内,因此计算引擎可用的带宽可远高于存储器封装件外部可用的切换模式(tm)带宽。在一些实施方案中,计算引擎892和894将拆分对数据执行的工作。例如,来自主机的代码可对系统进行编程以对计算引擎892执行一些操作并且对计算引擎894执行其他操作。例如,计算引擎894可执行纠错编码(ecc)功能连同简单的应用程序级别测试,并且计算引擎892可执行针对顺序或索引顺序工作负载优化的闪存转换层(ftl),连同应用程序查询级别的更复杂的过滤、排序和分组功能。

图14是包括计算引擎的存储器封装件的一个实施方案的框图。图14的实施方案可以用于实现图13a中的存储器封装件854或图13b的存储器封装件884中的一者。图14的存储器封装件包括连接到存储器总线906(类似于图5的存储器总线)的多个存储器管芯904。存储器总线906连接到tm接口908以用于与bep电路通信。另外,图14示出连接到存储器总线并且连接到纠错(ecc)引擎912的计算引擎910。ecc引擎912还连接到存储器总线906。从存储器管芯读取的存储器可经历ecc解码(包括固定错误),然后呈现给计算引擎910以执行本文所讨论的计算操作中的任一个。

图15是固态驱动器950的一个实施方案的框图,该固态驱动器包括控制器952、用于存储数据的非易失性存储器封装件956、dram/reram954,以及该数据位置附近的可用于执行公用数据操纵操作的计算引擎。控制器952包括连接到一个或多个bep电路962的fep电路960。一个或多个bep电路962连接到非易失性存储器封装件956。fep电路960的一个示例在图9中描绘。bep电路962的一个示例在图4中描绘。图15的实施方案实现存储器封装件级集成。例如,每个存储器封装件包括多个存储器管芯以及集成在每个存储器管芯972内的计算引擎970。在一个实施方案中,计算引擎将包括纠错引擎以解码(包括校正)从存储器管芯读取的数据。纠错引擎可以是计算引擎的一部分,或与计算引擎分离,但是以其他方式包括在存储器管芯中。

图16是包括计算引擎的存储器管芯1000的一个实施方案的框图。例如,存储器管芯1000是图15的存储器管芯972的示例性实施方式。图16的实施方案包括图6的实施方案的元件。例如,存储器管芯1000包括存储器单元的三维存储器结构326(诸如存储器单元的3d阵列)、控制电路310、读取/写入电路328以及行解码器324和列解码器332。控制电路310可以包括状态机312、片上地址解码器314和功率控制模块316。另外,在图16的实施方案中,控制电路310还包括纠错引擎ecc1017和计算引擎1019。使用纠错引擎ecc1017解码从存储器结构326读取的数据,并且将该数据提供给计算引擎1019以便执行各种计算操作,如本文所讨论。

虽然上面讨论的实施方案示出ssd控制器要实现为包含bepasic和fepasic的两个asic解决方案,但是ssd控制器也可以用多于或少于两个的asic来实现。在该情况下,可扩展设计空间以将计算引擎放置在asic中的任意一个或多个内。另外,计算引擎可被放置在asic外部。在其他实施方案中,除了fe/bep体系结构之外,ssd控制器可包括不同的体系结构。即使在其他体系结构中,ssd控制器仍然可被配置为在asic或电路或模块中的一者中包括计算引擎。另外,可将计算引擎添加到未使用asic实现但使用其他硬件实现的ssd。

图15的实施方案包括将计算引擎集成在存储器管芯(诸如nand存储器管芯或reram存储器管芯)内。图17是提供用于实现图15的系统的实施方案的附加细节的框图。具体地讲,图17示出与ssd1100(在印刷电路板上实现)通信的主机,该ssd包括大的nvm控制器1102和小的nvm控制器1114。大的nvm控制器1102与dram1104和存储器封装件1106通信。

在一个实施方案中,存储器封装件1106包括若干存储器管芯1110、任选的dram(或mram/rram/pcm/edram)1112,以及小的nvm控制器1114。存储器管芯1110中的每个具有管芯上计算引擎(ce)。在一个实施方案中,管芯上计算引擎使用cmos技术在衬底的顶部表面上以及在单片三维存储器阵列下面实现。潜在地,可以集成edram/stt-mram/pcm以及sram。管芯上计算引擎(ce)可以执行数据操纵操作中的一些。

在一个实施方案中,小的nvm控制器1114包括计算引擎(ce),该计算引擎可执行数据操纵操作中的一些。小的nvm控制器1114可与内部存储器管芯和外部芯片(即,图17中的大的nvm控制器和dram)通信。任选dram1112用于小的nvm控制器1114以存储工作数据集。通过用计算机引擎(ce)1114和存储器管芯1110的简单ce将计算从大的nvm控制器1102卸载到小的nvm控制器,外部dram要求和通信开销可减少。

图17示出大的nvm控制器1102、dram1104、存储器管芯1110、dram1112和小的nvm控制器1114中的每个可以在安装在一个印刷电路板上的三种不同的封装中的单独硅管芯上实现。因此,图17提供大的和小的nvm控制器体系结构。大的nvm控制器1102与主机和dram接合。小的nvm控制器1114可以在存储器封装件中的任一个内。小的nvm控制器1114包括具有任选dram的计算引擎,并且管理多个nvm信道。映射表可存储在任选dram(或mram/pram)中。

图18是具有存储器阵列下的电路的存储器管芯1200的一个实施方案的框图。图18示出具有多个层的单片三维存储器结构1202。存储器结构1202下方是电路1204,该电路在衬底1206的顶部表面上以及在存储器阵列1202下面实现。在一个实施方案中,电路1204使用cmos技术实现。例如,可能用edram/stt-mram/pcm以及sram/锁存器将简单的计算逻辑集成在存储器阵列1202下面的cmos逻辑中。简单的电路逻辑(即,随机发生器、id发生器、puf或aes)和简单的错误管理逻辑(即,错误位置映射或简单的错误避免算法,诸如读取参考优化器)以及ecc可被集成在存储器阵列1202下面的cmos逻辑中,作为上面讨论的计算引擎的示例。这通过消除从存储器管芯到单独控制器管芯的数据传输开销而改善了延迟和性能。可以集成fpga,通过芯片上的单个系统支持多种配置,作为上述计算引擎。可以集成fpga,支持片上系统内的多种配置。

另外,其他功能可被集成为上述计算引擎。例如,cpu或并行计算引擎可被集成为上述计算引擎。还可使用simd引擎(“gpu”),神经网络,dsp引擎(例如,图像/音频处理),数字逻辑运算(乘法、加法、减法、xor等),数据挖掘(先验、k均值、网页排名、决策树)或模式匹配(即,汉明距离计算),支持存储器管芯中的多种配置的fpga架构,具有存储器均衡器的高速i/o电路,基于互连的光学或电容器/电感耦接的电路。在一个实施方案中,当针对特定应用程序绕过aes时,计算引擎需要能够处理加密数据。在一些实施方案中,当针对特定应用程序绕过ecc时,计算引擎可能需要处理错误数据。

图19是存储器管芯1300的一个实施方案的框图,该存储器管芯具有在存储器阵列1302下面的电路1304以将非易失性存储器管芯1300用作非易失性fpga。存储器管芯1300将包括三维单片存储器阵列1302。在衬底1306的顶部表面上以及在存储器阵列1302下面实现的将是cmos逻辑1304,该cmos逻辑将待使用的fpga实现为计算引擎(按照上述讨论)。该系统将使用存储器阵列1302(nand或其他类型的非易失性存储器)作为fpga的可重配置逻辑1304的配置存储装置。也就是说,存储在存储器阵列1302中的配置数据用于配置fpga。这将使fpga成为非易失性的。与常规fpga相比,这将允许快速启动,该常规fpga需要从分立的非易失性存储器设备到易失性fpga单元阵列读取配置数据。当不需要fpga(硬件加速器/计算引擎)时,配置存储装置(存储器阵列)可仅用作普通的非易失性存储装置,从而节省空闲功率。

现在更详细地讨论纠错码(ecc)和数据库,数据库中的记录可以含有多个字段。查询可以测试某些字段并选择满足条件的记录。此外,查询可以仅检索所选择的记录中的字段中的一些。

在先前布置下,通常ecc码字中包括了一个或多个记录。在诸如ldpc或bch代码的传统ecc方案中,ecc码字中的所有位需要在生成任何解码位之前解码。因此,即使查询仅涉及几个字段,也需要解码整个记录。解码复杂性和功率浪费在那些不相关的字段上,并且这阻止了实现非常高的数据吞吐量。

应用程序感知ecc方案可以利用有关数据库模式和数据查询的知识,并且仅对与查询相关的字段进行解码。例如,逻辑和物理数据库模式,包括数据库行的大小、列或字段的数量及其大小,以及布局是面向行的还是面向列的,可供纠错引擎所用。另选地,或附加地,在一些实施方案中,在逐个查询的基础上告知解码器关于将如下的字段集(或记录的列):由查询在测试条件中(诸如在“选择…其中”表达中)使用;被预测来根据查询从所选择的行检索;和/或不关心的(逻辑、数字、分支和界限)。ecc算法可以任选地知道用于搜索数据库的测试估计次序,诸如“a列上的条件将在列b上的条件之前测试”。

在一组实施方案中,此处呈现的应用程序感知ecc方案可以使用转换器,该转换器将数据查询转换成要解码的子码以及进行解码的次序。这可以根据关于数据库的信息(诸如每个列的选择性)来完成。这些元数据可以例如与数据库一起存储在存储器中。在这种情况下,为了生成应用程序感知解码指令,系统可以将数据查询传递给转换器所在的存储器控制器,或元数据可以被传递给计算引擎以在那里实施转换器,或这些的某种组合。在纠错引擎处或附近使用计算引擎生成应用程序感知解码指令可以进一步提高数据吞吐率。

两种ecc方案被描述为仅对与查询相关的字段进行解码,而尽可能地忽略其他字段。它们是集成交织(ii)代码和乘积码。与在将由分析使用的任何字段可用之前解码整个记录的传统ecc方案相比,应用程序感知ecc方案可以实现数量级吞吐量提升和/或显著地降低的解码器复杂性。

上面已描述了存储器系统的许多不同布置和纠错引擎在这些系统中的放置。例如,用以生成和解码ecc码字的纠错引擎可以在控制器(图1)内、在闪存管理器(图2、图4等)中、在存储器封装件(图7)中、或在存储器芯片(图15和图16)上。以下示例中呈现的ecc方案可以与这些布置中的任一个一起使用;然而,将计算资源分配到存储元件附近可有助于提高这些数据分析的数据吞吐率。类似地,将用于生成应用程序感知解码指令的计算引擎放置在ecc引擎附近可以进一步提高数据吞吐率。在其他实施方案中,ecc解码器可以由位于存储器系统的不同部分中的多个部分实施。例如,当使用集成交织代码时,可以将用于对单独的子码进行解码的部分放入存储器封装件中,并且可以将用于使用共享更高级别奇偶校验的部分放入闪存管理器中,因为它具有更高的复杂性并以低概率激活。

图20是示出用于实现应用程序感知纠错码的实施方案中涉及的元件中的一些的框图。图20是图13a、图13b和图15的简化版本,示出了连接到包括纠错引擎2003和存储器管芯2005的存储器封装件2007的控制器2001。纠错引擎2003连接以从ssd控制器2001接收用户数据,将用户数据形成为码字,然后将该码字传输到存储器管芯2005中的一个。纠错引擎2003被采用来表示纠错或ecc引擎的编码器部分和解码器部分。根据实施方案,纠错引擎2003的编码部分和纠错引擎2003的解码部分可以使用单独的硬件部件或共享它们的硬件部件的一些或全部。响应于对存储在存储器管芯2005中的数据库的字段的请求,纠错引擎2003接收码字并将其解码,并且将请求的字段提供给控制器。在图20中,纠错引擎被示出为存储器封装件的一部分,但是在一些实施方案中,纠错引擎也可以包括在控制器2001中,如图12所示。例如,如果纠错引擎2003的初始解码失败并需要进行更强力的解码,那么可以在控制器2001上将码字发送到更强力的纠错引擎以进行解码。

存储器管芯2005包括存储器单元阵列2026,还有控制电路2010、解码器2024和2032以及读取/写入电路2028,以将码字编程到存储器单元中,例如,诸如上面参考图6或图16更详细地讨论。当读出数据时,控制电路2010、解码器2024和2032以及读取/写入电路2028将码字读出到纠错(ecc)引擎2003,该ecc引擎对码字进行解码。在下面描述的实施方案中,可以根据集成交织(ii)代码或乘积码来形成码字。

更具体地,数据在存储装置旁边或附近进行处理、分析或两者,并且仅通过路径将结果发送到具有有限带宽的控制器和主机。例如,纠错引擎可以位于与存储器存储元件相同的封装中,或甚至位于与其相同的管芯上。这种存储装置中或附近计算不仅弥合大数据分析所需的非常高的吞吐量与有限存储设备带宽之间的差异,而且还大大地减少跨存储堆栈移动数据所需的能量。

因为纠错码(ecc)用于帮助确保数据完整性,从nand或其他存储介质读取的数据将经过纠错解码器以在任何计算和分析涉及可能错误之前校正可能错误。为了匹配存储装置中或附近数据处理中的高速,ecc可能需要以高吞吐率(例如,10gb/s或更高)运行。即使考虑到集成电路技术的可能进步,传统ecc方案也很难实现如此高的吞吐量。

ecc码字由ecc引擎所生成的一组用户数据和一组对应的奇偶校验形成。码字(用户数据和对应的奇偶校验两者)一起写入并一起读回,使得如果需要在读取时校正数据,那么奇偶校验是可用的。考虑到使用应用程序感知集成交织(ii)代码,该方法将码字分成子码。示例性ii代码的结构在图21中示出。

如图21所示,码字被分成多个子码。在图21中所示的示例中,存在四个子码,并且它们由c0,c1,c2,c3表示,但是也可以使用其他数量的子码,如下面进一步讨论的。根据期望的解码粒度、冗余以及纠错引擎的校正能力还有其他因素,码字可以被分成更多子码。每个子码可以对应于记录中的一个或几个字段,并且例如可以是bch代码。例如,参考图23的顶部的码字1,这示出了6个数据字段的示例,其中每个字段可以对应于字段数据的子码及其对应的第1层奇偶校验。每个子码具有可用于校正一定数量的错误的本地奇偶校验。此外,共享奇偶校验以分层方式添加到子码以校正更多错误。在图21的示例中,在第2层中,c0和c1共享附加的奇偶校验,并且c2和c3共享附加的奇偶校验。在生成第1层奇偶校验并形成子码之后,纠错引擎生成由多个子码共享的第2层奇偶校验。每个组所共享的奇偶校验可以是多个奇偶校验。第3层奇偶校验由码字的所有子码共享,并且由纠错引擎基于所使用的数据和较低级别奇偶校验生成以覆盖全码字。在这种情况下,如果例如通过使用第1层中的本地奇偶校验不能校正c0中的错误,那么利用第2层中的奇偶校验。如果错误超出第2层奇偶校验的校正能力,那么使用第3层中的奇偶校验。由于第3层中的奇偶校验是根据码字的所有子码来共享和生成的,因此所有子码都参与解码,以便利用第3层中的奇偶校验。该实施方案示出最低级别子码(第1层)和全码字奇偶校验级别(第3层)之间的一个中间奇偶校验级别(第2层),但是在其他实施方案中,可以使用其他数量的层。

许多ecc方案是已知的。例如,基于bch和reed-solomon(rs)代码的通用集成交织(ii)代码允许更灵活地使用共享奇偶校验。标准bch和rs代码需要最小冗余以便校正给定数量的错误。与ldpc代码不同,bch和rs代码可以具有非常短的码字长度,诸如几个字节。因此,可以更容易地采用基于bch或rs代码的ii代码来对数据库记录的所选择的字段进行本地解码,而忽略其他不相关的字段。仅当所选择的字段中的错误数量超过对应的子码的校正能力时,解码中才会涉及与查询无关的其他子码,以便利用共享奇偶校验来校正更多错误。如果为每个子码分配了足够局部奇偶校验,那么利用共享奇偶校验并涉及与查询无关的其他字段的概率低。当查询的选择性低(即,记录的一小部分满足测试条件)和/或在查询中需要少量字段时,此类ii代码与必须对码字中的每一位进行解码的传统ecc方案相比可以将解码吞吐量提高若干个数量级。

图22是描述将使用集成交织代码编码的用户数据写入到存储器管芯中的一个实施方案的流程图。在步骤2201处,纠错引擎接收用户数据以便编码,其中用户数据可以是数据库的字段或更一般的数据。在步骤2203处,针对码字的单独的第1层子码形成奇偶校验。在下面讨论的主要实施方案中,每个子码对应于数据库的记录的字段,并且第1层奇偶校验对应于单个对应的字段。在其他实施方案中,子码可以对应于多于一个字段,或字段可以跨若干个子码运行。在步骤2205处,形成码字的较高级别奇偶校验,包括覆盖若干个子码的任何中间奇偶校验,就如图21中的第2层奇偶校验那样,以及对应于整个码字的最高级别奇偶校验,就如图21中的第3层那样。尽管步骤2203和2205在图22中被示出为单独的步骤,但是在一些实施方案中可以同时地生成不同层中的奇偶校验。在步骤2207处,将子码和较高层奇偶校验形成为码字,在此之后在步骤2209处将其传输到存储器管芯并写入存储器管芯。

应用程序感知ii解码的实施方案可以如下进行:

i)首先仅对含有要由查询测试的字段的子码进行解码,诸如在下面的示例中在‘其中’表达之后的子码。

ii)在满足测试条件的记录中,仅对由查询请求的字段进行解码,诸如在‘选择’表达之后的字段。

在上述两个步骤中,共享奇偶校验和其他贡献子码仅在必要时参与解码。

作为应用程序感知ii解码的示例,考虑到由具有以下6个字段的记录组成的数据库:邮政编码、年龄、身高、体重、性别和眼睛颜色。示例性查询是:

从表中选择体重

其中(邮政编码=95035)并且(年龄在30与50之间)图23显示面向行的数据库示例,并且图25显示该示例的面向列的数据库。

图23示出面向行的数据库的应用程序感知ii解码的示例,其中每个行包括条目的字段。除了在以下示例中的查询的积极结果之外,条目仅作为一般字段(例如,“年龄1”)被列出。在该示例中,每个记录由一个码字保护,并且每个字段被编码为子码。码字中的子码不必具有相同的大小。在此处使用的示例中,一个码字包括一个记录的所有字段;但是,更一般地,根据字段的数量和大小以及全码字的大小,单个记录可以在多于单个码字中运行,或相反地,单个码字可以保存若干个记录的字段。

为了执行查询,根据是否能够一次从存储器获得多个码字,逐个处理码字或同时地处理多个码字。查看图23的顶部部分,在“其中(邮政编码=95035)并且(年龄在30和50之间)”示例中,对于每个码字,首先仅对“邮政编码”字段(子码)2301进行解码和测试,如在第一列周围的虚线所示。如果‘邮政编码’=95035,诸如图23中的记录2和42303,那么对该记录中的‘年龄’字段进行解码。仅当年龄在30与50之间时,进一步对该记录2305中的“体重”字段进行解码。在该示例中,首先对邮政编码字段进行解码,在此之后对相关年龄字段进行解码,但是次序可以颠倒,并且首先对年龄字段进行解码再然后是对邮政编码字段进行解码。可以基于预期结果的相对数量来选择次序:例如,如果where查询是针对邮政编码和性别的,那么可以首先完成邮政编码查询,因为这可能会返回相对较少的子码来针对性别查询进行解码;而首先完成性别查询将会预期返回记录的约一半,这然后将会需要它们的邮政编码字段子码。

图24是描述从存储器管芯读取使用集成交织代码编码的用户数据的一个实施方案的对应的流程图。在步骤2401处,接收对数据库的一组一个或多个查询,诸如刚刚参考图23描述的那些。在步骤2403处,做出对对应于第一查询的码字或子码的请求,其中在2407处对应于请求的字段的码字被读取并传递到纠错引擎。在图22的示例中,该第一请求将是“其中(邮政编码=95035)”,并且对应的码字被读出。

在步骤2409处,使用特定于单独的子码的第1层子码对对应于所选择的字段的子码进行解码。在图22的示例中,这对应于第一子码(其对应于邮政编码)的解码,其中每个码字的其他子码未被解码。步骤2411确定解码是否成功。如果可以基于第1层子码成功地对请求的字段的子码进行解码,那么在步骤2413处呈现请求的字段;如果不能,那么在步骤2415处使用较高层奇偶校验来对未能解码的子码进行解码。当使用较高层奇偶校验时,可能涉及促成较高层奇偶校验但之前未由查询请求的其他子码,以便利用较高层奇偶校验。根据层的数量,这可能需要更多的时钟周期并涉及更复杂的计算,从而使用逐渐更高的层,诸如图21中的第2层代码或第3层代码。在一些实施方案中,较高级别解码可以在存储器封装件内的纠错引擎中完成,而在其他实施方案中,较高层解码可以由在存储器封装件外的更强力的纠错引擎执行,诸如在控制器上。如果在步骤2417处发现解码成功,那么在步骤2413处呈现请求的字段。如果由纠错引擎使用较高层进行的解码失败,那么在步骤2419处,发现请求的子码不可解码,并且可以返回错误状态、可以采取校正措施来提取数据、或两者。

从步骤2413,流程进行到步骤2421以确定是否存在更多查询。在图22的示例中,在“其中(邮政编码=95035)”的第一查询之后,针对“其中(年龄在30与50之间)”查询重复该过程,其中现在仅从码字2和4解码年龄字段的子码。一旦在步骤2413处提供对应于年龄查询的字段,那么再次重复该过程,其中请求的字段现在是码字2的年龄字段。由于这是最后一个查询,因此在步骤2423处呈现对查询的响应。

在图23的顶部部分中示出了查询感知集成交织解码,假设每个字段中的错误数量在其校正能力范围内,仅解码由虚线圈出的字段。相比之下,如果采用传统ecc方案,那么需要对所有码字中的所有字段进行解码,如图23的底部部分中的虚线所表示。

应用程序感知ii代码也可以应用于面向列的数据库,如关于图25可示出。应当再次注意,来自所有记录的相同字段可以形成多个码字,并且不同字段的大小可以变化。为了执行示例性查询,首先对“邮政编码”字段(码字12501)的码字进行解码。将邮政编码等于95035的记录的索引放入列表中。然后,在“年龄”字段的码字中,仅对索引在列表中的子码2503进行解码。该列表被更新为仅包括年龄在30与50之间的记录的索引。之后,在“体重”字段的码字中,仅对索引属于更新的列表的子码2505进行解码。仅当最低层奇偶校验不足以用于解码时才使用较高层奇偶校验:例如,如果“年龄”子码的码字未能对码字2进行解码,那么可能需要转到由年龄字段共享第2层奇偶校验;并且如果仍然无法解码,那么可能进一步需要转到整个码字的第3层奇偶校验。然而,在大多数的情况下,预期仅需要单独的子码的第1层奇偶校验。

在该过程中解码的码字/子码由在图25的顶部部分中的虚线圈出。如果采用传统ecc方案,那么“邮政编码”、“年龄”和“体重”字段的整个码字将被解码,如图25的下部部分所示。因此,应用程序感知ii代码也有助于在列数据库的情况下提高解码吞吐量。尽管上面针对图23中所示的面向行的数据库进行描述,但是图24的流程图还对应于使用面向列的数据库读取使用集成交织代码编码的用户数据的一个实施方案,不同之处在于查询的选择和次序。

从集成交织(ii)代码转向乘积码,图26示出乘积码的结构,其中字段在逻辑上组织以形成行和列的二维阵列。针对行中的每个和列中的每个独立地生成奇偶校验,使得除了行形成码字之外,每个列还也形成码字。因此,可以从字段的行码字或字段的列码字提取字段。在单独行(列)代码无法校正错误的情况下,激活列(行)解码。这也允许迭代地应用行和列解码来校正更多错误:例如,如果行不可解码但某些列是可解码的,那么该行的列解码的条目可能充分地减少行错误以允许它被解码。在列解码之后,如果某些行变为可解码的但仍有一些其他行不可解码,那么可以再次进行列解码。重复该过程,直到所有码字的解码成功或该迭代列行解码不导致新的可解码的码字,在这种情况下表明解码失败。此外,能够在给定字段的行解码和列解码之间进行选择增加了灵活性,因为可以选择最有效的解码选择:例如,在面向列的数据库中,仅需要对对应于查询的列进行解码。

可以将相对较大数量的记录(其可以根据记录的大小而变化)放入乘积码的码字中。例如,假设数据库是面向行(列)的:为了实现应用程序感知解码,首先对由将由查询测试的字段组成的列(行)码字(诸如在‘其中’表达之后的那些)进行解码。然后,对由满足测试条件的记录组成的行(列)码字进行解码。仅当错误数量超过单个行和列的校正能力时才对其他行和列进行解码,这种情况的概率应当较低。尽管解码被应用于整个行或列码字,并且因此解码粒度比应用程序感知ii代码中的解码粒度更粗,但是仅对与查询相关的那些码字进行解码。因此,与传统ecc方案相比,应用程序感知乘积码也可以实现显著的吞吐量改进。

图27是描述将使用乘积码结构编码的用户数据写入到存储器管芯中的一个实施方案的流程图。在步骤2701处,纠错引擎接收用户数据以便编码,其中用户数据可以是数据库的字段或更一般的数据。数据在逻辑上构造成乘积码的行和列,其中行奇偶校验在步骤2703处形成,并且行奇偶校验在步骤2705处形成。尽管在图27中被示出为单独的步骤2703和2705,但是纠错引擎的编码部分可以同时地执行步骤2703和2705。在步骤2707处,将数据库字段或其他用户数据以及对应的行和列奇偶校验组织成行码字和列码字的乘积码结构,在此之后在步骤2709处将它们传输到存储器管芯并写入。

考虑到与图23和图25中相同的查询示例,图28中示出了针对面向行的数据库的应用程序感知乘积码解码的示例。在该示例中,行码字由一个记录组成,诸如行码字22803或行码字42805。如果将记录的一部分或多个记录放入每个行码字中,只要来自不同记录的相同字段与行码字中的相同列对齐,该方案也适用。列码字不限于来自每个记录的一个字段,如图28所示。它可以由来自每个记录的多个字段或字段的一部分形成,这取决于字段的大小、列代码的长度、乘积码字中的行码字的数量等。

如图28的顶部所示,为了处理示例性查询,首先对对应于“邮政编码”字段的列码字2801进行解码。如果邮政编码=95035的记录的数量少,那么将行解码应用于所有那些所选择的行(行码字22803和行码字42804),如图28的第一图表所示。根据行解码结果,针对其中年龄在30与50之间的那些记录的第2和4行测试第2列的“年龄”字段,其中行码字2合格。输出其中年龄在30与50之间的那些记录的‘体重’字段,在第4列处,第2行的值为185。

图29是描述从存储器管芯读取使用乘积码结构编码的用户数据的一个实施方案的对应的流程图。在步骤2901处,接收对数据库的一组一个或多个查询,诸如刚刚参考图28描述的那些。在步骤2903处,做出对对应于第一查询的码字或子码的请求,其中在2907处对应于请求的字段的码字被读取并传递到纠错引擎。在图28的示例中,该第一请求将是“其中(邮政编码=95035)”,并且对应的码字被读出,并且第1列被解码以回复查询。在步骤2909处,对对应于所选择的字段的子码进行解码。根据查询,这可以是列解码或行解码。返回参考图28的顶部部分,对邮政编码值的第一查询可以使用对应于在2801处圈出的字段的列解码,而后续年龄和体重查询可以基于在2803和2805处圈出的字段的行解码。

步骤2911确定解码是否成功。如果可以成功地对请求的字段的码字进行解码,那么在步骤2913处呈现请求的字段;如果不能,那么在步骤2915处,使用行对在步骤2909处未能通过列解码进行解码的码字进行解码;并且使用列对在步骤2909处未能通过行解码进行解码的码字进行解码。如果需要,这可以以迭代的方式完成,其中例如可以将部分行解码应用于后续列解码。如果在步骤2917处发现解码成功,那么在步骤2913处呈现请求的字段。如果由纠错引擎使用交替的列或行解码进行的解码失败,那么可以执行另一次迭代。在另选的步骤2925处,确定是否要执行更多迭代,并且如果是,那么流程循环回到步骤2909。如果在步骤2917处由纠错引擎使用另选的列或行解码进行的解码失败,并且在2925处迭代次数已经到达极限,那么在步骤2919处,发现请求的码字不可解码,并且可以返回错误状态、可以采取校正措施来提取数据、或两者。

从步骤2913,流程进行到步骤2921以确定是否存在更多查询。在图28的示例中,在“其中(邮政编码=95035)”的第一查询之后,针对来自码字2和4的“其中(年龄在30与50之间)”查询重复该过程。一旦在步骤2913处提供对应于年龄查询的字段,那么再次重复该过程,其中请求的字段现在是码字2的年龄字段。由于这是最后一个查询,因此在步骤2923处呈现对查询的响应。

或者,如果邮政编码=95035的记录的数量相对大,那么可以在进行行解码之前进行对“年龄”字段的另一个列解码以进一步减少所选择的记录的数量。该过程的流程与图29相同,但是其中查询的次序与上面针对图28的顶部图表描述的不同。该另选的解码过程在图28的第二图表中示出。现在,在对行22815进行解码之前,对列1码字2811和列2码字2813两者进行解码。解码的那些列和行码字由虚线圈出。尽管所选择的记录中的不相关的字段被解码,但是在该应用程序感知乘积码解码中未选择的记录未被解码。与对如图28的第三图表中所示的每个记录中的每个字段进行解码的传统ecc方案相比,还实现了显著的吞吐量改进。

图30考虑了以面向列的方式存储记录的示例,其中顶部图表示出查询感知乘积码解码的一个示例,中间图表示出查询感知乘积码解码的另选的示例,并且底部图表示出传统ldpc或bch解码。如图30的顶部图表所示,为了执行示例性查询,首先对由“邮政编码”字段组成的行码字13005进行解码。根据解码结果,将邮政编码为95035的记录的索引放入列表中。然后,如图30的第一图表所示,对由列表中的记录(列码字23001和列码字43003)组成的列代码进行解码。

另选地,如果仅基于邮政编码选择的列表中的记录数量多,那么对对应于“年龄”字段的行码字进行解码以进一步减少所选择的记录的列表,然后才对任何记录进行列解码,如图30的第二图表所示。在该示例中,行码字13013和行码字23015都被解码,在此之后对列码字23011进行解码。根据行代码和列代码的长度,字段的选择性以及查询中涉及的字段数量,比起用于列数据库的传统ecc方案,此类应用程序感知乘积码仍然可以对更少的位进行解码并实现更高的吞吐量。与对所有所需码字中的每个字段进行解码的传统ecc方案相比,如图30的第三图表所示,还实现了显著的吞吐量改进。

对于图30的顶部图表中的查询感知解码,或关于图30的中间图表描述的另选的查询感知解码,该过程的流程可以同样与图29相同,但是其中查询的次序与上面对于图28的顶部图表描述的不同。

与传统ecc代码不同,应用程序感知方案利用数据库模式和分析查询的细节。在大多数的情况下,仅对与查询相关的字段进行解码,这与在常规ecc方案中对所有字段和所有记录进行解码相反。对于大数据分析,通常仅基于对少数字段的测试来选择记录的一小部分。因此,应用程序感知方案可以将解码吞吐量或复杂性提高若干个数量级。

应用程序感知ecc的使用可以针对在以上描述的较前部分中描述的ecc引擎的放置中的任一种(包括在存储器系统的控制器内,诸如图1中所示的)来实施。然而,ecc引擎或其某些功能相对于存储器单元定位得越靠近,需要在中间总线结构上移位的数据量越少。例如,通过如图13a或图13b中那样将ecc引擎放置在存储器封装件中,仅需要将查询发送到封装上,并且仅需要发送出结果。这可以大大地减少控制器与存储器封装件之间通过总线传输的数据量。另一方面,这要求ecc引擎具有高吞吐率(例如,10gb/s或更高)以匹配在存储器封装件内的高速大数据传输。类似地,如图15中那样将ecc移动到存储器管芯上允许所有过程全部发生在芯片上,以进一步提高速度,但是需要更特定的芯片结构。

根据一组实施方案,存储器系统包括纠错引擎和连接到控制器的存储器封装件。存储器封装件包括纠错引擎、一个或多个非易失性存储器管芯、以及一个或多个控制电路。纠错引擎被配置为将包括多个数据字段的用户数据集形成为码字,该码字包括用户数据集和由纠错引擎生成的对应的奇偶校验。响应于对码字的数据字段中的一个的请求,纠错引擎被配置为对请求的数据字段进行解码并提供请求的数据字段而不提供码字的其他数据字段。控制电路连接到纠错引擎和存储器管芯,并且被配置为将码字编程到存储器管芯中并从存储器管芯读取码字。

在其他实施方案中,方法包括从控制器接收对在存储器封装件处的数据库的数据字段的请求,读取含有请求的数据字段的码字是从存储器封装件中的存储器管芯读取,其中码字包括多个数据字段和对应的奇偶校验。含有请求的数据字段的码字由存储器封装件中的纠错引擎解码,其中纠错引擎对码字的请求的数据字段进行解码而不对码字的数据字段中的其他数据字段进行解码。请求的数据字段从存储器封装件提供给控制器。

在附加实施方案中,存储器封装件包括用于纠错的装置和一个或多个存储器管芯。用于纠错的装置被配置为将包括多个数据字段的用户数据集形成为码字,该码字包括用户数据集和由用于纠错的装置生成的对应的奇偶校验。用于纠错的装置还被配置为对码字的数据字段中的所选择的数据字段进行解码而不对码字的数据字段中的未选择的数据字段进行解码。存储器管芯连接到纠错引擎,并且存储器管芯中的每个包括多个存储器单元和连接到多个存储器单元的用于读取和写入数据的装置、以及用于纠错的装置。用于读取和写入数据的装置被配置为将码字编程到多个存储器单元中并从多个存储器单元读取码字。

用于纠错的装置可以包括用于上述纠错引擎的各种实施方案。该装置可以根据集成交织(ii)代码和乘积码实施方案生成奇偶校验并形成码字,并且对这些码字进行解码。例如通过下处纠错(ecc)引擎元件示出此类纠错引擎及其在存储器系统内的放置的示例:在图1中的34处;在图4和图11中的226处;在图12中的824处;在图13a中的862处;在图13b中的894处;在图14中的912处;在图15中的970处;在图16中的1017处;在图20中的2003处;或者这些的某种组合。解码和编码操作可以使用单独的硬件或共享它们的硬件部件的一些或全部,并且可以被实施为硬件、软件、固件或这些的组合。

用于从阵列的存储器单元读取数据并且将数据写入阵列的存储器单元的装置可以包括图6和图16的控制电路310、行解码器324和列解码器332、以及读取数据并将数据写入存储器结构326的存储器单元的读取/写入电路328,以及图20的对应元件2010、2024、2032和2028。

出于本文件的目的,说明书中提到“实施方案”、“一个实施方案”、“一些实施方案”或“另一个实施方案”可用于描述不同的实施方案或相同的实施方案。

出于本文件的目的,连接可为直接连接或间接连接(例如,经由一个或多个其他部件)。在一些情况下,当元件被提及连接或耦接到另一个元件时,该元件可直接连接到另一个元件,或者经由居间元件间接连接到另一个元件。当元件被提及直接连接到另一个元件时,则在该元件与另一个元件之间没有居间元件。如果两个设备是直接连接或间接连接的,则两个设备是“通信”的,使得它们能够在它们之间进行电子信号通信。

出于本文档的目的,术语“基于”可理解为“至少部分地基于”。

出于本文档的目的,在没有附加上下文的情况下,诸如“第一”对象、“第二”对象和“第三”对象的数字术语的使用可能不意味着对象的排序,而是可用于识别目的以识别不同的对象。

出于本文档的目的,对象的术语“组”可指一个或多个对象的“组”。

出于说明和描述的目的已提供了上述详细描述。其并非旨在详尽的或旨在限制本发明所公开的精确形式。根据以上教导内容,很多修改形式和变型形式都是可能的。选择所述实施方案以便最好地解释所建议的技术的原理及其实际应用,从而使本领域的其他技术人员能够在各种实施方案中和适合于设想的具体使用的各种修改中最好地利用它。本发明的范围旨在由所附权利要求书限定。

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