闪存的读取中的数据随机化及其他
上一篇介绍到为了保持闪存的源极电压为0、或者保证源极电压在写入和读取时不变,NOR和NAND都会有一些设计或者操作上的变化来解决这一问题。在NAND闪存上,另一个比较特殊的需求就是NAND中写入的数据需要做随机化处理。这一定程度上也和NAND存储单元源极电压的归一性相关。
如图所示,假设有4个NAND串,最下方三行的编程、擦除状态如下:
在用户读取最上方一行的存储单元时,这些存储单元的源极电压状态会各不相同,其中第一个串的源极电压与第二个串的源极电压之间的差异最大,这和它们下面的存储单元的编程状态相关。在遥远的SLC时代,这一差异尚不足以对数据读取造成偏差,所以几乎没有闪存供应商要求用户数据做随机化。但随着MLC的到来,这一需求就变得十分强烈 -- 哪怕少许的源极电压归一化,都会对MLC的性能、可靠性带来巨大的帮助。因此几乎所有的NAND闪存厂商都开始要求用户在存储单元里均匀地写入不同编程态的数据。这样做的好处是,任何一个被读的闪存单元,决定其源极电压的其他单元所提供的影响是相同的 (其实对漏端的影响也是如此)。 以MLC为例,由于有E/P1/P2/P3四个状态,因此NAND闪存厂商希望写进MLC的数据,这4个状态能够各占25%。另外不仅仅占比相同,且位置分布也是均匀的。NAND闪存的块可以看成是一个二维平面,X轴是页(page)方向,Y轴是串(String)方向。在这个二维平面上,各个状态的存储单元均匀地分布着,且各占25%。TLC也是如此,它和MLC的差异就是在这个平面上有8个不同的编程状态均匀地分布着,且各占12.5%。 NAND闪存的使用,离不开控制器的支持。当最初几代需要做数据随机化处理的NAND闪存面市时,市面上的闪存控制器、尤其是已经大规模量产的闪存控制器还没有能力支持这种随机化需求。因此,这几代NAND闪存,都自带了内置的Randomizor。这些Randomizor的作用是将控制器写入闪存的数据先做随机化处理 -- 实际就是和一些Random Key做异或 -- 再写入存储单元。 这些Random Key本身是随机的,因此哪怕用户数据不够随机,和Random Key异或之后也能得到一个随机的结果。 在读出时,闪存需要将存储单元里的数据和这些Random Key再做一次异或,就能得到原始数据。 但闪存内置的Randomizor也造成了不少坏处,比如: 1) 闪存的读写延迟变长了。尤其对读来说,几个微秒的Randomization延迟,对性能伤害颇大。 2) 控制器如果不知道闪存内部的Random Key的具体数值,就不会知道写入闪存的数据究竟应该落在哪个Vt分布上。这对使用BCH编码做误码纠错的NAND闪存而言,还可以忍受。但对LDPC,或其他依赖闪存Vt做DSP的控制器来说,则不能接受。 因此在最初几代NAND闪存内置Randomizor之后,所有的NAND都要求控制器具有Randomization的能力 -- 控制器对用户数据先做随机化处理,再做LDPC编码,之后写入NAND闪存。 读取就是将这个过程反过来,不多赘述。 当然因为Random Key和闪存的物理结构相关,因此每家NAND闪存供应商还是会提供一组合适的Random Key,给到与他们合作的控制器厂商。控制器厂商所需要做的事情就是让他们的控制器设计得足够灵活,以匹配不同NAND原厂的不同代际的产品。 闪存数据随机化还有其他很多好处,等将来有机会在再作讨论。 说了很多闪存源极电压在读取时如何保持稳定。由于闪存单元是一个四端器件,因此另外三端:漏极、栅极和衬底,在读的时候一样要保持稳定。 用NOR闪存的栅极作一个例子:它的稳定不在于栅极电压本身的稳定度,而在于栅极电压多快能够达到稳定的状态。NOR闪存的栅极(Word Line,字线)一般是多晶硅,其电阻率比3D NAND闪存的金属字线要大很多。且由于NOR闪存的读取延时(tR)很短,一般在100纳秒以内,因此要求NOR闪存的栅极电压能够在小几十纳秒之内就能达到稳定的状态。这对于SLC的NOR闪存而言问题不大。但对于MLC NOR闪存则相对困难。和NAND闪存不同,NAND闪存一个存储单元里面的不同bit隶属于不同的页(参见“闪存阈值电压(Vt)的编码与用户数据的对应”),但NOR闪存因其编程是热电子效应,每个存储单元的编程功耗太大,所以为了一次存储更多数据,MLC NOR闪存的存储单元里的两个存储单元隶属于同一个页。 因此MLC NAND的数据最多需要通过两次Vt比较得出(参见“闪存阈值电压(Vt)的编码”),而MLC NOR的数据则每回读出都要比较三次Vt。所以MLC NOR对栅极电压爬升速度的要求非常高。曾经有一些NOR闪存利用额外的金属层,在金属层和栅极字线之间打孔连接,以降低多晶硅栅极的RC值,达到提升tR性能的目的。