用分布式学习方法对闪速存储器编程的制作方法

文档序号:6745602阅读:160来源:国知局
专利名称:用分布式学习方法对闪速存储器编程的制作方法
技术领域
本发明一般而言涉及存储设备,更具体而言涉及对存储设备编程的方法。
背景技术
非易失半导体存储器是典型计算机系统的基本构造部件。现有的一种非易失半导体存储设备是闪速电擦除可编程只读存储器(“flashEEPROM”),而现有的一种闪速存储单元(flash memory cell)包含单个场效应管,该场效应管包括选择栅(select gate)、浮动栅(floating gate)、源极和漏极。通过改变存储在浮动栅中的电荷总量,引起闪速单元的阈电压Vt发生变化,于是信息被保存在闪速单元中。通过将一选择电压经由词线(wordline)加到选择栅上对闪速存储单元进行读取。选择电压加上时,闪速存储单元传导的漏极电流ID是由它的阈电压Vt决定的,该单元的状态既可通过比较阈电压Vt、漏极电流ID,或浮动栅上的电荷量和一个参考闪速存储单元上的相同特征来决定。
现有的一个典型闪速存储单元仅存储一比特的数字数据,但在现有技术中,存储多于一比特的数据的闪速存储单元已是公知的。存储于闪速存储单元的比特数取决于1)可以通过编程电路使闪速存储单元处于不同模拟态的数目2)可以通过检测电路(sensing circuitry)准确决定不同模拟态的数目。
理论上讲,每个被浮动栅收集的电子都有一个模拟态,所以在浮动栅上每收集到另一个电子,闪速存储单元就会处于一个新的状态;但是,对闪速存储单元的编程会受到环境因素和单元之间变化的影响。环境因素同样影响对闪速存储单元的检测操作,而检测电路的分辨率不足以精细到可以准确区分靠得很近的模拟态。因此,存储单元所处的每个状态典型地对应于于某一电荷范围,和/或对应于阈电压或漏极电流的一个相应范围。设备特性将编程窗口限制到一个限定范围,编程窗口指的是阈电压(或漏极电流)的总范围,该范围可以再分为两个或更多的状态,因而需要使每一状态所占的阈电压(或漏极电流)的范围变窄,以便区分更多的状态。所以每个模拟态的“态宽”(“state width”)变窄。
图1表示现有技术的一种示范性方法的流程图,该方法将具有两种可能模拟态(“已清除的”和“已编程的”)的闪速存储单元置于已编程态。闪速阵列在初始化时被清除使得每一闪速存储单元均处于已清除态,在处理模块5中其中的一个闪速存储单元被选为处在已编程态。通常情况下几个存储单元被并行地编程。
编程脉冲包括在一段预定的时间内将适当的电压作用于每个被选中的闪速存储单元的选择栅、源极和漏极之上,在处理模块10中一个编程脉冲作用于被选中的闪速存储单元上。编程脉冲的持续时间(脉宽)和编程电压决定了加在闪速存储单元浮动栅上的电荷量。
在一些现有技术中,仅用单个编程脉冲可将存储单元置于已编程态。而图1中的编程方法使用了一个允许对编程过程做更多控制的编程校验范例。在处理模块15中执行了校验操作,其中闪速存储单元的状态被检测并与参考值作了比较。如果该存储单元并未处在已编程态,那么编程脉冲将作用于该单元上直到它完全处于已编程态。程序终止于处理模块20。
当闪速存储单元的状态数超过两个,重要的是准确地将闪速存储单元置于要求的状态而不“编程过度”,这发生在闪速存储单元偶然地处于超出要求的状态时。因而编程校验设置方案是必需的。不幸的是因为态宽变窄,编程脉宽相应地也要变窄,这样的结果是将用更多的编程脉冲和作更多的校验操作。多次校验操作导致明显的开销,这降低了对存储设备的编程性能。
发明概述和目的所以,本发明的目的之一是给出一种方法,该方法能更快地将具有三个或更多模拟态的存储单元置于所要求的状态。
本发明的这一目的和其他目的都是由将存储单元编程到所要求状态的方法提供的。该方法包括控制引擎对存储单元阵列的子集编程。特征信息是由对子集的编程步骤决定的,给出了存储单元阵列中一个代表性存储单元的编程特征。然后控制引擎利用特征信息直接对存储单元编程使之处于要求的状态,而不必再作编程校验操作。
本发明的其它目的、特性和优点参见附图和后面的详述。
附图简述本发明通过示例的方式给出了图解说明,但并不仅限于附图中的描述,其中相同的参考标号指示相似的元件。


