学习笔记《Inside NAND Flash Memories》--第二章

Chapter 2 Contents

2 Nand overview:from memory to systems

  2.1 Introduction

  2.2 NAND memory

    2.2.1 Array

    2.2.2 Basic operations

    2.2.3 Logic organization

    2.2.4 Pinout

  2.3 Command set

    2.3.1 Read operation

    2.3.2 Program operation

    2.3.3 Erase operation

    2.3.4 Synchronous operations

  2.4 NAND-based systems

    2.4.1 Memory controller

    2.4.2 Multi-die systems

    2.4.3 Die stacking

    2.4.4 3D memories and XLC storage

2.2.3节之前请参考:《Inside NAND Flash Memories》 (2) —— NAND 概述:从内存到系统 - 知乎 (zhihu.com)

2.2.4 引脚分配

  • CE#: 是Chip Enable信号。当设备处于待机状态时,此输入信号为“1”,否则始终为“0”。
  • R/B#: Ready/Busy信号。该输出信号用于指示目标状态。当低时,表示目标正在进行操作。
  • RE#: 它是Read Enable信号。该输入信号用于使能串行数据输出。
  • CLE: 命令锁存使能。主机使用此输入来指示总线周期用于输入命令。
  • ALE: 地址锁存使能。主机使用此输入来指示总线周期用于输入地址。
  • WE#: 是Write Enable。这个输入信号控制输入数据的锁存。数据、命令和地址锁存在
  • WP#:写保护。该输入信号用于禁用闪存阵列程序和擦除操作。
  • DQ<7:0>: 这些输入/输出信号代表数据总线。

2.3.1 读操作

Read function的作用是读取存储在指定地址的数据。为了实现此目标,NAND device必须识别何时发出读取操作和相关地址

在执行读算法所需时间后,NAND device输出data sequence。

基于device pin signals,NAND命令接口(Command InterfaceCI)能够理解host何时发出命令/地址,或何时应该执行数据输出。

--命令周期:CLE为高--

