之前我们聊了 program,也聊了 read。今天,把 NAND 里最后一块总让人别扭的拼图补上:erase。

很多人第一次认真学 NAND,都会卡在一个问题上:

为什么 NAND 可以按 page 读取、按 page 写入,却偏偏不能按 page 擦除,而只能按 block 擦除?

这件事非常反直觉。

我们平时理解“删除”,往往都是这样的:

  • 哪个文件不要了,就删哪个文件
  • 哪张照片不想留了,就删哪张照片
  • 内存里的某个字节,也可以单独改写

总之,都是一句话:

哪里不要,就改哪里。

可到了 NAND 这里,规则突然变了:

  • 读,可以按 page
  • 写,也可以按 page
  • 擦,却只能整块、整块地擦

这就让人很疑惑:

既然都已经能定位到某个 page,为什么不能只把这一个 page 擦掉?

很多人以为这是协议规定。也有人以为这是厂商故意这么设计。其实都不是。

问题不在于“能不能找到这个 page”, 而在于:

program 和 erase,在物理上根本不是同一种动作。


一、program 为什么能做到 page 粒度?

先回忆一下 program。

program 的本质,是通过控制栅极加电压,把电子一点一点送进浮栅层。这个过程之所以能做到 page 粒度,是因为它天然就是一个局部、渐进、可验证的过程。

写入时,控制器大致会做三件事:

第一:用 wordline 选中这一行。 第二:用 bitline 决定这一行里哪些 cell 要写,哪些 cell 不写。 第三:配合 ISPP,一点一点往里加电子:

  • 先加一点
  • 验证一下
  • 不够再加一点
  • 直到阈值电压落进目标区间

所以,program 很像什么?

很像拿着一支很细的笔,对着某一行、某几个格子,一点一点补墨水。

它不是一下子猛灌进去,而是边加、边看、边停。

这就决定了:program 天然适合做精细控制。而且从电子运动的方向看,这条路还特别“顺”。

在 program 时,电子是从衬底这一侧进入浮栅层。随着浮栅层里的电子越来越多,这些电子本身又会形成反向电场,让后面的电子越来越难再进去。

换句话说:

program 天生自带刹车。

越接近目标,越容易收住。 越接近目标,越容易细调。

这几乎就是为 page 级写入量身定做的物理路径。


二、erase 不是“反着写一下”那么简单

很多人会下意识觉得:既然 program 是往里加电子,那 erase 不就是把电子再减回去吗?

听起来很合理。但 NAND 里真正的 erase,并不是“反着写一下”。

program 是把电子弄进去; erase 则是把电子弄出来。

看起来只是方向相反,但底层实现方式完全不同。

在 NAND 里,erase 一般不是靠“对某一个 page 局部减电子”来完成的。 它更像是一种区域性的高压动作:

  • 把阵列下面共享的 common p-well / 衬底 拉到很高的正电压,量级大约是 20V
  • 同时把被选中 block 的 wordline 接地,也就是 0V
  • 这样,浮栅层和衬底之间就建立起很强的电场
  • 浮栅里的电子被拉回衬底
  • cell 的阈值电压整体下降,回到 erased state

注意这里最关键的一点:

program 更像是在某个 cell 上局部下手。erase 更像是在整块阵列下面“抬地基”。

这就是两者最本质的区别。


三、真正的问题,不是能不能选中这个 page

讲到这里,很多人还是会继续追问:

那只让某一条 wordline 参与 erase,不就只擦掉一个 page 了吗?

这个问题特别自然。而这也正是这篇文章真正的灵魂。

因为问题根本不是:

“能不能找到这一条 wordline?”

而是:

“如果我只想擦这一条 wordline,怎么保证旁边那些 wordline 不出事?”

这才是 page erase 真正难的地方。


四、为什么只擦一个 page 会突然变得很难?

因为 erase 不是像 program 那样,靠 bitline 决定“这一颗写,那一颗不写”。

erase 更像是一种整片结构上的高压偏置条件:

  • 下面共享的 p-well/衬底 被整体拉高
  • 上面被选中的 wordline 接地
  • 中间形成强电场
  • 电子从浮栅层回到衬底

这里先注意一个词:共享。

也就是说,下面的 p-well 不是这个 page 独享的。它不是“这个 page 自己的小地盘”,而是很多 cell、很多 string 共用的一片结构。

这意味着:

一旦把 p-well 拉高,影响的不是某一个孤立的小区域,而是下面整片阵列。

所以不能只考虑“这一条 wordline 怎么擦”,还得同时考虑:

旁边那些不该擦的 wordline,怎么保住。

而这件事,恰恰就是single-WL erase最麻烦的地方。

