只读分享解决方案文档原理方案设计📅 2026-10-14🔖 Rev 1.0⏳ 还有3日到期
🔧解决方案&应用市场分析 -> 原理方案设计 -> 电子设计&技术探讨 -> NAND干扰机制与数据保持_技术探讨

NAND干扰机制与数据保持_技术探讨

同系列 · 原理方案设计
扫码打开本页
微信扫码

NAND 干扰机制与数据保持

编制日期 2026-10-14 | 版本号 Rev 1.0

存储技术探讨系列 · 第二篇 | 上一篇:《NAND 存储单元与 3D NAND 技术探讨》| 面向 XTX 存储芯片从业人员的内部技术参考

5 类
单元层面的干扰与退化来源
编程干扰 / 读干扰 / 单元间耦合 / 数据保持 / 擦写磨损
10⁵ 量级
读干扰开始显现的同块读次数
小几何尺寸 TLC/QLC 上更早
10⁻¹⁵ 量级
企业级 UBER 的典型要求
消费级通常放宽一到两个数量级
4 道
系统侧拦截错误的防线
读回收 / 重试与 ECC / 磨损均衡 / 巡检刷新
报告总结

上一篇把 SLC/MLC/TLC/QLC 与 3D 堆叠讲清楚了:单元怎么存、怎么读、为什么层数越堆越高。本篇只讨论一件更靠近失效的事——单元为什么会出错。

具体拆成三问:一是错从哪来,把编程干扰、读干扰、单元间耦合、数据保持、擦写磨损五个物理来源逐个剖到因果链;二是错怎么累积,为什么单次看不见的影响会在成千上万次操作之后集中爆发;三是系统在哪兜住,从 ECC、Read Retry、Read Reclaim 到巡检刷新,各自的拦截位置与失效边界。

本篇不讨论 FTL 算法实现、不讨论具体产品选型,也不给任何厂商的保证值。涉及数字一律给量级与工程口径,标「典型」的地方请按对应数据手册与实测复核。

结论:NAND 的错误不是「意外的坏块」,而是共享字线/位线这一结构决定的必然副产品——每次操作都不可能只作用于一个单元,偏差被干扰、磨损、环境三条渠道持续注入 Vt 分布,然后由 ECC、读重试、读回收、巡检四道防线一层层拦截;一旦失效速度超过纠正与搬移速度,就表现为不可纠正误码。把预算做在「抑制注入」和「及时搬移」两侧,比把希望全押在 ECC 上可靠得多。

路线 1 · 30 分钟
只看主干
封面 → 第 1 章(五类现象坐标系与五段因果链)→ 第 8 章(四道防线)→ 第 11 章(速查与误区)。
适合:需要快速建立整体判断的管理与销售支持岗
路线 2 · 半天
机制搞清楚
第 2~7 章逐章读,重点看每章「谁施加电压 → 单元内部发生什么 → Vt 怎么变 → 读出怎么错 → 系统怎么补」这条链。
适合:固件、测试、可靠性工程师
路线 3 · 指标口径
对外怎么答
第 9 章(RBER 到 UBER 的换算)→ 第 10 章(JEDEC 条件读出)→ 附录 B(指标速查)。
适合:需要答复客户质询的技术支持与 FAE
路线 4 · 落地
把要求写进规格
第 11 章(现象 → 原因 → 处置)→ 第 12 章(三段核查清单)→ 附录 C(横向对照)。
适合:立项评审与硬件/固件设计负责人

本篇与上一篇的分工

维度上一篇《存储单元与 3D NAND》本篇《干扰机制与数据保持》
讨论对象单个单元的存储原理与工艺结构大量单元在共享电极下的相互影响
核心物理量阈值电压的状态数与读窗阈值电压随操作次数、时间、温度的漂移
时间尺度结构代际(年)单次操作到整盘寿命(微秒到数年)
典型问题SLC 还是 TLC、平面还是 3D数据还能放多久、还能读多少次
失效观结构决定了容量与成本使用方式决定了错误曲线的斜率
对应岗位选型、产品定义可靠性、固件、测试、失效分析

两篇是同一个坐标系的两条坐标轴:上一篇给出「这个盘子先天能有多好」,本篇给出「后天用了多久之后还剩多少」。做规格书时两篇要一起看,只看任一篇都会得出偏乐观的结论。