Fig.2.11显示了命令周期(command cycleCmd,如果CLE为高,则CI识别为Cmd cycle,此时,DQs上的8-bit value代表命令代码。

--地址周期:ALE为高--

Fig.2.12显示了地址周期(address cycles。一般来说,所有的Operations都需要相应的执行地址。地址长度取决于operation和NAND的capacity。如果ALE为高,CI识别为address cycle。同时,其他输入信号均为低电平,DQs值为地址。

Read operation使用的最后一个command phase是data out,如图Fig.2.13所示。Data out是通过toggle RE#信号来执行的:在每个周期,DQs上都有一个新的数据可用。

NAND使用这些基本cycles来解码和执行每一个operation。

--读数据顺序:RD->Col->Row->RDC->Data--

读操作的命令顺序如Fig.2.14所示:第一个cycle用于发出read commandRD,比如00h,随后提供读的地址。

  • 首先给出列地址(column addres),然后是行地址(row address。至于图中未出现的所有pins(ALE,CLE,RE#)要按上述方式相应驱动。
  • 代码RDCRead Command Confirm,读取命令确认,例如30h)用于确认读取命令。

最后,device忙起来(R/B#拉低,即Busy有效,这是主控发给device),开始读操作。NAND返回ready时(R/B#拉高,即Ready有效,这是device向主控反馈的data output cycles开始。

--CRC:解决随机读取的问题,通过修改列地址命令--

上述的read command将输出entire Flash page,而不管我们想要读取多少字节。在某些情况下,需要少量数据转移,或者希望能在一个page内随机读取数据。Command Change Read Column(命令更改读取列),也叫作Random Data Output(随机数据输出)能够更改我们正在读取的column address

  • Change Read Column 的sequence如Fig.2.15所示。在执行通常的read command之后,可以在data out期间更改column address。
  • 发出一个command cycleCRC”(Change Read Column,例如05h),紧跟其后是我们想要输出的位置的address。
  • 与通常的read command相比,CRC只需要更少的cycles,因为只需要column address。
  • 一个confirm command cycle CRCC”(Change Read Column Confirm,例如E0h)被启用用于data out。
  • 值得注意的是,不需要额外的busy time,因为数据已经存储在page buffers中。

一般来说,读操作的busy time约为25-30us。提高read throughput的一种方法是Read Cache Command(读缓存命令,When available)。使用这个命令,可以从Flash memory中download data,而page buffers正在从Flash array中读取另一个page。

--RCC可以自动顺序读取页,直到收到RCE--

Sequential Read Cache Command (顺序读缓存命令)的sequence如Fig.2.16所示。

  • 必须在Read Cache Command(读缓存命令)前下发出Read Command
  • 在device反馈ready信号后,command code RCRead Cache,例如31h)用于启动从matrix(矩阵)到page buffers的data downloads。
  • RB#拉低一段时间后,然后N Dout cycles用于output first pages
  • 由于没有输入其他地址,因此在NAND中自动读取下一个 sequential page(顺序页)
  • 当不需要再读取其他pages时,使用command RCE”(Read Cache End,译为读取缓存结束,例如3Fh)将最后一个page复制到page buffers中。

(Notes: 感觉2.16的配图时序跟上述文字不匹配?按照文字描述的sequence应该是:CMD

:RC->CMD:RDC->Ready->CMD:RC->R/B# low->Dout->CMD:RCE->Dout)

--RCC可以选择下一步要缓存的数据的地址--

Random Cache Read(随机缓存读取)的sequence如图Fig.2.16所示:使用此命令可以选择要缓存的页面的地址

Notes Sequential Read Cache Random Cache Read 与前文的Change Read Column区别在于前者没有confirm了,而Sequential Read Cache Random Cache Read的区别在于,后者有RD,但也是通过RC来改变接下来读写的地址的。)

--Multi-plane read实现多个planes上的数据读取--

在multi-plane device上,可以在多个planes上同时发出read command,Multi-plane Read的command sequence如Fig.2.18所示。

  • 在标准的Read Command cycleRD之后,在Plane0 上要读取的page的地址被发出。
  • 命令代码MR”(Multi-plane Read,译为“多plane读取”,例如32h)在下一个command cycle中使用,以便device准备好接收属于plane1的address。
  • 一旦给出了新的address和Read Command Confirm CodeRDC(读取命令确认码),device就会忙于同时在两个planes上执行读取算法。
  • 当device 反馈ready信号时,command cycle CCChoose Column,译为选择列,例如06h)用于选择我们想要输出的page的address。随后的便是一些address cycles。
  • Command code “CCC”(Choose Column Confirm,译为选择列确认,例如E0h)是一个command confirm,
  • 最后,Dout cycles用于output the read data。

Notes:这里我理解的multi-plane读取,只是一种跨plane访问,由plane0切换到plane1了,并不是多个plane一起访问,而且不同plane的地址应该是独立的,不会同时访问两个plane

 

引入Read Cache command和Multi-plane read都是为了提高性能,Read、Cache Read和Multi-plane Read的对比如图Fig.2.19所示。

Notes:图2.19没有很理解,我的猜测是Page Read就是标准的读:一个Read command后跟一个数据读取;Double-plane Read按理说也是一个read command后跟一个读取,这里怎么是连续读取了?而且发了两个Read CommandCache read:就是连续读取。)

上文继续对比这几种读操作,并且进行了量化:两次标准读的时间为T=2T_ALGO + 2 T_OUTmulti-plane一次读取两个planes的时间为T=T_ALGO + 2 T_OUT,很明显后者更快。而Cache read的时间也为T=T_ALGO + 2 T_OUT,与multi-plane的区别就是T_ALGOT_OUT的差异了,最终谁更快,视case而定。

2.3.2 Program operation(编程操作)

--编程操作:写入数据到device--

编程操作的目的是在指定地址写入数据序列。基本cycles是与read operation内容一样,如要包含Command cycle和Address cycle,唯一增加的cycle是“Din”cycle,如图Fig.2.21所示。

Data in是通过toggle(切换)WE#信号来完成的:在每一个cycle上,DQs上应有一个新的byte(字节)是available

--Program操作以PM始,PMC--

Program sequence如Fig.2.22所示。

  • 输入代码PM”(Program,例如80h)的command cycle后,
  • 输入想要写入的地址。
  • 一旦确认位置,N个“Din”cycles被用来将data输入到pagebuffers中。
  • 最后,发出PMC”(Program Confirm命令来启动算法。

--不想往一个区域连续读写?使用change write column 指令--

正如前述的read operation,在program 中,也会出现传输少量的数据。于是,Change Write Column就出现了,用来更改想要load data的column address。

--Program也有Cache操作--

Program busy time会持续较长时间:150-200μs,因此可以使用Program cache command 或者 double-plane program提高write throughput,Cache Program和Double Plane Program的sequence如Fig.2.23所示。

  • 第一个cycles(“PM”cycle,address cycles和“Din”cycles)为标准的Program
  • 不同的是,“C/M”:command cycle替换了“PMC”,“C/M”可以是Cache Program Code(例如15h),也可以是Double Plane Command(例如11h)
  • 一旦给出另一个PM command,随后便是新的address和“PMC” command
  • 然后,device就会busy起来,program算法同时在两个pages执行Notes:也就是说device是在PMC之后才在两个地址分别一起写入数据的,期间不进行写入)
  • 值得注意的是,上述的Double plane program通常被称为Concurrent double-plane Program,因为program 算法同时在两个planes上执行NotesDouble plane program跟“MR”即Multi-plane Read不同,后者是跨plane访问,但不是同时的,而前者是同时进行。)

