一种存储器设备和一种方法转让专利

申请号 : CN201380075912.9

文献号 : CN105378848B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : D.H.尹J.常N.穆拉利马诺哈R.施雷伯N.P.朱皮

申请人 : 慧与发展有限责任合伙企业

摘要 :

一种存储器设备包括k级存储器单元的组或块,其中k>2,并且其中每个k级存储器单元具有由相应电阻水平表示的k个可编程状态。

权利要求 :

1.一种存储器设备,包括:

多个k级存储器单元组,其中k>2,并且其中每个k级存储器单元具有由相应电阻水平表示的k个可编程状态,电阻水平包括最低电阻水平、中间电阻水平和最高电阻水平,与距最高电阻水平相比,中间电阻水平更接近于最低电阻水平,其中每个组包括可编程为表示以下各项的多个单元:具有大于单元数的位数的数据,或者

至少一个元数据状态。

2.根据权利要求1所述的存储器设备,其中所述元数据状态指示对应的存储器单元组不包含有效数据。

3.根据权利要求1所述的存储器设备,其中所述元数据状态与数据高速缓存状态相关。

4.根据权利要求1所述的存储器设备,其中所述多个存储器单元组中至少一个最初被指定为备用组,并且其中备用组可用于替换所述多个组中已经被编程为表示元数据状态的特定一个组。

5.根据权利要求4所述的存储器设备,还包括复用器的至少一个级,用以绕过所述特定组并选择备用组以用于输出。

6.根据权利要求4所述的存储器设备,其中备用组可用于解决硬错误,并且其中所述存储器设备在通过使用备用组而执行硬错误校正之前要应用软错误校正。

7.根据权利要求1所述的存储器设备,还包括用于存储针对指向有故障的存储器单元组的指针的值的存储器单元。

8.根据权利要求1所述的存储器设备,其中k个可编程状态包括由存储器单元的最高电阻水平表示的给定状态,并且其中所述元数据状态由所述组中的特定一个组中全部都处于给定状态的存储器单元来表示。

9.一种方法,包括:

在多个k级存储器单元组中存储数据,其中k>2,并且其中每个k级存储器单元具有由相应电阻水平表示的k个可编程状态,电阻水平包括最低电阻水平、中间电阻水平和最高电阻水平,与距最高电阻水平相比,中间电阻水平更接近于最低电阻水平,其中每个组包括可编程为表示大于存储器单元数的数据位数或者至少一个元数据状态的多个存储器单元;

读取所述多个组中的第一组的状态;以及

响应于从第一组读取的状态是元数据状态,执行响应于第一组的元数据状态的动作。

10.根据权利要求9所述的方法,其中执行动作包括将第一组标记为无效的。

11.根据权利要求10所述的方法,其中执行动作还包括用备用的存储器单元组替换第一组。

12.一种存储器设备,包括:

多个k级存储器单元的块,其中k>2,并且其中每个k级存储器单元具有由相应电阻水平表示的k个可编程状态,电阻水平包括最低电阻水平、中间电阻水平和最高电阻水平,与距最高电阻水平相比,中间电阻水平更接近于最低电阻水平,并且其中所述多个k级存储器单元的块被布置成在第一层和第二层中存储数据,并且其中存储器单元中的一个给定存储器单元响应于给定存储器单元在第一层中存储第一数据值而在第二层中存储数据位,并且给定存储器单元响应于给定存储器单元在第一层中存储了不同于第一数据值的第二数据值而不在第二层中存储任何有效数据。

13.根据权利要求12所述的存储器设备,还包括用于存储反转标志以指示在第一层中所述多个k级存储器单元的块中存储的数据已经被反转的存储器单元。

14.根据权利要求12所述的存储器设备,其中,在第一层中,存储器单元中的给定一个存储器单元通过使用k个可编程状态中的至少第一可编程状态以表示第一数据值并且使用k个可编程状态中的第二可编程状态以表示第二数据值来存储数据位,并且其中在第二层中,给定存储器单元通过使用k个可编程状态中的至少一个以表示第一数据值并且使用k个可编程状态中的至少另一个以表示第二数据值来存储另一个数据位。

