NAND闪存编程干扰错误研究

2018-08-02 02:49阳小珊朱立谷张猛张伟
关键词:存储单元比特编程

阳小珊,朱立谷,张猛,张伟

(1.中国传媒大学 理工学部计算机学院,北京 100024;2.中国电子科技集团公司第十五研究所 国家电子计算机质量监督检验中心,北京 100083;3.华中科技大学 武汉光电国家实验室,湖北武汉 430074;4.中国大唐集团科学技术研究院有限公司,北京 100040)

1 引言

随着闪存技术的快速发展和存储密度的提升,目前NAND闪存已被广泛用于各行业的高性能数据存储。NAND闪存以每单元存储的比特数分为多种类型:每单元存储1比特数据的单层单元(Single-Level Cell,SLC),每单元存储2比特数据的双层单元(Multi-Level Cell,MLC),每单元存储3比特数据的三层单元(Triple-Level Cell,TLC)。目前,NAND闪存的结构也由传统的平面结构发展为三维结构,存储密度进一步增加,但是在数据编程过程中由于相邻单元的耦合干扰而发生比特错误,导致数据存储的可靠性下降。

编程干扰错误是3D-TLC NAND闪存主要错误之一,设计有效的错误容忍和数据管理方案是解决编程干扰错误提高数据存储可靠性的有力手段。然而,设计有效的错误容忍和数据管理方案需要清楚地了解3D-TLC NAND 闪存编程干扰具体的错误模式。已有的工作[1][2][3]主要研究平面NAND闪存的错误模式,没有系统的研究三维NAND闪存的具体编程干扰错误模式,文献[4]也只是研究了三维MLC NAND闪存错误模式,没有具体探究三维TLC NAND 闪存的错误特征。

因此,本文以实际的FPGA测试平台为基础,对3D-TLC NAND闪存的编程干扰错误进行了测试,并对测试结果进行了分析,研究了编程干扰具体的出错模式,包括编程干扰错误状态相关性和编程干扰比特错误特性研究。这些编程干扰错误模式的研究结果能够为设计有效的错误容忍算法和制定高效的数据管理方案以解决编程干扰错误带来的数据存储可靠性问题提供有利的指导和帮助。

2 编程干扰错误的产生机理

在闪存芯片基本存储单元电子注入/移出过程中,场效应管被加入较高的偏置电压以获得让电子发生隧穿效应的强电场。这会影响基本存储单元中隧道氧化层的绝缘性,即基本存储单元遭受损耗。随着对一个基本存储单元数据的反复擦写,损耗逐渐累积,隧道氧化层的绝缘性逐渐变差,导致出现电荷捕获(charge trapping)现象,改变存储单元的阈值电压。而闪存在数据读取时就是依靠检测存储单元的阈值电压来分辨其中存储的数字信息[5]。因此,随着基本单元被擦写次数的增加,逐渐累积的损耗最终导致存储数据在读取时发生错误。这种数据错误被称为原生错误(raw error)。当闪存芯片的原生错误超过存储器对错误容忍的极限时,闪存芯片到达使用寿命。另外,当对一个基本存储单元进行擦写,即其阈值电压发生改变时,相邻存储单元的阈值电压会通过单元间寄生耦合电容,发生改变,导致在数据读取时出现原生错误[6]。

TLC NAND的每单元存储3比特数据,左比特被称为最高位(Most Significant Bit,MSB),中间比特被称为中间位(Central Significant Bit,CSB),右比特被称为最低位(Least Significant Bit,LSB)。闪存以页为单位进行比特数据编程,利用one-shot编程方法分别将MSB、CSB和LSB一次性写入三个不同的逻辑页,即MSB页、CSB页和LSB页,这三个页位于相同的字线。当对某一个字线上的三个页进行编程时,由于寄生电容的耦合效应,编程过程会对临近的字线上已经编程完的三个页造成干扰,使得临近字线上闪存页单元捕获额外电子引起阈值电压发生漂移,容易导致比特错误,如图1所示。

3 编程干扰错误现象分析