Overlapped Double-Plane Program也是available,几种Program对比如Fig.2.24所示。

NotesProgram = 0Erase = 1

2.3.3 Erase operation(擦除操作)

Erase operation用于删除Flash array中的data,正如2.2.3节所述,NAND memory的最小可擦除单元是Block,Erase Command sequence如Fig.2.25所示。

Erase command非常简单:

  • 发出“ER”code(Erase Command,例如60h)后,
  • 随后是block address和“ERC”(Erase Command Confirm,例如D0h)code,
  • 之后,device就执行该算法了。

Notes:从上图可以看出,擦除时只需给出了Row地址,因此最小可擦除单元是block

由于擦除是最长的操作(约1ms,因此引入了Double-Plane Erase (双plane擦除)command 来同时擦除两个blocks,Double-Plane Erase的command sequence如Fig.2.26所示。

标准的erase cycles(有“ER”command和Row address cycles)之后是MER(Multi-plane erase,例如D1h)。一旦给出了plane1的addresses和“ERC”code,device就会busy起来,同时擦除两个blocksNotes:只给出了一个plane的地址,因此还是在同一个plane内进行擦除的。)

2.3.4 Synchronous operations(同步操作)

NAND的read throughputarray access timedata transfer across the DQ bus来决定。

异步接口(asynchronous interface限制了数据传输速率为40Mb/sWhy 40M?

As technology shrinks, page size increase and data transfer takes longer; as a consequence, NAND read throughout decreases, totally unbalancing the ratio between array access time and data transfer on the DQs. DDR interface (Chap. 7) has been introduced to balance this ratio.

--异步接口限制了数据传输速率,因此引入了另外两种接口--

目前市场有两种解决方案:

  1. 源同步接口(Source Synchronous InterfaceSSI,由ONFIOpen Nand Flash Interface)组织推动,目的是标准化NAND接口
  2. 另一些Vendors采用Toggle-Mode interface

--源同步接口来自于ONFI,有三个引脚发生了变化--

SSI接口与ASI(Asynchronous Interface)相比,有三个主要区别:

  1. RE#变成了W/R#, 即Write/Read方向引脚;
  2. WE#变成了CLK,即时钟信号;
  3. DQS为新增的Data Strobe引脚,即指示数据有效的window;

因此,时钟用于指示命令(command)和地址(address)应该锁存的位置,而data strobeDQS)用于指示数据(data)应该锁存的位置。DQS是双向总线,驱动频率与clock相同。

显然,前几节描述的基本命令周期必须根据新的接口进行修改。

Fig.2.28显示了一个cmd sequence,后面是Dout cycles for SSI.

-

--Toggle-Mode DDR 接口--

Toggle-Mode DDR interface引脚使用如Fig.2.29所示。

可以发现:只有DQS被加到标准ASI。在这种情况下,实现了更高的速度,增加了RE#的切换频率。

Fig.2.30显示了Toggle-Mode接口的“Cmd”sequence及其后的是“Dout”cycles for Toggle-Mode 接口。

2.4 NAND-based systems(基于NAND Flash的系统)

Flash Cards,USB sticks和Solid State Disks(SSD)是基于NAND Flash的电子系统中最著名的例子。

市面上有几种类型的存储卡,具有不同的接口和形状。