说明书 :

一种存储器设备和一种方法

背景技术

[0001] 为了实现增加的存储器密度,可以使用相变存储器。相变存储器的存储器单元可以各自具有对应于不同电阻的多个状态。相变存储器的存储器单元实际上是可变电阻器,其可以由例如硫系玻璃形成。为了写入到相变存储器单元,所述单元被加热,其使材料熔化,所述材料然后被冷却。冷却的速率控制所得到的固体材料的晶体大小,所述晶体大小控制电阻。相对慢的冷却速率促进结晶化,这导致存储器单元的减小的电阻。
[0002] 相变存储器单元可以是能够表示多于两个状态的多级存储器单元。状态的数目由存储器单元可以被编程为的电阻水平的对应数目来表示。

附图说明

[0003] 关于以下附图来描述一些实施例:
[0004] 图1是图示根据一些实现方式的多级存储器单元的不同状态的图解;
[0005] 图2是根据一些实现方式的多级存储器单元组的示意图;
[0006] 图3A-3B是根据一些实现方式的包括数据存储器单元和备用存储器单元的多级存储器单元的组的示意图;
[0007] 图4是根据一些实现方式的读取多级存储器单元的流程图;
[0008] 图5是根据一些实现方式的包括数据恢复机制的存储器单元的组的示意图;
[0009] 图6是根据一些实现方式的可用于选择多级存储器单元的电路的示意图;
[0010] 图7A-7B是根据另外的实现方式的用于选择多级存储器单元的操纵(steering)电路的示意图;
[0011] 图8是根据一些实现方式的过程的流程图;
[0012] 图9A-9B是根据另外的实现方式的用于在多个层中存储数据的存储器单元块的示意图;以及
[0013] 图10是根据附加的实现方式的用于在多个层中存储数据的示例性布置的示意图。

具体实施方式