为了能发现编程干扰错误的现象,本文以实际的FPGA测试平台为基础对3D-TLC NAND闪存的编程干扰错误的出错模式进行了测试研究。通过对被测NAND闪存进行多次循环擦写,记录每次擦写各比特位的变化,来分析编程干扰错误的随擦写次数变化的情况。本次实验共进行了5000次的循环擦写,对测试结果从编程干扰错误状态相关性和编程干扰错误比特错误特性进行统计分析的结果如下内容。

3.1 状态相关性分析

首先对3D-TLC NAND闪存的编程干扰错误状态相关性进行了分析和研究,统计了不同编程干扰状态随着擦写循环次数变化的转化比例,结果如图2中的(a)(b)(c)(d)所示;实验结果显示,3D-TLC NAND闪存不同的单元状态会经历不同程度的编程干扰错误,编程干扰错误状态相关性与擦写循环次数有关,随着擦写循环次数的增加而发生波动。由编程干扰错误产生的原理可知,编程干扰主要引起3D-TLC NAND闪存单元的阈值电压窗口向右转移,由电荷数量少的阈值电压窗口向电荷数量多的阈值电压窗口漂移,而且阈值电压窗口转移容易发生在两个相邻的状态之间,跨越一个或多个状态比较困难。

图2(a)显示,状态001到状态000的转移比例高于状态000到状态010和状态001到状态000的转移比例,因为状态001具有相对较少的电荷数量,单元内部电场强度相对较弱,较容易捕获额外电子而转移到状态000,状态000状态100较为困难,因为单元要捕获足够多的电子才能跨越中间状态010和状态110转移到状态100,这种状态转移比例非常低,比例都在10%以下,而从状态000转移到状态010的比例也都在10%左右波动,随着擦写循环数量的增加,错误比例越来越低。在擦写循环数量的初期,状态001到状态000的比例相对较高,错误比例在30%左右,但是随着擦写数量的增加,错误比例下降。由于数据是从第一个块的第一个页开始写,到指定的数据块的最后一个页结束,然后才开始进行数据读取操作,中间会经历数据保存错误,保存错误引起状态000转移到状态001,因此,错误比例随着擦写循环数量的增加发生抖动,当擦写数量达到2000时,保存错误引起的状态转移比例达到80%,之后随着擦写数量的继续增加,错误比例呈下降趋势。

(a)

(b)

(c)

图2(b)显示了状态001转移到状态011、状态010转移到状态000和状态110以及状态001转移到状态000的错误比例随着擦写循环数量增加的变化情况。这四种错误状态转移比例随着擦写循环数量的增加呈现不稳定的趋势,在擦写循环数量小于1000时,四种状态转移比例相对较高,但是随着擦写数量的增加,错误比例波动性下降。对于状态010转移到状态110的比例,在擦写循环300次左右,错误比例能够达到90%,之后错误比例急剧下降,状态001转移到状态000的比例从最初的48%开始下降。状态010转移到状态110和状态001转移到状态000的比例大都高于状态001转移到状态011和状态010转移到状态000的比例。因为状态001转移到状态011和状态010转移到状态000是由于数据保存错误引起,而且由高状态发生电荷泄露而变成低状态,较为困难,高状态电荷数量较多,需要泄露足够多的电子才能转移到低状态,而这需要较长的保存周期。

图2(c)显示了状态011转移到状态111、状态100转移到状态101、状态100转移到状态110、状态101转移到状态100的错误比例随着擦写循环增加的变化情况。状态011转移到状态111、状态100转移到状态110以及状态101转移到状态100的错误比例随着擦写循环的变化呈现稳定的趋势,而且错误比例大都低于5%,这三种状态转换都是由于数据保存错误引起,由于保存时间较短,保存错误的比例低于编程干扰错误,编程干扰错误此时是主要错误。状态100转移到状态101是由于编程干扰错误造成,错误比例明显高于其他三种状态转化,且随着擦写数量的增加整体呈下降趋势。

图2(d)显示状态110到状态010、状态110到状态100、状态111到状态011和状态001的错误比例随擦写循环数量的变化趋势,状态110到状态010、状态110到状态100以及状态111到状态001的错误比例非常低,且稳定在5%附近,因为编程干扰引起阈值电压窗口跨越两个状态较为困难。编程干扰引起状态111转移到状态011的错误比例较高,且随着擦写循环数量的增加逐渐呈快速增长趋势,从前期的15%左右增加到75%,因为状态111是擦除状态,该状态具有较少的电子,内电场较弱,较容易从外界捕获额外电子而使其转移到状态011。

