作者 绿芯半导体 风清扬 转载请注明: [http://www.ssdfans.com] 谢谢
基础概述
在分析NAND error机制前,先普及下基本知识。闪存的内部存储结构是金属-氧化层-半导体-场效应管(MOSFET):源极,漏极和栅极,其工作原理与场效应管类似,都是利用电压控制源极和漏极之间的通断,不同的是场效应管是单栅极结构,而闪存是双栅极结构,在栅极和硅衬底之间还有一个浮置栅极,浮置栅极是由氮化物夹在二氧化硅材料之间构成,具体见图一。写操作是在控制极加正电压,使电子通过绝缘层进入浮栅极。擦除操作正好相反,是在衬底加正电压,把电子从浮栅极中吸出来。读取数据的时候给控制栅加读取电压,对于浮置栅中有电荷的单元来讲,浮置栅中的电荷可以抵消提供给控制栅的电压,造成阈值电压升高。与浮置栅中没有电荷时的情况相比,如果不给控制栅提供更高电压,则漏极-源极之间不会处于导通的状态。因此,通过向控制栅加读取电压,判断漏极-源极之间是否处于导通状态,可以判断浮置栅有没有存储电荷,进而判断该存储单元是”1″还是”0″。因为写操作无法将电子吸出,所以重新写入前必须erase。NAND的写是以page为单位,而擦除则以block为单位。理论上也是可以设计成为按字节擦除, 但是NAND容量一般很大, 按字节擦除效率低,速度慢, 所以就设计为按Block 或者整个芯片擦除了。擦写示意见图二:
图一 闪存结构示意
图二 program和erase示意
其次,以MLC为例,一个cell存储2bits信息,分别有11,10,01,00四个状态,11为erase状态,随着program往浮栅极注入的电子增加,cell可分别进入其他三个状态。但三个状态的分布不同厂家的NAND情况不一定相同,例如intel的依次为11->10->01->00,而美光的则依次为11->01->00->10,见以下两图:
图三 Intel MLC program 电压分布图
图四 Micron MLC program电压分布图
本文统一用Intel的电压分布图做分析。
认识NAND error
造成NAND error的因素:
- 电荷泄露:如果长期不使用,会发生电荷泄漏,导致电压分布往左移,例如00漂移到01,10漂移到11。
- 读干扰(Read Disturb):读取NAND的某个Page时,Block当中未被选取的Page控制极都会加一个正电压,以保证未被选中的MOS管是导通的。这样频繁的在一个MOS管控制极加正电压,就可能导致电子被吸进浮栅极,形成轻微的Program,导致分布电压右移。注意read disturb只影响同一block中的其他page。参看图五:
图五 read disturb
- 写干扰(Program Disturb ):erase之后所有bit都为1,写1不需要program,写0才需要 program。如图六所示,绿色的Cell是写0,它们需要Program,红色的cell写1,并不需要Program。我们把绿色的Cell称为Programmed Cells,红色的Cell称为Stressed Cells。写某个Page的时候,会在其 WordLine的控制极加一个正电压(下图是20V),对于Programmed Cells所在的String,它是接地的,对于不需要Program Cell所在的String,则接一正电压(下图为10V)。这样最终产生的后果是,Stressed Cell也会被轻微Program。与Read Disturb不同的是,Program Disturb 不但影响同一个Block当中的其它Page,自身Page也受影响。相同的是,都是不期望的轻微 Program导致比特翻转,都非永久性损伤,经擦除后,Block还能再次使用。
图六 write disturb
NAND error type:
- erase error:erase操作未能将cell复位到erase状态时,称为erase error。可能是制造问题,或者多次P/E引起的栅极氧化层缺陷所致。
- program interference error:由program disturb所导致的错误,会使电压分布图往右移
- retention error:由电荷泄露引发的错误,会使电压分布图往左移
- read error:由read disturb所导致的错误,会使电压分布图往右移
不同error type分析:
图七为不同error type所对应的bit错误率,x轴为P/E次数,y轴为数据误码率。数据误码率的收集,是从flash生命周期的开始,直到其参考生命周期的100倍截止。假如NAND能支持3000次P/E,则数据一直统计到300000次P/E。
图七 bit误码率
首先,所有error type都跟P/E次数密切相关。一开始错误率很低,随着P/E次数增加,错误率明显上升。
其次,不同error type之间的bit错误率相差非常之大。长期的retention error在各种错误中占主导地位,对应的错误率最高;program interference error次之,其次为read error,erase error比率最低
再次,retention error误码率跟retention测试时间关系密切。retention时间越长,flash的浮栅极泄露的电子会越多,因而误码率越高。
正因为retention error占主导地位,所以研究NAND error机制主要是为了减少retention error。
减少retention error:Flash Correct-and-Refresh
有一系列措施可用于减少retention error,从而显著延长NAND flash的使用寿命,并且所需额外开销并不很大,这一系列措施统称为Flash Correct-and-Refresh(FCR)。FCR的基本思路就是在bit error累加到超出ECC纠错能力之前,周期性的读取数据,纠错之后再重新写入。这里需要考虑两点:1.怎样更新flash memory中的数据;2.何时更新数据。第一个问题有两种思路:remapping和reprogramming in-place。第二个问题也有两种思路:简单的周期性更新以及根据P/E次数来调整更新周期。
remapping FCR
这种方式的思路是周期的读取NAND中的数据,纠错之后,再写回到另一个block中,以防止累积过多的错误。其过程如下图所示:
图八 remapping FCR流程
很明显,其缺点在于增加了额外的erase操作。因为某个block中的数据被纠错并写入新的block之后,它就会被标记成invalid而被garbage collection回收。
In_Place Reprogramming FCR
这种方式跟remapping FCR的差别在于将数据纠错之后写会原来的位置,从而避免额外的erase操作。之所以可以这样做,是源于retention 所产生的错误,经过纠正可以直接写回原位置,不需要在写入之前进行erase。因为retention只会导致分布电压左移,通过program操作让电压重新右移到正确位置即可修正,无需要进行erase使得cell电压全部回到初始的11状态。很明显,相对于remapping FCR,In_Place Reprogram FCR能更好的延长NAND的生命周期。通过选择合适的refresh间隔,可确保累积的error bit在ECC纠错范围之内。
但这种方式有可能引起新的错误,正如本文开头分析过,每次refresh都存在program disturb,所以会产生program error。由于program error会导致电压分布图右移,经ECC纠错之后reprogram是没法让电压左移回正确位置的,因而program error会慢慢累积。过程可参看下图:
图九 program error累积过程
Hybrid FCR
这种方式将in-place reprogram和remapping结合起来,每次读取数据之后先判断一下电压右移的错误率(可能包含program error和read error),如果右移错误率低于某个门限值,则采用in-place reprogram,否则采用remapping program,从而将retention 和program error全部纠正过来。这种方式既可以很大程度上避免额外的erase操作,又能避免program error过多累积。流程参看下图:
图十 Hybrid FCR流程
Adaptive-Rate FCR
以上所提到的FCR都是周期性的in-place reprogram或者remapping。实际上,由于retention error会随着P/E次数的增加而上升,所以可以根据P/E次数来调整操作周期,从而避免不必要的刷新操作。根据这一思路,在flash的整个生命周期内,refresh频率是逐渐加快的,一开始不刷新,到按年刷新,到按月刷新,按周刷新再到按天刷新,随着P/E次数的增加而加快刷新频率。值得注意的是,这种机制需要记录每个block的P/E次数,但这一信息在wear-leveling机制中已有所处理。
不同FCR机制对flash生命周期的影响如下图,所以Adaptive FCR最有利于延长flash的使用寿命。另外,采用更强的纠错算法,例如将BCH换成ECC,也能明显延长flash的寿命。
图十一 flash寿命统计