[0014] 在相变存储器单元的写入期间,在存储器单元已经被加热并且存储器单元的材料已经熔化之后,通过存储器单元的冷却速率来控制存储器单元的电阻水平。存储器单元的电阻水平确定由存储器单元表示的数据状态。在一些实现方式中,相变存储器设备的每个存储器单元能表示多于两个状态。更一般地,这样的存储器单元可以被称为k级存储器单元,其中k>2。
[0015] 尽管在本讨论中对相变存储器进行参考,但注意的是根据一些实现方式的技术或机制可以应用于采用电阻水平来表示相应数据状态的其它类型的存储器。这样的存储器的另一个示例是忆阻器存储器。
[0016] 与相变存储器设备(或使用电阻水平来表示数据状态的任何其它存储器设备)相关联的问题是被编程到存储区单元中的电阻并不随时间恒定。事实上,存储器单元电阻可能随时间漂移。电阻中的漂移可能由各种因素引起,包括由于附近存储器单元的写入而产生的热或其它因素。电阻漂移,如果未经检查,可能最终导致数据误差。例如,多级存储器单元的特定电阻水平可以最初表示第一数据状态。随时间流逝,由于电阻漂移,存储器单元的电阻可能增加,这可以使电阻上升到对应于第二数据状态的水平,导致数据误差。
[0017] 为了解决由于电阻漂移而引起的数据误差,可以执行对相变存储器设备中的存储器单元的刷新,其中每个存储器单元的状态被读取,并且存储器单元的电阻被还原到正确的水平。与执行刷新(如果频繁地进行)相关联的问题是刷新消耗功率,并且还消耗存储器访问周期(其导致减小的存储器带宽)。
[0018] 存储器单元的电阻漂移可能随时间增长。电阻漂移的增长率取决于存储器单元的电阻,并且针对由较高电阻水平表示的状态而言较大。
[0019] 一个类型的相变存储器设备采用四级存储器单元,其中每个存储器单元可以表示四个不同的数据状态。四个不同的状态由四个对应的不同电阻水平来表示。四个状态可以被称为S1、S2、S3和S4,其对应于电阻水平R1、R2、R3和R4,其中R1
[0020] 在这样的示例中,与最高电阻水平R4相关联的状态S4不遭受电阻漂移,因为电阻漂移使电阻随时间增加,而在某个指定的阈值之上的任何电阻水平被视为表示状态S4。然而,由电阻水平R3表示的状态S3可能最受电阻漂移影响。由于电阻漂移针对较高的电阻水平而言较大,电阻R3可以更快地增长到超过在S3和S4之间的所指定阈值的水平。换言之,由于电阻水平R3随时间漂移,其可以增加以使得其变成表示状态S4而不是状态S3。由电阻水平R2表示的状态S2也可能受电阻漂移影响,尽管在比状态S3小一点的程度上。状态S1遭受甚至更小的电阻漂移,由于状态S1与相对低的电阻相关联,并且因而随时间的、针对状态S1的电阻漂移相对小,并且甚至可以是可忽略的。
[0021] 根据一些实现方式,为了解决电阻漂移问题,代替使用四级存储器单元,在一些示例中可以使用三级存储器单元。更具体地,状态S3可以被省略,由于状态S3与电阻水平R3相关联,其更多地遭受电阻漂移。图1示出其中使用状态S1、S2和S4但不使用状态S3的示例性三级存储器单元。在图1中定义两个阈值T1和T2,其中小于T1的任何电阻水平对应于状态S1,并且大于T2的任何电阻水平对应于状态S4。T1和T2之间的任何电阻表示状态S2。
[0022] 在写入操作期间被写入到相变存储器单元的实际电阻是随机变量,其分布是对数正态的,如图1中的曲线102、104和106所表示的那样。在图1的图解中,水平轴是电阻的对数(log10R),而竖直轴表示电阻R的概率分布函数(PDF)。写入到存储器单元的电阻具有正态分布,包括在标称值处或接近于标称值的均值和从均值的标准偏差。
[0023] 如图1中所描绘的,由于未使用S3状态,所以在状态S2和S4之间提供被表示为108的相对宽的裕度(margin),以使得状态S2能够容忍随时间的相对大量的电阻漂移而不导致数据误差。如上所指出的,状态S1遭受相对低的电阻漂移,其甚至可以是可忽略的。
[0024] 从由多级存储器单元表示的中移除状态S3意味着可以表示较少数据状态,这减少了可以在相变存储器设备中表示的每存储器单元的数据位的平均数目。尽管能够存储四个状态的多级存储器单元可以表示每存储器单元两个数据位,指出的是电阻漂移的问题可以使得这样的配置不实际。为了存储每存储器单元两位,可能必须执行更频繁的刷新操作以刷新存储器单元的电阻水平,从而避免由于电阻漂移而引起的误差。
[0025] 通过移除最脆弱的状态(S3),可以减小平均误差率,并且可以不太频繁地执行或甚至避免刷新操作。
[0026] 尽管图1示出示例性目标标称值(由曲线102、104和106中每一个的顶部表示),指出的是,在其它示例中,针对每个特定状态(并尤其是状态S2)的目标电阻值可以被调整,诸如通过将针对状态S2的目标电阻值移动得更接近于状态S2和S4之间的阈值T2,如虚线曲线110所指示。针对曲线104,状态S1和S2之间的阈值是T1A,而针对曲线110,状态S1和S2之间的阈值是T1B,其大于T1A。
[0027] 尽管图1描绘了三级存储器单元的示例,指出的是,更一般地,可以使用k级(k>2)存储器单元。
[0028] 除了从用于每个存储器单元的使用中移除脆弱的状态之外,根据一些实现方式的技术或机制还提供存储器单元组。例如,每个组可以包括两个存储器单元,其中每个存储器单元是三级存储器单元。这样的布置被称为2上为3(3-on-2)布置。图2示出存储器单元的多个组202-1、202-2、202-X,其中每个组202-i(i=1到X)包括两个存储器单元(在图2中由方形表示)。每个存储器单元是能够表示三个相应状态的三级存储器单元。因此,在2上为3布置中的存储器单元的每个组202-i可以表示三个数据位。在以下的表中描绘了示例性2上为3数据编码方案:
[0029] 。
[0030] 在以上的表中,第一列包括组202-i中的单元1和单元2的状态。因而,如果单元1具有状态S2且单元2具有状态S1(上表中的第一行),则所表示的3位数据是000。类似地,如果单元1具有状态S2且单元2具有状态S1,则所表示的3位数据是011。
[0031] 在上表中,注意到,状态组合之一(特别是(S4,S4))对应于元数据状态。由(S4,S4)表示的元数据状态包括除写入到相变存储器的实际数据之外的信息。例如,由(S4,S4)表示的元数据可以指示存储器单元的组202-i不表示有效数据。在这样的示例中,元数据状态是无效状态,以指示存储器单元的组202-i中的数据是无效的。在其它示例中,元数据状态可以用于表示其它信息。尽管在以上示例中示出仅一个元数据状态,但指出的是,在其它实现方式中,多个元数据状态可以与存储器单元的每个组202-i相关联。
[0032] 同样,尽管(S4,S4)用于表示元数据状态,但指出的是,另一个状态组合可以用于表示元数据状态。同样,在其它示例中,存储器单元组可以表示多个元数据状态。
[0033] 更一般地,代替2上为3布置,可以使用n上为m(m-on-n)布置,其中n个k级存储器单元的组可以表示总共kn个状态。组202-i内的n个k级单元可以表示m位数据,假定kn大于或等于2m。在一些实现方式中,k的值是一个不是2的幂的值。在其中k不是2的幂(换言之,k≠2i,其中i是自然数)的实现方式中,于是kn不能等于2m。在这样的实现方式中,kn>2m,这意味着n个k级存储器单元的组不能使用所有状态,使得(一个或多个)未使用的状态可以是(一个或多个)元数据状态。如果n个k级存储器单元的组在(一个或多个)元数据状态之一中,则那是所述组不存储实际数据的指示。相反地,(一个或多个)元数据状态可以用于指示其它信息,诸如用于标识存储器单元组是有故障的并且不应该被使用,用于指示数据高速缓存状态(例如,对应于该存储器单元组的数据被处理器排他性地高速缓存,并且将不被多处理器系统中的任何其它处理器使用),或其它类型的信息。
[0034] 通常,注意到,多级存储器单元的组202-i能够表示具有大于组中的单元数目的位数的数据。此外,多级存储器单元的组202-i能够表示至少一个元数据状态。
[0035] 在一些实现方式中,除数据存储器单元之外,相变存储器设备还可以包括备用存储器单元。数据存储器单元被相变存储器设备用于存储数据。备用存储器单元并非起初就被相变存储器设备使用,除非在相变存储器设备中检测到错误或故障,在该情况下备用存储器单元可以被重配置为数据存储器单元以供在存储数据中使用。
[0036] 图3A示出包括数据存储器单元300和备用存储器单元302的示例。在图3A的特定示例中,假定存在用于八个数据存储器单元的四个备用存储器单元。在其它示例中,可以采用其它数目的数据存储器单元和备用存储器单元。
[0037] 八个数据存储器单元300被布置在四个组202-1、202-2、202-3和202-4中。四个备用存储器单元302被布置在两个组304-1和304-2中。
[0038] 如果在例如组202-2的至少一个存储器单元中检测到故障,则组202-2可以被编程为无效状态,如图3B中用散列图案(hashed pattern)所指示的。将组202-2编程为无效状态(例如,S4、S4)是组202-2不包含有效数据并因而不应被使用的指示。如图3B中所描绘的,在将组202-2标记为无效之后,备用组之一(例如,304-1)可以被用作用于组202-2的替换以存储数据。
[0039] 如上所讨论的,存储器单元组的无效状态(或更一般地,元数据状态)用通过组中的存储器单元的(S4,S4)状态组合来表示。相变存储器设备可以具有两个类型的失效模式:停滞重置(stuck-reset)和停滞置位(stuck-set)。停滞重置状态中的存储器单元是停滞在最高电阻状态(S4)处的存储器单元。因而,当存储器单元经历停滞重置失效时,包含处于停滞重置模式中的该存储器单元的组自然可以被编程为无效状态(S4,S4)。
[0040] 另一失效模式是停滞置位失效模式。停滞置位失效模式中的存储器单元指的是不能通过使用正常写入操作而被重置为最高电阻状态(S4)的存储器单元。存储器单元状态保持在较低电阻状态,例如,S1或S2。为了复活停滞置位的存储器单元,可以应用具有比在写入操作中正常使用的更大的幅度和更长的持续时间的重置写入脉冲,以将停滞置位的存储器单元转换成S4状态。
[0041] 图3A-3B的示例描绘了可以如何通过使用备用的存储器单元组来校正存储器单元中的硬错误(例如由诸如损耗失效之类的硬件失效引起的)。
[0042] 图4是用于响应于存储器地址404而访问数据块(402)的流程图。块402是存储器单元阵列406的部分。块402包括数据存储器单元300和备用存储器单元302,诸如图3A中描绘的。此外,块402还包括用于存储错误码的存储器单元408以用于校正被包含在数据存储器单元300和备用存储器单元302中的数据中的软错误。
[0043] 在2上为3布置的特定示例中,可以通过使用342个存储器单元来在存储器阵列406中存储512位数据。为了针对512位数据而校正单位错误,可以使用10位单位校正(SEC)码。在一些示例中,SEC码可以是BCH码或其它类型的码。用于存储错误码的存储器单元408可以是单级单元,而不是多级单元。然而,在其它示例中,多级存储器单元可以用于存储错误码。
尽管对具有特定位数的数据和具有特定位数的错误码进行参考,指出的是,根据一些实现方式的技术或机制可以应用于其它数据长度和对应的错误码长度。
[0044] 在一些示例中,SEC码是基于针对每个存储器单元而使用两位格雷编码,其中格雷编码执行以下映射:00针对状态S1,01针对状态S2且11针对状态S4。通过使用格雷编码,诸如由于电阻漂移而引起的软错误表现为1位错误,以使得SEC码可以校正将有效状态(S1或S2)转换成无效状态(S4)的错误。
[0045] 如果检测到软错误,则通过使用SEC码来执行软错误校正(在410处)。在执行软错误校正之后,可以执行硬错误校正(在412处),诸如通过用备用存储器组来替换有故障的数据存储器组(如果存在的话),诸如根据图3B示例。由于漂移错误可以将有效状态改变成无效状态,这可能引起不正确的硬错误校正,所以在硬错误校正之前执行软错误校正。
[0046] 如图4中进一步所示的,在应用任何硬错误校正(在412处)之后,经校正的数据(414)经受符号解码(在416处)以将由每个组中的两个存储器单元所表示的状态转换成对应的3位数据。在执行符号解码之后,提供输出数据(418)。
[0047] 在其它示例中,代替使用如图3A和3B中描绘的布置以执行硬错误校正,可以使用错误校正指针(ECP)技术或机制。如图5中所示,ECP存储器单元502被用于存储对于数据存储器单元500的有故障的数据存储器组510(例如,2上为3的组或更一般地n上为m的组)的指针504。有故障的数据存储器组510具有至少一个有故障的存储器单元。ECP存储器单元502包含值,其作为指针504的值。注意到,ECP存储器单元502还可以用存储器单元的n上为m的组来实现以减少针对ECP指针504的存储的电阻漂移错误的问题。指针504的不同值指向数据存储器组中不同的数据存储器组。在ECP存储器单元502中存储的预定义的值可以指示:不存在要替换的有故障的数据存储器组。在图5的示例中,用备用存储器组506来替换所标识出的有故障的数据存储器组510。
[0048] 图6是图示如何通过使用备用存储器单元来执行硬错误校正的示意图,假定在图3A和3B中示出的示例。为了容忍p(p≥1)个硬失效,采用p个校正级(stage)。在图6的示例中,假定p=2。在图6中,使用数据存储器单元的八个组204-1到204-8,并且提供两个备用存储器单元304-1和304-2。假定存储器组204-2和204-5是将被编程为无效状态的有故障的存储器组。
[0049] 图6示出两个复用器级(stage):级1和级2。复用器级构成操纵电路的一个示例以操纵来自存储器单元组204-1到204-8和304-1到304-2中的所选数据位到输出。级1中的每个复用器具有连接到一个存储器组的第一输入和连接到图6的序列中的紧跟着的存储器组的输出的第二输入。级1包括复用器601、602、603、604、605、606、608和609。级1还包括控制电路610,其用于提供控制信号以选择复用器601-609的输入以从每个复用器输出。控制电路610包括控制门611、612、613、614、615、616、617和618,在一些示例中所述控制门可以是OR(或)门。
[0050] 复用器601使其第一输入连接到存储器组204-1并使其第二输入连接到存储器组204-2。另一个复用器604使其第一输入连接到存储器组204-8并使其第二输入连接到备用存储器组304-1。
[0051] 每个存储器组204-1到204-8和304-1到304-2可以输出无效指示符,所述无效指示符可以被设置为“1”值或“0”值。在一些示例中,如果被设置为“1”值,则无效指示符指示相应存储器组已经被标记为具有无效状态(例如,S4,S4)。在图6的示例中,从存储器组204-2和204-5输出的状态指示符被设置成“1”值。另一方面,如果没有用无效状态(S4,S4)来标记存储器组,则所述存储器组输出具有“0”值的无效指示符,这是在存储器组204-1、204-3、204-4和204-6到204-7和304-1到304-2的情况下的情形。
[0052] 在图6中,细线表示控制信号路径,诸如以传播状态指示符,而粗线表示数据路径。
[0053] 级1中的每个复用器的选择输入是基于相应存储器组的无效指示符的。级1中的第一复用器601使其选择输入连接到存储器组204-1的无效指示符。因而,如果存储器组204-1不是处于无效状态,则复用器602的第一输入被选择以供复用器602输出。
[0054] 级1中的其余复用器使其选择输入连接到相应OR(或)门611到618的输出,其中每个或门使一个输入连接到由一个存储器组输出的无效指示符,并使第二输入连接到由图6中示出的序列中的紧接在前的存储器组输出的无效指示符。
[0055] 在图6的示例中,由于存储器组204-2被标记为无效,所以它输出具有“1”值的无效指示符,这使或门611将逻辑“1”值输出到复用器602的选择输入。这使复用器602选择其第二输入以供复用器602输出。有效地,有故障的存储器组204-2被绕过,由于复用器601选择存储器组204-1,并且级1中的下一个复用器602选择存储器组204-3。
[0056] 注意到,控制电路610中的或门连接成链,其中一个或门的输出连接到链中下一个相继的或门的输入。这样的效果是如果链中的先前的或门输出“1”值,其使链中所有后续或门也输出“1”值,这有效地使由这些相继的或门控制的对应复用器选择复用器的第二输入。
[0057] 在图6的示例中,由于或门611已经输出“1”值,所以所有相继的或者或门612-618也将输出“1”值。这所意味的是级1中的复用器604将选择有故障的存储器组204-5的输出,这意味着有故障的存储器组204-5的输出将被传播到级2。为了解决该问题,级2包括复用器621到628,以及在控制电路630中的或门631-637的类似链。级2中的复用器使得基于输出值“1”的级2的控制电路630中的或门633而绕过存储器组204-5的输出,从而绕过级1中的复用器604所选择的有故障的存储器组204-5的输出。
[0058] 或门640接收由复用器621-628输出的状态指示符。如果状态指示符中的任一个具有“1”值,则或门640输出失效指示642。如果存储器组204-1到204-8和304-1到304-2中没有一个是有故障的,则由复用器621到628输出的状态指示符将全具有“0”值,这将意味着或门640将不会输出失效指示642。
[0059] 级2的复用器621-628输出8个数据位(数据0-7)。
[0060] 与使用图6中的级1和2中的或门链相关联的问题是相对长的或门链可能花费相对长的时间来评估。因而,在一些示例中,代替使用如图7A中描绘的顺序或门链,可以使用具有更快评估时间的或门链,诸如图7B中所描绘的。图7B的或门链是Skalansky加法器风格(Skalansky-adder-style)或门链。在其它示例中,可以采用其它类型的或门链,诸如Kogge-Stone加法器风格(Kogge-Stone-adder-style)或门链及其它。
[0061] 图8是根据一些实现方式的一般过程的流程图。图8的过程可以由存储器设备来执行,所述存储器设备采用k级存储器单元的组,如以上讨论的。所述过程在k级存储器单元的组中存储(在802处)数据,其中,k级存储器单元的每个组具有由相应电阻水平表示的k个可编程状态,并且其中每个组包括可编程为表示以下各项的多个存储器单元:(1)大于单元数的数据位数,以及(2)至少一个元数据状态。
[0062] 所述过程还读取(在804处)多个存储器单元组中的第一组的状态。响应于从第一组读取的状态是元数据状态,执行响应于第一组的元数据状态的动作(在806处)。例如,如上所指出的,元数据状态可以是无效状态。响应于第一组的无效状态而执行的动作可以包括将第一组标记为无效的,以及使用备用的存储器单元组来替换第一组。在其它示例中,可以响应于具有元数据状态的第一组来执行其它动作。
[0063] 在可替换实现方式中,可以执行两层编码。在两分层编码的实现方式的情况下,三级存储器单元可以在第一层中存储数据和在第二层中存储数据。两层编码布置的示例在下表中被描绘:
[0064] 。
[0065] 图9A描绘了四个3级存储器单元902、904、906和908。四个存储器单元902、904、906和908可以在两层中存储数据,包括第一层块910和第二层块912。存储器单元902、904、906和908中的每一个是三级存储器单元。
[0066] 第一层块910中的每一个存储器单元可以存储一位数据,所述一位数据可以具有逻辑0或1状态。在第一层块910中,S1状态表示逻辑“0”,而S2或S4状态表示逻辑“1”(如上表中所表示的)。在图9A的示例中,在第一层块910中,存储器单元902、904、906和908存储以下数据:1011。
[0067] 只有在给定存储器单元在第一层块910中存储“1”(S2或S4状态)的情况下,给定存储器单元才在第二层块912中存储数据位。如果给定存储器单元在第一层块910中存储“1”值,则给定存储器单元可以在第二层块912中存储逻辑“0”或“1”值,其中在第二层中S2表示“0”而S4表示“1”(根据上表)。因而,在图9A的示例中,因为存储器单元902、906和908中的每一个在第一层块910中存储“1”值,所以对应的存储器单元也在第二层块912中存储数据位。然而,因为存储器单元904在第一层块910中存储“0”值,所以存储器单元904将不在第二层块912中存储任何有效数据。
[0068] 为了增加每存储器单元存储的数据位的有效数目,将合期望的是在至少一半存储器单元中存储第二层数据位。然而,第二层数据位的存在取决于第一层数据位的值,其不会提前已知。虽然可以在M个存储器单元中存储M个第一层位,但是不清楚可以在M中存储多少第二层位。
[0069] 在一个示例中,如果图9A的存储器单元902、904、906和908在第一层块910中存储值0000,则那将意味着存储器单元902、904、906和908将不会在第二层块912中存储任何数据。为了解决前述问题,可以在第一层块910中应用数据反转以增加由第一层块910存储的“1”的数目。例如,图9B示出在其中存储器单元902、904、906和908最初要存储0000的示例中,在已经应用数据反转之后第一层块910中存储器单元902、904、906和908的内容。在应用数据反转之后,这些存储器单元现在存储1111,其使由存储器单元902、904、906和908存储在第一层块910中的“1”的数目最大化。存储器单元902、904、906和908可以用于存储反转标志。如果反转标志具有“1”值,则那是第一层块910中的数据已经被反转的指示。然而,如果存储在存储器单元902、904、906和908中的反转标志具有“0”值,则那指示由存储器单元902、904、906和908存储在第一层块910中的数据尚未被反转。
[0070] 将第一层块910中的数据从0000反转到1111允许第二层块912存储数据,所述数据在图9B的示例中包括1101。
[0071] 利用选择性数据反转,第一层块中的位数的至少一半可以被转换成“1”,以使得第二层块可以在M个单元中存储在M/2到M之间的第二层数据位。注意到,选择性反转标志的存储开销相对低——(指定大小的)每数据块可以提供一个反转标志。
[0072] 虽然存储器单元的硬失效影响第一层和第二层信息二者,但漂移错误在两个层中表现得不同。如上所讨论的,最低电阻状态(S1)的漂移率相对低,并且因而漂移错误不太可能针对状态S1而发生。当读取第一层位时,状态S1表示“0”而其余状态(S2和S4)表示逻辑“1”。由于针对状态S2的漂移率将不影响第一层块中的数据存储,并且由于状态S1具有相对低的漂移率,因此漂移错误不太可能针对第一层位而发生。然而,漂移错误可以针对第二层位而发生,由于状态S2用于存储逻辑“0”,并且状态S2与较高电阻漂移率相关联。
[0073] 图10示出其中数据被存储在两层中的示例性布置。描绘了两个第一层数据块1002和1004,其中每个数据块1002和1004具有指定的大小(例如,64字节)。第二层数据块1006可以至少存储指定大小(例如,64字节)的数据。第一层数据块1002与反转标志1008相关联,并且第一层数据块1004与反转标志1010相关联。反转标志1008或1010当被设置成“1”值时指示相应第一层数据块1002或1004中的数据已经被反转。
[0074] 每个第一层数据块1002或1004分别包括第一层ECP 1012或1014。第一层ECP 1012包括对于已经经历硬错误的存储器单元的指针,以使得存储器单元可以被替换,如上结合图5所讨论的。类似地,第一层ECP 1014包含对于已经经历硬错误的第一层数据块1004中的存储器单元的指针。
[0075] 第一层ECP 1012和1014中的每一个还与相应的反转标志1016或1018相关联,以指示相应的ECP 1012或1014是否已经被反转。
[0076] 在第二层中,用于存储第一层ECP 1012和第一层ECP 1014的存储器单元可以被用于存储第二层错误码1020以执行第二层数据块1006中的数据的错误校正。类似地,用于存储第一层ECP 1014的存储器单元可以用于存储第二层错误码1022。
[0077] 读取第一层块1002或1004的等待时间相对低。可能必须被执行的仅有的后处理是使用ECP的硬错误校正。
[0078] 读取第二层数据块涉及以下:(i)读取存储器阵列(这比第一层读取更慢);(ii)使用第一层ECP来校正硬错误(注意到,在读取第二层数据之前必须首先读取第一层数据);(iii)使用第一层位来提取第二层位;以及(iv)使用错误校正码来校正软错误。
[0079] 提取第二层位可以通过使用与图6的操纵电路类似的操纵电路来实现。为了减小操纵电路的复杂度,可以通过将反转标志与具有减小的大小的第一层数据块相关联来以较精细的粒度应用选择性数据反转。
[0080] 在前述描述中,阐述了众多细节以提供对本文公开的主题的理解。然而,可以在没有这些细节中的一些或全部的情况下实践实现方式。其它实现方式可以包括自以上讨论的细节的修改和变型。意图在于随附权利要求涵盖这样的修改和变型。