1. 干扰是 NAND 的固有属性

NAND 的一切错误来源,都可以追溯到同一个结构事实:单元不是独立器件,它同时挂在一条字线和一条位线上,任何一次操作都必然把电压施加到一批「不是目标」的单元上。这不是制造缺陷,而是密度换来的代价。

1.1 字线与位线:单元为什么甩不掉邻居

NAND 阵列的组织方式决定了「独立寻址一个单元」这件事从物理上做不到。若干个单元串联成一条 string(串),串的上端接位线(BL)、下端通过选择管接源线;同一层的所有单元栅极连成一条字线(WL),一条字线横向贯通同一个块(或子块)里的所有串。

于是每一次操作都是一次「批量动作」:

  • 编程:被选中的 WL 拿到逐步抬升的编程脉冲 Vprog,同一条 WL 上不想被写的单元要靠位线电压把它们「禁止」掉;而为了让被选中那条串的沟道真正建立电位,这条串上其余 WL 必须抬到通过电压 Vpass 把它们的沟道打通。
  • 读取:被选中的 WL 拿到读参考电压 Vref,同一串上其余 WL 一律抬到 Vpass 充当导通开关,也就是说读一页等于把同块(同子块)上几十到上百条未被选中的字线全部加一遍 Vpass。
  • 擦除:以块为单位整块加高压,块内所有单元一起经历。

数量上有个体感很有用:一条 WL 上挂的单元数量是数千到上万量级(随块大小、是否划分为子块而变),一条串上的单元数量是几十量级(大致等于堆叠层数或更早时期的串长度)。也就是说,一次「写一个页」的动作,至少会影响同一条串上几十个单元的沟道电位,以及同一条 WL 上数千个单元的栅极电位。想只折腾一个目标单元,物理上办不到。

电极共享范围操作时被施加的电压非目标单元的状态
字线 WL同一块(或子块)内的所有串选中者:Vprog/Vref;未选中者:Vpass全部在承受非零栅压
位线 BL同一条串上的所有单元编程时:0 V 或禁止电压中的一种沟道电位被整串决定
源线 SL整个块甚至更多通常接地或抬到较高电位参与构成擦除/读取偏置
衬底 / 体整个阵列擦除时整块高压一行都逃不掉

这个表格里最值得记住的一行是「未选中者:Vpass」。NAND 里绝大部分的错误,都不是发生在「你想操作的那些单元」身上,而是发生在「你被迫带上它们的那些单元」身上。

1.2 五类退化现象的坐标系

工程上把 NAND 的可靠性问题习惯拆成五类。它们经常被混在一起说,但触发条件完全不同,混淆后最容易出现的误判是「反正是老了,算了」。先把坐标立起来:

现象触发动作主要受力对象Vt 的走向是否可逆
编程干扰
Program Disturb
对同块其它页编程同一 WL 上未被选中的单元缓慢升高(被软编程)擦除后可复原
读干扰
Read Disturb
反复读同一块内的某一页同块未被读的那些页缓慢升高(累积软编程)擦除后可复原
单元间耦合
Cell-to-Cell
邻居被写入之后已写入单元的相邻单元升高或展宽,取决于邻居写入先后擦除后可复原
数据保持
Retention
什么都不做,只流逝时间所有已写入单元整体向低 Vt 方向漂移并展宽不可复原,需靠搬移保住数据
擦写磨损
Endurance
反复擦除与编程整块的隧穿氧化层先加剧泄漏、后导致 Vt 卡死不可逆的硬件损耗

区分它们的关键提问方式很简单:如果没有任何操作、只放时间,会不会坏?会 —— 那是保持;不会 —— 那一定是某次操作注入的,再追问「谁在被操作」。第二层提问是擦掉重写能不能恢复正常:能恢复的是干扰类,恢复不了的是磨损类。

五类机制的角色分工

环节贡献形式工程上的可控程度
编程干扰给 Vt 分布加一个随写字数增长的偏移量中:电压方案与写顺序可优化,颗粒厂已内置大部分对策
读干扰给「长期只读」的冷数据加风险高:完全靠系统的读计数与搬移策略解决
单元间耦合在写入瞬间直接改变已写好邻居的 Vt高:写顺序与预补偿由系统端主导
数据保持随时间单调劣化,与温度强相关低:只能预测并提前搬移,无法阻止
擦写磨损抬高前四项的斜率中:靠磨损均衡把总量摊开