例如,移动电话需要非常小的可移动介质,如μSD,而另一方面,数码相机就可以接受更大的尺寸(CFSDMMC),不同类型的Flash卡如Fig.2.31所示。

Flash卡包括U盘的接口支持并行/串行、同步/异步等多种协议。此外,闪存卡还支持热插拔过程,这就要求在保证存储数据有效性的同时,还能够管理突然的断电。

对于较大的外形因素,card是一个完整的小系统,其中每个组件都焊接在PCB上并独立封装。例如,NAND Flash通常在TSOP封装中可用,也可以包括一些额外的组件,如可以添加一个外部DC_DC转换器,以获得内部电源,或者可以使用石英来获得更好的时钟精度。通常,为了稳定电源,要插入合理的滤波电容器。同样的考虑也适用于SSD,它于Flash card的主要区别在于系统容量,如Fig.2.32所示,其中多个NAND被组织在不同的通道中以提高性能

对于想μSD这样的小尺寸,card的尺寸与NAND die的尺寸相当,因此,存储芯片作为裸die安装在一个小基板(substrate)上。

存储卡或SSD的功能结构图如Fig.2.33所示,分为闪存控制器和Flash两种部件。

2.4.1 Memory controller

Memory controller的目的有两个:

  1. 为host和flash提供最合适的接口和协议;
  2. 有效地处理数据,最大限度地提高传输速度,数据完整性和information retention(信息保留)

为了执行上述任务,需要设计一个特定于应用程序的设备,将标准处理器(通常为8-16位)与专用硬件一起嵌入,以处理即时任务。

Memory controller(存储器控制器)可以分为四个部分,分别在hardware(硬件)和firmware(固件)中实现。

  1. 从host到flash,第一部分是host Interface,它实现了所需的行业标准协议(MMC、SD、CF等),从而保证了Flash卡与host之间的逻辑和电气互操作性。这个block是hardware(buffers,drivers等)和firmware(由嵌入式处理器执行的命令解码)的混合,嵌入式处理器解码解码主机调用的命令序列并处理进出闪存的数据流。
  2. 第二部分是Flash File SystemFFS,也就是能够使用闪存卡、SSD和U盘的文件系统。例如,对构成文件的许多字扇区的顺序存储器访问是由链表组织的(存储在闪存卡本身上),主机使用链表来构建File Allocation TableFAT,文件分配表)
    1. FFS通常在控制器内部以固件的形式实现,每个sub-layer(子层)执行一个特定的功能。主要功能有:Wear leveling Management(磨损均衡管理)Garbage Collection(垃圾回收)Bad Block Management(坏块管理)。对于所有这些功能,tables被广泛用于将map sectors和pages从逻辑映射到物理(Flash Translation LayerFTL),如Fig.2.34所示。

图中上面的block row是memory的逻辑视图,下面的是物理视图。从host的角度来看,数据在给定的逻辑sector内被透明地写入和覆盖:由于Flash的限制,不可能在同一page上进行覆盖,因此必须在物理block中分配一个新的page(sector),并将前一个标记为无效。很明显,在某个时间点,当前physical block变满,因此将第二个block(Buffer)分配给相同的logical block。

所需的translation tables总是存储在memory card本身,从而减少了card的总体容量。

Wear Leveling(磨损均衡)

通常,并非存储在同一内存位置的所有信息都以相同的频率变化:一些数据经常更新,而另一些数据在很长一段时间内保持不变——在极端情况下,在设备的整个生命周期内保持不变。很明显,包含频繁更新信息的blocks受到大量write/erase cycles的压力,而包含很少更新信息的blocks的压力要小得多。

为了减轻干扰,需要保持每个page/block的老化尽可能小和尽可能均匀:也就是说,必须monitor(监管)应用于每个page的read & program cycles的数量。此外,应该考虑一个block允许的最大program/erase cycles数(即其endurance:持久性):如果使用SLC NAND存储器,这个数字大约是100 k cycles,当使用MLC NAND存储器时,这个数字减少到10 k。

Wear Leveling(磨损均衡)技术依赖于logical to physical translation(逻辑到物理转换)的概念:也就是说,每次host应用程序需要更新相同的(logic) sector时,内存控制器动态地将sector映射到不同的(physical) sector,在特定的表或指针中存入映射情况。扇区的过期副本被标记为无效且可擦除。这样,所有的物理扇区都得到了均匀的利用,从而使老化保持在一个合理的值。

