我们都知道写flash是严格按page的顺序programming的, 即page 0, page 1,page 2 ,page3, …。但是对于2D MLC/TLC以及现在的micron 3D,我们所谓的顺序page对应到物理的page其实并不是连续的。我们以2D MLC为例。
看到了吗? WL0 有4个page 分别为 page 0,page 1,page 4 和page 5。Page 0 和page 4 是shared page, page 0 是lower page, page 4 是upper page。
为何物理结构的page编号是这样的呢? 作怪的真凶是谁?
原因在于2D MLC/TLC以及Micron的3D都是FGF(Floating Gate Flash),那么它就有floating gate coupling这个缺陷。
我们先来回忆下SSDfans之前的一篇文章《浅谈CT》:
“FGF的浮栅极材料是导体。任何两个彼此绝缘且相隔很近的导体间都构成一个电容器。因此,任何两个存储单元的浮栅极就构成一个电容器,一个浮栅极里面电荷的变化,都会引起别的存储单元浮栅极电荷的变化。
一个浮栅极与其附近的浮栅极之间,都存在耦合电容,这个电容大小与彼此之间距离成反比:距离越短,电容越大,彼此影响越大(回想一下初中物理知识,平板电容器电容公式C=εS/4πkd,其中d就是平板之间距离)。因此,随着闪存制程(process)减小,存储单元之间影响越来越大。因此,Cell-to-Cell interface也是影响制程继续往前的一个因素。”
大家现在对coupling有了一定了解,我们回到正题,为什么page是那么编号的呢?如果不那么编号,会怎么样?
1)floating gate coupling between WL(Word Line)
比如word line i 两个page都program好,然后再program word line i+1, 我们这里假设最坏的情况,直接从erase state 跳到D3状态。如下图所示,word line i 的4个状态的电子都不同程度的往右移动。
等到我们要读这个cell的时候,Vth就可能判断的不对,要进行read retry之类的error handling。
那么如何减少coupling的影响呢?
a) 改变program的顺序
如果我们只先programming WL i 的lower page,等WL i+1 的lower page programming 完再来programming WL i 的upper page 会怎么样的?显然,在这样的情况下,WL i+1 对 WL i的影响只剩下 programming upper page,这样就减少了coupling的影响。再深入一下,那如何让upper page programming的影响相对小些呢?
b) Programming algorithm
programming algorithm有很多种,flash厂商自然会选择coupling影响较小的一种算法。我们对其中一种算法进行说明。
- programming lower page:如果写的是1 保持E状态,如果是0,跃迁至D2′
- programming upper page: 如果原来状态是E,写入的是1,保持不变,写入的是0,跃迁至D1,如果原来的状态是D2′,写入的是1,跃迁至D2,写入0,跃迁至D3
那当我们要programming upper page的时候,每个状态到自己的相对位置就比较近,这样coupling的影响就会相对较小
2) floating gate coupling between BL(Bit Line)
一个 word line 有4个page,两个even page(偶数页),两个 odd page(奇数页)。programming odd page的时候会影响到even page。
因此我们的programming 顺序也得做类似WL的修改。
TLC就更加复杂了,它要programming 3次,所以shared page间隔就更加远,这一切都是 floating gate coupling惹的祸!!!
再回头看看第一张图,现在应该明白为什么那么编号的原因了吧。
为什么要探究这个事情呢?FTL在处理save power cycle或者 program fail的时候我们都会用到shared page这个概念,MLC的shared page 即一个WL上的lower page 和 upper page。如果要保护好lower page的数据,一定要把相应的 shared page填满,否则容易出现ECC甚至UECC(Uncorrectable Error Correction Code )。
现在的3D 大多数都是CTF(charge trap flash),因此没有coupling issue,所以这也是为什么它可以one shot programming。