注意最后一行:磨损本身不一定直接产生错误,它的主要害处是把前面四项的劣化速度整体抬高。所以在 TLC/QLC 上,同样一个读热点在盘的前期和末期,造成的读干扰后果完全不是一个数量级。

1.3 干扰到误码的五段因果链

本篇后面所有章节都套用同一条五段链。碰到任何现象,按这个顺序问一遍,基本能定位:

  1. 谁施加了电压:哪一次操作(编程/读/擦)、选中了哪条 WL/BL、邻居因此拿到什么电压。
  2. 单元内部发生了什么:是隧穿注入、是热电子注入、是陷阱辅助泄漏(SILC),还是纯粹的电势串扰。
  3. Vt 怎么变:整个分布平移、单边拖尾、还是整体展宽;方向是变高还是变低。
  4. 读出怎么错:分布相对读参考电压越过判读门限的那一部分比例,就是原始误码率 RBER。
  5. 系统怎么补:是靠 ECC 直接纠正,还是必须靠 Read Retry 换一组 Vref 重读,还是必须 Read Reclaim 搬移重写。
一次编程操作的波及范围:真正的目标只有 1 个单元,被一起带上的是同一条字线与同一条位线上的几十到上百个NAND 阵列局部:每个单元同时属于一条字线和一条位线,谁都甩不掉邻居BL0BL1BL2BL3BL4WL0旁观单元旁观单元同 BL 邻居旁观单元旁观单元WL1旁观单元旁观单元同 BL 邻居旁观单元旁观单元WL2同 WL 邻居同 WL 邻居目标单元同 WL 邻居同 WL 邻居WL3旁观单元旁观单元同 BL 邻居旁观单元旁观单元① 目标:把 WL2 与 BL2 交叉点上的这一个单元,从擦除态推到目标 Vt② 代价:WL2 上其余单元被抬到 Vpass,BL2 上其余单元被抬到沟道电压,全都陪着受力编程目标单元同字线:被迫承受 Vpass同位线:被迫导通串扰之外的旁观单元字线横向贯通同一 WL 上的单元共用栅极,给一条 WL 加压等于给整行加压位线纵向贯通同一串上的单元共用沟道,未选中单元必须被抬成导通单次代价极小一次操作只压出极小偏移,成千上万次累积才吃掉读窗口
图 1 · 阵列里的「改一个,带上邻居」:一次编程操作的波及范围
链条环节本篇对应章节常见误判
谁施加了电压第 2~4 章以为只有写才会伤单元,忽略读操作
单元内部发生了什么第 5~6 章把保持错误直接当成坏块
Vt 怎么变第 3、5 章只用「平均漂移」描述,忽略分布展宽
读出怎么错第 7、9 章把读窗口偏移当成数据已经丢失
系统怎么补第 8 章认为 ECC 能兜住一切,不做搬移预算

最后提醒一句:这条链是单向的。系统侧的动作(第 5 段)只能「读出已经发生的 Vt 变化之后去补」,它不能反向消除前四段。ECC 纠正了这一次读出,不代表下一次读出还能纠回来 —— 这是后面第 8、9 章反复要讲的边界。

2. 编程干扰 Program Disturb

编程时被「顺手带上」的那些单元,虽然拿到了远低于 Vprog 的电压,但因为这个电压被施加了几万次、几十万次,累积起来足以把它们的阈值电压推过判读门限。

2.1 编程时到底有几类单元在受力

把一次编程操作的偏置列全,会发现「未被选中」远不是一个统一的状态:

单元类别所在位置栅极电压沟道/位线状态受到的影响
被编程单元选中 WL × 选中 BL(值为 0)Vprog 阶梯脉冲接地,压差最大发生隧穿,Vt 被推到目标态
被禁止编程单元选中 WL × 禁止 BL同样是 Vprog被抬到禁止电压(自升压)压差被压缩,但仍有一点点弱编程
同 WL 的旁观单元选中 WL × 其它串同样是 Vprog沟道浮空或被抬升靠沟道自升压降低压差
同串的其它 WL 单元未选中 WL × 被选中串Vpass沟道电位由整串决定承受 Vpass 反复应力,缓慢右移
完全旁观单元未选中 WL × 未选中串Vpass基本无压差受影响最小,但不是零

