杜加友,王维建,樊凌雁,刘海銮
(1.杭州电子科技大学,浙江 杭州310018;2.杭州华澜微科技有限公司,浙江 杭州311215)
NAND Flash(闪存)[1]是最近十几年异军突起的非挥发性存储器件,在半导体领域起着至关重要的作用。如今我们息息相关民用级的产品,小到优盘、闪存卡、数码相机、手机、平板电脑等随身移动装置闪存式数码存储产品,大到固态硬盘等产品的最重要组成部分正是NAND Flash 闪存芯片。NAND Flash闪存芯片又分为单阶存储单元(Single-level cell,SLC),二阶存储单元(Multi-level cell,MLC)和三阶存储单元(Trinary-Level Cell,TLC)NAND 闪存。SLC是指一个存储单元存储1 bit的数据,MLC是指一个存储单元存储2 bit的数据,TLC是指一个存储单元存储3 bit的数据。SLC 具有速度快,功耗低,寿命长,出错率低等优势,而MLC 具有密度高,成本低等优势,TLC 密度高,但是寿命短,错误率高。在海量存储器中,MLC的应用非常广泛。相对于SLC,MLC 器件的速度慢,寿命短,存储数据出错率高,已有研究人员提出了损耗均衡[2-3]和强纠错能力的纠错器[4-5]来解决这些问题。本文针对MLC 器件的编程特点,提出了一种编程方法,可以提高MLC的速度,降低出错率。
NAND Flash的基本单元是浮栅MOS晶体管。浮栅MOS晶体管与普通MOS晶体管的区别是在控制栅和硅衬底之间多了一个浮栅[1],这个浮栅用来存储电荷。浮栅被外面的氧化硅绝缘层所包围,由于氧化硅绝缘层的绝缘性极佳,所以电荷一旦进去了就不容易泄露出来,可以保存数年之久。NAND flash 对浮栅的充放电是通过在控制栅和衬底之间施加电压,以使电子穿过氧化硅绝缘层进出浮栅,而穿过氧化硅的电子数量取决于氧化硅的厚度和所通电压的大小,这个技术被称为F-N 隧道效应。
对NAND Flash 进行编程,通过在栅极施加一定的电压,源极悬空,漏极和衬底接地,就可以使电子注入浮栅。对NAND Flash 擦除就是将源级和漏极浮空,栅极接地,在衬底接一个正电压,在电场的作用下,浮栅中的电荷就被释放出来。对NAND Flash 读操作,将源极和栅极接地,将漏极接到感应放大器上,当漏极和源极导通,此时检测漏极上的电压,并和读参考电压比较就可以知道存储单元里的电荷情况。
因为SLC 存储1 bit 信息,所以只要利用浮栅MOS晶体管的通断来表示即可,如图1所示。当浮栅被注入电荷后,由于浮栅中电荷的感应作用,在源极和漏极之间形成导电沟道,这时即使不在栅极上施加电压,晶体管也处于导通状态,读取的数据为‘0’。当浮栅中没有电荷时,只有当控制极上施加到阈值电压,源极和漏极才能导通,也就是说在没有给栅极施加到阈值电压时,晶体管是截止的,读取的数据为‘1’。
但是MLC的基本单元存储2个bit 信息,对应有‘11’,‘10’,‘01’,‘00’4种状态,如图2所示。这样就不能简单判断MOS 导通与否来确定浮栅中的电子数量,而必须通过精确控制浮栅晶体管的阈值电压,根据不同的编程状态精确控制进入浮栅的电子数量。由于MLC 有4种状态,所以需要有3个参考电压,相对于SLC,参考电压之间的间隔变小,需要精确控制,导致FLASH 编程和校验的时间增多,影响了FLASH的性能。
图1 SLC参考电压
图2 MLC参考电压
MLC 每个单元的2个bit 信息是分布在低比特页(Least Significant Bit Page,LSB page)和高比特页(Most Significant Bit Page,MSB page)两个关联的页中。这两个关联的页被称之为对偶页(Paired Page或Shared Page)。由于两个比特信息都在同一浮栅内,所以这两个页的状态会互相影响。假设LSB page 已经正确编程完,当对MSB page 编程时,如果此时异常掉电或是复位,不仅MSB Page的数据会损坏,已经编程过的LSB Page的数据也会损坏,这样会影响到MLC的数据完整性及可靠性。MLC 单元状态如表1所示。从表1中可以看出,假如MSB和LSB为‘10’(状态2),当对MSB page 写‘0’,这时就需要从状态2 经过状态3,最后达到状态4,如果到达状态3时异常掉电或是复位,那么LSB page的内容也改变了。
表1 MLC 单元状态
本文提出了将MLC 使用类SLC的编程方式,提高MLC的速度及可靠性。
如图2所示,当块擦除后,单元的状态为‘11’(即状态1)。当LSB Page 写‘0’,而MSB Page 保持在‘1’时,此时单元的状态为‘10’(即状态2)。同时,当LSB Page 保持在‘1’,而MSB Page 写‘0’时,那么单元的状态为‘01’(即状态3)。当LSB Page和MSB Page 都同时写‘0’,此时单元的状态为‘00’(即状态4)。
单元从状态1 到状态4,只能一级一级提高电压对浮栅充电而逐级递增上去,不能跳跃。因此如果在Paired Page中,只对LSB page 编程,状态只要从状态1 转换到状态2 即可,不需要到状态4,这样可以缩短编程的时间,提高性能。
对MSB page 编程,NAND Flash 要先把LSB page的数据读出,然后再对LSB page和MSB Page 同时编程,这种编程方式也导致MLC 性能的降低,而只对LSB page 编程,就可以排除这个干扰。同时,由于LSB Page 单元中只有1个bit 发生变化,且没有对MSB Page 编程,避免MSB Page 编程时对LSB Page数据的影响,这样就降低了LSB Page的出错率,以及提高了数据的可靠性。
本文使用MT29F64G08CBAA 进行验证分析[6]。MT29F64G08CBAA的Paired page 对应关系图3所示。Page 0(LSB Page)和Page 4(MSB Page)为Paired Page,这里同时选择Microm SLC FLASH MT29F32G08ABAAA[7]作为参考,三者的编程时间比较如表2所示。
图3 MT29F64G08CBAA的Paired page 对应关系图
表2 编程时间比较
从表2可以看出,对Page 0 编程时间仅为0.381 ms,和SLC的编程时间相差不多。而对Page 4的编程时间却长达1.85 ms。因此如果只对LSB page 编程,那么编程速度可以得到很大的提高。
在实际的FLASH控制器上使用ATTO Disk Benchmark 软件进行速度测试,未使用类SLC编程方式时,写速度为7.5 MB/s,而使用类SLC编程方式后,写速度达到12.3 MB/s,接近SLC 速度,如图4所示。
MLC 使用类SLC编程方式后,NAND Flash 在使用过程中的误码率(Bit Error Rate,BER)也比MLC编程方式要低。验证方式是:首先选择特定的几个block,然后将Block 擦除,再对Block 写特定数据,最后从Block 读取数据并进行校验,得出BER。
使用SLC编程、MLC编程和类SLC编程的BER 情况如图5所示。可以看出使用类SLC编程,BER要比MLC编程要低,接近于SLC编程的BER,这些误码全部被芯片内置的BCH 纠错算法实时纠正。
图4 实测速度对比
图5 实测误码率(BER) 统计情况
对MLC 使用类SLC编程方式的方法能够有效提高MLC的速度,减少误码的发生,同时能够减少MLC Paired page 在异常断电上的影响,提高了数据的完整性及可靠性。本方法已经在FLASH控制器中应用,使MLC NAND flash 达到SLC的性能及可靠性,并通过实验验证了本方法的效果。
[1]Osborne I S.Flash Memory[J].Science,2000,289(5 477):217.
[2]Lin M,Chen S.Efficient and intelligent garbage collection policy for NAND flash-based consumer electronics[J].IEEE Transaction on Consumer Electronics,2013,59(3):538-543.
[3]Xu G,Liu Y,Zhang X,et al.Garbage collection policy to improve durability for flash memory[J].IEEE Transactions on Consumer Electronics,2012,58(4):1 232-1 236.
[4]Parhi K K.Eliminating the fanout bottleneck in parallel long BCH encoders[J].IEEE Transactions on Circuits System I,2004,51(3):512-516.
[5]徐富新,刘应,刘雁群,等.模式可配置的NAND Flash 纠错系统设计与实现[J].中南大学学报,2013,44(5):1 918-1 925.
[6]Microm Corporations.L74A NAND Flash memory data sheet Rev.E3/11EN[R].Boise:Micron Corporations,2009.
[7]Micron Corporations.M73A NAND Flash memory data sheet Rev.B7/10EN[R].Boise:Micron Corporations,2010.