NAND Flash 入门:从浮栅到 3D 堆叠
前言:该进”仓库”看看了
前面几篇,我们把 DRAM 和 HBM 摸了个透:它们是计算芯片身边的”工作台”,快是快,但贵、容量小、一断电就忘事。
而 HBF 的主角——NAND Flash——就是第一篇里那个”仓库”:容量大、便宜、断电不丢数据。想真正理解 HBF 为什么这么设计,得先弄明白这座仓库本身:货(数据)怎么存、怎么摆、为什么便宜、又慢在哪。
这篇是 NAND 入门 + 路标:只讲主干,把读者领进门。涉及物理细节和深入话题的部分,我会链接到博客已有的 Nand-Flash 系列,想深挖的读者可以顺着往下钻。
一、一个 bit 怎么存:浮栅里的电子
NAND 存 1 个 bit 的最小单元叫 Cell(存储单元),本体是一颗浮栅晶体管(Floating-gate MOSFET,FGMOS):在普通晶体管的栅极里,多加一层”悬浮”的浮栅(Floating Gate)。往里注入电子,电子就被困在里面——不供电也跑不掉,这就是”非易失”的来源。(浮栅的物理结构、电子怎么进出的隧穿机制,详见 Read Level 介绍 和 NAND 物理概念介绍。)
电子的多少会改变晶体管的阈值电压(Vth):浮栅里电子越多,Vth 越高,晶体管越难导通。读取时施加一个判断电压,看导通与否,就分辨出了 0 和 1。
NAND 还有个反直觉的约定,先记住,后面处处要用:
- 擦除态 = 1:刚擦干净、没注入电子的 Cell,读出来是 1;
- 编程态 = 0:注入电子后,读出来是 0。
所以 NAND 的写(Program,编程)是单向的:只能把 1 改成 0。想把 0 改回 1?没有这种操作——只能擦除,而且擦除的粒度是”整块”(第三节细说)。
一句话:DRAM 用”电容里有没有电荷”存 bit;NAND 用”浮栅里有多少电子”存 bit,而且写只能”加电子”,不能”减电子”。
顺便回答一个入门常见问题:这东西为什么叫 “NAND”?因为 Cell 在芯片里不是一颗颗独立存在的,而是串联成一条长串(结构神似 NAND 逻辑门,故得名),串首串尾各有一颗选择晶体管,整串共享一条位线。这个”串”,正是第三节组织结构的起点。
二、一个 Cell 存几个 bit:SLC / MLC / TLC / QLC
既然 Vth 是”可调”的,一个自然的想法冒出来:能不能在一个 Cell 里调出多档 Vth,一个格子存多个 bit?
这就是 SLC / MLC / TLC / QLC 的由来:
- SLC(Single-Level Cell):1 bit / Cell,Vth 只需要分 2 档;
- MLC(Multi-Level Cell):2 bit / Cell,分 4 档;
- TLC(Triple-Level Cell):3 bit / Cell,分 8 档;
- QLC(Quad-Level Cell):4 bit / Cell,分 16 档。
本质就一句话:把本来只需分”有电子 / 没电子”的 Vth 窗口,切成 2、4、8、16 份。切得越细,同样的晶圆面积能存的 bit 越多、单 bit 成本越低——代价马上说。
图中每个”峰”代表一种状态(几百万个 Cell 的 Vth 聚合成的统计分布,详见 Nand Vth 阈值分布)。峰与峰之间的虚线是Read Level(读取判断电压):QLC 要在一个窗口里塞 16 个峰,峰与峰挤在一起,判断电压稍有偏差就会读错邻居——这正是 TLC/QLC 又慢又”娇气”的根源。Read Level 本身怎么精细调整,是个很大的话题,见 Read Level 介绍。
一张表看懂四种 Cell 的取舍(寿命数字是量级概念,不同厂商、不同代际差异很大):
| 类型 | bit/Cell | 状态数 | P/E 寿命(量级) | 速度 | 单 bit 成本 |
|---|---|---|---|---|---|
| SLC | 1 | 2 | 约十万次 | 最快 | 最贵 |
| MLC | 2 | 4 | 约几千~一万次 | 快 | 贵 |
| TLC | 3 | 8 | 约几千次 | 中 | 便宜 |
| QLC | 4 | 16 | 约一千次 | 慢 | 最便宜 |
为什么切得越细,寿命越短、速度越慢?因为每档 Vth 的余量变小了:编程时得小心翼翼地”垫”到指定档位、不能垫过头,读时得精调判断电压,擦写时电子反复进出浮栅的容错空间也更小。容量、成本和速度、寿命,是一组明码标价的交换——这份价目表,HBF 的设计者同样要面对。
顺带一提:今天买到的消费级 SSD,基本是 TLC 和 QLC 的天下——市场已经用钱包投了票,”便宜大碗”赢面最大;而对速度和寿命极致追求的工业、车规场景,SLC/MLC 依旧坚挺。
三、仓库的布局:Channel → Die → Plane → Block → Page
单个 Cell 成不了仓库。NAND 的组织结构是一层套一层,从大到小:
- Channel(通道):一条独立的读写通路,一颗芯片里通常有若干条;
- Die / LUN:挂在 Channel 上的一颗裸片,是能独立执行命令的完整单元;
- Plane:Die 里通常有 2~4 个 Plane,可以并行读写;
- Block(块):Plane 里有几千个 Block;
- Page(页):Block 里最小的读写单位,大小十几~几十 KB。
最重要的是三个”单位”:
- 读:以 Page 为单位——没有”只读半个 Page”的操作;
- 写:以 Page 为单位,且只能 1→0——呼应第一节的约定;
- 擦除:以 Block 为单位——一个 Block 里几百~上千个 Page 一起回到全 1。
另外注意 Plane 是可以并行的:多个 Plane 同时各读一页,芯片级吞吐直接翻倍。”并行读多个单元”这个思路,放大到 8/16 层 Die 的堆栈上,就是 HBF 高带宽的雏形——这里先埋一颗种子。
打个比方:Page 像书的一页,Block 像一本书。NAND 这本书有个奇怪的规矩:你可以往空白页上写字(把 1 写成 0),但想修改写过的页?对不起,得把整本书擦掉重写——先把要保留的页抄到别的书上去,再把这本书整个擦干净,最后把内容写回来。
这个”擦前先搬”的别扭规矩,正是 SSD 里写入放大、垃圾回收等一堆机制的根源——不过这些脏活都由控制器代劳了,第五节再说。(层级结构的更多物理细节,见 NAND 物理概念介绍。)
四、3D NAND:把仓库盖成摩天楼
按上面的结构,NAND 想扩容量,似乎只能把 Cell 做小、在平面上铺更多。这条路在 ~1x nm 之后走到了头:单元挨得太近、互相干扰,良率也撑不住。
2013 年,三星的 V-NAND 给出了破局答案:把存储串竖起来。字线(WL)变成一层层水平平板,存储沟道垂直穿过所有层——相当于把平房拆了盖摩天楼,同一块地皮(晶圆面积),楼层想盖多少盖多少。
这就是 3D NAND 让 SSD 价格一路跳水的原因:单位面积的 bit 数 ≈ 层数 × 平面密度,堆层数比磨制程便宜得多。如今的层数:主流产品在 200300+ 层,最新一代已经站上 300400 层。
就在 HBF 规范发布的同一场 FMS 2026 上,两家厂商正好秀了肌肉:
- SK 海力士展示了第 10 代(V10)4D NAND 晶圆,堆到 375 层;
- 铠侠与闪迪发布了第 10 代 3D QLC:332 层、位元密度 37 Gb/mm²,并且首次把 NAND 接口速度做到 4.8 Gb/s(支持 Toggle DDR 6.0)——这个数字,下一篇讲 HBF 带宽时还会用到。
高密度 3D NAND 正是 HBF 的地基:单堆栈 512 GB 的大容量,就是靠这一层层堆出来的。
五、FTL:仓库的管家
看到这里你可能会问:又是”只能 1→0”,又是”整块擦除”,那我用 SSD 存文件、随便改文件,怎么没感觉这么费劲?
因为有 **FTL(Flash Translation Layer,闪存转换层)**在幕后打点一切:磨损均衡(让各 Block 轮流挨擦,别把一处先磨坏)、垃圾回收(提前搬运有效数据、腾出整个 Block)、坏块管理、把”随便写”的逻辑地址翻译成”规矩很多”的物理 Page……这些脏活累活全由 SSD 控制器包办,用户看到的仍是一块”随写随改”的盘。
顺带一提,控制器与 NAND 之间的高速接口本身也有一堆讲究(比如高速信号质量相关的各种 Training),博客已有 Nand Training 专门展开。
记住”独立控制器”这个角色——因为 HBF 恰恰要把它拿掉。怎么拿掉、拿掉之后靠什么?下一篇拆解。
总结:NAND 的家底
一篇看下来,先用一句话给 NAND 画像:便宜大碗的仓库,惜字如金的搬运工——读得不算快,写得更费劲,但存得多、存得久、还便宜。
接着把家底盘清楚。
优势:
- 容量大:3D 堆叠几百层,单 Die 做到 TB 级不再稀奇;
- 便宜:单位容量成本远低于 DRAM;
- 非易失:断电数据还在,天然适合”存”。
短板:
- 写得慢还麻烦:只能 1→0、只能整块擦除,写之前还得搬数据;
- 寿命有限:每个 Block 只能擦写几千次(QLC 约一千次的量级);
- 读也不算快:读延迟比 DRAM 高约两个数量级(微秒级 vs 纳秒级)——这个差距是物理性的,堆叠、加宽接口都改变不了。
而 HBF 的整套设计,正是围绕这份家底做的:用堆叠和宽接口放大”容量大、便宜、非易失”的优势,用架构绕开”写慢、寿命有限”的短板。
下一篇,我们把 HBF 规范拆开看:8/16 层到底怎么堆、UCIe 接口是什么来头、0.4~3.0 TB/s 的三档带宽又是怎么堆出来的。