关键点在于:给一条 WL 加 Vprog 时,这条 WL 上是所有单元都拿到 Vprog,而不是只有目标那个。颗粒只能靠位线(或准确的说,靠让串的沟道电位浮起来)让不想写的单元「压差变小」来抑制写入,压差不可能被压到零。这就是「编程干扰」四个字的物理起点。

禁止编程是怎么实现的

不想写的那些串,位线被抬到一个禁止电压,串 Select 管关闭或沟道被预充到某个电位,之后随 WL 升压,沟道通过寄生电容被「自升压」耦合抬上去。沟道电位越高,栅压与沟道的压差越小,隧穿电流指数级衰减,写入就被有效禁止了。这个机制称为 self-boost / 自升压。它的副作用也很清楚:自升压不到位的地方(比如靠近源端选择管那几条 WL,电位更容易通过沟道漏走)恰恰是编程干扰最严重的重灾区。

为什么这种干扰容易被忽略

因为它在单次操作里的量几乎测不出来。一次应力造成的 Vt 位移只是读窗宽度里极小的一段,怎么读都读得对。真正让它变得致命的是重复次数:同一个块被写几百上千次的过程中,同一批旁观单元会被反复压几百上千次。

2.2 四种典型形态

形态发生位置机理一句话典型规律
Vpass 软编程
(Pass Disturb)
未选中 WL 上、位于被选中串的单元每次写入都要被抬一次 Vpass,弱的隧穿一点点注入与本块被写的页数成正比
自升压不足导致的弱编程
(Program Disturb)
选中 WL 上、自升压最差的几条 WL 附近沟道电位没抬到位,栅沟压差偏大位置高度集中,靠近源端选择管
邻近串的耦合位移相邻 BL 上同期操作的单元相邻位线之间的寄生耦合改变沟道电位与同时编程的页数、图案相关
擦除态拖尾整块尚未写入的区域被反复回写的擦除态单元尾部向高 Vt 移动表现为擦除态分支变宽

四种形态里,第一种的量最大、也最均匀;第四种最容易在出厂测试时被放过,因为它不改变擦除态的中心,只是把右边那条尾巴拉长。第三种属于工程上最难建模的一类,因为它取决于写入图案,而图案取决于上层的数据流。

2.3 颗粒层面的压制手段

手段做法收益代价
双电平 Vpass近邻 WL 用较低的 Vpass_R,远处 WL 用较高的 Vpass直接降低近邻单元的累积应力时序与控制复杂度上升
优化自升压调整预充沟道的时序与位线电压方案把弱编程压到可忽略对选择管漏电敏感
减小 Vpass 幅度在保证沟道导通的前提下压低 Vpass指数级降低隧穿电流读/写裕量变小,温漂更敏感
写入顺序重排让近页先写、远页后写,减少回踩削弱耦合与多次应力由上层策略决定,颗粒只能建议
减小单次编程步长ISPP 步长更小、校验更密写入分布更紧,留出更多读窗tPROG 变长

这几项里,「近邻 WL 用更低的 Vpass」是收益最直观的一项:真正需要压低應力的其实只是离选中 WL 最近的几条,把它们单独拉低一级、其余 WL 保持高压以保证沟道导通,整体应力立刻下降。代价只是多几组解码路径与控制时序。

编程干扰:目标单元拿到编程脉冲,同一条 WL 上的旁观单元拿到的是「仅仅开关用的」通过电压偏置分配:目标单元与旁观单元看到的电压完全不同Vpass旁观单元本应保持原 VtVpass旁观单元本应保持原 VtVprog目标单元正在被推高 VtVpass旁观单元本应保持原 VtVpass旁观单元本应保持原 Vt同一条 WL 上,只有目标单元拿到足以发生隧穿的高压;其余单元只是「被抬起来保证通道导通」,但这个抬起来的电压本身就在微弱地注入电荷后果:重复编程之下,同一 WL 上被禁止编程的单元 Vt 缓慢右移,越过判读门限即成误码Vref 判读门限dVt:软编程位移擦除态分布主体(低 Vt)被反复软编程拖出来的尾巴(越过门限即判错)
图 2 · 编程干扰:Vpass 对旁观单元的软编程效应
一个常见说法的修正