因为只擦中间这一条,实际上等于要求两种相反的条件,在几乎挨在一起的几条 wordline 上同时成立:

  • 目标 wordline,必须处在最容易 erase的状态里
  • 可它左右两边那几条 wordline,又必须处在最不容易 erase的状态里

问题就在这里:

它们离得实在太近了。这里没有一个放之四海而皆准的“危险距离”,因为真正起作用的,从来不是距离本身,而是距离、压差和介质承压能力三件事叠在一起。但公开资料已经把量级摆得很清楚:2D NAND 一旦进入 sub-40nm、尤其 20–24nm 这一代之后,邻近干扰就已经明显加重;而在今天的 3D NAND 中,相邻 wordline 的 pitch/节距 公开资料也常见只有大约 40nm。

想让中间这一条“强力擦除”, 又想让旁边那几条“强力抑制”, 最后就不得不把相邻 wordline 硬拉到截然不同的电压条件里。

而在现代 NAND 里,wordline 间距已经非常小。 这时候,危险才真正出现:

不是擦不到中间这条, 而是为了只擦它,不得不先把左右邻居推到完全相反的电压世界里。

相邻 wordline 一旦被这样强行拉开,中间那层隔离介质承受的横向电场就会迅速变强。 这也是为什么,厂商在继续缩放时,已经把 inter-WL dielectric(隔在两条 wordline 中间、负责把它们电气隔开的那层绝缘材料) 本身的可靠性,当成必须正面解决的问题。也就是说,single-WL erase 难,不是难在“选不中”,而是难在:

为了让这一条擦、旁边两条不擦,先把相邻结构逼到了危险边缘。


五、为什么 program 不会把旁边 WL 搞坏,而 erase 想只擦一条时却容易出问题?

很多人到这里会有一个非常自然的疑问:

program 的时候,被选中的 wordline 也会加到很高的电压;旁边那些没被选中的 wordline 也会加 pass 电压。那为什么 program 不会把相邻 wordline 之间的介质先搞坏?

而到了 erase 这里,为什么一旦想只擦一条 wordline,问题就突然变严重了?

这个问题的关键在于:

必须区分两件事:

  1. 高压操作进行时,wordline 之间真实承受的电压差
  2. 操作结束后,cell 因为存了不同电荷而留下的阈值差

这两件事,看起来有点像,其实完全不是一回事。

1)program 结束后,Vprogram 和 Vpass 都会撤掉

先说最容易混淆的一点。

program 一个 page 时,确实会出现这样的偏置条件:

  • 被选中的 WL:十几伏,书里的图示量级是 18V
  • 旁边未选中的 WL:不是 0V,而是较高的 pass 电压
  • 在公开的 program inhibit 资料里,这个 pass 电压常见是 7V 左右,也可以粗略理解成 7~10V 量级

但这些电压,只存在于 program pulse 正在施加的那一刻。

等写入完成之后:

  • Vprogram 会撤掉
  • Vpass 也会撤掉

所以 program 结束后,相邻 wordline 导体之间,并不会继续保持“18V 对 7~10V”这样的电压差。

这时候留下来的,不是 WL 上的高压,而是 cell 状态的变化:

  • 有些 cell 的浮栅里存进了更多电子
  • 这些 cell 的阈值电压变高了
  • 没被写进去的 cell,阈值电压还是低的

也就是说:

program 结束后留下来的,是 Vth 差,不是 WL 导体之间还挂着高压差。

2)program 时,相邻 WL 之间的压差其实是被控制过的

那为什么 program 在 pulse 进行时,也不会轻易把相邻 WL 搞出大问题?

因为实际 program 不是:

  • selected WL:18V
  • 旁边所有 WL:0V

如果真是这样,相邻 WL 之间的压差确实会非常夸张。

但 NAND 实际不是这么偏置的。

program 时更接近这种关系:

  • selected WL:18V 量级
  • neighbor WL:7~10V 量级的 pass 电压
  • 不想被写入的 string,再通过 inhibit 把 channel 抬高,避免电子进入浮栅层

所以相邻 WL 之间真正承受的差值,不是:

18V 对 0V

而更像是:

18V 对 7~10V

也就是说,相邻 WL 之间的实时压差虽然存在, 但它是一个被设计过、被控制过的差值。

因此,program 的主要问题通常不是“相邻 WL 中间介质直接扛不住”,而更多体现为:

  • program disturb
  • pass disturb
  • edge disturb

3)erase 真正危险的,是“只擦一条”时的实时压差

现在再看 erase。

《inside NAND FLASH memories》作者给出的典型 erase 条件是:

  • common p-well / 衬底:约 20V
  • 被选中的 block 的 WL:0V
  • 然后电子从浮栅层回到衬底,cell 被擦除

如果现在擦的是整个 block,那问题反而没那么尖锐。

