本发明实施例涉及存储技术领域,具体涉及一种存储单元的编程方法。
背景技术:
非易失闪存介质(nor Flash/nand Flash)是一种很常见的存储芯片,兼有随机存储器(Random Access Memory,RAM)和只读存储器(Read-Only Memory,ROM)的优点,数据掉电不会丢失,是一种可在系统进行电擦写的存储器,同时它的高集成度和低成本使它成为市场主流。Flash芯片是由内部成千上万个存储单元组成的,每个储存单元存储一位数据,多个存储单元构成页,多个页组成块,正是由于该特殊的物理结构,在nor Flash/nand Flash中是以页为单位进行读/写(编程操作)数据,以块为单位进行擦除数据的。
在Flash芯片中,一个存储单元可看作为一个金属氧化物半导体场效晶体管(Metal-Oxide-Semiconductor Field-Effect Transistor,MOSFET)。图1是一种常见的MOSFET结构图,包括栅极20、源极21、漏极22、P型阱23、N型阱25、P型硅半导体衬底26以及隧穿氧化层24,其相互间的连接为:P型硅半导体衬底26扩散出两个N型区,P型阱23上方覆盖一层隧穿氧化层24,最后在N型区上方通过腐蚀的方法做成两个孔,通过金属化的方法分别在绝缘层上及两个孔内做成三个电极:栅极20、源极21和漏极22,源极21和漏极22分别对应两个N型区且栅极20为存储单元的字线,漏极22为存储单元的位线。进一步的,栅极20又包括控制栅极201、多晶硅层间电介质202(Inter-Poly Dielectric,IPD)、浮动栅极203,且浮动栅极203可以存储电荷。当对一个存储单元进行编程操作时,分别给栅极20、源极21以及漏极22施加相应的编程电压,此时,会有电流从漏极22流向源极21,电子从源极21流向漏极22的途中,会有一部分流向浮动栅极203,当浮动栅极203中的电子达到一定数量时,此存储单元就被编程成功,即此存储单元被成功写0。现有的存储单元的编程方法是:为了保证编程的速度,通常每次编程操作都施加一个较大的编程电压。但是,由于Flash芯片制作工艺的问题,会有一些存储单元的电子比较活跃,编程速度很快,通常施加一次编程电压后,存储单元的阈值电压就会达到预设范围内的最低值,所述存储单元编程成功,但是由于这些存储单元的电子比较活跃,它们的数据保持力相对较弱,经过长时间的放置,这些存储单元的阈值电压会继续降低,导致对这些存储单元进行读操作时发生读数据错误。
因此,有必要设计一种新的存储单元的编程方法,以提高存储单元的数据保持力。
技术实现要素:
本发明提供一种存储单元的编程方法,以提高编程速度。该方法包括:
采用初始编程电压对当前地址对应的当前存储单元进行编程;
对当前存储单元进行编程校验,检验所述当前存储单元的当前状态是否为已经编程成功,若是,则结束当前存储单元的编程操作;
否则,将基于当前编程电压阶梯式递增的新编程电压作为当前编程电压,对所述当前存储单元施加当前编程电压,并返回执行所述对当前存储单元进行的编程校验操作。
进一步地,每个存储单元对应采用的阶梯式编程电压的阶梯数量、每个阶梯对应的电压值以及每个阶梯对应的电压值持续的时间相同或不同。
进一步地,在对所述当前存储单元施加当前编程电压之前,还包括:
通过编程计数器对当前存储单元编程失败的次数进行累计;
判断所述编程计数器中的数值是否为设定的最大值,若是,则结束当前存储单元的编程操作,否则执行对所述当前存储单元施加当前编程电压的操作。
优选的,所述设定的最大值为小于或者等于200的正整数。
进一步地,所述方法还包括:
当检验所述当前存储单元的当前状态为已经编程成功时,判断所述当前地址是否为最后的编程地址,若是则退出操作,否则更改所述当前地址,继续对其他的存储单元进行所述编程校验操作,直至所有的存储单元完成编程操作。
示例性地,所述检验当前存储单元的当前状态是否为已经编程成功,具体为:
检测从当前存储单元的源极流向漏极的电流值是否小于预设电流值,若是,则所述当前存储单元的当前状态为已经编程成功。
本发明实施例提供的一种存储单元的编程方法,首先采用初始编程电压对当前地址对应的当前存储单元进行编程,然后对当前存储单元进行编程校验,检验所述当前存储单元的当前状态是否为已经编程成功,若是,则结束当前存储单元的编程操作;否则,将基于当前编程电压阶梯式递增的新编程电压作为当前编程电压,对所述当前存储单元施加当前编程电压,并返回执行所述对当前存储单元进行的编程校验操作。通过采用阶梯式递增的编程电压,提高了电子比较活跃的存储单元的数据保持力。
附图说明
图1是Flash芯片中一种作为存储单元的金属氧化物半导体场效晶体管的结构图;
图2是本发明实施例一中的一种存储单元的编程方法流程图;
图3是本发明实施例一中的阶梯式编程电压的示意图;
图4是本发明实施例二中的一种存储单元的编程方法流程图;
图5为本发明实施例三中的一种存储单元的编程方法流程图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
实施例一
图2为本发明实施例一提供的一种存储单元的编程方法流程图,本实施例可适用于对一些电子比较活跃的存储单元进行编程操作。参加图2,本实施例提供的存储单元的编程方法具体包括如下步骤:
S110、采用初始编程电压对当前地址对应的当前存储单元进行编程。
初始编程电压通常选用最低的编程电压,因为有些存储单元的电子比较活跃,编程速度很快,通常施加一次编程电压后,存储单元的阈值电压就会达到预设范围内的最低值,所述存储单元编程成功,但是由于这些存储单元的电子比较活跃,它们的数据保持力相对较弱,经过长时间的放置,这些存储单元的阈值电压会继续降低,导致对这些存储单元进行读操作时发生读数据错误。最低的编程电压以及最高的编程电压可以根据不同的Flash存储器通过大量的试验获得,由于制作工艺的问题,每个存储单元所需要的最低的编程电压以及最高的编程电压可能不同。
通过编写程序代码可以控制Flash存储器进行三大主要操作,分别是读操作、写操作和擦除操作,其中,写操作又被称作编程操作,即完成对存储单元的写0操作。
需要说明的是,对一个存储单元进行编程操作的原理是通过分别给存储单元的栅极以及漏极施加相应的编程电压,会有电流从漏极流向源极,电子从源极流向漏极的途中,会有一部分流向浮动栅极,当浮动栅极中的电子达到一定数量时,此存储单元就被编程成功,即此存储单元被成功写0,具体的存储单元的结构可以参见图1所示的结构示意图。
S120、对当前存储单元进行编程校验,检验所述当前存储单元的当前状态是否为已经编程成功,若是,则执行步骤S130,否则执行步骤S140。
对存储单元进行编程校验的实质是对所述存储单元进行一次读操作,更具体地可以理解为检验读出的数值是否为0,如果为0则说明所述存储单元已经编程成功,否则失败,需要再次进行编程操作。
示例性地,所述检验存储单元的当前状态是否为已经编程成功,即编程校验,具体可以为:检测从存储单元的源极流向漏极的电流值是否小于预设电流值,若是,则所述存储单元的当前状态为已经编程成功,此时认为存储单元的浮动栅极上已经有充足的电子,此时存储单元的状态为0。优选的,所述预设电流值可以为20μA或者30μA,当然还可以是其他数值,需要根据各Flash芯片的制作工艺的不同而变化。
S130、结束当前存储单元的编程操作。
S140、基于当前编程电压阶梯式递增的新编程电压作为当前编程电压,对所述当前存储单元施加当前编程电压,并返回执行步骤120。
需要说明的是,每个存储单元对应采用的阶梯式编程电压的阶梯数量、每个阶梯对应的电压值以及每个阶梯对应的电压值持续的时间相同或不同。如果存储单元的电子比较活跃,则可以采用阶梯数量相对较多、每个阶梯对应的电压值相对较低以及每个阶梯对应的电压值持续的时间相对较少的阶梯式编程电压,以提高存储单元的数据保持力。具体的阶梯式编程电压的示意图可以参见图3所示,每次编程校验(即verify)之后如果存储单元没有编程成功则施加阶梯式编程电压。
本发明实施例提供的一种存储单元的编程方法,首先采用初始编程电压对当前地址对应的当前存储单元进行编程,然后对当前存储单元进行编程校验,检验所述当前存储单元的当前状态是否为已经编程成功,若是,则结束当前存储单元的编程操作;否则,将基于当前编程电压阶梯式递增的新编程电压作为当前编程电压,对所述当前存储单元施加当前编程电压,并返回执行所述对当前存储单元进行的编程校验操作。通过采用阶梯式递增的编程电压,提高了电子比较活跃的存储单元的数据保持力。
实施例二
图4为本发明实施例二提供的一种存储单元的编程方法流程图,本实施例在实施例一的基础上进行进一步优化,在对所述当前存储单元施加当前编程电压之前,增加了:通过编程计数器对当前存储单元编程失败的次数进行累计的操作,这样优化的好处是,避免了对一些存储单元进行无限制地编程操作,使整个程序陷入死循环。参见图4,本实施例提供的存储单元的编程方法具体包括如下步骤:
S210、采用初始编程电压对当前地址对应的当前存储单元进行编程。
S220、对当前存储单元进行编程校验,检验所述当前存储单元的当前状态是否为已经编程成功;若是,则执行步骤230,若否,则执行步骤240。
S230、结束当前存储单元的编程操作。
S240、通过编程计数器对当前存储单元编程失败的次数进行累计。
上述操作主要是针对当一个存储单元经过多次编程操作仍然没有通过编程校验的情况,为了防止程序进入“编程-编程校验-编程”的死循环中,设置编程计数器对编程失败的次数进行累计,具体是指对同一个存储单元编程失败的次数进行计数,当该存储单元编程成功后,所述计数器清零。
S250、判断所述编程计数器中的数值是否为设定的最大值,若是,则返回步骤S230,否则,执行步骤260。
为每个存储单元设定一个允许编程的最大次数,当对某存储单元的编程次数达到所述最大值时,所述存储单元还是编程失败,此时则强制退出编程操作,不再对该存储单元进行编程。典型地,所述设定的最大值为小于或者等于200的正整数。当然,本领域的技术人员都知道,所述设定值并不限于某一个或者某一些固定数值,需要根据实际操作情况以及Flash芯片的制作工艺选定合适的数值。
S260、将基于当前编程电压阶梯式递增的新编程电压作为当前编程电压,对所述当前存储单元施加当前编程电压,并返回执行步骤S220,直至编程成功。
本发明实施例提供的一种存储单元的编程方法,在对所述当前存储单元施加当前编程电压之前,通过编程计数器对当前存储单元编程失败的次数进行累计,并判断所述编程计数器中的数值是否为设定的最大值,若是,则结束当前存储单元的编程操作,否则执行对所述当前存储单元施加当前编程电压的操作,继续对所述存储单元进行编程操作,直到编程成功,实现了防止程序进入“编程-编程校验-编程”的死循环。
实施例三
图5为本发明实施例三提供的一种存储单元的编程方法流程图,本实施例在上述各实施例的基础上进行进一步优化,当检验所述当前存储单元的当前状态为已经编程成功时,增加了判断所述当前地址是否为最后的编程地址的操作,这样优化的好处是,可以快速地完成对整个编程区域的编程操作。参见图5,本实施例提供的存储单元的编程方法具体包括如下步骤:
S310、采用初始编程电压对当前地址对应的当前存储单元进行编程。
S320、对当前存储单元进行编程校验,检验所述当前存储单元的当前状态是否为已经编程成功,若是则执行步骤S330,否则执行步骤S360。
S330、判断所述当前地址是否为最后的编程地址,若是,则执行步骤S340,否则执行步骤S350。
S340、退出操作。
S350、更改所述当前地址,并返回执行步骤S310,继续对新的存储单元进行编程操作。
S360、将基于当前编程电压阶梯式递增的新编程电压作为当前编程电压,对所述当前存储单元施加当前编程电压,并返回执行步骤S320,直至编程成功。
本发明实施例提供的一种存储单元的编程方法,在上述各实施例的基础上,当检验所述当前存储单元的当前状态为已经编程成功时,判断所述当前地址是否为最后的编程地址,若是则退出操作,否则更改所述当前地址,继续对其他的存储单元进行编程操作,并进行编程校验,直至所有的存储单元完成编程操作。实现了可以快速地完成对整个编程区域的编程操作。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。