有两种可能的实现方式:动态磨损均衡通常用于跟踪用户对扇区的更新请求;静态磨损均衡也可以实现,其中每个扇区,即使是最小的修改,只要其老化偏离平均值,就有资格重新映射。

Garbage Collection(垃圾回收)

这两种磨损均衡技术都依赖于可用的自由扇区,这些扇区可以用更新来填充:一旦自由扇区的数量低于给定的阈值,扇区就会被“压缩”,多个过期的副本就会被删除。这个操作由垃圾回收模块执行,该模块选择包含无效扇区的块,将最新的有效副本复制到空闲扇区并擦除这些块。(如Fig.2.35所示)

为了最小化对性能的影响,垃圾回收可以在后台执行。磨损均衡产生的平衡使磨损压力分布在阵列上而不是单个热点上。因此,内存密度越大,单元损耗越低。

来自 <《Inside NAND Flash Memories》 (2) —— NAND 概述:从内存到系统 - 知乎>

Bad Block Management(坏块管理)

无论磨损均衡算法有多靠谱,NAND闪存的内在限制是由所谓的坏块(Bad Blocks,BB)的存在来表示的。例如,区块包含一个或多个可靠性没有保证的位置。

坏块管理(Bad Block Management,BBM)模块会创建和维护一个坏块的映射图,如Fig.2.36:内存卡在工厂初始化时就会创建这张图。因此工厂测试中NAND闪存中NAND闪存模块包含的坏块列表已经存在在映射图内。然后,在设备使用周期内,当一个块损坏时,它就被更新。

 

ECC(Error Correcting Code,错误检查纠正)

这个任务通常由内存控制器中的特定硬件执行。一些嵌入ECC的内存示例已有相关报道。最流行的ECC代码可以纠正多个错误,包括Reed-Solomon和BCH。编码只需要很少的控制器周期,但解码阶段则需要大量的周期,会明显降低随机访问时的读性能和内存响应时间

读操作失败可能源于不同的原因(有一定的概率):

  • 噪音(例如电源功率波动)
  • Vth扰动(邻近单元的读/写)
  • 数据保持(泄露问题)

纠正后读取失败的允许概率取决于应用程序的用例。对于价格敏感的消费者应用,在产品生命周期内读访问的次数相对较少,与内存访问次数较多的高端应用相比,可以容忍较高的读失败概率。要求最高的应用程序是处理器的缓存模块。

内存能提供的可靠性是它固有的错误概率。这个概率不可能是用户希望的概率。通过ECC,可以减少错误概率(第14章)。

错误校正码理论的主旨是在信息中添加冗余项,这样,在读取时,就可以检测错误并以最大概率恢复已经写好的信息。

错误修正方法用于读取时的数据恢复。块码纠错应用于数据的子扇区。根据使用的错误校正方法,需要不同数量的称为奇偶校验位的冗余位

校验位的长度为n,信息位的数量为k,可纠正错误的数量为t,三者之间存在一种称为Hamming不等式的关系,由此可以计算出最小奇偶校验位的数量:

不可能总能达到最小数目:一个好的代码的奇偶校验位的数目必须尽可能接近这个数目。另一方面,子扇区的规模越大,空闲区域(奇偶校验位)的相对数量越小。因此,Flash die尺寸有一定的影响。

BCH和Reed-Solomon代码具有非常相似的结构,但是BCH代码需要更少的奇偶位,这就是为什么它们是嵌入NAND内存中的ECC的首选项。

来自 <《Inside NAND Flash Memories》 (2) —— NAND 概述:从内存到系统 - 知乎>

 

2.4.2 Multi-die systems(多Die系统)

一个典型的存储系统是由多个NAND存储器组成的一个8位总线,通常称为通道用来连接不同的存储器到控制器(Fig.2.32)。需要强调的是,系统中放置多个Flash存储器是提高存储密度和读写性能的一种手段。

 

通道上的操作可以interleave(交错)进行,这意味着可以在空闲内存上启动另一个内存访问,而第一个内存仍然处于繁忙状态(例如写或擦除)。

  • 例如,多个写访问序列可以被定向到一个通道,寻址不同的NAND,如Fig.2.37所示:这样,通过通道数据加载,通道利用率最大化,而编程操作发生时不需要占用通道。

