NAND闪存芯片是SSD的基本存储单元。NAND闪存芯片技术的发展及其结构的变化将推动整个闪存存储行业的快速发展。在设计闪存存储系统时,尤其是在设计NANDFlash控制器、SSD磁盘或卡时,需要对NANDFlash的 *** 作方法、接口命令和时序有深入的了解。虽然NAND闪存芯片非常小,封装在LGA或TSOP,但其内部结构仍然非常复杂。尤其是存储密度越来越大,NANDFlash中的抽象概念越来越多,比如闪存粒子、器件、管芯、平面、块、页等。颗粒是我们平时看到的基本芯片封装颗粒;每个粒子可以封装多个器件,每个器件可以看作一个独立的芯片,有独立的控制和数据信号线;每个器件可以由多个管芯组成,管芯之间有独立的 *** 作寄存器和状态指示信号,外部信号线共享;一个管芯可以分成多个平面,每个平面有一个独立的数据寄存器组,在一定情况下可以在多个平面上进行并发 *** 作;一个平面可以分成几个块;;每个块是一个独立的数据块擦除单元;一个块最后分成很多页,每一页都是读写 *** 作的基本单位。
以Magnum的Flash芯片为例,MT29F32G芯片由一个管芯组成,包括两个平面;;MT29F64G芯片由两个管芯组成,这两个管芯分别属于两个器件,每个管芯包括两个平面。MT29F32G和MT29F64G芯片的管芯的基本单元结构可以描述如下:
MT29F32G和MT29F64G芯片的地址信息可在下表中定义:
对于Magnum的MT29F128G芯片,因为增加了存储密度,所以整个芯片由两个器件组成,每个器件包括两个管芯,每个管芯包含两个平面。MT29F128G芯片内部基本存储单元器件的结构描述如下:
MT29F128G的地址信息在下表中定义:
了解了NANDFlash的内部结构后,我们需要从软件层面思考如何利用好NANDFlash的内部结构,从而提升整体IO性能。
平面单元有一个独立的数据寄存器。它能执行并发平面 *** 作来提高IO性能吗?以MT29F128G芯片为例,每个管芯可以分为两个物理平面。每个平面包含一个4314字节的数据寄存器、一个4314字节的数据缓存寄存器和一个由4K页面组成的块数组。因为两个平面的数据寄存器在物理上是独立的,所以这两个平面可以同时执行编程、读取和擦除 *** 作。这样可以提高NANDFlash的系统IO性能。两个平面同时读取数据的时序图如下:
从上面的时序图可以看出,两个平面之间的并发 *** 作并不是那么随机的。当需要同时从两个平面读取数据时,首先加载第一个平面的地址信息,然后加载第二个平面的地址信息,当两个地址信息都加载时,发出30H的end命令。然后整个芯片进入忙碌状态,R/B#信号变为低电平。当Die处于忙碌状态时,不能对其执行任何 *** 作。在此阶段,数据从NAND闪存介质加载到两个平面的寄存器中。在R/B#信号恢复后,可以读取两个平面中的数据。值得注意的是,第二个平面的数据读取需要06H-E0H命令的支持。从这个角度来看,由于两个平面只有独立的数据寄存器和共享的 *** 作寄存器,所以无法实现非常随机的数据并发。
两个平面的并发写 *** 作顺序如下图所示:
与并发读取 *** 作类似,两个平面之间的并发写入不是任意的,而且相同的 *** 作需要同时完成。两架飞机同时作战需要同时指挥。对于写 *** 作,需要首先加载两个平面的访问地址。第一地址周期的结束字符11H不会触发真正的编程 *** 作;第二地址周期的结束字符10H将真正触发编程 *** 作。一旦编程 *** 作开始,状态信号R/B#将被设置为低,并且状态信号将不会被恢复,直到编程 *** 作完成。
两个平面同时擦除 *** 作的顺序如下图所示:
和读写 *** 作原理一样,两个平面的并发擦除需要同时加载两个平面的地址信息,然后在后台并发执行擦除 *** 作。与串行 *** 作相比,这种并发 *** 作可以提高NANDFlash的整体性能。
因此,根据以上描述,尽管两个平面之间的数据寄存器是完全独立的,但是 *** 作寄存器是共享的,使得读、写和擦除 *** 作可以在两个平面上同时执行。然而,这种并发 *** 作的条件是两个平面必须同时执行相同的 *** 作。而不是两个可以独立且并发地任意执行不同 *** 作平面。这是两个平面并发运行的限制,但即便如此,如果软件层能够设计出一个好的算法,能够完全让多个平面并发执行,IO性能仍然可以得到很大的提升。
在NANDFlash芯片中,真正独立的并发单元是Die。以MT29F128G为例。一个器件内有两个芯片。在芯片内部,这两个管芯有独立的 *** 作寄存器和状态信号线,外部的控制和状态信号线是共享的。在这种情况下,芯片提供交错 *** 作模式,该模式可以完全同时读取、写入和擦除两个管芯。下图显示了两个芯片同时读取的时序图:
从上图可以看出,两个管芯内部有独立的R/B#信号线,外部状态信号线是内部状态信号的逻辑与结果。两个骰子的 *** 作可以是独立的,也可以是并发的,但是因为它们共享外部接口,所以在输出数据时需要序列化。
交叉存取的并发写入顺序如下图所示:
类似于并发读 *** 作,两个管芯可以完全独立地并行执行写 *** 作。
在设备级别,这种并发 *** 作更加随意。不同的设备有完全独立的外部接口,所以两台设备可以同时进行独立的 *** 作。
总结一下,NANDFlash芯片中的并发执行单元有三种,分别是器件、管芯和平面。其中平面独立于数据寄存器,因此,多个平面可以同时执行相同的 *** 作;管芯有独立的 *** 作寄存器,独立的内部状态信号线,共享外部接口,多个管芯可以独立并发 *** 作;设备有独立的控制和数据信号线,所以多个设备可以任意并发。利用好NANDFlash芯片内部的这些并发单元,可以提高Flash存储器的IO性能。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)