因为这时候,这个 block 里的很多 wordline 往往是一起配合动作的。 换句话说,在被擦 block 内部,更接近的是:

  • WL1:0V
  • WL2:0V
  • WL3:0V
  • WL4:0V
  • 下面 p-well:20V

此时会发现,在这种情况下:

同一个被擦 block 内,相邻 WL 之间的压差其实并不大。

真正强的,是从 WL 往下到衬底这一条方向上的电场。 也就是“竖着”的场在起作用, 而不是“横着”的 WL-to-WL 电场在主导。

这就是为什么正常的 block erase,并不会天然触发“相邻 WL 之间先被打坏”的那个问题。

4)真正麻烦,是非要做 single-WL erase

问题出在这里。

假设现在不想擦整个 block,而只想擦其中一条,比如 WL2。

那就会希望:

  • WL2:保持在容易 erase 的条件下,比如 0V
  • p-well:还是 20V
  • 但 WL1 和 WL3:又绝对不能一起被擦掉

那怎么保护 WL1 和 WL3 呢?就必须把它们放到一个更高的电位, 让它们对应 cell 的 erase 条件不成立。

于是局面很快就会变成:

  • WL2:0V
  • WL1 / WL3:十几伏
  • p-well:20V

这时,最危险的地方就不是“WL2 能不能擦掉”,而是:

WL2 和左右相邻 WL 之间,被强行拉出了很大的实时压差。

而现代 NAND 里,wordline 之间的距离非常小。在这么小的线距下,一旦相邻 WL 之间出现很大的压差,中间那层介质承受的横向电场就会非常强。

这时候本来是在“保护旁边那两条线别被擦掉”,结果却可能先把相邻结构逼到一个更危险的状态。

所以 page erase 难,不是难在“这条 WL 选不中”, 而是难在:

一旦选中了这条 WL,就必须让它和左右邻居活在完全不同的电压世界里。

这件事,在现代高密度 NAND 里,代价极高。 作者也正因此强调:如果为了保护部分 wordline 而让相邻 wordline 出现非零电压差,那么相邻 wordline 之间的电场可能导致介质击穿。


六、所以,program 和 erase 的本质差别到底是什么?

到这里会发现,真正的差别不是一句“一个加电子,一个减电子”就能说完的。

更深一层的差别是:

program 的控制方式

像针。

  • WL 选行
  • BL 选 bit
  • 一点一点写
  • 边写边 verify
  • 相邻 WL 的压差也被控制在合理范围内

所以它天然适合 page 粒度。

erase 的控制方式

像铲子。

  • 依赖共享 p-well 的高压
  • 依赖整块 WL 的偏置配合
  • 是区域性动作
  • 一旦想强行缩小到 page 粒度,就得先解决相邻 WL 的保护问题

所以它天然更粗。

一句话说透就是:

program 像拿针一点一点补。erase 像想拿铲子只挖走一粒沙。

不是绝对做不到。而是为了做到它,要付出的结构复杂度、可靠性代价和高压控制成本,往往大得不划算。


七、这不是协议规定,而是物理结构逼出来的结果

很多人第一次知道 NAND 只能 block erase 时,会以为这是协议规定、接口限制,或者厂商为了省事。

其实顺序正好反过来。

不是先有协议,再规定只能 block erase。而是先有 NAND 这种器件结构和擦除方式,后面的系统设计、接口定义、FTL 逻辑,都是顺着这个物理现实往上搭出来的。

也就是说:

不是大家商量好了 NAND 只能整块擦。而是 NAND 这种结构,天生就更适合整块擦。

一旦这个事实定下来,后面很多熟悉的 SSD 机制,其实都能一下子串起来:

  • 为什么 NAND 不能原地覆盖写
  • 为什么要 out-of-place update
  • 为什么需要 FTL
  • 为什么会有 GC
  • 为什么会有磨损均衡
  • 为什么擦写次数会影响寿命

因为所有这些复杂机制,往前追根,最后都会指向同一个源头:

erase 很重,粒度很粗,代价很高。


八、最后收刀

我们在软件世界里说“删除”,总觉得那是个很轻的动作:

  • 点一下
  • 删掉
  • 完事

但在 NAND 的物理世界里,删除从来都不轻。

它不是抹掉某一个格子,也不是把某一页轻轻清空。它更像是:

把整块阵列下面的地基抬起来,再把一整块 cell 里的电子一起拉回去。

所以 NAND 不是不会精细。它在 read 和 program 上,已经精细到 page。真正粗的,是 erase。

而 SSD 后面那些看起来复杂得有点过分的机制,很多并不是“锦上添花”,而是在给这个粗粒度的 erase 善后。说到底:

SSD 不是先有 FTL、GC、磨损均衡,后来才遇到 erase。而是先有 erase 的物理限制,后面才被逼出了整个 SSD 世界。