找回密码
 注册
关于网站域名变更的通知
查看: 534|回复: 1
打印 上一主题 下一主题

转—— 闪存基础

[复制链接]
  • TA的每日心情
    开心
    2019-11-19 15:19
  • 签到天数: 1 天

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2019-4-8 13:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    EDA365欢迎您登录!

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
    转—— 闪存基础
    , K6 a' R  c/ l! Z
    - _  N+ M# }4 n6 T' [/ o" ]1 n

    4 M. C# @4 d- s4 M& F" y5 k6 t目前绝大多数SSD都是以NAND FLASH为存储介质的。SSD工作原理很多都是基于NAND FLASH特性的。比如,NAND FLASH在写之前必须先擦除,而不能覆盖写,于是SSD 才需要垃圾回收(Garbage Collection,或者叫 Recycle);NAND FLASH 每个块(Block)擦写次数达到一定值,这个块就不能用了(数据丢失,或者写入不了),所以SSD 固件必须做 Wear Leveling,让数据平均写在所有块上,而不是盯着几个块拼命写(不然没几天SSD就报废了)。还有类似很多例子,SSD很多实现都是在为NAND FLASH服务的。所以,欲攻SSDNAND FLASH首当其冲。 NAND FLASH是一种非易失性存储器,也就是说,掉电了,数据也不会丢失。NAND FLASH基本存储单元 (Cell) 是一种类NMOS的双层浮空栅 (Floating Gate) MOS管组成, 如下图所示。
    . l/ I# h( n9 c1 R1 X9 G/ H
    " s5 f3 L4 T0 @0 l
    在源极(Source)和漏极(Drain)之间电流单向传导的半导体上形成贮存电子的浮动栅(Floating Gate)。浮动栅包裹着一层硅氧化膜绝缘体。它的上面是在源极和漏极之间控制传导电流的选择/控制栅 (Control Gate)。里面的电子不会因为掉电而消失,所以NAND FLASH是非易失存储器。
    " @% e1 S* ?& w% ^  B2 x' p( c( j! o
      z6 C: ?$ ~) f; }4 M
    * O0 U, W$ h* b& M* C% s! y
    写操作是在控制极加正电压,使电子通过绝缘层进入浮栅极。擦除操作正好相反,是在衬底加正电压,把电子从浮栅极中吸出来。如下图所示:5 v& {9 w" u: `
    7 r/ e9 d8 a! `5 ]0 y4 U; K
    个存储单元存储1bit数据的NAND FLASH,我们叫它为SLC (Single Level Cell)2bitMLC (Multiple Level Cell) 3bitTLC (Triple Level Cell)
    " G; F# |+ v3 q, K% {3 a! jSLC来说,一个存储单元存储两种状态,浮栅极里面的电子多于某个参考值的时候,我们把它采样为0,否则,就判为1. 2 Z" F$ k$ X2 s/ v' V# }/ M
    2 _$ f5 m$ K4 x" I& v
    + m' o; r8 K% N# j9 `6 o; u
    MLC来说,一个存储单元存储四个状态,一个存储单元可以存储2bit的数据。通俗来说就是把浮栅极里面的电子个数进行一个划分,比如低于10个电子,判为011-20个电子,判为121-30,判为2;多于30个电子,判为3.
    ' _% R& d9 R; i. ]0 w 4 @8 k0 F* Z2 }- K+ K
    依次类推TLC,它的一个存储单元有8个状态,可以存储3bit的数据,它在MLC的基础上对浮栅极里面的电子数又进一步进行了划分。- E2 w/ B0 t$ R9 z1 |2 t# h

    4 q& j  W7 i+ L同样面积的一个存储单元,SLCMLCTLC,依次可以存储1,2,3bit的数据,所以在同样面积的LUN上,NAND FLASH容量依次变大。
    4 ^' S4 }0 j; h+ x& l! B( h# J: o. H: M  L
    但同时,一个存储单元电子划分的越多,那么在写入的时候,控制进入浮栅极的电子的个数就要越精细,所以写耗费的时间就加长;同样的,读的时候,需要尝试用不同的参考电压去读取,一定程度上加长读取时间。所以我们会看到在性能上,TLC不如MLC,MLC不如SLC.
    0 @5 p/ Z! r# F
    $ h! z* b  U$ R& i- C+ ^NAND FLASH就是由成千上万这样的存储单元按照一定的组织结构组成的。; R! o' Q8 p; r8 N# m7 v7 U

    ) A$ }* c7 E4 x4 g
    上图是一个FLASH Block的组织架构。一个WordLine对应着一个或若干个Page,取决于SLC,MLC或者TLC。对SLC来说,一个WordLine对应一个PageMLC则对应2Page,这两个Page是一对:Lower Page Upper PageTLC对应3Page。一个Page有多大,那么WordLine上面就有多少个存储单元(Cell),就有多少个Bitline。一个Block当中的所有这些存储单元(Cell)都是共用一个衬底的。; ~) W5 i: _( _5 e1 f. I

    6 M, r+ A+ Q5 t+ M0 p5 W
  • TA的每日心情
    开心
    2019-11-19 15:19
  • 签到天数: 1 天

    [LV.1]初来乍到

    2#
     楼主| 发表于 2019-4-8 13:38 | 只看该作者
    - d! Z* H% o& E
    3 {! E) W3 t% R+ @: C+ J, \7 Q
    一个NAND FLASH内部存储组织结构是这样的:一个Device有若干个DIE(或者叫LUN),每个DIE有若干个Plane,每个Plane有若干个Block,每个Block有若干个Page。每个Page对应着一个Wordline,由成千上万个存储单元构成。+ Q. x/ `' I% @' f
    5 e  A. |, m* ^2 Z- v0 l
    DIE/LUN是接收和执行FLASH命令的基本单元。上图中,LUN0LUN1可以同时接收和执行不同的命令。但在一个LUN当中,一次只能执行一个命令,你不能对其中的某个Page写的同时,又对其他Page进行读访问。
      l) S5 f" K- x  P! D' _" {: O( ~$ _; J
    一个LUN又分为若干个Plane,一般为1个或者2个,现在也有4PlaneNAND了。每个Plane都有自己独立的Cache Register或者 Page Register,一般情况下,两个Register内容都是一样的,其大小等于一个Page的大小。Host在写某个Page的时候,它是先把数据从Host传输到该Page所对应PlaneCache Register当中,然后再把整个Cache Register当中的数据写到NAND FLASH阵列;读的时候类似,它先把这个Page的数据从FLASH阵列读取到Page Register,然后再按需传给host。这里按需是什么意思?就是我们读取数据的时候,没有必要把整个Page的数据都传出来给Host,按需选择数据传输。但要记住,无论是从FLASH 阵列读数据到Page Register,还是把Page Register的数据写入FLASH阵列,都是以Page为单位!
    ( Q- y8 |: c+ h* U 7 s+ N1 y' x- A3 e9 r8 t) z+ a
    我们通常所说的FLASH读写时间,是不包含数据从NANDHOST之间的数据传输时间。FLASH写入时间指是一个Page的数据从Cache Register 当中写入到FLASH阵列的时间,FLASH读取时间是指一个Page的数据从FLASH阵列读取到Page Register的时间。对现在的MLC NAND FLASH来说,写入时间一般为几百个微秒甚至几毫秒,读取时间为几十微秒。 NAND FLASH一般都支持Multi-Plane或者说Dual-Plane操作。那么什么是Dual-Plane操作呢?对写来说,HOST先把数据写入到上第一个PlaneCache Register当中,数据hold在那里,并不立即写入到FLASH阵列,等HOST把同一个LUN上的另外一个或者几个Plane上的数据传输到相应的Cache Register当中,再统一一起写入FLASH阵列。假设写入一个Page的时间为1.5ms,一个Page的传输时间为50us:如果按原始的Single Plane操作,写两个Page需要至少3ms+20us;但如果按照Dual-Plane操作,由于隐藏了一个Page的写入时间,写入两个Page只要1.5ms+20us,缩减了几乎一半的时间,写入速度几乎翻番。对读来说,使用Dual-Plane操作,两个不同Plane上的Page数据会在一个NAND读取时间加载到各自的Page Register当中,这样用一个读取时间读取到两个Page的数据,读取速度加快。考虑读取时间和数据传输时间相当,假设都是50usSingle Plane读取传输两个Page需要50us*4=200usDual-Plane则需要50us*2+50us=150us,时间为前者的75%,读取速度也有大的提升。 NAND FLASH的擦除是以Block为单位的。为什么呢?那是因为在组织结构上,一个Block当中的所有存储单元(Cell)是共用一个衬底的(Substrate)。当你对某衬底施加强电压,那么上面所有浮栅极的电子都被吸出来了。每个NAND Block都有擦写次数的限制,当超过这个次数时,该Block可能就不能用了:浮栅极充不进电子(写失败),或者浮栅极的电子很容易就跑出来(比特翻转,0->1),或者浮栅极里面的电子跑不出来(擦除失败)。这个最大擦写次数按SLC,MLC,TLC依次递减:SLC的擦写次数可达十万次,MLC一般为几千到几万,TLC降到几百到几千。随着NAND FLASH工艺的不断进步(现在已进入1Xnm时代),NAND FLASH容量不断加大,但性能与可靠性却在变差。要克服NAND FLASH的这些不利因素,对SSD固件算法带来了更多更大的挑战。 FLASH Block不一定要达到寿命才不能用。一块FLASH,刚出厂的时候就会有坏块,这些坏块叫出厂坏块。有些厂商会在该Block的某几个Page当中加入坏块标记(如下图所示),用户在使用前,应该按照FLASH DATASHEET把这些坏块挑出来建立坏块表,避免以后使用这些坏块。7 L1 w3 K0 a' T0 ~+ ]) w
    ; S8 K1 U/ ~: O. e" p
    也有一些FLASH厂商会直接告诉你哪些块是出厂坏块,这些信息存储在FLASH的某个地方,用户只需读取这些信息即可,无需对整个FLASH的所有Block进行坏块扫描。
    # R! o# [$ P0 [$ |$ P
    " d, F5 B" q* [" f/ d4 L/ K
    / ~+ o. a' q: ?1 [" G用户在时候过程中,一个Block,即使未达到最大使用寿命,也有可能变坏。FLASH是允许有一定的坏块率的。质量好的FLASH,坏块率是很小的;质量差的FLASH,坏块产生频繁。所以在挑选SSD的时候,尽量挑选知名主流的FLASH厂商生产的FLASH,质量有保证。
    ! N. x- q  `4 ^1 q+ C' l
    * {( N7 o, n0 W: v: vMLC来说,擦除一个Block的时间大概是几个毫秒。 NAND FLASH的读写则是以Page为基本单元的。一个Page大小主要有4KB,8KB,16KB。对MLC或者TLC来说,写一个Block当中的Page,应该顺序写:Page0Page1Page2Page3;禁止随机写入,比如:Page2Page3Page5Page0,这是不允许的。但对读来说,没有这个限制。SLC也没有这个限制。 HOST是通过一系列FLASH命令与NAND通讯的。每个FLASH,都定义了其支持的命令,以MICRON 某型号的FLASH为例,它定义了如下命令:  w+ @) I$ I' u9 t7 g* ~6 B/ G

    8 W1 S: [; J2 a4 f: b0 A5 S) B
    不同的FLASH,所支持的命令有所差异。用户应该严格按照FLASH DATASHEETFLASH通讯。- R7 T5 F, Q  t% z2 O2 x6 V5 u8 j5 T# k

    & K  |  ?0 I# J0 R% a8 ^谈谈NAND FLASH的一些特点,或者说它作为存储介质面临的挑战。( d: M8 C. W! g( `4 V4 j& F; y
    Block具有一定的寿命,不是长生不老的。前面提到,当一个Block接近或者超出其最大擦写次数时,导致存储单元的永久性损伤,不能再使用。随着NAND工艺不断向前,这个擦写次数也变得越来越小。
    . L3 Q8 Z* T# a7 X0 p" R# P
    - N! Q8 ^  m- p
    • NAND当中的存储单元中,先天就有一些是坏掉的,或者说不稳定的。并且随着NAND的不断使用,坏的存储单元越来越多。所以,用户写入到NAND的数据,必须有ECC保护,这样即使其中的一些比特发生反转,读取的时候也能通过ECC纠正过来。一旦出错的比特超过纠错能力范围,数据就丢失,对这样的Block,我们应该废弃不再使用。
    • FLASH先天有坏块,也就是说有出厂坏块。并且,用户在使用的时候,也会新添坏块,所以用户在使用FLASH的时候,必须有坏块管理机制。
    • 读干扰(Read Disturb。什么意思?从NAND读取原理来看,当你读取一个Page的时候,Block当中未被选取的Page控制极都会加一个正电压,以保证未被选中的MOS管是导通的。这样问题就来了,频繁的在一个MOS管控制极加正电压,就可能导致电子被吸进浮栅极,形成轻微的Program。从而最终导致比特翻转。但是,这个不是永久性损伤,重新擦除Block还能正常使用。注意的是,Read Disturb影响的是同一个Block中的其它Page,而非读取的Page本身
      0 g- V& u7 b# L  ]/ B
    , g9 N( `! A$ ]5 R
    1 \- V3 h3 t# F) i8 l
    4.写干扰(Program Disturb。除了Read Disturb会导致比特翻转,Program Disturb也会导致比特翻转。还是要回到FLASH内部的Program原理上来。
    6 d1 W5 _2 n2 }9 X1 ^- x* e% K " O  k  b0 g. y
    4 |0 G+ I# W1 v
    我们写一个Page的时候,数据01混合的。由于对擦除过的Block,其所有的存储单元初始值就 1,所以Program的时候,只有写0的时候才真正需要Program。如上图所示,绿色的Cell0,需要Program的,红色的代表写1,并不需要Program。我们这里把绿色的Cell称之为Programmed Cells,红色的CellStressed Cells。写某个Page的时候,我们是在其 WordLine的控制极加一个正电压(上图是20V),对于Programmed Cells所在的String,它是接地的,不需要Program Cell所在的String,它是接一正电压(上图为10V)。这样最终产生的后果是,Stressed Cell也会被轻微Program。与Read Disturb不同的是,Program Disturb 响的不仅是同一个Block当中的其它Page,自身Page也受影响。相同的是,都是不期望的轻微 Program导致比特翻转,都非永久性损伤,经擦除后,Block还能再次使用。
    2 e7 z9 Y4 ?, b: X6 J* k; _9 `      5.电荷泄漏。存储在NAND FLASH存储单元的电荷,如果长期不使用,会发生电荷泄漏。不过这个时间比较长,一般十年左右。同样是非永久性损伤,擦除后Block还能使用。
    ( Z. l/ h. {- ?/ z3 A/ x8 p  u2 U上面说的这些,是所有NAND面临的问题,包括SLCMLCTLC。对MLC来说,又有其特有的              一些问题。' {) Y# `5 c8 h2 Q) [! [
    • 正如前面提到的,MLC最大擦写次数变小。这样,就更需要Wear Leveling技术来保证整个存储介质的使用寿命。
    • MLC来说,一个存储单元存储了两个比特的数据,对应着两个PageLower PageUpper Page。假设Lower Page先写,然后再写Upper Page的过程中,由于改变了整个Cell的状态,如果这个时候掉电,那么之前写入的Lower Page数据也丢失。一句话,写一个Page失败,可能会导致另外一个Page的数据损坏。
    • 前面说到,不能随机写。不能先Program Upper Page,然后再Program Lower Page,这点就限制了我们不能随意的写。
    • Lower Page时间更短,写Upper Page时间更长。所以会看到有些Page写入速度快,有些Page写入时间慢。读取时间对Lower PageUpper Page来说都差不多。$ {$ m- v% v$ |( I3 u* i

    $ E6 i0 f. U  `' P: R' q  g
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-10-8 23:05 , Processed in 0.140625 second(s), 23 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表