一种存储单元的编程方法与流程

文档序号:11954909阅读:291来源:国知局
一种存储单元的编程方法与流程

本发明实施例涉及存储技术领域,具体涉及一种存储单元的编程方法。



背景技术:

非易失闪存介质(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芯片制作工艺的问题,会有一些存储单元很难被编程,现有的解决方法是:为了保证编程的正确性,增加编程次数,但是却以牺牲编程速度为代价。

因此,有必要设计一种新的存储单元的编程方法,以提高编程速度。



技术实现要素:

本发明提供一种存储单元的编程方法,以提高编程速度。该方法包括:

根据编程指令对当前编程地址对应的存储单元进行编程操作;

对所述存储单元进行编程校验,检验所述存储单元的当前状态是否为已经编程成功,若是,则结束当前编程操作,否则增大编程电压的脉冲宽度,并返回执行所述对当前编程地址对应的存储单元进行的编程操作,直至编程成功。

进一步地,所述增大编程电压的脉冲宽度,包括:

所述编程电压的脉冲宽度依据如下公式进行增大:

Ti=T0+(N-1)*Δt

其中,Ti表示对所述存储单元进行第i次编程时对应的编程电压的脉冲宽度,T0表示编程电压的初始脉冲宽度,N表示对所述存储单元进行编程的次数,Δt表示脉冲宽度的增加量。

进一步地,在增大编程电压的脉冲宽度之前,还包括:

通过编程计数器对编程失败的次数进行累计;

判断所述编程计数器中的数值是否为设定的最大值,若是,则结束此次编程操作,否则执行增大编程电压的脉冲宽度的操作。

优选的,所述设定的最大值为小于或者等于64的正整数。

进一步地,所述方法还包括:

当检验所述存储单元的当前状态为已经编程成功时,判断所述当前编程地址是否为最后的编程地址,若是则退出编程操作,否则更改所述当前编程地址,继续对其他的存储单元进行编程操作,并进行编程校验,直至所有的存储单元完成编程操作。

示例性地,所述编程操作包括:

分别向所述存储单元的栅极和漏极施加编程电压。

示例性地,向所述存储单元的栅极施加的编程电压范围为7-10V,向所述存储单元的漏极施加的编程电压范围为3-5V。

示例性地,所述检验存储单元的当前状态是否为已经编程成功,具体为:

检测从存储单元的源极流向漏极的电流值是否小于预设电流值,若是,则所述存储单元的当前状态为已经编程成功。

本发明实施例提供的一种存储单元的编程方法,首先根据编程指令对当前编程地址对应的存储单元进行编程操作,然后对所述存储单元进行编程校验,检验所述存储单元的当前状态是否为已经编程成功,若是,则结束当前编程操作,否则增大编程电压的脉冲宽度,并返回执行所述对当前编程地址对应的存储单元进行的编程操作,直至编程成功。当一个存储单元经过第一次编程操作没有编程成功时,再对其进行编程时通过随着编程次数的增加不断增大编程电压的脉冲宽度,实现了对存储单元的快速编程,提高了编程速度。

附图说明

图1是Flash芯片中一种作为存储单元的金属氧化物半导体场效晶体管的结构图;

图2是本发明实施例一中的一种存储单元的编程方法流程图;

图3是本发明实施例二中的一种存储单元的编程方法流程图;

图4为本发明实施例三中的一种存储单元的编程方法流程图。

具体实施方式

下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。

实施例一

图2为本发明实施例一提供的一种存储单元的编程方法流程图,本实施例可适用于对一些很难被编程成功的存储单元进行编程操作。参加图2,本实施例提供的存储单元的编程方法具体包括如下步骤:

S110、根据编程指令对当前编程地址对应的存储单元进行编程操作。

通过编写程序代码可以控制flash存储器进行三大主要操作,分别是读操作、写操作和擦除操作,其中,写操作又被称作编程操作,即完成对存储单元的写0操作。

需要说明的是,对一个存储单元进行编程操作的原理是通过分别给存储单元的栅极以及漏极施加相应的编程电压,会有电流从漏极流向源极,电子从源极流向漏极的途中,会有一部分流向浮动栅极,当浮动栅极中的电子达到一定数量时,此存储单元就被编程成功,即此存储单元被成功写0,具体的存储单元的结构可以参见图1所示的结构示意图。

示例性地,所述编程操作具体可以是分别向所述存储单元的栅极和漏极施加编程电压。典型地,向所述存储单元的栅极施加的编程电压可以为7-10V中的任意数值,向所述存储单元的漏极施加的编程电压可以为3-5V中的任意数值。本领域技术人员都知道,施加到存储单元的栅极上的电压范围7-10V以及施加到存储单元的漏极上的电压范围3-5V都是是优选的典型数值范围,并不对其进行限定。

S120、对所述存储单元进行编程校验,检验所述存储单元的当前状态是否为已经编程成功,若是,则执行步骤S130结束当前编程操作,否则执行步骤S140、增大编程电压的脉冲宽度,并返回执行所述对当前编程地址对应的存储单元进行的编程操作,直至编程成功。

对所述存储单元进行编程校验的实质是对所述存储单元进行一次读操作,更具体地可以理解为检验读出的数值是否为0,如果为0则说明所述存储单元已经编程成功,否则失败,需要再次进行编程操作。当遇到某存储单元编程失败的时候,传统的编程方法是通过增加编程次数来保证该存储单元编程成功,但是却牺牲了编程速度,本实施例的技术方案针对此种情况的做法是,当某存储单元第一次编程失败时,即编程校验不通过,再对该存储单元进行第二次编程操作时增大编程电压的脉冲宽度,当经过第二次编程操作后,进行编程校验时,所述存储单元还是编程校验不通过,则继续增大编程电压的脉冲宽度,即使所述编程电压的脉冲宽度随着编程次数的增加而不断增加,典型地,每次增加的脉冲宽度可以是0.5μs。当所述编程电压的脉冲宽度增加后,从漏极流向源极的电流的持续时间会增加,相应地,会有更多的时间让电子从源极流向漏极的途中流向浮动栅极,浮动栅极中的电子会更快地达到设定数量,进而所述存储单元会更快地编程成功,提高编程速度。

示例性地,所述检验存储单元的当前状态是否为已经编程成功,即编程校验,具体可以为:检测从存储单元的源极流向漏极的电流值是否小于预设电流值,若是,则所述存储单元的当前状态为已经编程成功,此时认为存储单元的浮动栅极上已经有充足的电子,此时存储单元的状态为0。优选的,所述预设电流值可以为20μA或者30μA,当然还可以是其他数值,需要根据各flash芯片的制作工艺的不同而变化。

S130、结束当前编程操作。

S140、增大编程电压的脉冲宽度,返回执行步骤S110,利用增加脉冲宽度后的编程电压对当前编程地址对应的存储单元继续进行编程操作直到所述存储单元编程成功。

本发明实施例提供的一种存储单元的编程方法,首先根据编程指令对当前编程地址对应的存储单元进行编程操作,然后对所述存储单元进行编程校验,检验所述存储单元的当前状态是否为已经编程成功,若是,则结束当前编程操作,否则增大编程电压的脉冲宽度,并返回执行所述对当前编程地址对应的存储单元进行的编程操作,直至编程成功。当一个存储单元经过第一次编程操作没有编程成功时,再对其进行编程时通过随着编程次数的增加不断增大编程电压的脉冲宽度,实现了对存储单元的快速编程,提高了编程速度。

实施例二

图3为本发明实施例二提供的一种存储单元的编程方法流程图,本实施例在实施例一的基础上进行进一步优化,在增大编程电压的脉冲宽度之前,增加了:通过编程计数器对编程失败的次数进行累计的操作,这样优化的好处是,避免了对一些存储单元进行无限制地编程操作,使整个程序陷入死循环。参见图3,本实施例提供的存储单元的编程方法具体包括如下步骤:

S210、根据编程指令对当前编程地址对应的存储单元进行编程操作。

S220、对所述存储单元进行编程校验,检验所述存储单元的当前状态是否为已经编程成功。

S230、若是,则结束当前编程操作。

S240、否则,通过编程计数器对编程失败的次数进行累计。

上述操作主要是针对当一个存储单元经过多次编程操作仍然没有通过编程校验的情况,为了防止程序进入“编程-编程校验-编程”的死循环中,设置编程计数器对编程失败的次数进行累计,具体是指对同一个存储单元编程失败的次数进行计数,当该存储单元编程成功后,所述计数器清零。

S250、判断所述编程计数器中的数值是否为设定的最大值,若是,则返回步骤S230结束此次编程操作。

为每个存储单元设定一个允许编程的最大次数,当对某存储单元的编程次数达到所述最大值时,所述存储单元还是编程失败,此时则强制退出编程操作,不再对该存储单元进行编程。典型地,所述设定的最大值为小于或者等于64的正整数。当然,本领域的技术人员都知道,所述设定值并不限于某一个或者某一些固定数值,需要根据实际操作情况以及flash芯片的制作工艺选定合适的数值。

S260、否则增大编程电压的脉冲宽度,并返回执行步骤S210,直至编程成功。

示例性地,所述增大编程电压的脉冲宽度,具体可以包括:

所述编程电压的脉冲宽度依据如下公式进行增大:

Ti=T0+(N-1)*Δt

其中,Ti表示对所述存储单元进行第i次编程时对应的编程电压的脉冲宽度,T0表示编程电压的初始脉冲宽度,N表示对所述存储单元进行编程的次数,Δt表示脉冲宽度的增加量。

本发明实施例提供的一种存储单元的编程方法,在增大编程电压的脉冲宽度之前,通过编程计数器对编程失败的次数进行累计,并判断所述编程计数器中的数值是否为设定的最大值,若是,则结束此次编程操作,否则执行增大编程电压的脉冲宽度的操作,继续对所述存储单元进行编程操作,直到编程成功。当一个存储单元经过多次编程操作仍然没有通过编程校验时,通过设置编程计数器,实现了防止程序进入“编程-编程校验-编程”的死循环。

实施例三

图4为本发明实施例三提供的一种存储单元的编程方法流程图,本实施例在上述各实施例的基础上进行进一步优化,增加了判断所述当前编程地址是否为最后的编程地址的操作,这样优化的好处是,可以快速地完成对整个编程区域的编程操作。参见图4,本实施例提供的存储单元的编程方法具体包括如下步骤:

S310、根据编程指令对当前编程地址对应的存储单元进行编程操作。

S320、对所述存储单元进行编程校验,检验所述存储单元的当前状态是否为已经编程成功,若是则执行步骤S330,否则执行步骤S360。

S330、判断所述当前编程地址是否为最后的编程地址,若是,则执行步骤S340,否则执行步骤S350。

S340、退出编程操作,

S350、更改所述当前编程地址,并返回执行步骤S310,继续对新的存储单元进行编程操作时。

S360、增大编程电压的脉冲宽度,并返回执行步骤S310,直至编程成功。

本发明实施例提供的一种存储单元的编程方法,在上述各实施例的基础上,当检验所述存储单元的当前状态为已经编程成功时,判断所述当前编程地址是否为最后的编程地址,若是则退出编程操作,否则更改所述当前编程地址,继续对其他的存储单元进行编程操作,并进行编程校验,直至所有的存储单元完成编程操作。实现了可以快速地完成对整个编程区域的编程操作。

注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1