一个系统通常有2到8个并行运行的通道(甚至更多)。

Fig.2.38所示,在页面编程时间相同的情况下,使用多个内存组件是提高数据吞吐量的有效方法。内存控制器负责调度内存通道上的分布式访问。控制器使用专用引擎与Flash进行低级通信协议。

此外很明显的是,与编程操作相比,数据加载阶段是不可忽略的(对数据输出阶段也是一样):因此,提高I/O接口速度是提高总体性能的另一种聪明方法:高速接口,如DDR,它们将在第七章中进行更详细的讨论。

Fig.2.39显示了DDR频率对程序吞吐量的影响。随着速度的增加,在通道饱和之前,更多的NAND可以并行操作。

  • 例如,假设目标为30 MB/s,则需要2个NAND,最低DDR频率约为50 MHz。给定页面编程时间为200 μs,在50 MHz时四个NAND可以在交错模式下工作,使写吞吐量增加一倍。当然,电力消耗也要考虑在内。

还有混合架构,它结合了不同类型的内存。最常见的是使用DRAM作为内存缓存。在写访问时,缓存用于存储数据,然后再传输到Flash中。这样做的好处是,数据更新(例如表格中的数据更新)更快,而且不会损耗Flash。

另一种架构使用了一个配套的NOR Flash来实现软件的“就地执行”,而不需要预取延迟。对于混合解决方案,采用多Die方法,将不同的存储器封装在同一芯片中,有可能减少面积和功耗。

来自 <《Inside NAND Flash Memories》 (2) —— NAND 概述:从内存到系统 - 知乎>

2.4.3 Die堆叠

尺寸减小是存储卡成功的主要驱动力之一;另一方面,标准封装(和设计)技术的更新已经逐渐跟不上容量需求的急剧增长,为了解决这个问题,有两种可能的手段:更先进的Die堆叠方案3D技术

提高容量的标准方法是实现多芯片解决方案,将几个Die堆叠在一起。这种方法的优点是,它可以应用于现有的裸模,如Fig.2.40所示:通过所谓的interposer将Die分离开,这样就有足够的空间让键合线连接到焊盘上。

另一方面,interposer的使用有一个直接的缺点,那就是增加了多芯片的高度,而高度是记忆卡最相关的限制因素之一。克服这个问题的一种方法是利用PCB的两面,如Fig.2.41所示:这样,PCB作为插入器,components在PCB的两面均匀翻转。

Notes: 好处是原本需要3interposers,现在只需要2层了。

高度降低了,但在设计上有一个额外的限制:事实上,由于lower die翻转了,其pads不再与upper die匹配。让相应的pads彼此面对的唯一方法是,设计pads部分时,pads与信号的对应可以被颠倒:也就是说,当一个die被用作底部的那个时,它被设计为mirrored-pads(镜面垫)。这样的解决方案是可以实现的,但芯片设计更加复杂(信号必须多路复用才能执行调换),芯片面积也会增加,因为可能需要额外的填充来确保翻转时的对称性。

 

真正的突破是完全去除interposer,从而使用所有可用高度的硅(除了由于die-to-die胶所需的最小开销)。Fig.2.42显示了实施方案,其中使用了die楼梯式布置:任何开销被减少到最小,粘接不构成任何特殊问题,保持了芯片的力学可靠性(dies之间的不重叠比die长度小。因此,整体稳定性不会受到影响,因为最上面的die不会超出整体质量中心)。

缺点是,这样的解决方案对芯片设计有很大的影响,因为所有的焊盘必须位于模具的同一侧。在传统的存储组件中,pads沿设备的两侧排列:电路均匀地位于两排pads旁边,阵列占据了大部分中心区域。Fig.2.43显示了其衬垫位于相对两侧的存储设备的平面图。

 

Fig.2.44所示,如果所有的焊盘都位于一侧,则芯片平面受到严重影响:大多数电路被移到焊盘旁边,以最小化连接的长度并优化电路布局。但有些电路仍然驻留在Die的另一边(例如,部分数组的解码逻辑和部分页面缓冲区,即存储数据的门闩,要么写入内存,要么从内存中读取数据并提供给外部)。