综上可见,3D-TLC NAND闪存的编程干扰错误使得存储单元状态转移比例具有不平衡的关系,相邻的存储单元状态较容易发生转移,跨越中间状态转移到其他状态需要捕获较多的额外电子较为困难。另外,编程干扰使得存储单元从低存储单元状态到高存储单元状态发生转移,具有较少电子的存储单元状态较为容易向具有较多电子数量的存储单元状态转移。

3.2 比特错误特性分析

本文也研究了3D-TLC NAND闪存编程干扰比特错误特性,统计了MSB页、CSB和LSB页中比特0翻转成比特1或比特1翻转成比特0的错误比例,以及对应的比特错误率分布,分别显示在图3和图4。

图3 MSB页、CSB页和LSB页的比特错误比例

图4 MSB页、CSB页和LSB页的比特错误率分布

图3给出了MSB页、CSB页和LSB页的比特错误比例随擦写循环数量变化情况。图中的0>>1 表示比特0翻转成比特1,相反地,1>>0 表示比特1翻转成比特0。MSB和CSB页中的1>>0的错误比例以及LSB页中的0>>1的错误比例明显高于MSB和CSB页中的0>>1以及LSB页中的1>>0的错误比例。MSB页中的0>>1的错误比例随着擦写循环的增加由最初的85%逐渐下降到5%,CSB页的0>>1和LSB页的1>>0的错误比例随擦写循环的增加呈现波动趋势。当擦写循环数量小于3000次时,LSB页的0>>1的错误比例相对较高,在90%附近波动,当擦写循环数量大于3000次时,LSB页的0>>1的错误比例开始下降,在擦写循环数量达到5000时,错误比例已经下降到70%。MSB页的1<<0的错误比例由最初的18%增加到95%,CSB页的1>>0的错误比例在80%左右波动。出现MSB页1>>0的错误是由图2中的110>>010,111>>011,111>>001引起,出现MSB页0>>1错误是由000>>100,010>>110,011>>111引起,出现CSB页1>>0错误是由011>>001,010>>000,110>>100,111>>001引起,出现CSB页0>>1错误是由000>>010,001>>011,100>>110引起,出现LSB页1>>0是由001>>000,101>>100引起,出现LSB页0>>1错误是由000>>001和100>>101引起。图2中111>>011的比例随着擦写数量的增加而增加造成MSB页的1>>0的错误比例逐渐增加且具有高的比例。图2中的100>>101具有高的比例导致LSB页中的0>>1的错误比较高。具有较多的状态转移引起CSB的1>>0错误。

图4给出了MSB页、CSB页和LSB页0>>1和1>>0的比特错误率随着擦写循环数量变化的分布情况。MSB页、CSB页和LSB页0>>1和1>>0的比特错误率分布不平衡,MSB页1>>0的比特错误率较高且随着擦写循环数量的增加呈近似指数增长趋势。当擦写循环数量达到5000次时,MSB页1>>0的比特错误率超过0.01,数据可靠性受到严重威胁。其他的比特错误率较低大都低于0.002,且随着擦写循环数量的增加呈现平稳增长的趋势。MSB页、CSB页和LSB页具有不平衡的0>>1和1>>0的比特错误比例和比特错误率分布,MSB页较易发生1>>0的错误,且错误率随着擦写循环数量增加而增加。

4 总结

为了设计基于NAND闪存的高效可靠的错误容忍和数据管理方案,本文对3D-TLC NAND闪存的编程干扰错误的状态相关性和比特错误特性进行了测试和分析,测试结果显示出来的特性有利于指导设计相应的高可靠数据存储解决方案,有利于在存储密度越来越高的闪存硬件基础上实现高可靠的存储系统和产品。

猜你喜欢
存储单元比特编程
一种28 nm工艺下抗单粒子翻转SRAM的12T存储单元设计
编程,是一种态度
元征X-431实测:奔驰发动机编程
一种新型密集堆垛式仓储系统设计
编程小能手
纺织机上诞生的编程
浮点类型有效位数计算与应用分析
数据在计算机内存中的存储形式及实验验证
比特币还能投资吗
比特币分裂