本申请要求在2014年1月23日提交的美国申请第14/162,380号的优先权,该美国申请第14/162,380号是在2013年1月14日提交的美国专利申请第13/740,747号的部分延续案,该美国专利申请第13/740,747号是在2010年7月26日提交的第12/843,498号的延续案,并且本申请要求在2009年7月27日提交的美国临时专利申请第61/228,704号的优先权权益,该美国申请第14/162,380号和美国临时专利申请第61/228,704号通过引用整体合并于此。
背景技术
反熔丝存储器被视为非易失性存储器,在非易失性存储器中,在没有电力时,数据被保留在存储器单元中。反熔丝器件是可改变成导通状态的结构,或者换言之,其是将状态从非导通改变成导通的电子器件。等效地,该二元状态可以响应于诸如编程电压或电流等的电应力而成为高电阻和低电阻中的某一个。不同于诸如闪存、铁电及磁性存储器等其他形式的非易失性存储器,反熔丝编程旨在是不可逆的。因此,将反熔丝存储器称为一次性可编程(OTP)存储器。
正如在美国专利第6,667,902号中所展示的,使用平面电容器作为反熔丝以取代作为存储电容器的DRAM型存储器阵列是已知的。图1是这种存储器单元的电路图,而图2和图3分别示出图1的已知反熔丝存储器单元的平面图及横截面图。图1的存储器单元包括用于将位线BL联接至反熔丝器件12的底板的通路或通道晶体管10。字线WL联接至通道晶体管10的栅极以将该晶体管导通,并且单元板电压Vcp联接至反熔丝器件12的顶板以用于对反熔丝器件12进行编程。
从图2和图3中可以看出,通道晶体管10和反熔丝器件12的布置非常直接且简单。通道晶体管10的栅极14和反熔丝器件12的顶板16使用相同的多晶硅层来构成,其延伸跨越有源区18。在每个多晶硅层下方的有源区18中,形成有用于将多晶硅与下方的有源区这两者电隔离的薄栅氧化物20,也被称为栅介电质。扩散区22及24在栅极14的任一侧上,其中扩散区24联接至位线。虽然未图示,本领域技术人员将会理解,可以应用诸如侧壁间隙形成、轻掺杂扩散(LDD)以及扩散与栅极硅化等的标准CMOS处理。虽然传统单晶体管及电容器单元配置被广泛使用,但由于能够获得高密度应用的半导体阵列面积节约,更期望仅需晶体管的反熔丝单元。这种仅需晶体管的反熔丝必须是可靠而简单的,以便用低成本的CMOS工艺来制造。
根据本发明的实施例,图4A示出可采用任何标准CMOS工艺来制造的反熔丝晶体管的横截面图。在当前示出的示例中,反熔丝晶体管几乎与简单厚栅氧化物或具有一个浮动扩散端的输入/输出MOS晶体管相同。所公开的反熔丝晶体管也被称为分离沟道电容器或半晶体管,其能被可靠地编程,使得多晶硅栅与基底之间的熔丝链路能够被可预测地定位到该器件的特定区域。图4A的横截面图是沿图4B的线B-B’而获得的,并且是沿着该器件的沟道长度,该器件在当前描述的实施例中为p沟道器件。本领域技术人员将会理解,本发明可被实现为n沟道器件。
反熔丝晶体管100包括:形成在基底沟道区104上的可变厚度栅极氧化物102、多晶硅栅极106、侧壁间隙108、场氧化物区109、扩散区110、及在扩散区110中的LDD区114。位线触点116被示出为与扩散区110电接触。可变厚度栅极氧化物102由厚氧化物及薄栅极氧化物组成,使得沟道长度的一部分被厚栅极氧化物覆盖,并且沟道长度的其余部分被薄栅极氧化物覆盖。通常,薄栅极氧化物是能够发生氧化物击穿的区域。另一方面,与扩散区110接触的厚栅极氧化物边缘限定一通道边缘,在该通道边缘处,栅极氧化物击穿被防止,并且栅极106与扩散区110之间的电流流动以用于编程后的反熔丝晶体管。虽然厚氧化物部分延伸到沟道区中的距离取决于掩膜等级,但厚氧化物部分优选地被形成为至少与形成在相同芯片上的高电压晶体管的最小长度一样长。
在优选实施例中,扩散区110通过位线触点116或用于感测来自多晶硅栅极106的电流的其他线而被连接至位线,并且能够被掺杂以适应编程电压或电流。扩散区110被形成为与可变厚度栅极氧化物102的厚氧化物部分相邻。为了进一步保护反熔丝晶体管100的边缘免于受到高电压损害或发生电流泄漏,可以在制造工艺期间引入电阻器保护氧化物(RPO),也称为硅化物保护氧化物,以进一步将金属粒子与侧壁间隙108的边缘间隔开。在硅化工艺期间优选使用此RPO,以用于防止仅扩散区110的一部分及多晶硅栅极106的一部分被硅化。
众所周知,已知硅化晶体管具有较高的漏电流,并且因此具有较低的击穿电压。因此,具有非硅化的扩散区110将会减少漏电流。扩散区110可以针对低电压晶体管或高电压晶体管或这两者的组合来掺杂,这导致相同或不同的扩散分布。
图4B中示出反熔丝晶体管100的简化平面图。可使用位线触点116作为视觉参考点,以将该平面图对照图4A的对应横截面图。有源区118是该器件的形成沟道区104及扩散区110的区域,其在制造过程中由OD掩模限定。虚线轮廓线120限定厚栅极氧化物在制造过程期间将经由OD2掩膜被形成于其中的区域。更具体而言,由虚线轮廓线120包围的区域指定将形成厚氧化物的区域。简单而言,OD是指氧化物限定掩膜,其在CMOS工艺期间被采用,用以限定在基底上将要形成氧化物的区域,且OD2是指与第一氧化物限定掩膜不同的第二氧化物限定掩膜。
反熔丝晶体管100的编程是基于栅极氧化物击穿,以在栅极与下方沟道之间形成永久链路。栅极氧化物击穿条件(电压或电流及时间)主要取决于:i)栅极介电质厚度及组成物、ii)缺陷密度、以及iii)栅极区域、栅极/扩散周长。反熔丝晶体管100的厚栅极氧化物与薄栅极氧化物的组合在器件的薄栅极氧化物部分,具体是在氧化物击穿区域,会导致局部降低的栅极击穿电压。反熔丝晶体管100仅是可被使用在OTP存储器中的一种反熔丝器件。本领域技术人员将会理解,不同类型的反熔丝器件是以相似方式编程的。
与任何已制造的半导体存储器器件一样,在制造期间可能会发生随机缺陷。更具体而言,存储器单元可能会遭遇到改变其特征的物理缺陷。因为数据也许无法被可靠地存储在缺陷单元中,所以这种缺陷可能会致使OTP存储器不可操作。在新制造的反熔丝存储器阵列中,所有单元都应被读取为未编程的逻辑状态。例如,未编程的逻辑状态可以对应于“0”。然而,由于制造缺陷,部分反熔丝单元将泄漏电流。在当前的示例中,泄漏电流的反熔丝单元将被读取为逻辑“1”状态,其对应于该单元的已编程状态。这些类型的缺陷单元被称为漏单元。相反地,一些反熔丝单元可能难以被编程,因此当其应被读出为逻辑“1”状态时,却读出逻辑“0”状态。这些类型的缺陷单元称为弱单元。
为了提高整体的制造成品率,已开发了冗余方案以修复具有缺陷单元的存储器阵列。可以使用众所周知的冗余技术,该技术将包含缺陷单元的行和/或列替换为备用的行和/或列。然而,这种技术在试图对终端用户确保透明操作及最小性能下降的同时,引入了用于重新路由寻址的显著逻辑开销。
在以下的美国专利中公开了现有冗余方案的示例。在美国专利第6,421,799号中,冗余只读存储器(ROM)存储用于主存储器的行与列的奇偶校验位。测试电路计算针对每个行与列的奇偶校验。在美国专利第6,944,083号中,敏感数据的良好副本存储在不同的物理位置。如果通过比较存储在主存储器中的数据与存储在冗余中的数据而检测到存储器的窜改,则将主存储器中的数据标识为不可使用,并转而使用从冗余存储器中取回的数据。在美国专利第7,047,381号中,使用冗余行在OTP阵列中实现多阶编程。在美国专利第7,003,713号中,OTP模块从主集成电路接收编码后的主数据,并且将已校正的主数据的副本提供至主集成电路。
多数的冗余方案需要显著的额外逻辑,其最终增加了芯片面积或宏占用的空间。因此,需要一种最大限度减少逻辑开销,同时最大限度提高整体成品率的新冗余方案。
具体实施方式
大体上而言,本发明提供用于诸如OTP或者类似EPROM及闪存等电可擦除存储器等非易失性存储器的冗余方案。该冗余方案使用非易失性存储器中的缺陷单元,以通过使用该缺陷单元存储数据来提高成品率。可以使算法在编程期间及读取操作期间针对用户应用透明。在制造后,在存储器器件出货之前执行阵列清除测试。该测试对那些倾向于泄漏超过允许的设计许可范围的存储器单元进行识别。将已识别的漏单元编程为逻辑“1”状态,因为它们在非编程状态中读出为逻辑“1”状态。可替代地,将难以编程的单元保留为逻辑“0”状态,因为不能将它们编程为逻辑“1”状态。因此将这些缺陷称为该单元的偏置逻辑状态。单元的作为8位字或具有任意数量位的字的每个分组包括被用作为反相状态标记位的至少一个附加单元,以指示所存储的数据条目使用偏置逻辑状态来存储该数据条目的位。
现在参考图5来讨论当前描述的冗余技术的通用原理。图5是示出由n位数据单元组201及对应的反相状态单元202组成的单元组200的图,其中n可以是大于1的任何整数。单元组200存储数据,其由编程数据及反相状态位构成。在图5的本示例中,数据单元组201为8位,其中最左侧位或最右侧位为最低有效位(LSB)。在图5中,小数点被用于在视觉上区分数据单元组201与反相状态单元202。假设数据单元组201的所有存储器单元及反相状态单元202具有缺省未编程的逻辑状态“0”或已擦除的逻辑状态“0”。在该示例中,在数据单元组201中检测到以字母“d”标记的缺陷单元204。
根据本实施例,可将d永久地设定为其偏置逻辑状态。例如,若缺陷单元204是当未编程时倾向于读出为逻辑“1”而非正确的逻辑“0”的漏OTP单元,则通过对缺陷单元204进行编程来将d设定为“1”。其次,当将8位数据编程为数据单元组201时,将缺陷单元204的已设定的逻辑“1”状态与将被存储于其内的编程数据位进行比较。若该编程数据位与缺陷单元204的已设定的逻辑状态不匹配,则将该编程数据的所有位反相,以编程到数据单元组201中。此外,将反相状态位的缺省逻辑状态反相并编程到反相状态单元202中。否则,无须该编程数据的反相。因此,回收缺陷单元204并将数据单元组201修复为缺陷单元204重新使用以对数据位进行存储。须注意的是,将要存储在图5的单元组200中的数据包括:将要存储在数据单元组201中的编程数据以及将要存储在反相状态单元202中的反相状态数据。若无单元缺陷或无须反相,则反相状态单元202仍保持于缺省的未编程状态,其对应于本示例中的逻辑“0”。
图6A、图6B及图6C是示出当前描述的冗余技术的示例,其中编程数据具有与数据单元组201的缺陷单元的已设定逻辑状态匹配和不匹配的位。在图6A中,图5的数据单元组201具有永久设定为逻辑状态“1”(d=1)的缺陷单元204,且通过存储器器件接收到的编程数据210将被存储在数据单元组201中。自数据单元组201的右侧算起,缺陷单元204处于位位置4而编程数据210的位位置4是逻辑“0”。为了可靠地将编程数据210存储在数据单元组201中,并由于数据单元组201的位位置4与编程数据210的位位置4之间的不匹配,将包括编程数据210的该数据的所有位及反相状态位反相。以圆形箭头来图示该反相处理,并将通过数据单元组201存储的结果数据示出于图6A的底部。因为数据单元组201存储反相后的编程数据,因此将反相状态单元202编程为逻辑状态“1”。逻辑状态“真”指示存储在数据单元组201中的数据相对于其原始版本而言是反相的。将存储在反相状态单元202中的数据称为反相状态位,其稍后在读取操作期间被使用,据此将该数据再反相回其原始状态。因此,通过将已接收的编程数据的反相版本存储在数据单元组201中,来将缺陷单元204回收,因此即使数据单元组201具有缺陷单元204,也允许使用数据单元组201。
图6B示出待将不同的编程数据212编程至图6A所示的数据单元组201中的示例。在该示例中,编程数据的位位置4及数据单元组201的位位置4均为逻辑“1”,因此匹配。无须将编程数据212反相,且如直箭头所示,将该编程数据直接存储在数据单元组201中。图6C示出将缺陷单元204设定成逻辑“0”的示例。假设已知数据单元组201的位位置4具有设定为逻辑“0”的缺陷单元。因为编程数据214的位位置4为逻辑“1”,所以存在不匹配。因此,在将编程数据214的所有位反相并存储在数据单元组201中的同时,将反相状态单元202编程为逻辑“1”,以指示对应的数据单元组201存储反相后的编程数据。
现在已描述了本发明的冗余概念,下文是具有当前描述的冗余方案的存储器器件或存储器宏的描述。对存储器器件的后续引用应被理解为包括存储器宏。存储器宏是可被集成到嵌入式芯片或系统中的存储器电路的实例。图7是根据本实施例的具有冗余系统的存储器的框图。该存储器可以是任何非易失性存储器,但目前在OTP存储器的背景中进行描述。存储器器件300包括:OTP存储器阵列302、感测放大器及列选择电路304、数据寄存器306、以及数据总线驱动器308。数据寄存器306包括单独的自反相(SI)数据寄存器310。每个自反相数据寄存器310都对应于一个单元组,诸如图5及图6A、图6B和图6C所示的n位+1单元组200。
OTP存储器阵列302包括连接至诸如图4A及图4B所示的OTP反熔丝晶体管器件100等的OTP存储器单元的位线及字线。如本领域中公知的,位线通过感测放大器及列选择电路304中的感测放大器电路而被感测,感测放大器及列选择电路304可以包括用于将多条位线中的一条多路复用至一个感测放大器电路的列选择电路。感测放大器及列选择电路304的每个感测放大器电路提供1位的感测读取数据,以供SI数据寄存器310中的锁存电路进行存储。在本示例中,感测放大器电路中的每一个也从SI数据寄存器310中的锁存电路接收1位的编程数据。在图7中,每个感测放大器电路经由SA线对来提供1位的读取数据并接收1位的编程数据,其中每个对被示出为单线SA。在本示例配置中,每个SI数据寄存器310接收SA1至SAn,其中n对应于n位数据单元组201的大小。可提升至m个SI数据寄存器310,其中m是整数值。每个SI数据寄存器310进一步接收并提供反相状态位INV。如先前所提及的,每个SI数据寄存器310对应于n位+1单元组。如将在稍后更详细描述的,在针对编程而检测到上述不匹配情况的事件中,每个SI数据寄存器310可将其已接收的编程数据的所有位反相,并可响应于读取操作中的反相状态位INV,来将所有读取数据位重新反相。
每个SI数据寄存器310从写入数据总线(未图示)接收编程数据,并经由数据线DL1至DLn提供读取数据。须注意的是,用于1位的输入及输出数据线以单一数据线表示。数据总线驱动器308执行驱动数据总线DB[1:y]的公知功能,其中y≤m×n。DB的宽度取决于存储器器件300的配置。若DB的宽度少于m×n,则可将附加的多路复用电路包括在数据总线驱动器308的块内,以用于联接数据线DL1至DLn的任何组。根据本实施例,反相状态位INV相对于SI数据寄存器310及存储器阵列而言是本地的,因此不以类似读取数据的方法输出,也不以类似编程数据的方式接收。
图8是图7的存储器阵列302的一部分、和其相关联的位于感测放大器及列选择电路块304中的位线感测电路的示意图。在本示例中,存储器阵列302以折迭位线架构的方式被组织,其在本领域中是公知的。为了简化该示意图,仅示出一个折迭位线对BL/BL*及二个字线。未示出用于选择性地将多条折迭位线对联接至该位线感测放大器电路的列译码器电路,以简化该示意图。折迭位线存储器阵列400包括:字线WL0及WL1,其连接至OTP存储器单元(在本示例中,被实施为n沟道反熔丝晶体管402及404)的栅极端;n沟道隔离晶体管406及408,其用于响应于信号ISO来将位线的上部联接至位线的下部;以及位线感测电路。位线感测电路包括:预充电电路410、参考充电电路412、以及位线感测放大器414。
预充电电路410包括:串联连接在BL与BL*之间并且具有连接至预充电信号BLPCH的栅极端的两个n沟道预充电晶体管416及418。预充电晶体管416及418的共享源极/漏极端接收预充电电压VPCH。在操作中,预充电晶体管416及418这二者将响应于BLPCH的有效高逻辑电平而导通,来将位线BL及BL*预充电至VPCH,以准备读取操作。
参考充电电路412包括:串联连接在BL与BL*之间的n沟道引导晶体管420及422、被实施为n沟道晶体管424的电容电路、以及p沟道预充电晶体管426。引导晶体管420具有连接至偶数选择信号E_REF的栅极端,而引导晶体管422具有连接至奇数选择信号O_REF的栅极端。电容电路424具有连接至电压供应源VCC的栅极端,并与预充电晶体管426串联连接在引导晶体管420及422的共享源极/漏极端与电压供应源VCC之间。预充电晶体管426具有连接至预充电或使能信号PCH*的栅极端。通常,当接收到低逻辑电平PCH*脉冲时,电容电路424将被预充电。该PCH*脉冲的持续时间可以基于晶体管424的尺寸及待提供的期望参考电荷来预定。一旦被预充电,则引导晶体管420或422中的一个将被导通,以将电容电路424的参考电荷耦合至对应的位线。例如,将被加入到位线的电荷可以约为50微伏特。须注意的是,信号E_REF及O_REF可以通过用于选择WL0或WL1的相同偶数/奇数寻址位来控制。在一个实施例中,WL0的激活将导致E_REF被激活,因此将参考电荷耦合至互补位线。
位线感测放大器414由本领域中公知的标准交叉耦合反相器电路组成。该电路包括:皆串联连接至各自的n沟道晶体管的两个p沟道晶体管。P沟道晶体管的公共漏极端接收高逻辑电平使能信号H_EN,而n沟道晶体管的公共源极端接收低逻辑电平使能信号L_EN。H_EN可以为已降低的内部VCC电平,而L_EN可以为VSS电平。位线感测放大器414在DRAM技术中的操作是公知的。当使能信号H_EN及L_EN在相同时间或在不同时间内被激活时,位线感测放大器414将感测BL与BL*之间的小电压差,并迅速地将BL及BL*这二者驱动至H_EN及L_EN的全逻辑电平状态。
因为位线感测放大器414连接至位线BL及BL*这二者,因此将被编程的或者从存储器阵列中读取到的逻辑状态将取决于被存取的存储器单元。例如,若反熔丝晶体管402及404这二者皆存储逻辑“1”,则位线感测放大器414将依据存取哪个反熔丝晶体管来锁存二种不同的逻辑状态。因此,数据状态校正器428被用于确保对应于逻辑“1”状态和逻辑“0”状态的电压电平被读取并编程。在本示例中,若激活WL0以读取反熔丝晶体管404,则信号EVEN将处于使BL*联接至选通晶体管430的逻辑状态。可替代地,若激活WL1以读取反熔丝晶体管402,则信号EVEN将处于使BL联接至选通晶体管430的相反逻辑状态。当编程数据将要从选通晶体管432被联接至BL或BL*中的一个时,数据状态校正器428的操作也是类似的。可以将数据状态校正器428实施为由信号EVEN控制的简单双向多路复用器,其可以与被用于选择字线WL0及WL1的地址相关。信号EVEN还可与信号E_REF及O_REF相关。将要被编程至该位线的数据通过n沟道选通晶体管432提供,该n沟道选通晶体管432被联接至SAi_in并由编程信号PGM被控制。将要从位线被读取的数据通过n沟道选通晶体管430提供,该n沟道选通晶体管430被联接至SAi_out并由读取信号READ被控制。须注意的是,信号SAi_in及SAi_out对应于先前所讨论的SA线对。因此,选通晶体管432在编程操作期间被导通,而选通晶体管430在读取操作期间被导通。变量“i”是1与最大数n之间的整数值。
图8的存储器阵列架构及电路是可被用在本发明实施例中的非易失性存储器阵列配置的一个示例,且当前描述的冗余方案并未受限于图8的存储器阵列配置。图8的存储器阵列架构,具体是将感测放大器输入及输出路径SAi_in及SAi_out分离的配置,有助于自反相寄存器电路的设计及操作。
图9是示出根据本实施例的图7的一个SI数据寄存器310的框图。SI数据寄存器500包括:用于将要被编程的或者从存储器阵列302读取到的数据的每个位的一个SI寄存器单元502,以及用于反相状态位的SI寄存器单元504。将SI寄存器单元502标记为单元1至单元n,以对应于n位数据单元组201。如图9所示,每个SI寄存器单元502经由SAi_in线将1位的编程数据提供至感测放大器,并经由SAi_out线(其中i=1至n)从感测放大器接收1位的读取数据。通过DLi_in线提供1位的编程数据,而通过DLi_out线从寄存器单元输出1位的读取数据。
作为编程操作的一部分,将每个SI寄存器单元502配置为将其已接收到的编程数据位的逻辑状态与其将要被编程为的该单元的逻辑状态进行比较。在先前所讨论的示例中,设定为逻辑“1”的单元是漏缺陷单元。在不匹配的情况下,提供不匹配标志DEFECT,并通过SI寄存器单元级联。换言之,每个SI寄存器单元502将其不匹配标志结果与前一个SI寄存器单元502所提供的不匹配标志进行逻辑或(OR)运算。最终的DEFECT标志指示是否该SI寄存器单元502中的一个报告了不匹配,并且该最终的DEFECT标志由SI寄存器单元504接收,SI寄存器单元504检查反相状态单元是否有缺陷。若一个SI寄存器单元502报告不匹配或者SI寄存器单元504报告反相状态单元有缺陷,则将由SI寄存器单元504提供的编程反相信号PGM_INV设定为有效逻辑电平。所有SI寄存器单元502均接收PGM_INV,并被配置为响应于PGM_INV的有效逻辑电平而将它们的编程数据位反相。然后,将反相后的编程数据编程到数据单元组的对应单元中。在本示例中,经由各自的SAi_in线将反相后的编程数据提供至感测放大器电路。同样地,设定反相状态位并将对应的反相状态单元编程,以指示编程数据已被反相。
在读取操作中,所有的SI寄存器单元502从其各自的SAi_out线接收读取数据,且SI寄存器单元504接收从对应的反相状态单元中读取的反相状态位的逻辑状态。若反相状态位处于指示编程数据已被反相的逻辑电平,则将读取反相信号RD_INV设定为有效逻辑电平。所有SI寄存器单元502均接收RD_INV,并被配置为响应于RD_INV的有效逻辑电平来将它们的读取数据位反相。因此,将原始编程数据恢复并输出至数据总线驱动器。于是,SI寄存器单元502及504可以在寄存器单元自身内将编程数据位或读取数据位反相。
图10是根据本实施例的在图9中示出的SI寄存器单元502的电路示意图。须注意的是,SI寄存器单元600包括许多与在PAT 3672W-90中公开的双功能移位寄存器电路相同的电路。为了简化该示意图,有意识地省略了数个电路。
SI寄存器单元600包括:数据存储电路602、自动编程禁止电路604、编程数据反相电路606、读取数据反相电路608、以及数据不匹配比较逻辑610。必须一提的是,信号名称中的变量“i”代表与其相关联的特定寄存器单元。
数据存储电路602负责数据输入、输出、及锁存操作。数据存储电路602包括:被连接为主从触发器的主锁存器612和从锁存器614、转移选通器件616、以及输入选通器件618。锁存器612及614可被实施为具有相对于其输入的非反相输出的简单交叉耦合反相器电路,但是从锁存器614被配置为通过主锁存器612被覆写。本领域技术人员将会理解,晶体管尺寸可以被配置为实现此期望功能。选通器件616被示出为n沟道晶体管,但是可以采用传输门或p沟道晶体管来替换。选通器件616具有连接至时钟信号CK的栅极端,该时钟信号CK是受控制的时钟信号,以将数据从主锁存器612连续地转移至从锁存器614。当信号WRITE处于有效逻辑电平时,将输入数据DLi_in经由选通器件618提供至主锁存器612的输入,该有效逻辑电平在本示例中是高逻辑电平。输出数据DLi_out是自从锁存器614的输出中被提供的。主锁存器612的输出,典型而言是编程数据,经由终端SAi_in联接至感测放大器,而来自感测放大器的读取数据从终端SAi_out提供并由从锁存器614存储。
自动编程禁止电路604用于验证编程操作是否成功。自动编程禁止电路604包括:串联地连接在诸如VDD等电压供应源与主锁存器612的输入之间的预充电器件620及联接器件622。在本实施例中将二个器件620及622示出为n沟道晶体管。预充电器件620的栅极连接至预充电信号PCH,并且联接器件622的栅极连接至从锁存器614的输出。电压供应源的选择取决于主锁存器612所存储的用于对将要被编程的存储器单元进行选择的逻辑状态。例如,若主锁存器612存储逻辑0(VSS),以指示连接至位线的存储器单元的编程,则连接至预充电器件620的电压供应源将是VDD。因此,VDD是存储在主锁存器612中的将不被编程的存储器单元的逻辑状态,从而禁止被连接至该位线的该单元的编程。因此,若该存储器单元成功地被编程,则自动编程禁止电路将改变主锁存器612的状态。在本示例中,成功编程后的存储器单元将导致从锁存器614在编程操作后的编程验证读取操作中存储高逻辑状态。因此,当PCH被驱动至高逻辑电平时,VDD联接至主锁存器612的输入,以反转其状态。
编程数据反相电路606包括:触发器电路624及由评估信号EVAL控制的联接器件626。触发器电路624具有接收由主锁存器612锁存的编程数据(SAi_in)的D输入,并具有非反相输出(Q)及反相输出(Q*),其中该反相输出连接至联接器件626的一端。联接器件626的另一端连接至主锁存器612的输入,而其栅极端接收EVAL。触发器电路624响应于在其时钟输入处接收的PGM_INV的有效逻辑状态,来锁存在其D输入中出现的数据,并将该数据的反相版本提供在其反相输出Q*上。因此,若该编程数据将要被反相,则PGM_INV被驱动至有效逻辑电平,并且EVAL可以被脉冲调制,以简单地导通联接器件626,从而将反相输出Q*电连接至主锁存器612的输入。因此,主锁存器612的逻辑状态被反相。EVAL的脉冲持续时间可被选择为至少长到足以确保主锁存器612被覆写或被反转。
数据不匹配比较逻辑610与编程数据反相电路606一起使用,并且包括与(AND)逻辑门628与或(OR)逻辑门630。与逻辑门628具有:接收从锁存器614的输出的第一输入、以及接收主锁存器612的输出的第二输入。与逻辑门628的目的在于检测待将逻辑“0”编程至设定为永久存储逻辑“1”的缺陷单元的情况。如先前针对本示例所讨论的,存储在主锁存器612中的逻辑“1”禁止编程,因此将逻辑“0”存储在所选择的单元中。然而,若所选择的单元已于先前被判定为是有缺陷的并且预设为存储逻辑“1”,则在将要被存储数据与该单元的预设逻辑状态之间存在不匹配。当主锁存器612和从锁存器614这二者皆存储逻辑“1”时,该不匹配情况通过与逻辑门628被检测到。因此,与逻辑门628输出逻辑“1”输出,其可称为本地DEFECT标志信号,然后在或逻辑门630处与自前一个SI寄存器单元502提供的全局DEFECT标志信号DEFECTi-1组合。或逻辑门630的输出是已更新了的全局标志信号DEFECTi,其被提供至下一个SI寄存器单元502或SI寄存器单元504。若SI寄存器单元600是第一寄存器单元,则由于没有先前的SI寄存器单元报告缺陷,则该SI寄存器单元的或逻辑门630具有连接至地或VSS的一个输入。稍后,若DEFECTi处于有效逻辑电平,其在本示例中为逻辑“1”,则PGM_INV被设定为有效逻辑电平,以便能够进行该编程数据的反相。
读取数据反相电路608连接在SAi_out与从锁存器614的输入之间,并且包括选择器632及反相器634。选择器632被示出为多路复用器,该多路复用器具有用于接收SAi_out的第一输入、以及用于接收反相器634的输出的第二输入,其中反相器634具有连接至SAi_out的输入。选择器632响应于用作选择信号的信号RD_INV,将来自其第一输入或第二输入的数据传递至其输出。在其缺省的非有效逻辑状态中,RD_INV控制选择器632将SAi_out直接传递至从锁存器614。在其中读取数据将要被反相的其有效逻辑状态中,选择器632将反相器634的输出传递至从锁存器614。因此,SAi_out的反相版本被存储在从锁存器614中。
图11是根据本实施例的图9的SI寄存器单元504的电路示意图。SI寄存器单元700包括许多与图10所示的SI寄存器单元600相同的电路。具体地,电路602、604、以及606与先前针对SI寄存器单元600所描述的那些电路相同。SI寄存器单元700不具有用于接收编程数据的输入选通器件618、在用于提供读取数据的从锁存器614的输出处的输出端、读取数据反相电路608、或数据不匹配比较逻辑610。SI寄存器单元700联接至存储器阵列的位线、以及可与图8的电路相同地被配置的感测放大器电路。
下文是对与图10的SI寄存器单元600不同的电路的描述。取代具有用于接收编程数据的输入,SI寄存器单元700包括由用于响应于复位信号RST而将VDD联接至主锁存器612的输入的晶体管器件702组成的复位电路。复位信号RST可以是在每个编程操作之前提供的脉冲信号,以设定反相状态单元的缺省编程禁止状态。当反相状态位并未从外部提供至存储器器件时,SI寄存器单元700无须读取数据反相。SAi_out线可用作RD_INV信号,或者替代地,从锁存器614的输出可以提供RD_INV信号。如先前所描述的,被永久设定或编程为逻辑“1”的反相状态位指示存储在数据单元组201中的原始编程数据已由于数据单元组201中存在缺陷位或者缺陷反相状态单元的存在而被反相。
取代数据不匹配比较逻辑610,缺陷检测逻辑704将来自最后SI寄存器单元502的全局标志DEFECTi-1与从锁存器614的输出组合。因此,如果DEFECTi-1或从锁存器614的输出处于逻辑“1”状态,则PGM_INV设定为有效逻辑“1”状态。在本示例中,如果从锁存器614处于逻辑状态“1”,则意味着对应单元先前已被判定为有缺陷,并且被预编程为特定逻辑状态。对缺陷反相状态单元的回收与针对正常数据存储单元的回收相同。在本实施例中,缺陷检测逻辑704包括或逻辑门706。在先前描述的实施例中,本领域技术人员应当理解,由于已编程的及未编程的逻辑状态可相对于针对本实施例所讨论的那些逻辑状态被反转,因此替代的逻辑门或电路可用于实现相同的期望结果。
现在已描述了用于实施本实施例的冗余方案的示例性电路,下文是描述用于操作具有冗余的、已描述过的存储器器件及电路的序列的方法实施例。
图12是根据本实施例的用于操作具有冗余方案的存储器器件的通用方法的流程图。该方法开始于识别并回收缺陷单元的步骤800。该步骤包括在制造时及在终端用户编程之前识别漏单元,且通过示例,回收表现如同已编程单元的漏单元包括将漏单元预编程为永久逻辑“1”。冗余已在步骤800之后被实施,使得先前不可使用的单元准备好存储用户数据。
在步骤802,也可以是制造商的终端用户将数据编程至存储器阵列。对诸如单元组200等不具有任何缺陷单元的单元组进行编程,而无须将编程数据位及反相状态位反相。具有诸如来自步骤800的、预编程为“1”的单元等缺陷单元的单元组可以依据该数据位位置是否与对应缺陷单元的预编程的“1”匹配或不匹配而被反相。
在步骤804,执行读取操作以从存储器阵列读取数据。如果数据是从具有缺陷单元的单元组读取的,则将读取数据反相为它的原始编程数据状态以用于输出。否则,将读取数据输出而不反相。因此,即使编程数据可能以其反相状态存储,所产生的读取数据将始终对应于提供至存储器器件的原始编程数据。
图13A及图13B示出图12所示的方法的特定实施例。在本方法中,假设存储器单元是诸如本申请所描述的那些单元等OTP存储器单元。因此参考了图10及图11的电路示意图,这些电路被配置为用于这些OTP存储器单元。该方法开始于步骤900,在步骤900,使用任何适当的测试技术来识别缺陷单元。例如,对所有未编程的单元执行的读取操作可以协助判定是否存在任何“漏单元”。因为这种漏单元倾向于表现为如同已编程的单元,因此在步骤902,将已检测到的缺陷单元编程以存储永久逻辑“1”。这可以通过将编程数据输入到图7的数据寄存器306中来进行,如同针对正常编程操作所进行的那样。然而,这种缺陷单元的预编程通常将在出货给终端用户以便正常使用及操作之前被执行。
步骤900及902将在图12的步骤800中执行。假设存储器器件准备好正常操作。用于数据单元组的编程数据经由DL1_in至DLn_in线被提供至图9的SI寄存器单元502,并因此存储在主锁存器612中。在步骤904,读取操作是针对意图将编程数据编程于其中的单元而执行的。将该数据存储在图10的从锁存器614中,且每个SI寄存器单元502使用数据不匹配比较逻辑610将其从锁存器数据与其存储在主锁存器612中的对应编程数据位进行比较。
在步骤906,假设一个单元有缺陷(逻辑“1”),且对应的主锁存器612存储逻辑“1”,在反相状态单元的永久逻辑状态与编程数据位之间检测到不匹配。在该情况下,该方法前进至将所有编程数据位反相的步骤908。这是通过使PGM_INV信号生效的SI寄存器单元504来进行的。响应于PGM_INV,数据单元组的所有SI寄存器单元502对它们各自的触发器624进行计时。大约在同时,SI寄存器单元504也响应于PGM_INV而对其各自的触发器624进行计时。然后,信号EVAL可被脉冲调制,以将主锁存器612的逻辑状态反转。因此,将SI寄存器单元502的编程数据以及由SI寄存器单元504的主锁存器612存储的复位逻辑“1”状态反转为逻辑“0”。作为步骤908的一部分,且在EVAL信号已被脉冲调制之后,PCH信号可以被脉冲调制。因为联接器件622当前通过与缺陷单元对应的从锁存器的逻辑状态“1”被导通,所以这将SI寄存器单元502的主锁存器612从反相逻辑“0”重新反相回逻辑“1”。因为缺陷单元已被编程,因此无须将其再度重新编程。在步骤910及912中,该单元依据存储在SI寄存器单元502及504的主锁存器612中的数据被编程。
返回至步骤906,如果在数据位的任意一位与缺陷单元之间没有不匹配,或者在单元组中没有缺陷单元,则在步骤914中对数据进行编程,而不将任何编程数据反相。同样地,反相状态位仍保持为未编程。步骤904、908至912或914针对编程操作而重复执行。在编程之后,可执行读取操作,其在图13B中开始。
步骤916,假设位线已预充电并且字线已生效以用于从至少一个单元组读取数据。位线通过位线感测放大器电路被感测,并且所感测的位线数据被输出。在本实施例中,此已感测到的位线数据经由SAi_out线提供至SI寄存器单元600。因为反相状态单元连接至与当前数据单元组的单元相同的字线,所以在步骤918中,反相状态位基本同时被读取。在SI寄存器单元700中,已感测到的反相状态位由SAd_out线提供。如果在步骤920中反相状态位(ISB)为真,即,例如为指示数据单元组的数据已相对于原始编程数据被反相的逻辑“1”,则该方法前进至步骤922。在步骤922中,RD_INV处于有效逻辑电平,以控制每个SI寄存器单元600的选择器632来传递反相器630的输出。现在从锁存器614存储所接收的原始编程数据(反相后的读取数据),其可接着在步骤924中经由DLi_out从存储器器件输出。返回至步骤920,如果反相状态位为假,即,例如为逻辑“0”,则每个SI寄存器单元600的选择器632将SAi_out直接联接至从锁存器614。在步骤926中,读取数据接着经由DL_out线以它们的未反相形式输出。
图14是一个表格,该表格示出了当单元组没有缺陷单元或具有一个缺陷单元时的示例性存储器阵列单元组200、将要存储在每个数据单元组201中的编程数据、以及在各自的单元组200中的最终存储值。从图14的最左列开始,不同的编程数据被示出在每行中。第二列示出测试后的数据单元组201及其相应的反相状态单元202的行。意图将编程数据的每行存储在数据单元组的相应行中。该测试示出了以“x”标识的单元是有缺陷的。须注意的是,状态反相单元202可以是有缺陷的。在本示例中,假设该测试识别漏单元。第三列示出在将缺陷漏单元编程为逻辑“1”状态之后相同行的单元组200的状态。第四列示出存储在单元组中的该行的编程数据的最终状态。
图14中,一个反相状态单元202用于每个n位数据单元组201。图15是示出可代替配置的表格,其中二个反相状态单元可用于单元组200的n位数据单元组的各个区段。图15是与图14中所示的表格相似的表格,除了图15中编程数据的每行由二个区段组成,每个区段长度为8位。相邻列中的该行的对应数据单元组201在视觉上被分割为二个8位区段,并具有二个反相状态单元202a及202b。在本示例中,反相状态单元202a与数据单元组201的最左侧8位关联,而反相状态单元202b与数据单元组201的最右侧8位关联。因此,每个区段可彼此独立地存储反相后的编程数据。
其他反相状态单元的加入使得能够校正多个单元。例如,在具有32位的行中,该32位中的每8位可被指定一个反相状态单元,以针对每8位校正一个缺陷单元,因此校正每行多达4个缺陷单元。也可以改变条目中的数据区段的分布,以优化该方法。例如,数据区段可以是连续的或是分布的。例如,可以将一个反相状态位指定用于偶数数据位,而将另一个指定用于奇数数据位。数据区段的分布影响可以被校正的缺陷单元的分布。例如,32位的NVM具有2个冗余位(每16个数据位具有一个冗余位)。如果数据区段是连续的,则可以在第一或第二个16位区段中校正一个缺陷单元。如果数据区段是在偶数和奇数行上,则可以校正在偶数或奇数位中的一个缺陷单元。
先前描述的实施例示出回收及重用缺陷漏单元的冗余技术。当前描述的冗余技术可应用于回收并重用缺陷弱单元。与当前描述的漏单元相比,弱单元是被逻辑偏置为逻辑“0”的单元,因为已发现难以对其进行编程。当在单元组200中检测到这种单元时,将本冗余方案的原理应用于这种单元。以下方法可以是图13A的步骤906、908、910以及912的修改版本。首先假设存储器器件的编程操作是可逆的。因为多个位将要被同时编程,因此当单元组200中的一个单元对其逻辑“1”状态进行编程时,另一单元不能对其逻辑“1”状态进行编程是可能的。使用PAT 3672W-90的双移位寄存器中的逻辑电路,可检测到编程失败的情况,其中该单元在已尝试多次预设编程迭代后不能被编程。因为在对应单元已被适当地编程之后,可以使用SI寄存器单元600的自动编程禁止电路604将存储在主锁存器612中的逻辑状态反转,因此在预设编程迭代后,单元组200中的仅有的仍未成功编程的主锁存器612将具有存储于其中的逻辑“0”。未试图进行编程的单元将具有存储在对应主锁存器612中的逻辑“1”。
因为目前已知单元不能被编程(因此是弱单元),所以编程位与失效单元的永久状态不匹配,其对应于图13A的步骤906。在修改后的步骤908中,将单元组200的编程反转为它们的预设状态,并将为原始编程数据的反相的新编程数据加载至SI寄存器单元600中。在修改后的步骤910中,对反相数据进行编程,并且在修改后的步骤912中,对反相状态位进行编程,以指示反相编程数据存在于对应的数据单元组中。因此,无法对逻辑“1”进行编程的单元现在存储了逻辑“0”。
可替代地,在识别出失效编程的情况之后,可以发现用于编程至单元组200而无须任何反相的数据,该数据具有与该弱单元的偏置逻辑状态匹配的位位置。在该过程中,将存储在主锁存器612中的数据转移至从锁存器614,并且在DLi_out线上输出以识别编程失败的位位置。一旦识别到失败编程操作的位位置,则将单元组200的任何编程反转,并将适当的编程数据加载至SI寄存器单元502以用于编程。因此,漏单元在使用前的测试期间被识别,而弱单元在使用编程操作期间被识别。
图16是根据本实施例的一个表格,该表格示出了当前描述的用于回收弱单元及漏单元这二者的冗余技术。从该表格的最左侧开始,第一列列出不同编程数据的行。第二列列出具有以“x”标记的、已检测到的漏单元的对应单元组200。第三列列出与在第二列的行中示出的单元组相同的单元组200,但具有在编程操作期间检测到的弱单元。以“y”标记该弱单元。第四列示出单元组200中的最终编程数据,其中如果数据位与单元组200中的对应单元的预设永久逻辑状态不匹配,则一些编程数据被反相。针对存储反相后的编程数据的那些数据单元组201,对其对应的反相状态位202进行编程。
如果与该条目中以“y”标记的位位置对应的从左侧起第一位位置将要被编程为逻辑“1”,则从左至右观察该编程数据。正如最右列所显示的,当以“1”开始的数据值与“y”位置条目匹配时,将该条目反相。因此当反相时,“y”位存储逻辑“0”,并且冗余位被编程为逻辑“1”状态以指示所存储数据的反相状态。须注意的是,相同的反相状态位可被用于二种错误类型。
本说明书公开的一些实施例使用一个以上的反相状态单元。例如,一些实施例使用两个反相状态单元,而其他实施例使用三个反相状态单元。其他实施例可以使用更多数量的反相状态单元。在使用一个以上的反相状态单元的实施例中,组合反相状态单元来判断是否发生反相的方式因实施例而不同。例如,在一些实施例中,若反相状态单元中的至少一个具有逻辑“1”的值,则发生反相。在其他实施例中,除非所有的反相状态单元都具有逻辑“1”的值,否则不发生反相。在另外其他实施例中,除非奇数个反相状态单元具有逻辑“1”的值,否则不发生反相。这些都是非限制性的示例,并且可以理解的是,可以使用其他方法来组合反相状态位的值,用以判断是否发生反相。
现在参考图17A,其示出电路1200的示意图,该电路1200为使用两个反相状态位的电路的示例,其中两个反相状态单元都被编程为逻辑“1”,以使反相发生。可以使用电路1200来校正一个或多个缺陷数据单元、一缺陷漏反相状态单元、或者一个或多个缺陷数据单元及一缺陷漏反相状态单元。电路1200包括数据单元组1201、反相状态单元1202a和1202b、以及反相处理器1222。反相处理器1222接收反相状态单元1202a及1202b的逻辑状态作为输入。基于反相状态单元1202a及1202b的值,反相处理器1222输出数据单元1201的逻辑值或数据单元1201的逻辑值的反相。在图17A所示的实施例中,当反相状态单元1202a及1202b两者皆具有逻辑值“1”时,反相处理器1222输出数据单元组1201的反相值。另一方面,当反相状态单元1202a及1202b中的至少一个具有逻辑值“0”时,反相处理器1222输出数据单元组1201的非反相值。
反相处理器1222包括第一逻辑电路及第二逻辑电路,该第一逻辑电路包括与(AND)门1212且该第二逻辑电路包括多个异或(XOR)门1220。与门1212的输入耦接至反相状态单元1202a及1202b。多个异或门1220中的每一个都具有耦接至与门1212的输出的第一输入、及耦接至组1201的一数据单元的第二输入。异或门1220的输出1230代表具有或不具有反相的数据单元组1201的值。在图17A的实施例中,数据单元的反相状态依据逻辑与函数(例如,与门1212的输出)由反相状态单元1202a及1202b的组合被指示。如果与门1212的输出(亦称为反相控制信号)是逻辑“1”,则异或门1220的输出1230为数据单元组1201的值的反相。相反地,如果与门1212的输出为逻辑“0”,则异或门1220的输出1230与数据单元组1201的值相同。
图17A示出因为反相状态单元1202a为漏单元但可被永久地编程为逻辑“1”所以是有缺陷的情况。图17A也示出该数据单元无须被反相因为它们未包括缺陷单元的情况。因此,数据单元组1201可被编程为与理想值1210匹配。如本领域技术人员将理解的那样,该讨论也同样适用于其中数据单元在适当的位置包括缺陷单元、使得尽管有缺陷(例如,与其中理想值为逻辑“1”的位置对应的漏单元)但可使该数据单元与理想值1210匹配的情况。在图17A所示的情况中,反相状态单元1202b被设定为逻辑“0”,据此使得与门1212的输出为逻辑“0”,这反过来又导致异或门1220输出没有反相的数据单元组1201的逻辑值。因此,异或门1220的输出1230与理想值1210匹配。因此,反相状态单元1202b可在反相状态单元1202a为漏单元的情况下充当备份,因为在这种情况下,作为与函数的结果,与门1212的输出将由状态单元1202b的值所指定。如本领域技术人员将理解的那样,反相状态单元1202a及1202b是可互换的。换言之,1202a在1202b为漏单元的情况下可以充当备份反相状态单元。
图17B示出类似于图17A的电路1200,但存在一个差异是:在图17B中,数据单元组1201包括漏单元。该电路元件在图17A及图17B中类似地编号,并且在此将不再重复它们的描述。类似于图17A,图17B也示出了反相状态单元1202a因为它是漏单元所以是有缺陷的情况。这种单元可被设定为逻辑“1”。如上所述,数据单元组1201包括为有缺陷的逻辑“1”的单元。数据单元组1201的缺陷单元的位置与理想值1210为逻辑0的位置对应,因此不允许数据单元组1201与理想值1210匹配。在这种情况下,数据单元组1201被编程为理想值1210的反相。此外,反相状态单元1202b被设定为逻辑“1”,据此使得与门1212的输出为逻辑“1”,这反过来又导致异或门1220输出数据单元组1201的逻辑值的反相。因此,异或门1220的输出1230与理想值1210匹配。
如上所述,本领域技术人员将明白,当反相状态单元(1202a或1202b)中的一个为有缺陷的逻辑“1”时,在电路1200中将两个反相状态单元(1202a或1202b)和与门1212一起使用提供了有效的备份功能。然而,当反相状态单元(1202a或1202b)中的一个为有缺陷的逻辑“0”时,电路1200不会一样有效,这是因为所给定的与函数的本质,使得无论可操作的反相状态单元的值为何,与门1212的输出将是“0”。在反相状态单元(1202a或1202b)中的一个为有缺陷的逻辑“1”的情况下,如果可操作的反相状态单元的值被设定为“0”,则与门1212的输出将为“0”且数据单元组1201的值将不会被反相。然而,如果可操作的反相状态单元的值被设定为“1”,则与门1212的输出将为“1”。因此,数据单元组1201的值将被反相。因此,当反相状态单元中的一个是有缺陷的逻辑“0”时,与门1212的输出将为“0”,且无论可操作的反相状态单元被设定为何值,都不会发生数据单元组1201的值的反相。
现在参考图18A,其示出电路1300的示意图,电路1300类似于电路1200,并且类似功能的元件已被类似地编号。如对于本领域技术人员而言将显而易见的是,电路1300与电路1200之间的一个差异在于,电路1300使用异或门1312取代与门。因此,当使用电路1300时,无论缺陷单元中的一个是有缺陷的逻辑“1”或“0”,都可以使用可操作的反相状态单元来指定数据单元组1301的值是否通过反相处理器反相或不反相。
如上所述,反相处理器1322包括异或门1312。因此,当反相状态单元1302a及1302b都具有相同的逻辑值(例如,皆为“1”或皆为“0”)时,异或门1312的输出为逻辑“1”且反相处理器1322输出数据单元组1301的未反相的值。另一方面,当反相状态单元1302a及1302b具有不同逻辑值(即,反相状态单元1302a及1302b中的一个为“1”,而另一个为“0”)时,异或门1312的输出为逻辑“0”且反相处理器1322输出数据单元组1301的反相后的值。
当没有缺陷数据单元或者缺陷数据单元具有与理想值匹配的值时,无须反相。在这种情况下,1302a及1302b的值可以被设定成皆为“1”或皆为“0”。这种情况被示出在图18A中。
相反地,如以下关联图18B所讨论的,当理想值1310与数据单元组1301中的缺陷单元值之间有不匹配时,可使用反相。例如,当数据单元包含在数据单元组1301的对应位置处的漏单元时,理想值可以是逻辑“0”。在这种情况下,反相状态单元1302a及1302b中的一个可被设定为逻辑值“1”,而另一个可被设定为逻辑值“0”。
图18A示出其中反相状态单元1302a因为其是弱单元且无法可靠地被编程为逻辑“1”所以是有缺陷的情况。然而,该单元可被设定为逻辑“0”。图18A也可示出其中数据单元因为不包括缺陷单元所以不需要被反相的情况。因此,数据单元组1301可被编程为与理想值1310匹配。如本领域技术人员将理解的那样,该讨论也同样适用于其中数据单元在适当的位置包括缺陷单元、使得尽管有缺陷但可使该数据单元与理想值1310匹配的情况。在图18A所示的情况中,反相状态单元1302b被设定为逻辑“0”,据此使得异或门1312的输出为逻辑“0”,这反过来又导致异或门1320输出没有反相的数据单元组1301的逻辑值。因此,异或门1320的输出1330与理想值1310匹配。另一方面,如果反相状态单元1302a是漏单元,则反相状态单元1302a可被编程为逻辑“1”且反相状态单元1302b可被编程为逻辑“1”,其也可造成异或门1320的输出1330与理想值1310匹配。因此,反相状态单元1302b在1302a是缺陷单元(漏单元或难以编程的单元)的情况下充当备份。由于或(OR)函数的结果,不管反相状态单元1302a的值为何,通过将反相状态单元1302b编程为适当值,可以控制异或门1312的输出为逻辑“1”或逻辑“0”。如本领域技术人员将理解的那样,1302a及1302b是可互换的。换言之,上面的描述也同样适用于其中反相状态单元1302b是缺陷单元且反相状态单元1302a充当备份的情况。
图18B示出类似于图18A的电路1300,但存在一个差异是,在图18B中,数据单元组1301包括漏单元。该电路元件在图18A及图18B中被类似地编号,且在此将不再重复它们的描述。类似于图18A,图18B也示出了反相状态单元1302a因为它是弱单元且不能被可靠地编程为逻辑“1”所以是有缺陷的情况。然而,该单元可被设定为逻辑“0”。数据单元组1301包括一单元,该单元在理想值1310是逻辑0的位置处为有缺陷的逻辑“1”(漏),因此不允许数据单元组1301与理想值1310匹配。在这种情况下,数据单元组1301的值被编程为理想值1310的反相。此外,反相状态单元1302b被设定为逻辑“1”,据此使得异或门1312的输出为逻辑“1”,这反过来又导致异或门1320输出数据单元组1301的逻辑值的反相。因此,异或门1320的输出1330与理想值1310匹配。另一方面,如果反相状态单元1302a是漏单元,则反相状态单元1302a可被编程为逻辑“1”且反相状态单元1302b可被编程为逻辑“0”,其也可造成异或门1320的输出1330与理想值1310匹配。再次地,1302a及1302b是可交换的,并且因此,上面的描述也同样适用于1302b是有缺陷的且1302a是可操作的情况。
现在参考示出电路1400的示意图的图19A,电路1400类似于电路1300并且类似功能的元件已被类似地编号。正如对本领域技术人员而言将是显而易见的,电路1300与电路1400之间的一个差异在于,与电路1300中使用两个反相状态单元相比,电路1400使用三个反相状态单元。
可使用电路1400来针对下列情况进行校正:(i)一个或多个缺陷数据单元,(ii)一个或多个缺陷反相状态单元,(iii)或者一个或多个缺陷数据单元及一个或多个缺陷反相状态单元。例如,甚至当三个反相状态单元中的两个是有缺陷的时,独自的可操作反相状态单元可被用来控制是否在输出1430处将数据单元组1401的值反相。
电路1400包括数据单元组1401、反相状态单元1402a、1402b和1202c,以及反相处理器1422。反相处理器1422接收反相状态单元1402a、1402b及1402c的逻辑状态作为输入,基于反相状态单元1402a、1402b及1402c的逻辑状态的值,反相处理器1422输出数据单元1401的逻辑值或数据单元1401的逻辑值的反相。在图19A所示的实施例中,反相处理器使用三个输入异或门1412。当三个输入包含偶数个逻辑“1”时,异或门1412输出逻辑“0”。如本文所使用的,“偶数个逻辑‘1’”的表述包括没有逻辑“1”(即,当所有输入为逻辑“0”)。当三个输入包含奇数个“1”时,异或门1412输出逻辑“1”。因此,当奇数个反相状态单元1402a、1402b及1402c具有逻辑值“1”时,反相处理器1422输出数据单元组1401的反相值。另一方面,当偶数个反相状态单元1402a、1402b及1402c具有逻辑值“1”(或当所有的反相状态单元1402a、1402b及1402c具有逻辑值“0”)时,反相处理器1222输出数据单元组1401的非反相值。
图19A示出其中反相状态单元1402a因为其为弱单元且无法被可靠地编程为逻辑“1”所以是有缺陷的情况。然而,该单元可被设定为逻辑“0”。此外,反相状态单元1402b是有缺陷的,因为其为漏单元但可被永久地编程为逻辑“1”。图19A还示出其中该数据单元因为它们不包括缺陷单元所以不需要被反相的情况。因此,数据单元群组1401可被编程为与理想值1410匹配。如本领域技术人员将理解的那样,该讨论也同样适用于其中数据单元在适当的位置包括缺陷单元、使得尽管有缺陷但可使该数据单元与理想值1410匹配的情况。在图19A所示的情况下,反相状态单元1402c被设定为逻辑“1”,据此使得异或门1412的输出为逻辑“0”,这反过来又导致异或门1420输出没有反相的数据单元组1401的逻辑值。因此,异或门1420的输出1430与理想值1410匹配。另一方面,如果反相状态单元1402a及1402b具有相同值,则可以将反相状态单元1402c编程为逻辑“0”,其将导致异或门1420的输出1430与理想值1410匹配。
图19B示出类似于图19A的电路1400,但存在一个差异是,在图19B中,数据单元组1401包括漏单元。该电路元件在图19A及图19B中被类似地编号,且在此不再重复他们的描述。如同图19A,图19B也示出了反相状态单元1402a因为它是弱单元且不能被可靠地编程为逻辑“1”所以是有缺陷的情况。然而,该单元可被设定为逻辑“0”。此外,反相状态单元1402b是有缺陷的,因为它是漏单元但可被永久地编程为逻辑“1”。数据单元组1401包括一单元,该单元在理想值1410是逻辑0的位置处是缺陷逻辑“1”,因此不允许数据单元组1401与理想值1410匹配。在这种情况下,数据单元组1401被编程为理想值1410的反相。此外,反相状态单元1402c被设定为逻辑“0”,据此使得异或门1412的输出为逻辑“1”,这反过来又导致异或门1420输出数据单元组1401的逻辑值的反相。因此,异或门1420的输出1430与理想值1410匹配。另一方面,如果反相状态单元1402a及1402b具有相同值(皆为“0”或皆为“1”),则反相状态单元1402c可被编程为逻辑“1”,其也将导致异或门1420的输出1430与理想值1410匹配。
在上面图19A及图19B的描述中,反相状态单元1402a、1402b及1402c中的每一个是可互换的。因此,无论哪个反相状态单元是有缺陷的且哪个是可操作的,上述描述都可以适用。在至少一个反相状态单元是可操作的前提下,可对电路1400进行操作以将存储在数据单元组1401中的值反相或不反相。
图20是示出用于利用多个反相状态单元的电路(诸如例如图17A至图19B的电路1200、1300及1400)的示例性冗余方法的流程图。该方法可包含比所示出和/或所描述的过程更多或更少的过程,并且可以以不同顺序来执行。
在2002处,判定是否将数据单元反相。该判定可以以任何适当的方式来进行,诸如例如如上面关于图6A、6B及6C所描述的。如果由于一个或多个缺陷单元而将该数据单元反相,则该方法前进至2004。若不将该数据单元反相,则该方法前进至2012。
在2004处,判定是否有缺陷反相状态单元。若没有缺陷反相状态单元,则接着执行2006。另一方面,如果有至少一个缺陷反相状态单元,则接着执行2008。
在2006处,将反相状态单元编程为指示数据单元的反相的状态组合。例如,在电路1300的例子中,可以将反相状态单元中的一个编程为逻辑“1”,而将其他的反相状态单元编程为逻辑“0”。在电路1400的例子中,可以对反相状态单元进行编程,使得有奇数个反相状态单元被编程为逻辑“1”。
另一方面,如果有至少一个缺陷反相状态单元,则在2008处,根据影响特定单元的缺陷,将每个缺陷反相状态单元设定为永久逻辑状态。
在2010处,对其余可操作的反相状态单元进行编程,以实现用于指示反相的已编程状态的组合。在各个实施例中,在前面语句中所提及的反相状态单元的数量包括(多个)缺陷反相状态单元。例如,在图19A及图19B的电路1400的例子中,可对可操作的反相状态单元进行编程,使得有奇数个反相状态单元被编程为逻辑“1”,包括任何缺陷单元。因此,在图19B的示例中,单元1402c是仅存的可操作的反相状态单元,且其被编程为逻辑“0”,使得反相状态单元1402a、1402b及1402c的逻辑状态的组合指示反相。
现在参考2012,其中判定是否有缺陷反相状态单元。如果没有缺陷反相状态单元,则接着执行2014。另一方面,如果有至少一个缺陷反相状态单元,则接着执行2016。
在2014处,将反相状态单元编程为指示数据单元的非反相的状态组合。例如,在电路1300的例子中,可将两个反相状态单元编程为相同的逻辑值(即,皆编程为逻辑“1”或皆编程为逻辑“0”)。在电路1400的例子中,可对反相状态单元进行编程,使得有偶数个反相状态单元被编程为逻辑“1”。
另一方面,如果有至少一个缺陷反相状态单元,则在2016处,根据影响特定单元的缺陷,将各个缺陷反相状态单元设定为永久逻辑状态。
在2018处,对其余可操作的反相状态单元进行编程,以实现用于指示非反相的已编程状态的组合。在各个实施例中,在前面语句中所提及的反相状态单元的数量包括(多个)缺陷反相状态单元。例如,在电路1400的例子中,可对可操作的反相状态单元进行编程,使得有偶数个反相状态单元被编程为逻辑“1”,包括任何缺陷单元。因此,在图19A的示例中,单元1402c是仅存的可操作的反相状态单元,且其被编程为逻辑“1”,使得反相状态单元1402a、1402b及1402c的逻辑状态的组合指示非反相。
虽然本说明书描述并示出了具有1、2或3个反相状态单元的电路,但可以使用更多数量的状态单元。更具体而言,可以使用任意多个状态单元。作为示例,电路1400可适用于具有10个反相状态单元。这将允许多达9个反相状态单元是有缺陷的,同时允许其余可操作的(多个)状态单元控制在输出1430处是否有数据单元组1401的值。然而,需要在通过使用更多数量的反相状态单元而增加的附加可靠性与具有这些附加的反相状态单元以及用于处理附加输入的电路的“成本”(例如,需要更大面积的电路区域及附加功率需求)之间有所取舍。
本发明实施例可与任何可编程非易失性存储器一起使用,其中缺陷单元呈现偏置逻辑状态。先前描述的自反相数据寄存器310的实施例是用于执行缺陷单元检测、编程数据反相和读取数据反相的一种装置手段。可以发展替代技术和电路,以获得相同的期望结果。
在以上描述中,为了解释的目的,已陈述了许多细节以提供对本发明实施例的透彻理解。然而,对于本领域技术人员而言将是显而易见的,这些具体细节对实践本发明而言是非必要的。在其他实例中,为了不混淆本发明,公知的电气结构和电路以框图的形式示出。例如,未提供关于是否将本文描述的本发明实施例实践为软件例程、硬件电路、固件、或它们的组合的具体细节。
本发明的上述实施例旨在仅是示例。变更、修改以及变化可由本领域技术人员应用至特定实施例,而不脱离通过所附权利要求所单独限定的本发明范围。