当然,从功能和电源的角度来看,这样的电路必须连接到芯片的其余部分。由于包括电源在内的所有pads都在另一侧,因此有必要重新设计芯片内部的电源路线分布,确保轨道的尺寸和几何形状设计正确,为了避免IR drops问题(即,由于金属线的电阻特性,在轨道末端的电压降低)。

楼梯型堆垛的主要缺点之一是在与垫层排相反的方向增加尺寸。当然,这一事实限制了Die的数量。

一旦完成了设计工作,一个可能的替代方案是如Fig.2.45所示的“蛇型”堆叠。在这种情况下,由于双面粘接,整体尺寸可以明显减小。

最近还出现了另一种堆叠选项:Through Silicon Via (TSV)。使用这种技术,dies直接连接,无需焊接线,如图2.46所示。

一个TSV连接的三维视图如Fig.2.47所示。其中一个主要优点是减少了互连长度和相关的寄生RC。这样可以提高数据传输速率,同时也会优化功耗

事实上,DRAM是TSV技术的主要驱动因素,因为使用标准的键合技术,它们不能在同一个封装中堆叠超过两个芯片。

目前提出的解决方案利用了先进的堆叠技术,最终需要改变芯片设计平面。最近,先进的设计和制造解决方案已经提出,其中3D集成直接在芯片级执行。

来自 <《Inside NAND Flash Memories》 (2) —— NAND 概述:从内存到系统 - 知乎>

2.4.4 3D存储和XLC芯片

3D技术的概念很简单:与堆叠多个芯片(每个芯片都是一个功能齐全的存储组件)不同,可以在同一个硅芯片中嵌入多个存储阵列。这样,所有的控制逻辑,模拟电路和pads可以由不同的存储阵列共享。为了保持最小的面积,利用硅制造技术的最新突破,存储阵列可以一个接一个地生长。

最近针对NAND Flash存储器提出了两种不同的解决方案:

一种情况,存储阵列的拓扑结构是通常的拓扑结构,另一种阵列在其上扩散,如Fig.2.48所示,因此存在两层。

因此,NAND strings(即作为阵列基本构件的Flash存储单元系列)分散在X-Y平面上。在阵列周围,所有外围电路被放置在第一层(即较低层)。唯一的例外是字线(WL)解码器。为了避免Fowler-Nordheim (FN)擦除未选中层,该层中的所有WLs必须是浮动的,就像选中层中未选中块的WLs一样。这个功能由一个层专用的WL解码器执行。

 

第二种方法如Fig2.49和5.9节所示:在这种情况下,NAND stringsdies(沿Z方向)正交。NAND管柱位于垂直位置的塞上,该塞位于贯穿整个闸板的孔中。除了最低的板充当较低的选择闸门外,每一块板都充当控制闸门。3-D电荷阱存储器在第5.3节中进行描述。

在单元级别存储密度也可以增加:在最简单的形式中,非易失性存储单元存储一个比特的信息:信息抹去为“1”,写入后为“0”:用于测量电荷在浮栅中存储数量的传感技术在第8章中描述。这种存储被称为单级单元(SLC)。

这个概念可以通过在浮栅内有四个不同的电荷水平(对应于逻辑值00、01、10、11)来扩展,从而导致所谓的多电平单元(MLC)方法,即2位/单元。第十章会对MLC NAND设备进行详尽描述。

一些实现2位/单元技术的设备在商业上是可用的,实际上,MLC已经成为2位/单元的同义词。几乎所有的Flash卡都包含MLC设备,因为它们比SLC更便宜。

从一个单元中读取多个比特所需的电路当然比单比特的情况更复杂,但节省的面积(和增加的密度)值得这些代价。真正的缺点在于耐久性和可靠性的降低。

在耐久性方面,正如之前提到的。SLC解决方案中每个块可以承受100,000个擦写周期,而MLC解决方案通常被限制为10,000。因此,必须使用磨损均衡算法,如2.4.1节所述。在可靠性方面,很明显,使用的层次越多,读取干扰就越大,因此必须加强ECC能力。

这个概念最近已经扩展到3位/单元和4位/单元,在同一个单元中分别有8个和16个不同的充电水平。这种存储方法被称为XLC(TLC/QLC),将在第16章进行描述。

来自 <《Inside NAND Flash Memories》 (2) —— NAND 概述:从内存到系统 - 知乎>

  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cheeky_man

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值