用于存储数据的方法及其系统的制作方法

文档序号:6602162阅读:163来源:国知局

专利名称::用于存储数据的方法及其系统的制作方法
技术领域
:本发明通常涉及计算机存储器,并且更具体地,涉及非易失性存储器的自适应耐夂t生IS石马(adaptiveendurancecoding)。
背景技术
:相变存储器(PCM)和闪速存储器是具有有限耐久性(又称“有限寿命”)的非易失性存储器的示例。在经历许多个写循环(对于PCM是重置(RESET)循环,对于闪速存储器是编程/擦除循环)之后,存储器单元损耗并且不再能够可靠地存储信息,在此意义上该存储器具有有限的耐久性。可以利用一种被称为耐久性编码的技术来延长有限寿命存储器的寿命,其中将若干码型(pattern)写入存储器以使得减少单元磨损。当前的耐久性编码方案的缺点在于,它们引起了数据扩展并且未描绘出用于使耐久性编码的参数适合于数据可压缩性和存储器页面长度(pagelength)的任何机制。这意味着,对于每个数据字不得不使用不同的页面长度,或者不得不牺牲耐久性的增加。其他相关的实现方案包括用于在一次写入和高效写入存储器上的写入的方法,其允许在存储器的每次写入中和/或存储器的寿命内存储增加的数据量。再次的,这些方法的缺点在于,它们不允许针对不同的数据自适应地选择耐久性码。
发明内容一个示例性实施例是一种用于存储数据的方法,该方法包括接收写入数据和写入地址。将压缩算法应用于写入数据以生成压缩的数据。将耐久性码应用于压缩的数据以生成码字。响应于通过对写入数据应用压缩而节约的空间量,选择和应用耐久性码。将该码字写入到写入地址。另一实施例是一种包括接收器的系统,该接收器接收写入数据和写入地址。该系统还包括数据压缩器,其将压缩算法应用于写入数据以生成压缩的数据。该系统进一步包括耐久性编码器,其将耐久性码应用于压缩的数据,其中响应于通过对写入数据应用压缩而节约的空间量,选择和应用耐久性码。来自耐久性编码器的输出是码字。该系统进一步包括存储器写入器,其将该码字写入到写入地址。—个另外的示例性实施例是一种用于存取存储器的方法,该方法包括从存储器地址取得(retrieve)码字。用元数据矩阵乘以该码字以恢复用于该码字的元数据。所述元数据包括数据位置规范。响应于所述元数据来识别码字中的数据,并输出所述数据作为读取数据。又一示例性实施例是一种包括存储器读取器的系统,该存储器读取器从存储器地址取得码字。该系统还包括元数据计算器,其将元数据矩阵乘以码字以恢复用于码字的元数据,其中所述元数据包括数据位置规范。该系统进一步包括元数据解释器,其响应于所述元数据来识别码字中的数据;以及发送器,其输出所述数据作为读取数据。通过本实施例的技术可以认识到另外的特征和优点。在此还描述了其他实施例和方面,并且将其视为本发明的一部分。为了更好地理解具有这些优点和特征的本发明,请参照以下描述和附图。在本申请文件的结尾处,在权利要求中具体地指出了并且清楚地要求保护被视为本发明的主题内容。根据下面结合附图的详细描述,本发明的前述和其他特征以及优点是清楚的,在附图中图1示出了可以通过示例性实施例实现的用于写入数据的过程;图2示出了可以通过示例性实施例实现的用于写入数据的存储器控制器的框图;图3示出了可以通过示例性实施例实现的纠错编码器的框图;图4示出了可以通过示例性实施例实现的用于读取数据的过程;图5示出了可以通过示例性实施例实现的用于读取数据的存储器控制器的框图;图6示出了可被实现为针对地址按逐次写入来改变ECC的校验位置的示例性实施例;图7示出了可以通过示例性实施例实现的用于写入数据的系统的框图;图8示出了可以通过示例性实施例实现的编码器;图9示出了可以通过示例性实施例实现的用于读取数据的系统的框图;图10示出了可以通过示例性实施例实现的读取过程;图11示出了可以通过示例性实施例实现的用于执行联合压缩和扩展的过程;以及图12示出了可以通过示例性实施例实现的联合压缩和耐久性编码。具体实施例方式本发明的一个示例性实施例包括一种用于有限寿命存储器的自适应耐久性编码系统和方法,其中待写入到存储器中的数据被转换为使对存储器单元的损耗减少的形式,并且因此延长了存储器寿命。在示例性实施例中,写入的数据是对于错误可复原的(即,即使在存储之后所存储的信息中存在错误的情况中,仍可以恢复数据)。一个示例性实施例包括一种以增强的耐久性将数据写入到非易失性存储器器件上的系统和方法。通过使耐久性编码参数适合于数据属性和诸如存储器页面大小的存储器参数的方式,结合耐久性编码和错误复原,利用无损数据压缩。因此,如果待写入数据是高度可压缩的,则可以实现高的耐久性增益(gain)。可替选地,如果数据并非是高度可压缩的,则选择耐久性码以便于确保编码的数据将适合存储器页面。因此,示例性实施例在确保所生成的数据将总是适合在给定的存储器页面内的同时,允许获得耐久性编码的最大利益。这显著地简化了存储器簿记(memorybookke印ing),并因此,改进了存储器存取性能。再者,示例性实施例在确保可以正确地从存储器恢复数据的同时,以保持耐久性增益的方式整合了错误复原。图1示出了可以通过示例性实施例实现的使用自适应耐久性编码来写入数据的过程。在框102中,(例如,在存储器控制器处)接收写入数据和写入地址。在示例性实施例中,写入地址是页面地址并且写入数据是数据页面(例如,4K比特)。在框104中,写入数据被压缩以生成压缩的数据。然后在框106中将耐久性码应用于压缩的数据,以生成压缩的耐久性编码了的数据。所应用的耐久性码是基于压缩的数据和目标存储器器件的特性而选择的。在框108中选择写入数据、压缩的数据和压缩的耐久性编码了的数据中的一个,并且在框110中对所选择的数据进行ECC编码以生成码字。在框112中,在写入地址处将该码字写入存储器。图2示出了可以通过示例性实施例实现的用于写入数据的存储器控制器的框图。图2中示出的存储器控制器202将数据压缩和耐久性编码组合以便于通过增强存储器耐久性的方式写入非易失性存储器。图2中示出的示例性存储器控制器202包括随机存取存储器(RAM)中的码表(codetable),该码表在此处被称为RAM码表204,该码表存储关于(例如,存储器器件上)非易失性存储器206中存储的每个数据单元的耐久性码/压缩状态信息。图2中示出的示例性RAM码表204中的状态信息包括(1)页面状态是未编码的(U)、压缩的(C)、还是压缩且耐久性编码的(E)的指示;(2)指示哪个可用纠错码集合已被用于对当前页面数据进行编码的ECC码索引;以及(3)指示哪个耐久性码(如果有的话)已被用于对页面数据进行编码的耐久性码索引。RAM码表204中存储的信息在此处被称为“元数据”。图2中示出的到存储器控制器202的输入包括待写入的页面的地址以及待写入到页面的数据。在示例性实施例中,经由位于存储器控制器202(或者其他位置)上的接收器来接收输入。接收器可以通过多种方式来实现,包括用于接收输入和/或输入所位于的存储位置(例如,寄存器)的硬件。页面地址用于对RAM码表204进行索引以便于取得耐久性编码状态信息。页面数据(在此处也被称为写入数据)被输入到数据压缩器208,该数据压缩器208应用无损数据压缩算法以压缩写入数据。可以实现的无损数据压缩算法的示例包括,但不限于算术编码、Huffman编码、Lempel-Ziv编码和BWT编码。此外,如果已知写入数据的特性(诸如统计信息)是先验的或者是可预测的,则可以应用任何利用该知识的专用无损编码算法以便于更有效地压缩数据。数据压缩器208输出的压缩字被输入到耐久性编码器210。耐久性编码器210使用压缩字的特定特性,并且可能使用关于待使用的纠错码(ECC)和先前的页面内容的信息,以便于从多个耐久性码中选择一个耐久性码。在示例性实施例中,非易失性存储器206是诸如二进制NAND闪存的“一次写入”存储器,并且耐久性编码器210是两电平单发有界加权二进制编码器(two-levelone-shotboundedweightbinarycoder)。即,耐久性编码器210假设写入是到已擦除页面的,并且产生具有少于固定数量的未擦除符号(symbol)的输出字。在该情况中,耐久性编码器210基于压缩的数据字的长度选择有界权重约束,以便于在确保耐久性编码字将适合存储器206的固定页面长度的同时获得最大的耐久性增益。因此,如果原始数据是高度可压缩的,并且压缩字长度是小的,则可以获得小的有界权重约束以获得高的耐久性增益。可替选地,如果页面并非是高度可压缩的,则可以使用大的有界权重约束来确保耐久性编码字将适合存储器页面。再者,耐久性编码器210可以在选择要实施的有界权重的同时,利用ECC码率(coderate)的知识;这可以用于例如,保证写入到存储器206中的错误编码字将满足给定的权重约束。在替选实施例中,非易失性存储器206是诸如多级相变存储器的“可重写的”存储器,并且耐久性编码器210使用多级瀑布码。耐久性编码器选择的瀑布码是如数据压缩器208的输出所指示的数据的可压缩性的函数。耐久性编码器还可以利用本领域中已知的其他码,诸如用于一次写入和高效写入的存储器的码,其中基于数据压缩器208的输出来选择多个码中的一个码用于耐久性编码。一旦选择了耐久性码,则使用该码产生与数据压缩器208产生的压缩字对应的输出码字。在另一示例性实施例中,存储器206是一次写入或可重写的存储器(诸如PCM),并且耐久性编码器210另外使用存储器206的先前的页面内容的知识以便于选择耐久性码以及生成输出码字。该先前内容通过存储器读取过程218读取,并且耐久性编码器使用过程218的输出,以便于生成耐久性编码了的码字。所使用的耐久性码的索引被输入到RAM码表204。如图2中所示,耐久性编码器210的输出、数据压缩器208的输出和原始写入数据被输入到数据选择器212。数据选择器212基于例如,字的长度和通过压缩和耐久性编码获得的增益,来决定将这三个数据中的哪个数据写入到存储器206中。在替选的示例性实施例中,由数据压缩器208和耐久性编码器210顺次做出该决定而不需要数据选择器212。例如,如果数据压缩器208的输出与输入字一般长或者长于输入字,则数据压缩器208简单地将输入字输出到耐久性编码器210。相似地,如果耐久性编码器210产生的字过长以至于不适合页面或者具有其他不合需要的特性,则耐久性编码器210简单地将压缩的/原始的写入数据字直接输出到纠错编码器214。在这两个实施例中,页面的编码状态被发送到RAM码表204用于存储。数据选择器212的输出随后被发送到纠错编码器214,该纠错编码器214选择多个ECC中的一个ECC用于对数据编码。图3示出了可以通过示例性实施例实现的纠错编码器214的框图。如图3中所示,首先使用系统ECC编码器302,利用系统码对输入数据编码。系统ECC编码器302的输出随后被输入到索引排序器(indexedpermuter)304以使用多个预定排序中的一个对编码的数据排序。所选择的排序基于RAM码表204中存储的ECC码索引。在替选的示例性实施例中,可以使用多个系统码,以使得输入数据被包含在所生成的码字中并且奇偶符号位置随变化的码索引而变化。使用这些示例性实施例中的任一实施例的优点在于,由奇偶比特引起的损耗散布跨越若干单元位置,由此使损耗平均,并且改进了存储器耐久性。将所使用的ECC码的索引发送到RAM码表204用于存储,同时将码字发送到存储器写入过程以写入存储器206(例如,存储器器件)。在示例性实施例中,纠错编码器214使用的ECC的码率取决于如数据压缩器208的输出所指示的数据的可压缩性。在示例性实施例中,总是使用最小(或缺省)纠错能力(例如,如通过ECC奇偶比特的数量测量的)。当压缩的数据的长度低于预先限定的阈值时,增加ECC奇偶比特的数量以便于提供更大的纠错能力。因此,在该实施例中,耐久性码和ECC码的选择是基于数据的可压缩性进行的。如前文所述,利用待使用的ECC码的知识来进行耐久性编码器210对耐久性码的选择。这确保了编码器214生成的码字具有正确的长度以便被写入存储器中。在替选实施例中,多个ECC保护等级是可能的(包括无保护),并且基于压缩的数据的长度与多个阈值的比较来选择适当的等级。再次参照图2,纠错编码器214生成的码字被发送到存储器写入过程216以便写入存储器206。在示例性实施例中,存储器206使得存储器写入过程216具有一个或更多个可编程参数,该可编程参数允许使存储器写入过程216改变诸如写入速度、写入功率、写入损耗等属性。例如,存储器206可以是在每次单元写入时使用多次叠代的PCM,并且叠代的次数是可编程的;其中使用的叠代的次数越多,则写入过程的准确性越高,但是功率支出和写入延时也更高。作为另一示例,存储器206可以是闪速存储器,其中浮栅电压电平的设置是可编程的。在该情况中可以通过使电平间隔得更靠近在一起来减小写入速度、写入功率和写入损耗,但这是以因浮栅电荷扰动引起的错误概率增加为代价的。在该实施例中,由纠错编码器214基于如数据压缩器208的输出所指示的数据的可压缩性选择纠错能力,并且基于所使用的纠错能力选择写入过程参数。因此,例如,如果数据是高度可压缩的,则可以使用高的纠错能力,这允许选择选择写入参数以便于减小写入功率,减小写入延时和/或减小写入损耗,但这是以写入准确性为代价的;较高的纠错能力确保了减小的写入准确性足够用于可靠的数据存储。图2中示出的RAM码表204允许快速地存取用于耐久性编码工作所需的信息。为了确保RAM码表204中的信息不丢失(例如,由于断电),RAM码表204被周期性地写回到非易失性存储器206(或者一些其他存储器)。在该过程中,由纠错编码器/解码器222对RAM码表204中的信息进行ECC编码用于保护,并且随后通过写入过程220将RAM码表204中的信息写入非易失性存储器206。在断电的情况中,可以通过读取过程220和从纠错解码器222从存储器重新加载RAM码表204。在替选的示例性实施例中,RAM码表204用作关于状态信息的高速缓存,并且在任何给定的时间仅关于非易失性存储器页面的子集的信息被存储在RAM码表204中。在存取页面时,页面的信息被转移到RAM码表204中,并且当对于给定的时间周期页面未被使用时,信息被转移出RAM码表204。在示例性实施例中本领域中已知的其他高速缓存技术可用于将信息转移到RAM码表204中和转移出RAM码表204。在另一实施例中,RAM码表204(可以用作或者可以不用做高速缓存)存储在第二非易失性存储器器件上,该第二非易失性存储器器件具有比其上存储数据的非易失性存储器器件更高的耐久性。应当注意,基于压缩的数据字的特性来选择耐久性码是有利的,其有利之处在于,它确保了耐久性的增益可以适合于页面压缩并且因此可以获得耐久性编码的最大利益。同时,它确保了所生成的数据将总是适合在给定的存储器页面内,而无需对存储器页面长度进行任何改变,这极大地简化了存储器簿记,并且因此,改进了存储器存取性能。图4示出了可以通过示例性实施例实现的用于使用自适应耐久性编码来读取数据的过程。在框402中,(例如,在存储器控制器处)接收读取地址,并且在框404中,从存储器206取得在该读取地址处存储的码字。在框406中向该码字应用ECC解码器。在框408中,取得和/或得到与读取地址所引用的页面(或其他存储器单元)对应的元数据。元数据描述存储器页面中存储的数据的状态。在示例性实施例中,该状态是未编码的、压缩的、或者压缩且耐久性编码的。此外,元数据可以描述用于存储器页面中的数据的耐久性编码和ECC编码。如果页面状态是未经编码的,则在框410中输出ECC解码的数据作为读取数据。如果页面状态是压缩的,则在框410中对ECC解码的数据解压缩,并且将其输出作为读取数据。如果页面状态是压缩且耐久性编码的,则在框410中通过耐久性码解码器发送ECC解码的数据,并且随后将其解压缩并输出作为读取数据。图5示出了可以通过示例性实施例实现的用于读取数据的存储器控制器的框图。对于给定的读取地址,如果需要,RAM码表204被加载有适当的页面状态信息(例如,元数据)。在示例性实施例中,这是通过读取过程514和纠错解码器512来进行的。然后通过存储器读取过程504从存储器206读取数据。从存储器206读取的码字被输入到纠错解码器506,该纠错解码器506使用对应于ECC码索引的解码过程,该ECC码索引对应于RAM码表204中的页面地址(S卩,读取地址)。依赖于页面状态(E/C/U),纠错解码器506的输出被适当地路由。如果该状态是U(未编码的),则存储器控制器502直接输出纠错解码器506的输出以作为读取数据。如果页面状态是C(压缩的),则纠错解码器506的输出被路由至数据解压缩器508,并且存储器控制器502输出解压缩的输出以作为读取数据。最后,如果页面的读取状态是E(耐久性编码的),则数据被路由至耐久性解码器510,随后被路由至数据解压缩器508,并且然后由存储器控制器502最终输出作为读取数据。在示例性实施例中,通过位于存储器控制器502(或其他位置)上的发送器执行上述的输出。发送器可以通过多种方式实现,包括用于传送输出以及存储所述输出的存储位置或寄存器的硬件。应当注意,图2和图5中示出的所有或一部分元件可以位于另一物理位置,诸如但不限于另一存储器元件(诸如,存储器模块或存储器集线器(memoryhub))。上述示例性实施例使用存储器控制器可存取的表,即RAM码表204,其描述了页面状态(E/C/U)以及用于正确解释从页面读取的信息所需的其他信息。这些信息和可用于该任务的任何其他信息在此处被称为“元数据”。在一些情况中,期望通过如下方式实现实施例,即不需要使用该控制器表,并且作为替换,直接将元数据与数据一起存储在存储器206中。原因在于,控制器表有时实现起来是昂贵的。关于这一思想的直接的实现方案的主要困难在于,存储元数据的物理存储器通常经受与其余的数据位置所经受的相同的损耗和错误机制,并且因此元数据不能全然不变地(verbatim)存储在存储器206的固定位置中。原则上,对于元数据而言,也需要耐久性编码和纠错编码,引起了循环问题(circularproblem)。下面描述可通过示例性实施例实现的对该问题的解决方案。通过向量m表示元数据,并且通过向量v表示将写入存储器中的码字。将由读取和写入过程共享的两个预先指定的矩阵定义为H和M,其中H是系统纠错码的奇偶校验矩阵(此处也称为“奇偶矩阵”),而M在此处也称为“元数据矩阵”)。基本的思想是不在任何预先指定的位置存储元数据m,而是计算码字v,以使得可以通过将矩阵M与向量v相乘来恢复元数据。系统ECC确保可以从存储器正确地恢复v。在示例性实施例中,另外的要求是,当特定地址被多次写入时,应轮换(rotate)系统ECC的校验位置(也被称为“附加比特”);这确保不同的存储器单元均勻地损耗。图6示出了可被实现为对地址(例如,页面)按逐次写入来使ECC的校验位置变化的示例性实施例。如图6中所示,用于对地址的第一次写入602的码字中的ECC比特(或校验位置)位于码字的最初三个比特中。用于对该地址的第二次写入604的码字中的ECC比特位于码字的第二至第四比特,并且用于对地址的第三次写入606的码字中的ECC比特位于码字的最末三个比特中。因此,码字中的ECC比特的位置是变化的。图7示出了可以通过示例性实施例实现的用于写入数据的系统的框图,该系统不使用码表来存储元数据。未压缩的数据被馈送到压缩器702,该压缩器702产生压缩的数据和指示数据是被压缩还是被扩展以及压缩或扩展到何种程度的压缩参数。压缩的数据和参数被传递到耐久性码编码器704,该耐久性码编码器704使用待写入存储器的码型来选择对压缩的数据进行编码的方法,该方法被选择为产生最小的成本。可选地该步骤取决于目标存储器地址中当前写入的数据。换言之,成本可以仅取决于将写入的数据码型,或者可以取决于将写入的数据码型和当前写入的数据码型两者。接着,利用数据选择器706,决定将数据存储为未压缩的、压缩的、还是压缩且耐久性编码的。此外,计算描述该决定以及所使用的耐久性编码(如果有的话)的类型的元数据。该步骤的结果是将存储在存储器中的经处理的数据符号以及元数据。元数据和经处理的数据符号被传递到ECC编码器708,该ECC编码器708生成用于外部传递到ECC功能的给定位置集合的校验符号。如前面描述的,每次地址被写入时,用于特定存储器地址的给定位置集合轮换。由ECC编码器708生成校验符号确保了校验符号被选择为使得所得到的码字v在与矩阵M相乘时,导致了所期望的元数据m。ECC编码的结果(即码字v)被输出到存储器。图8示出了可以通过示例性实施例实现的ECC编码器708。矩阵H和M是预先固定的,并且矩阵H是系统ECC的奇偶校验矩阵。第一公式802定义了来自ECC编码器708的一般期望需要计算使得Hv=0的码字向量v,并且因此v是由奇偶校验矩阵H所定义的线性码的码字,并且Mv=m,从而可以通过乘法Mv从v恢复元数据m。关于ECC编码器708的其他要求是,码字v具有位于外部指定的符号位置中的由向量c表示的校验符号;因此其具有在剩余位置中的由向量d表示的给定的经处理的数据符号。在一个示例中,位置集合是码字中的连续符号集合,其开始位置是可选择的。如图8中所见,经处理的数据符号d和校验符号c被组装(assemble)以形成码字v。该组装取决于校验符号的期望位置。图8的框806中给出了三个示例在一个示例中校验符号位于码字的起点,在另一个实施例中校验符号开始于码字的第二符号,并且在第三实施例中校验符号位于码字的末尾。上述图8中还包括公式804,编码器可以利用该公式804计算校验符号。这些公式取决于矩阵~為、…、By期望的元数据m,和期望的经处理的数据符号d。对于每个可能的校验位置存在一个这样的矩阵。通过处理预先指定的矩阵H和M可以得到矩阵BpBp…、Bit)在示例性实施例中,所述处理如下得到使得式的矩阵&,其中I表示单位矩阵。左乘(pre-multiplication)的结果的其他部分是B。,即对于校验符号将被设置在码字v的起点时的期望的矩阵。相似的过程产生&(已示出)、B2(未示出)等。通常,可以通过将矩阵&确定为使得当&乘以矩阵时,结果矩阵包含按列对应于期望的数据_符号位置的单位矩阵,来计算每个B”应当注意,在实际的实现方案中,并不必然需要具有专用于所有B。、Bi、B2等的电路。例如,如果H是循环码的奇偶校验矩阵,则可以通过用对角矩阵左乘By从B。计算&。H所定义的纠错码的符号可以来自任何伽罗华域(GaloisField),包括GF(2P),其中P是任何期望的扩展域度。一旦计算了A”则将校验比特计算为,并且通过以使校验比特和数据符号位于如图8中的公式806所示的期望位置的方式组装向量c和d来计算码字。在需要时,码字v具有使公式802成立的属性。图9示出了可以通过示例性实施例实现的用于读取数据的系统的框图。写入存储器的原始码字由向量v表示,在该示例中,错误向量e破坏了向量V,使得在读取时接收到的字是v+e。这被输入到ECC解码器902。ECC解码器902尝试找到使得H(v+e)=He的错误码型e。如果ECC解码器902成功(假设未发生误纠正),则其通过从v+e和e计算V,找到了v。ECC解码器902还产生描述不可纠正错误状态、可纠正错误状态等等的纠错码标志。解码结果v被传递到计算元数据框904,其计算元数据向量m=Hv。元数据计算的结果m被传递到元数据解释器框906,其解释元数据以便于恢复耐久性码和压缩参数,以及经处理的数据符号的位置。在示例性实施例中,耐久性码参数包括使用什么耐久性码(如果存在的话)对数据编码的描述。在示例性实施例中,压缩参数包括数据是否被压缩的描述。连同关于处理的数据符号的位置的信息一起从v恢复经处理的数据符号。然后将结果馈送到耐久性码解码器908,并且然后馈送到解压缩器910,产生期望的数据。在不使用码表存储元数据的用于写入无错误存储器的系统的示例性实施例中,对写入编码器的输入包括待存储在存储器中的数据、待写入存储器中的码字内数据的期望位置(其可以被包括在元数据中并且在此处被称为“数据位置规范”)以及包括压缩和耐久性码参数的附加元数据。编码器的输出是由按照符合数据位置规范的方式布置的数据和附加符号组成的码字向量,即其中数据符号位于期望的符号位置的码字。写入编码器找到满足位置规范的码字,使得在用预先指定的矩阵M与码字相乘时,结果是元数据。在用于读取通过前述写入编码器实施例写入的数据的系统的示例性实施例中,对读取解码器的输入包括从存储器接收到的码字。读取解码器的输出是存储在存储器中的数据和(可选的)元数据。读取解码器将矩阵M乘以接收到的码字以恢复元数据,并且从元数据恢复码字内的数据的位置和附加比特。读取解码器返回(或输出)数据,并且如果需要,返回(或输出)元数据。在不使用码表存储元数据的用于写入有错误存储器的系统的示例性实施例中对写入编码器的输入包括待存储在存储器中的数据、待写入存储器的码字内数据的期望位置以及包括压缩和耐久性码参数的附加元数据。编码器的输出是包含按照符合位置规范的方式布置的数据和附加符号的码字向量,即其中数据符号位于期望的符号位置的码字,其中附加比特包括预先指定的ECC的奇偶比特。写入编码器找到满足位置规范的码字,使得当用预先指定的矩阵M与码字相乘时,结果是元数据,并且使得当用ECC的奇偶校验矩阵H与码字相乘时,结果是已知的值,诸如0。在用于读取通过前述写入编码器实施例写入的数据的系统的示例性实施例中,对读取解码器的输入包括从存储器接收到的错误码字。读取解码器的输出是存储在存储器中的数据和(可选的)元数据。解码器应用具有奇偶校验矩阵H的预先固定的ECC以纠正接收到的码字中的错误。如果该纠正成功,则解码器将矩阵M乘以经纠正的码字以恢复元数据,并且从元数据恢复码字内的数据的位置和附加比特。解码器返回(或输出)数据,并且如果需要,返回(或输出)元数据。在不使用码表存储元数据的用于写入有错误的存储器的系统的示例性实施例中,对写入编码器的输入包括待存储在存储器中的数据、待写入存储器的码字内数据的期望位置(其可以包括在元数据中)、待使用的ECC符号(或比特)的可变数量(具有从多种可能性中选择的ECC符号的数量)、以及包括压缩和耐久性码参数的附加元数据。编码器的输出是由按照符合位置规范的方式布置的数据和附加符号组成的码字向量,即其中数据符号位于期望的符号位置的码字,其中附加比特包括来自基于所需ECC比特的数量而选择的ECC的奇偶比特。写入编码器找到满足位置规范的码字,使得当用预先指定的矩阵M与码字相乘时,结果是元数据,并且使得当用所选择的ECC的奇偶校验矩阵H与码字相乘时,结果是已知的值,诸如O。在用于读取通过前述写入编码器实施例写入的数据的系统的示例性实施例中,对读取解码器的输入包括从存储器接收到的错误码字。读取解码器的输出是存储在存储器中的数据和(可选的)元数据。对于可变ECC比特的每个可能的数量,解码器尝试应用对应的奇偶校验矩阵以纠正错误。如果恰好存在导致成功纠正的一个奇偶校验矩阵,则解码器将矩阵M乘以经纠正的码字以恢复元数据,并且从元数据恢复码字内的数据的位置和附加比特。它返回(或输出)数据,并且如果需要,返回(或输出)元数据。替选的示例性实施例包括一种用于获得相似结果而无需添加描述应用于所存储的内容的耐久性编码和压缩技术的扩展元数据的方法。在图10中示出的实施例中,通过分析所存储的内容获得所使用的特定的耐久性码。写入过程1000如下。N个比特的数据序列1002将被写入K>=N个单元。数据被压缩以获得具有C个信息符号的压缩序列1004。两个阈值1006和1008,即cl和c2,被分别固定为cl<c2<N。如果C>c2,则数据被原样地写入,使用1填充(Pad)K-N个单元以形成K个扩展比特的序列1010,可选地,对序列进行加扰。在示例性实施例中,当写入的内容是未编码的时候,写入可选标志比特1012。如果C<=cl,则使用第一码(即,码1)执行耐久性编码。在示例性实施例中,码1是具有码字长度K的有界权重码,其0的数量在zOO与zOl之间,zOO和zOl被选择为使得可能的有界权重码字的总数量大于或等于2cl。在示例性实施例中,码1是具有码字长度K的恒定权重码,其0的数量zO为使得可能的恒定权重码字的总数量大于或等于2“。在示例性实施例中,如果cl<C<=c2,则使用第二码(S卩,码2)执行耐久性编码。在示例性实施例中,码2是具有码字长度K的有界权重码,其0的数量被包括在ZlO与zll之间,ZlO和zll为使得可能的有界权重码字的总数量大于或等于T2。在示例性实施例中,码2是具有码字长度K的恒定权重码,其0的数量zl为使得可能的恒定权重码字的总数量大于或等于2c2。在图10中,示出了读取过程1020的示例性实施例。读取并分析存储器内容以便于识别其所属的耐久性码。在示例性实施例中,该分析包括对存储器内容中的0的数量计数并且选择与所计数的0的数量匹配的唯一耐久性码。如果码字未与可能的给定码族中的任何耐久性码匹配,则认为是未编码的内容(可能被加扰)。在任一情况中,如果存在并设定了通知未编码的内容的存在的附加标志,则任何是未编码的内容。在该分析识别到码并且未设定未编码标志的情况中,使用所识别的码对内容解码。本领域的技术人员将认识到,本发明不限于恒定或有界权重码,以及相似的实施例可以使用在可用的耐久性编码码族中选择的不同数量的可能的码,对于该码族可以通过检查码字唯一地识别每个码。在示例性实施例中,K=N。图11中示出的另一示例性实施例包括根据如下标准执行联合压缩和扩展,以高效地将N个数据比特编码为K个单元。在框1102中,所有数据比特序列从最高概率到最低概率被列出和排序(sort)。在框1104中,所有长度为K的码字从最小成本到最大成本排序,其中码字的成本与写入该码字相关联的对耐久性的影响成正比。在框1106中,通过使数据序列的排序列表的第一元素(即,最可能的N数据比特序列)与码字的排序列表的第一元素(即,具有最小的对耐久性的影响的码字)关联,然后使数据序列的排序列表的第二元素与码字的排序列表的第二元素关联,如此这般,建立表示从数据比特序列到码字的单射(injective)关系的表。在对应的编码过程中,接收待存储的信息序列,查阅表以找到待写入的对应的码字。在对应的解码过程中,从存储器取得码字,并且扫描表直至找到码字。解码的输出是与接收的码字相关的信息数据。在示例性实施例中,总的标准是使最大可能的序列与最小成本的码字关联。图12示出了可以通过示例性实施例实现的示例。如图12中所示,a、b、c、d是在与其各自的概率相同的行中示出的数据消息(可以是N=2并且a=00,b=01,c=10和d=11)。假设写入“0”具有等于1的成本并且写入“1,,具有等于0的成本,分别建立两个码,即K=2和K=3。按照降低的概率对消息排序,并且按照增加的成本对对应的码字排序(对于K=2,是0、1、1、2,并且对于K=3,是0、1、1、1)。对于码K=2的平均成本是0.3125(每个单元),而对于K=3是0.1667(每个单元)。直接写入映射a=00,b=01,c=10和d=11具有0.6785的关联成本(每个单元)。此处描述的示例性实施例不仅适用于在非易失性存储器器件的页面中编码的信息,而且还适用于在多个非易失性存储器器件的页面中编码的信息,该多个非易失性存储器器件作为递送作为单个外部请求的结果的数据的单个逻辑实体工作。不论是一个设备还是递送数据的多个设备,可以通过仅存取页面分部(pagesubsection)而得到数据。在多个设备的情况中,每个设备存取具有公共页面地址的公共页面分部。技术效果和益处包括执行自适应耐久性编码的能力。如此处描述的,待写入存储器的数据被转换为使对存储器单元的损耗减小的形式并且因此延长存储器寿命。此外,如此处描述的写入的数据可以对于错误是更加可复原的(例如,即使在存储的信息中存在错误的情况下仍可以恢复数据)。此处使用的术语仅用于描述特定实施例的目的而并不意图限制本发明。除非上下文清楚地指示其他含义,否则如此处使用的单数形式“一”以及“该”也意图包括复数形式。将进一步理解,本说明书中使用的术语“包括”指明了所陈述的特征、整体、步骤、操作、元件和/或部件的存在,但是并不排除存在或添加一个或更多个其他特征、整体、步骤、操作、元件部件和/或它们的组。与所附权利要求中的所有装置或步骤加功能要素对应的结构、材料、动作和等同物意图为包括用于与特别要求保护的其他要求保护的元素组合而执行所述功能的任何结构、材料或动作。本发明的描述已被呈现用于说明和描述的目的,但是并不意图为穷举性的或者使本发明限于所公开的形式。许多修改和变化对于本领域的普通技术人员将是清楚的,而不偏离本发明的范围和精神。已选择并描述实施例,以最佳地解释本发明的原理和实际应用,并且使本领域的其他普通技术人员能够理解本发明以用于具有多种修改的多种实施例,如适用于所期望的特定用途。此处示出的流程图仅是一个示例。存在针对此处描述的该流程图或步骤(或操作)的许多变化而不偏离本发明的精神。例如,步骤可以以不同的顺序执行或者可以添加、删除或修改步骤。所有这些变化应被视为要求保护的本发明的一部分。如上文描述的,本发明的实施例可以具体化为计算机实现的过程和用于实践这些过程的装置的形式。本发明的实施例也可以具体化为计算机程序代码的形式,其包含在诸如软盘、CD-ROM、硬盘驱动器或者任何其他计算机可读存储介质的有形介质中具体化的指令,其中,当计算机程序代码被加载到计算机中并且由计算机执行时,计算机成为用于实践本发明的装置。本发明还可以被具体化为计算机程序代码的形式,而不管该计算机程序代码是例如存储在存储介质中,加载到计算机中和/或由计算机执行,或者在某种传送介质上传送,诸如在电线或线缆上传送,通过光纤传送,或者经由电磁辐射传送,其中,当计算机程序代码被加载到计算机中并且由计算机执行时,计算机成为用于实践本发明的装置。当在通用微处理器上实现时,计算机程序代码片段对微处理器进行配置以建立特定的逻辑电路。尽管已描述了本发明的优选实施例,但是将理解,本领域的技术人员在现在或将来可以在所附权利要求的范围内进行多种改进和增强。这些权利要求应被解释为保持对首次描述的本发明的适当的保护。权利要求一种用于存储数据的方法,包括接收写入数据和写入地址;将压缩算法应用于所述写入数据以生成压缩的数据;将耐久性码应用于所述压缩的数据,响应于通过对所述写入数据应用压缩而节约的空间量选择和应用所述耐久性码,所述应用耐久性码产生了码字;以及将所述码字写入所述写入地址。2.如权利要求1所述的方法,进一步包括在写入所述码字之前向所述码字添加错误码纠正ECC比特。3.如权利要求2所述的方法,其中,添加到所述码字的ECC比特的数量是响应于通过对所述写入数据应用压缩而节约的空间量。4.如权利要求2所述的方法,其中,添加到所述码字的ECC比特的数量包括ECC比特的缺省数量和响应于通过对所述写入数据应用压缩而节约的空间量的ECC比特的可变数量。5.如权利要求2所述的方法,其中,所述码字中的所述ECC比特的位置变化。6.如权利要求2所述的方法,其中,所述写入被编程为使得在将所述码字写入所述写入地址时,实现增加写入速度、降低功率电平和降低损耗水平中的至少之一,所述编程响应于添加到所述码字的ECC比特的数量。7.如权利要求1所述的方法,进一步包括生成用于所述写入地址的元数据,读取操作利用所述元数据来对写入所述写入地址的所述码字解码。8.如权利要求7所述的方法,进一步包括将所述元数据存储在表中。9.如权利要求1所述的方法,进一步包括读取所述码字;执行所述码字的分析;响应于所述分析识别所述耐久性码;利用对于所识别的耐久性码的解码器对所述码字解码;以及对解码的码字解压缩以生成所述写入数据。10.如权利要求1所述的方法,其中,使用单个编码功能联合执行应用所述压缩和应用所述耐久性编码。11.一种系统,包括接收器,接收写入数据和写入地址;数据压缩器,将压缩算法应用于所述写入数据以生成压缩的数据;耐久性编码器,将耐久性码应用于所述压缩的数据,响应于通过对所述写入数据应用压缩而节约的空间量选择和应用所述耐久性码,所述应用耐久性码产生码字;以及存储器写入器,将所述码字写入所述写入地址。12.如权利要求11所述的系统,进一步包括纠错编码器,在所述存储器写入器写入所述码字之前向所述码字添加错误码纠正ECC比特。13.如权利要求12所述的系统,其中,所述码字中的所述ECC比特的位置变化。14.一种用于存取存储器的方法,所述方法包括从存储器地址取得码字;用元数据矩阵乘以所述码字以恢复用于所述码字的元数据,所述元数据包括数据位置规范;响应于所述元数据来识别所述码字中的数据;以及输出所述数据作为读取数据。15.如权利要求14的方法,其中,所述码字进一步包括ECC比特,以及所述方法进一步包括在执行所述乘法之前向所述码字应用ECC解码器,所述ECC解码器被设计来实现由对应于所述码字中的ECC比特数量的奇偶矩阵所指定的ECC码。16.如权利要求15的方法,其中,所述码字中的ECC比特的数量是可变的。17.如权利要求14的方法,其中,所述码字进一步包括可变且未知的数量的ECC比特,以及所述方法进一步包括将一个或更多个ECC解码器应用于所述码字以定位与所述码字中的ECC比特的数量对应的ECC解码器。18.如权利要求14的方法,进一步包括生成所述码字,所述生成包括接收所述数据和所述元数据;以及根据所述元数据中的所述数据位置规范将所述数据设置在所述码字中,以及使得所述元数据矩阵乘以所述码字等于所述元数据;以及将所述码字写入所述存储器地址。19.一种系统,包括存储器读取器,从存储器地址取得码字;元数据计算器,用元数据矩阵乘以所述码字以恢复用于所述码字的元数据,所述元数据包括数据位置规范;元数据解释器,响应于所述元数据来识别所述码字中的数据;以及发送器,其输出所述数据作为读取数据。20.如权利要求19所述的系统,其中所述码字进一步包括ECC比特,以及所述系统进一步包括ECC解码器,在执行所述乘法之前其向所述码字应用ECC码,所述ECC码被设计来实现由对应于所述码字中的ECC比特数量的奇偶矩阵所指定的ECC码。全文摘要自适应耐久性编码包括一种用于存储数据的方法,该方法包括接收写入数据和写入地址。将压缩算法应用于写入数据以生成压缩的数据。将耐久性码应用于压缩的数据以生成码字。响应于通过对写入数据应用压缩而节约的空间量,选择和应用所述耐久性码。将所述码字写入到所述写入地址。文档编号G06F12/02GK101876947SQ201010169329公开日2010年11月3日申请日期2010年4月21日优先权日2009年4月30日发明者A·贾格默汉,J·P·卡里蒂斯,L·A·拉斯特拉斯-蒙塔诺,M·弗朗斯奇尼申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1