如下图1表示现有技术下的一种编程校验方法。
图2表示通常的非易失存储单元。
图3A-3D表示存储设备状态的几种可选的不同表示方法。
图4表示一个作编程配置的闪速存储单元。
图5表示一族编程曲线,其中编程的漏极电压保持不变而编程的栅极电压改变。
图6表示一族编程曲线,其中编程栅极电压保持不变而编程漏极电压改变。
图7表示一种闪速单元在最大漏极偏压下的碰撞电离效应。
图8表示按公开的编程方法可对其进行编程的一种存储设备。
图9表示编程的一种准确放置方法。
图10表示用准确放置方法时,态时间函数的平均编程时间。
图11表示根据一个实施例的分布式学习编程方法(distributedlearning method)。
图12表示根据另一个可选实施例的分布式学习编程方法。
图13表示根据一个实施例的预测学习编程方法。
图14表示根据另一个可选实施例的预测学习编程方法。
图15表示一种相关放置编程方法。
图16表示根据一个实施例的数据流分析编程方法。
图17表示按另一个可选实施例的数据流分析编程方法。
发明详述公开了一些将存储单元快速置于三个或三个以上模拟态中的某一模拟态的方法。这些方法能很容易地应用于只有两个可能模拟态的存储单元。还应提及,上述的一些方法中可快速地对存储单元编程以保存模拟数据,其中存储单元的阈电压值Vt对应于一个模拟电压值。尽管这些方法是以闪速EEPROMs为参考进行说明的,应该注意到,其它一些不同于闪速EEPROMs的非易失存储设备以及诸如动态随机存取存储器(DRAM)的易失存储设备也能存储三个或更多的模拟态。因此,这些已公开的方法一样能应用在不同于闪速EEPROMs的存储设备上。
图2表示一个非易失存储单元25,它包括一个选择栅30,一个浮动栅35,一个源极40和一个漏极45。非易失存储单元25作为场效应管,它的阈电压Vt随着电荷加到浮动栅上而增加。存储单元漏极电流ID(“单元电流”)随着阈电压Vt和单元电荷量的增加而减少。存储单元阈电压Vt与单元电流ID之间关系可用下式表示ID∝Gm×(VG-Vt) 当VD>VG-Vt其中Gm是存储单元的互导;VG是存储单元的栅极电压;VD是存储单元的漏极电压;Vt是存储单元的阈电压。
从这个关系式可以看出,有许多不同的方法用来检测出(“读出”数据)存储单元浮动栅上的电荷量,包括当一常量电压加于存储单元的选择栅时检测它的单元电流;检测需要加在选择栅上以使单元电流达到某一期望值时的电压;当一常量电压加于存储单元的选择栅时检测与存储单元漏极相连接的负载上的电压降,其中单元电流决定了负载上的电压降;检测需要加在选择栅上以在与漏极连接的负载上产生一个期望电压降的电压。对存储单元特征信息和已知参考值的比较足以决定存储单元的模拟态。
定义存储单元的状态通常,非易失存储单元的物理特征中要求有一个最小阈电压Vtmin和一个最大阈电压Vtmax,当达到最小阈电压Vtmin时存储单元被清除,当达到最大阈电压Vtmax时存储单元被编程。最小阈电压Vtmin和最大阈电压Vtmax描绘出了非易失存储单元的最大编程窗口。最小阈电压Vtmin取决于清除次数和栅级干扰电压,最大阈电压Vtmax取决于漏极干扰电压和烘烤电量丢失(bake charge loss)。
其中编程窗口的最大宽度取决于非易失存储单元的物理特征,编程窗口中各个模拟态的定义方式受许多因素的影响,包括编程时的温度变动;编程时的编程电压变动;
存储单元在存储阵列中的位置;通道(channel)长度的随机微小变化;漏极干扰;栅极干扰;和用于检测非易失存储单元状态的电路的分辨率。
图3A-3D表示在同一编程窗口中几种可选的状态表达和定义。图3A为给定状态下单元数目对应于该状态阈电压的编程分布图。如图所示,在编程窗口中定义了四个状态即状态0,状态1,状态2,和状态3。为了方便说明的目的,图中所示每个状态的编程分布均为钟型曲线,其中被编程到某一特定状态的单元中的大多数都落在状态中心。图3A还表示了在各邻近的的状态之间有分隔区。分隔区的存在是为了更容易区分各个状态;虽然从理论上说分隔区并不需要。图中所示的态宽和分隔区宽是相等的,这样每个状态和每个分隔区均占编程窗口的1/7。
图3B表示存储单元的一种编程分布,其中在编程窗口中有8个状态。图中所示的每个状态和每个分隔区所占的阈电压Vt范围也是相等的,即每个状态和每个分隔区均占总编程窗口的1/15。
尽管在图3A和3B中态宽和分隔区宽是相等的,但态宽和分隔区宽也可以更随意的定义,并且其它考虑因素限制了状态被定义的方式。例如,对于靠近编程窗口边缘的状态可以占有较大的态宽。图3C表示状态0和状态3占据了1500mv的阈电压范围,而状态1和状态2仅占据了500mv的态宽。图3D表示在单元电流ID方式下图3C的等同状态分布。
图3A-3D说明了在数字数据存储应用上的可能状态分布。具有相同编程窗口的相同存储单元可用来存储用于诸如声音录制和回放的应用的模拟数据。在模拟信号存储应用中,编程窗口中的每个阈电压Vt或单元电流ID直接对应于一个模拟输入电压,这样对存储单元实际Vt值的检测允许输出电路对输入电压的直接合成。以这种方式,声音可以得到录制和回放。现有模拟存储体系的例子可参见美国专利号4,890,259,标题为“高密度集成电路模拟信号录制和回放系统”和美国专利号5,126,967,题目为“应用于模拟信号录制和回放的可写分布式非易失模拟参考系统和方法”。
闪速存储器的编程特征图4表示通过热电子注入(hot electron injection)为编程配置的一个闪速存储单元。闪速存储单元25的选择栅30连接到编程电压VG。现有闪速存储单元的一个典型编程电压是12.0V。
将编程电压VG加在选择栅30上,打开闪速存储单元的场效应管,使电流从漏极45流向源极40。该编程电压VG还在基底50和浮动栅35之间产生一“垂直”电场。垂直电场的电子流可用箭头符号来描述,箭头指向浮动栅35而箭尾指向基底50。这基本上表示了在垂直电场中的电子流方向。
如图所示,源极40连接到系统地VSS,漏极45连接到漏极电压VD。在漏极45和源极40之间的电势差产生一“水平”电场,它对从源极40经通道到达漏极45的电子进行加速。对于一种实施例,VD具有比源极40的电压高5-7V的电压就足够了。垂直电场的电子流可用箭头指向漏极45、箭尾指向源极40的箭头符号来表示。这基本上表示了穿过通道的电子流方向。被加速的或称“热”电子与基底50中的晶格结构发生碰撞,其中的一些热电子被垂直电场拉到浮动栅上。通过这种方式,浮动栅上的电荷量增加。
非易失存储器所处的状态取决于栅极电压VG,漏极电压VD,存储单元的有效通道长度Ldff,温度和脉宽,其中脉宽为编程栅极电压VG和编程漏极电压VD作用于存储单元上的持续时间。还应提及,其中的编程栅极电压VG起主要作用。
图5画出了在不同的编程栅极电压时存储单元阈电压Vt对于编程时间对数的曲线图。编程栅极电压决定了垂直电场的相对强度,在编程时增加栅极电压则增加了垂直电场的强度。曲线60表示在给定编程栅极电压VG为8V时的阈电压Vt。曲线65表示编程栅极电压VG为9V时的阈电压Vt。编程栅极电压VG为10V、11V和11.5V时的曲线分别为曲线70、75和80。
从所有5条曲线60-80可以看出,在曲线55左边的“线性区”,阈电压Vt呈指数增长。线性区之所以这样称呼是因为当阈电压Vt以线性时间刻度划分时,在线性区编程时阈电压Vt随着VG而线性增长。因此,在线性区编程时,编程脉冲持续时间的一个小增加会引起阈电压Vt的较大增加,精确控制阈电压Vt是困难的。
当编程处在曲线55右边的“饱和区”时,精确控制阈电压Vt相对容易一些。如图所示,当存储单元在饱和区被编程时,阈电压Vt随着时间缓慢地、以对数形式增长。
在饱和区操作时,如果栅极电压VG保存不变而总编程脉冲持续时间增加,那么对存储单元的编程是缓慢的。例如,给定一个1μs持续时间的初始编程脉冲,该初始编程脉冲的编程栅极电压VG为8.0V,则存储单元的阈电压Vt约为3.7V。如果编程栅极电压VG保持8.0V不变,则需要约10μs持续时间的编程脉冲才能使阈电压Vt增加1.0V而升到4.7V。
如果栅极电压VG随着每个接下来的编程脉冲而增加,那么在饱和区的编程可以会发生得更快。事实上如图5所示,当在饱和区编程时,对于一个不变脉宽,每增加栅极电压VG就会增加大约相同量的阈电压Vt。因此,给定VG为8.0V的初始1μs编程脉冲,VG为9.0V的后续1μs编程脉冲会使所有存储单元的Vt从3.7V升到4.7V,VG的增加和Vt的增加是一一对应的。
图5的曲线族假定编程漏极电压VD是固定的,它形成通道中的水平电场。图6表示的一族曲线是在编程栅极电压VG一定而编程漏极电压VD改变时得到的。如图所示,漏极电压VD影响存储单元进入编程饱和区的时刻。不同的通道长度会产生不同的曲线族;但是通过调整编程漏极电压VD,可以使具有不同有效通道长度的存储单元有相同的表现。
碰撞电离引发双极型开启电压(impact ionization inducedBi-polar turn-on voltage)(VBii)限制了最大漏极偏置电平,该电压在热电子注入编程时会被用到。图7表示了VBii对于阈电压Vt的效果。对于每个电压值VD1、VD2和VD3,编程栅极电压VG是相同的。当漏极偏置电压低于VBii时,增加VD仅仅影响Vt对于时间曲线的线性区域,这从曲线VD2和曲线VD1的合并可见。增加漏极偏置电压并不影响在饱和区的最大阈电压。而当漏极偏置电压VD大于VBii时,饱和区的阈电压也随着VD的增加而增加。
示例性存储设备这里给出的一般放置方法是参照图8所示的一种示例性存储设备进行说明的。存储设备120在单个半导体基底上制造,包括存储阵列125,行解码器130,列解码器135,检测电路140,参考阵列145,控制引擎150,电压开关155和命令接口160。存储设备120经地址线165接收地址,经双向数据线170接收和输出数据。数据利用在存储阵列125中的非易失存储单元进行存储,其中存储阵列125可包括具有编程阈电压的任何类型存储单元,例如包括具有陷获电介质(trappingdielectrics)或浮动栅的存储单元。其中存储设备120是非易失的,控制引擎中还包括一含SRAM的可写缓冲区152,用来临时存储对阵列125编程的数据。存储设备120的最大允许功耗是决定在某一时间内可被编程的存储单元最大数目的首要因素,写缓冲区152通常选为至少可存储足够的数据以便在某段时间内对最大数目的单元编程。
为了检测出存储阵列125中的数据,行解码器130和列解码器135按用户经地址线165提供的地址选出存储阵列125中的一些存储单元。行解码器130选择阵列125中的适当行,列解码器135选择阵列125中的适当列(或几列)。检测电路140比较被选存储单元的状态和参考阵列145中参考单元的状态。检测电路包括不同的比较器,它的输出数字逻辑电平对应于存储单元和参考单元的比较结果。因此,存储单元的模拟态可以数字数据的形式表示和输出。被选存储单元的精确Vt/ID值可被同样确定。
控制引擎150控制存储阵列125的清除和编程。对于其中的一种实施例,控制引擎150包含一处理器,处理器受单片存储器中微指令的控制。可选的另一实施例是控制引擎150被用作一状态机或通过组合逻辑实现。控制引擎150还可作为半导体设备从外部控制存储设备120的操作来实现。控制引擎150的各种不同实现并不影响存储单元的编程描述方法。
控制引擎150通过对行解码器130,列解码器135,检测电路140,参考单元阵列145和电压开关155的控制来管理存储阵列125。电压开关155控制不同的电压值来读出、编程和清除存储阵列125。用户的读出、清除和编程命令经命令接口160传给控制引擎150。外部用户发给命令接口160的命令经由3个控制引脚输出使能OEB,写使能WEB和芯片使能CEB。
准确放置编程图9是并行地对许多存储单元编程的一种“准确放置”方法的流程图。这种方法可选地用于连续和单独地对多个存储单元编程。该准确放置方法更加详细的描述参见美国专利号5,440,505,此专利普通转让给California州Santa Clara的Intel公司。
本方法起始于处理模块175,其中在编程前存储阵列125被清除以使所有存储单元都处于已知状态。如果在编程前有其它机理能确知被选单元的状态,则清除这一步可以不需要。在处理模块180,控制引擎150初始化编程变量,包括源极电压VS,漏极电压VD,栅极电压VG和脉宽T。如图9所示,源极电压VS被初始化为系统地VSS,漏极电压VD被初始化为微调漏极电压VD_TRIM,栅极电压VG被初始化为VG_INITIAL,脉宽T被初始化为第一个脉冲的宽度T1。选择初始栅极电压VG_INITIAL和初始脉宽T1,使得作用单个脉冲将导致能对每个被选存储单元的编程处于该初始栅极电压VG_INITIAL的饱和区。
在处理模块185,一初始编程脉冲作用于被选存储单元。在处理模块190中接着进行校验操作,决定被选存储单元子集的每个存储单元是否处于目标状态。如果存储单元已处于目标状态,则对存储单元的处理终止于处理模块205。为了避免编程过度,选择初始编程电压为VG_INITIAL和脉宽为T1的初始脉冲,这样初始脉冲才不会引起编程到要求的状态。程序接着为模块195,该模块中,控制引擎150将脉宽减为时间T2,将栅极电压VG增加一栅级步进电压ΔVG。在处理模块200中,另一编程脉冲作用于一个或多个单元,其中栅极电压等于VG+ΔVG,脉宽等于T2。然后在处理模块190进行另一校验操作。如果存储单元已处于目标状态,则对该存储单元的编程终止于处理模块205。那些还未达到目标状态的存储单元重复处理步骤195和200。以这种方式,每过一个编程脉冲,栅极电压就逐渐升高。
选择栅级步进电压ΔVG和脉宽T2的值使得栅极电压VG的增加和阈电压Vt的增加能一一对应。例如,如果栅级电压为300mv,那么每当一栅极电压值升高的编程脉冲到来,被编程存储单元的阈电压Vt将升高300mv。栅级步进电压ΔVG和脉宽T2的选择还可以使对于栅极电压VG的编程发生在饱和区。
阈电压Vt和编程栅极电压VG之间的关系由图5中的曲线直接给出。初始脉宽T1和后继脉宽T2之间的减少量取决于态宽和栅级步进电压ΔVG的大小。当态宽和栅级步进电压ΔVG减少时,脉宽的减少量趋于增加。
图9中所示的准确放置方法是一种容易实现的稳定(robust)方法。不幸的是对于给定的一个小态宽,必须执行大量的编程脉冲。此外,每个编程脉冲后都要进行基本上为读操作的校验操作。如图10所示,当态宽减少时,对存储单元一个逻辑字节编程的平均时间会增加。该平均编程时间是脉宽、脉冲数目、电压持续时间、校验时间和控制引擎开销(overhead)的函数。给定编程窗口,如果增加的状态需要区分,则态宽必须减少。因此,增加平均编程时间是不可避免的,而寻找另一种可对具有多模拟态的存储单元编程的方法则成为期望。
有许多方法可减少平均编程时间。例如,可减少脉冲的数目。还有,减少校验操作的次数,或将状态机的开销分散在整个阵列。
学习方法减少总编程时间的一种方式是让控制引擎150“学习”存储单元的编程特征。按照第一类型学习算法,用准确放置方法对阵列存储单元的一个统计有效子集编程,控制引擎150从对单元子集的编程中获得关于阵列平均编程时间的特征信息。给定准确放置算法的脉宽参数时,特征信息中包括为达到特定目标状态而需要的脉冲平均数目。特征信息还可简单地从存储单元的Vt-时间特征曲线中得到,例如图5中的曲线族60-80。另一学习方法是预测性的,需要获得编程中每个单元的特征信息。学习方法假定编程时环境变量保持不变。
分布式学习方法图11表示一种分布式学习方法的流程图。编程前,在处理模块215中阵列被清除。在处理模块220,控制引擎150用准确放置或类似方法对阵列子集编程。在处理模块225,控制引擎150获得平均阵列单元的特征信息。当特征信息确定下来后,选中的单元可被直接编程到要求的状态。用直接编程意味着不需要校验操作就可达到要求状态。这就是说单个脉冲可用来对存储单元编程达到要求状态,其中选择栅极电压VG和脉宽T使得编程发生在饱和区。例如,如果已得到如图5中所示的一族曲线,则栅极电压VG为11.0V、持续时间为1μs的单个脉冲可将一个单元直接置于如图3C中定义的状态3。作为选择,直接编程还可应用于一串脉冲,图10中不需校验操作的准确放置方法说明了这种情况。在处理模块230,控制引擎150利用特征信息直接对每个阵列单元编程使之达到目标状态。该分布式学习方法终止于步骤235。
图12表示另一可选方案的分布式学习方法的流程图。在处理模块240中阵列被控制引擎150清除。在处理模块245,控制引擎150用准确放置方法对阵列子集编程。在处理模块250,控制引擎150获得阵列平均单元的特征信息。在处理模块255,控制引擎对单元编程使之处于靠近目标状态的某一点,这给那些非正常偏离平均值的存储单元提供了一个防止编程过度的保护带。在模块260控制引擎用准确放置方法完成编程,将单元放置在设计的状态,分布式学习方法终止于模块235。
和前面描述的准确放置方法相比,这两种分布式学习方法都大大降低了总编程时间。大部分的节省时间是因为去掉了校验操作而得到的。
预测学习图13表示根据一种实施例的预测学习方法的流程图。不同于分布式学习的是,预测学习针对每个单独的单元而执行。因此,编程曲线族分别对每个存储单元个别决定。
在处理模块270中控制引擎150清除阵列。在处理模块275中控制引擎将首个编程脉冲作用于存储单元。在处理模块280,控制引擎150在第一个脉冲作用后决定阈电压Vt值。这样的决定可简单通过校验操作做出。另外,控制引擎也可决定漏极电流ID。
在处理模块285,控制引擎150将第二个脉冲作用于存储单元,在处理模块290控制引擎150又决定了阈电压Vt值。控制引擎150将第一个脉冲过后和第二个脉冲过后的阈电压Vt值相减,得到一个电压差ΔVt,控制引擎可用该电压差来预测存储单元的Vt-时间特性。这样在处理模块295,控制引擎150可从电压差ΔVt得到特征信息。然后控制引擎150可利用特征信息直接对单元编程使之处于目标状态,预测学习方法终止于处理模块305。
优选地,选择这两个特征编程脉冲,使编程处于饱和区。例如,这两个特征脉冲可根据图9中的准确放置方法来执行。如果在编程前所选存储单元的Vt/ID值是已知的,则只需要一个特征编程脉冲。
图14表示根据另一可选实施例的预测学习方法的流程图。控制引擎150在处理模块310中清除阵列并在处理模块315中将首个编程脉冲作用于一存储单元。在处理模块320中,控制引擎150在首个脉冲过后测量阈电压Vt。然后在处理模块325中控制引擎150将第二个编程脉冲作用于存储单元,并在处理模块330中测量此时的阈电压。在处理模块335中,控制引擎150利用电压差ΔVt获得单元的特征信息。于是控制引擎150用获得的特征信息可直接对存储单元编程使之处于靠近目标状态的某一点,从而不需要再作校验操作。这一步发生在处理模块340。在处理模块345,控制引擎150应用准确放置方法完成对存储单元的编程,如图10所示。程序终止于模块350。
预测学习方法尤其适用于快速将模拟电压保存在存储单元。例如,存储单元要求的最后阈电压Vt为Vt_target,则特征脉冲的编程电压VGC可由下式给出VGC=Vt_target+c其中c是一选定的常量,它使得特征脉冲不会引起Vt_target值的突增(overshoot)。根据一种实施例,c等于3.5V。
当特征脉冲过后阈电压Vtc为确定时,编程脉冲的编程电压VGP可通过简单确定Vt_target和Vtc之间的差、按相同量增加VGC值而确定,这可用下式表示VGP=VGC+(Vt_target-Vtc)分布式学习方法还可在保存模拟数据到非易失媒介方面获得类似应用。
相关放置方法准确放置方法和学习方法被视为“绝对放置”方法,因为状态已使用预设定参考值,以目标方式定义好。一种可选的放置方法是“相对放置”方法。绝对放置方法考虑很好限定的状态边界和分隔区,而相对放置方法仅需要互相之间相对限定的状态。例如,给定一包含4个状态的存储单元,其中最低状态为状态0,最高状态为状态3,则每个状态的栅极电压值按下面顺序给出就足够了VG0<VG1<VG2<VG3其中VG0定义了存储单元处在状态0时的阈电压,VG1定义了存储单元处在状态1时的阈电压,VG2定义了存储单元处在状态2时的阈电压,VG3定义了存储单元处在状态3时的阈电压。实际上,每个状态还必须定义一电压范围,并且电压范围有保护带,使得一个状态的最大阈电压不比下一状态的最小阈电压高。
用这种状态排序的编程方法只需将已选定栅极电压值的一个脉冲作用在存储单元,把存储单元从某一状态放置到要求状态。脉宽还要选定为对于给定编程栅极电压值能发生饱和编程。
图15表示状态排序方法的流程图。控制引擎150在处理模块355中清除阵列。编程变量在处理模块360中被初始化,其中栅极电压被初始化为VG1脉宽被初始化为T3。脉宽T3被选定为对于编程栅极电压VG1能发生饱和编程。在处理模块365中控制引擎150将一个脉冲作用于单个选定的单元或多个单元使之处于状态1。在处理模块370中控制引擎150设置编程电压为VG2、脉宽为T4,其中T4选择为一合适的值使得对于编程栅极电压VG2能发生饱和编程。在处理模块375,控制引擎150将一编程脉冲作用于选定单元,使之置于状态2。在处理模块380,控制引擎150设置编程栅极电压为VG3、脉宽为T5,其中T5选择为一合适的值使得对于给定编程栅极电压VG3能发生饱和编程。在处理模块382中一个脉冲用来将选定单元放置在状态3,排序编程过程在处理模块385中完成。该方法不需要校验操作。
图15中所示的方法以“渐进传送”(“carry along”)的方式表现,其中,所有要被编程的阵列单元接收全部编程脉冲,直到单元已接收了能使它们处于要求状态的编程脉冲为止。例如,第一个编程脉冲作用于所有要被编程的阵列单元。那些仅需要被编程到状态1的单元将不再被选定,以避免对它们进一步编程,而所有将要被编程到状态2和后续状态的单元接收第二个脉冲。状态2的单元不再接收进一步编程。
图15的方法还可选择这样的实现方式,即存储单元仅接收能把它们置于要求状态的编程脉冲。预测学习技术可用来确保每个编程脉冲对选定存储单元的编程都处于饱和区。
数据流分析方法一种可选的放置方法为,通过对在任何给定时间内被编程的存储单元数目最大化来减少总的编程时间。编程通常由存储块基础在一“块”中进行,其中的一块存储单元通常包括单个可寻址字节或字的数据。对一块存储单元的编程发生在单个“编程周期”内。
从统计意义上说,保存在一块存储单元中的数据是随机的,可以包括还留在清除态(状态0)的单元和要被编程的单元。因此,按块编程通常导致在每个编程周期内并不是一块中的所有单元都被编程。对于仅有两个状态的存储单元,平均地,每个编程周期仅有一半的块单元被编程。对于有n个状态的存储单元,平均地,每个编程周期仅有1/n的块单元被编程到特定状态。
通过分析数据流,确保每个编程周期内有最大数目的存储单元(即,一整块)被编程,则编程时间可减少。图16是根据一种实施例的数据流分析方法的流程图。控制引擎150在处理模块390中清除阵列。在处理模块395,控制引擎150分析要被编程到存储单元中的数据的集合,决定哪些存储单元将被编程到哪个状态,哪些存储单元将留在清除态。对数据流的分析可在存储设备120的外部完成,分析结果传送给控制引擎150以便控制引擎可适当地控制对存储单元的编程。
当数据流经分析后,编程从处理模块400开始,其中控制引擎150对以状态1为目标状态的存储单元进行编程,并使之达到最大数目。例如,如果要被编程存储单元的数目是由一块存储器中的比特数来决定,那么控制引擎150将确保以状态1为目标状态的一整块存储单元在处理模块400中被编程。如果以状态1为目标状态的单元的数目比最大数目少,则所有单元都在处理模块400中被编程。编程可以使用任何先前描述的方法来完成。
如果在处理模块405中还有存储单元以状态1作为它们的目标状态,则重复执行处理模块400。否则控制引擎150将确保在处理模块410中最大数目的以状态2为目标状态的存储单元被编程。在处理模块415,如果还有以状态2作为它们目标状态的单元存在,则控制引擎150重复处理模块410的步骤,直到所有这样的单元都被编程。
在处理模块420,控制引擎150确保最大的以状态3为目标状态的单元被编程。在处理模块425,控制引擎150决定是否还有状态3的单元要编程。如果没有,程序终止于处理模块430。
图17表示另一种可选的数据流分析方法,其中具有不同目标状态的存储单元被同时编程。图17的编程方法认识到被编程到除第一个状态外的其它目标状态的单元必须“经过”第一个编程状态。程序开始于处理模块435,在处理模块435中控制引擎150清除存储单元阵列。在处理模块440,控制引擎150分析要编程的数据集合。控制引擎150将忽略那些继续留在清除态或者说状态0的单元。在处理模块445,控制引擎150对所有以状态1或高于状态1的状态为目标状态的单元编程,并且最大数目的单元被同时编程。因此,一些以状态2、状态3等作为目标状态的单元也被初始编程到状态1。在处理模块450中控制引擎对所有以状态2或高于状态2的状态为目标状态的单元编程。同样地,最大数目的单元被同时编程。在处理模块445,控制引擎150对所有以状态3或高于状态3的状态为目标状态的单元编程。同样地,最大数目的单元被同时编程。程序终止于处理模块460。如果存储单元具有4个以上的模拟态,图17表示的方法流程很容易作调整修改。
可编程单元的最大数目通常由存储设备120的功率预算决定。用数据流分析方法的编程取决于哪些单元将要被编程,该编程独立于阵列与写缓冲器定义的存储位置之间的物理一致。因为在单个编程周期内被编程的存储单元块将没有一已定义的关系(例如,每个比特不是数据中单个可寻址字节的一比特),所以存储设备120的阵列解码应修改为允许对阵列单元作个别寻址,这样在每个编程周期中一整块存储单元均可被编程而不必关心它们在阵列中的物理位置。
在前面的描述中,本发明是以具体的示例性实施例为参考进行说明的。然而显然的是,可以对它作各种调整和改变而不背离本发明的较宽精神和范围。因此,说明书和附图更应被视为说明性,而不是限制性的。
权利要求
1.在包含存储单元阵列的存储设备中,每个存储单元有两种以上的可能状态,一种将存储单元编程到要求状态的方法包括控制引擎对存储单元阵列子集的编程;在对子集编程的步骤中决定特征信息,特征信息指出了存储单元阵列中一个有代表性的存储单元的编程特征;控制引擎利用特征信息可直接将存储单元编程到近乎要求的状态,而不需要进行校验操作。
2.权利要求1的方法,其特征在于,控制引擎直接对存储单元编程的步骤包括控制引擎决定作用于存储单元的编程脉冲总数,使存储单元达到与特征信息相对应的要求状态;控制引擎将这些编程脉冲作用于存储单元。
3.权利要求2的方法,其特征在于,控制引擎直接对存储单元编程的步骤还包括控制引擎决定与特征信息对应的每个编程脉冲的脉宽。
4.权利要求3的方法,其特征在于,控制引擎直接对存储单元编程的步骤还包括控制引擎决定与特征信息相对应的每个编程脉冲的编程电压。
5.权利要求4的方法,其特征在于,存储单元展现了线性的和饱和的编程特性,所以有线性编程区和饱和编程区,决定编程脉冲总数、编程脉宽、编程脉冲的编程电压的步骤由控制引擎执行,使得控制引擎将这些编程脉冲作用于存储单元的步骤导致存储单元在每个编程脉冲到来时都在饱和区内被编程。
6.权利要求1的方法,其特征在于,控制引擎直接编程存储单元到近乎要求的状态的步骤还包括控制引擎利用特征信息决定单个编程脉冲的脉宽和编程电压,该编程脉冲能直接编程存储单元到近乎要求的状态;控制引擎将该编程脉冲作用于存储单元。
7.权利要求6的方法,其特征在于,存储单元展现了线性的和饱和的编程特性,所以有线性编程区和饱和编程区,利用特征信息决定单个编程脉冲的脉宽和编程电压的步骤由控制引擎执行,使得控制引擎对存储单元作用单个编程脉冲的步骤导致存储单元的编程发生在饱和区。
8.权利要求1的方法,还包括控制引擎在编程校验操作后至少作用一个编程脉冲才能将存储单元编程到要求状态。
9.在包含存储单元阵列的存储设备中,每个存储单元有两种以上的可能状态,一种将存储单元编程到要求状态的方法包括控制引擎通过对存储单元阵列的子集编程来决定特征信息,该特征信息指出了存储单元阵列中代表性的编程特征;控制引擎利用特征信息可直接将存储单元编程到近乎要求的状态,而不需要进行校验操作。
10.权利要求9的方法,其特征在于,控制引擎利用特征信息直接将存储单元编程到要求状态的步骤包括控制引擎决定作用于存储单元的编程脉冲总数,使存储单元达到与特征信息对应的要求状态;控制引擎将这些编程脉冲作用于存储单元。
11.权利要求10的方法,其特征在于,控制引擎利用特征信息直接将存储单元编程到要求状态的步骤还包括控制引擎决定与特征信息相对应的每个编程脉冲的脉宽。
12.权利要求11的方法,其特征在于,控制引擎利用特征信息直接将存储单元编程到要求状态的步骤还包括控制引擎决定与特征信息相对应的每个编程脉冲的编程电压。
13.权利要求12的方法,其特征在于,存储单元展现了线性的和饱和的编程特性,所以有线性编程区和饱和编程区,决定编程脉冲总数、编程脉宽、编程脉冲的编程电压的步骤由控制引擎执行,使得控制引擎将这些编程脉冲作用于存储单元的步骤导致存储单元在每个编程脉冲到来时都在饱和区内被编程。
14.权利要求9的方法,其特征在于,控制引擎利用特征信息直接将存储单元编程到要求状态的步骤包括控制引擎利用特征信息决定单个编程脉冲的脉宽和编程电压,该编程脉冲能直接将存储单元编程到近乎要求的状态;控制引擎将该单个编程脉冲作用于存储单元。
15.权利要求14的方法,其特征在于,存储单元展现了线性的和饱和的编程特性,所以有线性编程区和饱和编程区,利用特征信息决定单个编程脉冲的脉宽和编程电压的步骤由控制引擎执行,使得控制引擎将单个编程脉冲作用于存储单元的步骤导致存储单元在饱和区内被编程。
16.在包含存储单元阵列的存储设备中,一种在存储单元中保存模拟电压的方法是将存储单元的阈电压编程到要求的电压,它包括控制引擎对存储单元阵列的子集编程,从对子集编程的步骤中决定特征信息,该特征信息指出了存储单元阵列中一个有代表性存储单元的编程特征;和控制引擎利用特征信息直接将存储单元的阈电压编程到要求的电压。
17.权利要求16的方法,其特征在于,控制引擎利用特征信息直接将存储单元编程到要求状态的步骤包括控制引擎决定作用于存储单元的编程脉冲总数,使存储单元达到与特征信息相对应的要求状态;和控制引擎将这些编程脉冲作用于存储单元。
18.权利要求17的方法,其特征在于,控制引擎利用特征信息直接将存储单元编程到要求状态的步骤还包括控制引擎决定与特征信息相对应的每个编程脉冲的脉宽。
19.权利要求18的方法,其特征在于,控制引擎利用特征信息直接将存储单元编程到要求状态的步骤还包括控制引擎决定与特征信息相对应的每个编程脉冲的编程电压。
20.权利要求19的方法,其特征在于,存储单元展现了线性的和饱和的编程特性,所以有线性编程区和饱和编程区,决定编程脉冲总数、编程脉宽、编程脉冲的编程电压的步骤由控制引擎执行,使得控制引擎将这些编程脉冲作用于存储单元的步骤导致存储单元在每个编程脉冲到来时都在饱和区内被编程。
21.权利要求16的方法,其特征在于,控制引擎利用特征信息直接将存储单元编程到要求状态的步骤包括控制引擎利用特征信息决定单个编程脉冲的脉宽和电压,该编程脉冲能直接将存储单元编程到近乎要求的状态;控制引擎将该单个编程脉冲作用于存储单元。
22.权利要求21的方法,其特征在于,存储单元展现了线性的和饱和的编程特性,所以有线性编程区和饱和编程区,利用特征信息决定单个编程脉冲的脉宽和编程电压的步骤由控制引擎执行,使得控制引擎将单个编程脉冲作用于存储单元的步骤导致存储单元在饱和区内被编程。
全文摘要
在包含存储单元阵列的存储器设备中,每个存储单元有两种以上的可能状态,公开了一种对存储单元编程使之处于要求状态下的方法。该方法包括控制引擎对子集编程(220),而其中特征信息指出了存储单元阵列中一个代表性存储单元的编程特征(225)。于是该控制引擎可利用特征信息直接对存储单元编程,使之处于近乎要求的状态(230),而不必再做编程校验操作。
文档编号G11C11/56GK1209214SQ96199996
公开日1999年2月24日 申请日期1996年12月10日 优先权日1995年12月14日
发明者A·法兹奥, G·E·阿特乌德, J·O·米, P·鲁拜 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1