「数据不动就不会坏」这种说法在编程干扰这里就不成立:数据不动,但同一个块里其它页在写 —— 只要在同一块里有人在写,你的那一页就一直在陪着领 Vpass 应力。静态数据不等于零应力,只是应力来源从「自己被访问」变成了「邻居被访问」。

章节收尾留一句话:编程干扰之所以被控制得比较好,是因为它的电压方案完全在颗粒厂手里,几十代产品迭代已经把它压得很低。相比之下,读干扰完全没有这层保护 —— 读多少次、集中在哪几个块,完全是上层系统的行为,没有任何硬件机制替你管。这就是下一篇要讲的内容。

3. 读干扰 Read Disturb

读同样要给整条串上的字线加通过电压。读一个页,等于把同一物理块里几十到上百条未被选中的字线挨个抬一遍 Vpass —— 这与编程干扰里那段软编程效应是同一个物理过程,只是触发动作从「写」换成了「读」。

先纠正一个流传很广的说法:「读操作不伤闪存」

这句话在 NOR 上大致成立,在 NAND 上不成立。读的时候被选中的字线只拿到很低的读参考电压,但同一条串上其余所有字线一律要抬到通过电压去充当导通开关。对那些没有被读的单元来说,栅极与沟道之间存在一个反复施加的电场,电子会顺着隧穿一点点注入存储层。

读一两次当然没事,问题是读热点:目录项、索引节点、被反复扫描的数据集,可能在几天之内被读几十万次,而同一个物理块里的所有页跟着承受同样多次的通过电压应力。这就是读干扰,它真实存在、可以复现,并且不擦除就不会消失。

3.1 读一个页,全块陪跑

把一次读操作的偏置清单列全,再和编程做一次对照:

单元位置读操作时的栅极电压受力性质与编程的区别
被读的那一页(选中字线)读参考电压 Vref,幅度很低基本无应力编程时这里拿到的是高压脉冲,情况正好相反
同一条串上未被选中的字线通过电压 Vpass每次读都被抬一次,典型的软编程应力与编程时完全相同
选中字线上没有被读的那几位同样是 Vref几乎无应力编程时它们要承受自升压不足的风险
其它串上的单元取决于是否被抬到 Vpass次要影响量级明显更小

结论有点反直觉:一次读操作真正施加应力的,恰恰是那些没被读、但挂在同一条串上的单元。所以读热点的风险并不落在被反复读取的那一页上,而是落在同一个物理块里的那些长期冷数据页身上。

这个结论在失效现场非常有用。用户报「A 文件打不开」,出问题的往往不是 A 文件所在的那一页,而是 A 所在物理块里某个长年没人写的邻居页被读崩了。把它擦掉重写一次如果能恢复,就可以基本确定是读干扰而不是硬件损伤 —— 这是现场最快的一条判断线。

3.2 读次数与 Vt 漂移的累积关系

读干扰随累计读次数的演化大致分三段:

阶段同块累计读次数量级Vt 位移占读窗的比例外部表现
前期1 到 10⁴远小于百分之五完全看不出来,读出与写入一致
中期10⁴ 到 10⁵百分之五到百分之十五边缘位开始越界,原始误码率缓慢抬升,纠错记录变多
后期10⁵ 以上接近或超过百分之二十单页误码数逼近纠错能力上限,必须重读或搬移

这张表给的是近年工程上的经验量级,不是任何产品的保证值。它随三件事强烈变化:一是几何尺寸与堆叠结构,越先进、读窗越窄,同样的绝对位移占比越高;二是单元类型,多比特单元的读窗只有单比特单元的几分之一;三是这个块已经写了多少次,磨损会把所有机制的斜率一起抬高。同一个系统在不同的寿命阶段,同一个读热度造成的后果可以差出一两个数量级。

读干扰:每读一次,同块里所有未被读的字线都被抬一次 Vpass —— 单次几乎无损,次数堆上去就成了软编程同一块的累计读次数与 dVt 累积量的关系(示意,纵轴为相对读窗的比例)判读门限 dVtlim到这里读书开始大量判错110³10⁵10⁷10⁹同一块的累计读次数(对数刻度,示意量级)dVt(相对读窗的归一化刻度)风险区单次无感一次 Vpass 只注入极少量电荷,远小于一个读窗的宽度万次级开始抬头同一个物理块被反复读,效应在同一个物理块上累加十万次级越过门限此时 ECC 尚可纠,但必须靠读回收搬走
图 3 · 读干扰:读次数与 Vt 漂移的累积关系

这条曲线还有一个容易被忽略的特点:它不是线性的。接近判读门限时,多一点点位移就会让越界的比特数快速增加,因为决定误码率的是分布越过门限的那块尾部面积,而不是分布中心离门限还有多远。所以处置动作不能等原始误码率明显上升再做,必须在逼近门限之前就把数据搬走。

3.3 读热点与计数量级

颗粒自己不会限制读次数,计数与管理完全落在系统头上。先看清热点长什么样:

热点来源典型形态为什么不容易被发现对策
文件系统元数据目录项、分配表、日志超级块上层访问的文件各不相同,底层却总是同一个块元数据常驻缓存,或对元数据区单独做静态搬移
只读映像系统分区、固件分区、预置数据集长期不写,也就长期没人替它检查和搬家周期性巡检,把读计数纳入巡检触发条件
后台校验与全盘扫描备份软件核对、杀毒扫描、体检工具短时间内的读次数可能是平时的几百倍限制后台扫描带宽,或改成抽样校验
数据库索引树的上层节点,每次查询都要走一遍物理位置集中、访问频率极高留在缓存里,避免每次都落到闪存上读
计数的粒度很容易选错

读计数必须以物理块为粒度,而不是以逻辑页或文件为粒度。上层看到的是「这个文件被打开了一万次」,颗粒关心的是「同一个物理块在这一万次里被读了八千次」。两者之间隔着映射表,只在上层计数会完全漏掉真实热点。

另一个常见分歧是阈值取多少。颗粒规格书通常会给出同一个物理块允许的读干扰上限,典型在十万次级;企业实践里更常见的做法是取这个值的若干分之一作为读回收触发线,留出足够裕量,让搬移动作在纠错机制尚有余力的时候就完成。这条线具体怎么定,见第 8 章。

4. 单元间耦合干扰 Cell-to-Cell Interference

这一类干扰与有没有在操作关系不大,它关心的是「邻居最后写到哪儿了」。邻居的电荷通过寄生电容改变目标单元的有效栅压,读出来的阈值电压因此被整体抬走或拉回一段。

4.1 寄生电容从哪里来

浮栅是一小撮被绝缘层完全包围的导体;电荷俘获层虽是绝缘体,其被俘获的电荷同样构成一个「存储节点」,可以用同样的电容模型来近似。它与周围所有导体之间都存在电容:与控制栅之间、与沟道之间、与相邻单元的浮栅之间。最后一项就是这段要讲的耦合电容。

核心的物理关系只有一句话:

dVt(目标)约等于 k × dVt(邻居)      其中 k = 耦合电容 / 浮栅看到的总电容

k 是耦合系数,典型在百分之几到百分之十几的量级。它只由几何结构决定:单元挨得越近、浮栅面积越大、控制栅的耦合被邻居分走的份额越多,k 就越大。这也是为什么随着尺寸缩小与堆叠层数上升,耦合一直是可靠性的重点关注项 —— 结构在做小,读窗也在变窄,两边的裕量同时被吃掉。

电容项两端导体设计意图对耦合的影响
控制栅耦合电容控制栅 与 浮栅希望越大越好,读写效率高越大则 k 越小,是有利的那一端
沟道耦合电容沟道 与 浮栅读写必经的电势通道同样摊薄 k
相邻浮栅的耦合电容邻居浮栅 与 目标浮栅毫无用处,纯寄生项直接决定干扰强度
相邻字线耦合邻居字线 与 目标浮栅寄生项字线间距越小越强

最后一行提醒了一件容易被漏掉的事:干扰源不止左右邻居,还包括同一条串上纵向相邻的字线。进入三维堆叠之后,干扰源从平面上的四邻扩展成「相邻层加同层横向邻居」,建模复杂度明显上升,这也是为什么先进代次上耦合问题更依赖实测标定而不是解析计算。

4.2 邻居写完前后,Vt 怎么挪

位移方向完全取决于邻居最终停在哪一档。把整个过程拆成三步:

  1. 目标先写:此时邻居多半还处在擦除态,目标单元按这个环境条件被校验到目标 Vt。
  2. 邻居再写:邻居被推到较高 Vt,意味着它的浮栅电位被明显改变。
  3. 目标被带动:通过耦合电容,目标浮栅的电位被邻居拖着走一段,等效于它的控制栅效率发生了变化,读出时需要的栅压随之改变,表现就是这个单元的 Vt 挪动了。

记住一条就够:挂在同一条字线上的单元,写在不同时刻,彼此的判读条件就不一样。至于往哪个方向挪,取决于电荷被注入或抽走的方向,不必死记,工程上真正要的是「可预测」这三个字。

邻居最终状态分布目标单元的位移对读出意味着什么工程关注度
全部还在擦除态位移最小,基本停在校验时的位置判读最从容低
状态随机混合位移居中但分散,带来额外的分布展宽读窗从两边被挤占中
全部推到最高态位移最大,整条分布被推过去最容易越过相邻状态的判读门限高

第三行是最麻烦的情形。如果所有邻居都被写到了最高态(某些极端数据图案),整页的阈值电压会被一起推高;而在多比特单元上,相邻两个状态之间的窗口本来就只有很小的余量,整条分布平移就足以让原本稳稳落在窗口中间的位全部贴到边界上。

单元间耦合:邻居写完前后,通过寄生电容把目标单元的 Vt 抬走一段 —— 与或不写入自身的顺序强相关耦合模型的物理路径:浮栅与邻居之间通过寄生电容隔空牵手邻居 A已写入先完成编程目标单元受影响的一方邻居 B尚未写入Cc 寄生耦合电容Cc 寄生耦合电容dVt(目标) 约等于 k × dVt(邻居),其中 k = Cc /(浮栅总电容)① 目标单元自身的电荷没变,变的是「怎么读它」:栅极看到的实际电压被邻居的状态改写了一部分② 因此这类漂移在擦除重写后完全消失 —— 它是偏压条件的函数,不是硬件损伤同样一个目标单元,被邻居推向哪里取决于邻居的最终状态位移最小邻居全在擦除态位移居中且分散邻居状态随机混合位移最大邻居全在最高态
图 4 · 单元间耦合干扰:寄生电容模型与三种邻居状态对比

这也解释了为什么耦合干扰很难用一个「最坏情况下的固定补偿值」一次性对付掉:邻居的组合由数据决定,是随机的。要么在系统侧按写入顺序预先修正,要么把它当成随机误差留给纠错机制去兜,二者选一。

4.3 编程顺序与预补偿

手段原理生效层级局限
按字线顺序写让所有单元在同样的邻居条件下被写,消除先后差异系统写入策略要求严格依序写入,对随机写不友好
写入时预先畸变写前半桶数据时先少写一点,等邻居写完后自然被抬到位颗粒内部时序只能补偿已知且确定的邻居组合
读参考电压补偿读的时候根据已知的邻居状态挪动参考电压颗粒固件得先知道邻居状态,代价是多读一次
比特交错 + 扰码把相邻单元的数据打散,并降低极端图案出现的概率系统数据处理是缓释而不是消除
最容易被低估的一条

顺序写在可靠性上的收益,经常被拿去和标称指标对比,然后被认为不重要。它真正的价值在于把耦合误差从随机误差变成了可预测的系统误差:随机误差只能靠纠错台阶硬扛,系统误差可以被预先补偿掉。换句话说,顺序写不仅提高可靠性,还大幅减少对纠错预算的消耗。

读心的收尾:单元间耦合不改变任何单元内部的电荷,它改变的是读出时的电势条件。因此它和编程干扰、读干扰一样,擦除重写之后就会消失。判断是不是耦合问题的方法也很直白 —— 擦掉重写之后电荷恢复正常了吗?恢复了,那就不是硬件损伤,而是可以靠写入顺序从容安排的问题。