[NAND Flash 4.1] Flash(闪存)存储器底层原理 | 闪存存储器重要参数

依公知及经验整理,原创保护,禁止转载。

专栏 《深入理解NAND Flash》

<<<< 返回总目录 <<<<

​全文 5000 字。
从底层物理原理上了解 Nand Flash。

1. 存储器诞生:

现代计算机使用存储器来存储数据,其中存储的是0和1。然后,通过ASCII码(美国信息交换标准代码)来将二进制数字翻译为人们日常生活中使用的信息。这些信息包括我们在计算机设备中常用的指令(如空格、回车等)、字母、数字和标点符号等。在1992年,Unicode(字符标准码)被发布,解决了ASCII码表达其他国家和地区语言的不足之处。通过不同排列组合的0和1,我们能够获取不同的信息并与人类进行交流。

为什么是二进制呢?
因为受限于当时甚至现在的技术,人们制造的场效应晶体管(FET)只有在区分关态和开态的时候,其灵敏度是最高的。如果我们在开和关之间引入其他的态,一般是用固定电压下的电流值来区分态,所以当外界环境比较恶劣时,容易引起电流不受控制的变大或变小(例如温度因素,半导体的本征载流子浓度严重依赖温度,温度较高时,本征载流子浓度迅速增大,电流会急剧升高,从而失去目的开关与放大作用,所以CPU等半导体器件运行,降温散热非常重要),从而致使计算机运行中对态的错误识别,态越多,其误码率也就越高。

一个完整的CPU应该包括控制单元,寄存器,ALU(算数逻辑单元),RAM(随机存取存储器)。当然这个RAM一般是独立存在的器件,通过数据线,地址线,读取线以及写入线连接CPU,这样的一个构造其实就可以运行很多计算机指令了,但是有一个问题就是,这个计算机只能在供电的情况下才能使用,断电后,就立马失去了运行的数据。那么为了解决这个问题,我们就发明了ROM(只读存储器),这种存储器可以将想要的CPU运行结果保留起来,即便是断电情况下,也可以长时间保存,比如你写的文档,下载的音乐、视频都可以长时间保存起来。这里存储器的一种分类方式就出来了,根据断电后数据能否长时间保存,我们将存储器分为易失性存储器和非易失性存储器。下面是我汇总的存储器基本分类思维导图。
​​在这里插入图片描述
Fig. 1 存储器基本分类

事实上, RAM和ROM的读操作几乎相同。更恰如其分地说有时把RAM称为读-写存储器。然而,人们一直开发ROM的重写能力。因此,现在RAM和ROM之间的主要差别在于擦除和可编程的频度和容易程度。RAM重写和读的机会总是相等的;而ROM的读的频率远大于重写。

这句话可能让大家对RAM以及ROM的认识更加清楚,由于RAM也是FET(场效应晶体管)构造,其读写能力是通过电刷新的,CPU中的控制单元会经常将指令存入RAM,从RAM中读取指令,所以其读写的频率基本相等。对于ROM,现在我们用的比较多的形式是NOR flash 和NAND flash,根据不同的场景,使用不同的存储器,Nor flash 多用于嵌入式系统;手机,PC,USB,一般是存放数据,这个数据我们的读取的次数一般比写入要多,但是写的频率还是比较高的,这里一般使用NAND flash,这个我们稍后将展示原因。

下文中存储器指的是 Flash 存储器

2. Flash原理:

NAND flash是在FET的基础上,增加一个浮柵上,通过将电子注入到浮栅上,实现编程。其基本构造如下:

在这里插入图片描述

Fig. 2 Flash 存储器基本单元

2.1 Flash理论

以上图为例,通过在n沟道FET栅极上偏置正(负)电压,在源漏沟道之间感应负(正)电荷,可以打开(关闭)源漏之间的电通道。这个打开源漏之间电流通道的电压叫做阈值电压 VT ,也就是沟道从平带到反型所需要的电压。那么在在栅极氧化层中再插入一个浮栅,当浮栅上充入电子时,此时由于电子的屏蔽作用,想要将n沟道FET打开,则需要更高的 VT 。我们把未注入电子时的 VT 叫做 VT1 ,把注入电子后的 VT 叫做 VT0 。试想一下,当我们用大于 VT1 小于 VT0 的电压 VT′ 去尝试开启FET,若这时电路被打开,则说明FET浮栅中未注入电子,若没有打开,则说明FET浮栅中注入了电子。我们知道在CPU逻辑电路中,开态表示‘1’,关态表示‘0’,沿用这个逻辑,浮栅上未注入电子,是开态,表示逻辑 ‘1’ ;浮栅上注入电子,是关态,表示逻辑‘0’。不要怀疑,这个和你的直觉的确相反,在这里,注入电子表示写入‘0’;擦除电子,表示写入了’1’。这种类型的存储器的原理概括成一句话就是,通过在浮栅上注入电子改变FET阈值电压 VT 来实现存储功能。

2.2 存储器两种编程方式

我们已经为存储器注入了灵魂,现在来铸造其肌肉,也就是如何实现注入、擦出电子的过程。注入电子主要有两种过程原理,一种是热电子注入,另外一种是F-N 隧穿(Fowler-Nordheim隧穿)。

NAND不能使用热电子注入的方式, NAND是F-N隧穿,NOR是热电子注入过程.

2.2.1 热电子注入

热电子注入就是在源漏之间加上一个电压,由于压降原理,在漏端附近电场强度达到最大值(因为源极一般接地),因此电子在电场作用中,在漏极附近能量最大,变成热电子,当其能量大于 Si/SiO2 界面势垒,电子就能越过势垒(经典力学),进入到浮栅,热电子在电场作用下,与晶格发生碰撞会形成二次电子,二次电子也能注入到浮栅上。为了让电子能够有效的注入到浮栅上,一般会在控制栅上加一个正偏压,形成三角形势垒(如下图),帮助电子注入到浮栅上,与此同时就会产生一个栅电流,有电流就会有功耗,这是一个弊端。

在这里插入图片描述

fig 3 热电子注入理论

2.2.2 F-N隧穿

另外一个方式就是F-N隧穿,根据量子力学理论,电子有几率可以隧穿比本身能量高的势垒。隧穿的几率严重依赖势垒的高度与宽度,在Flash中,这个势垒就是介电层,介电层一般是 SiO2 ,但是也有其他高介电常数的材料应用在存储器中。材料决定了,势垒高度就决定了,其厚度就变成唯一的参数,我们可以通过控制势垒的厚度来控制电子是否可以隧穿,起到开关的作用。

在这里插入图片描述

Fig. 4 量子隧穿

有了这样的理论,我们如何实现呢?好在控制栅可以帮助我们更改势垒厚度,还记得刘恩科《半导体物理学》中第八章MIS结构吗?控制栅加上电压,介电层能带会弯曲成为一个三角形势垒,这对电子来说,其势垒厚度就变窄了。所以我们可以通过控制栅来改变介电层势垒厚度,从而控制电子是否能够隧穿介电层进入浮栅。下图是示意图。左图表示控制栅加正偏压使得沟道电子隧穿底部介电层进入浮栅,完成编程‘0’(Program状态). 右图表示控制栅加负偏压使得浮栅电子隧穿底部介电层到沟道,完成编程‘1’(Erase状态)。

在这里插入图片描述

Fig. 5 F-N 隧穿机理

讲到这里,闪存存储器的底层原理就讲完了。总结一下,闪存存储器就是在FET的基础上,在介电层中增加一个浮栅,通过控制栅,改变电子注入到浮栅或是从浮栅上擦除,从而实现编程,注入电子表示编程写入‘0’,擦除电子表示编程写入‘1’。读取过程是通过在栅极偏置一个比未注入电子FET阈值电压稍高的电压,源漏之间通就是‘1’,断就是‘0’,刚好和写入对应。编程注入电子的过程分为两种,一种热电子注入,一种是F-N隧穿,但是擦除电子只有F-N隧穿。F-N隧穿中加在控制栅的电压很高远大于读取的电压,毕竟是要隧穿过去。这里讲的是浮栅器件,还有一种器件就是电荷俘获器件,对比与浮栅器件,这里的电子俘获层一般是氮化硅,电子主要俘获在氧化物-氮化物界面。打个比方,浮栅器件俘获的电子如水流一般,而电荷俘获器件如奶酪一般。其F-N隧穿是修正的F-N隧穿,首先隧穿一个很薄的梯形氧化层势垒,然后再是一个三角形氮化硅势垒。

3. 闪存存储器重要参数

基本介绍了一下闪存存储器的基本单元,再看看其中影响它的重要参数。一个存储器,我们看中什么?便宜,存储密度大,存储时间久,读写速度快,读写次数多。存储器小声BB:MMP,人类啊,什么都要好的,臣妾做不到啊。

便宜就不说了,需要采用低廉的材料,成熟的工艺(降低边际成本),而存储密度就需要先进的工艺技术。我们着重看看后面三个参数:

3.1 存储时间久

这个好理解,存储器无非存储的是‘1’和‘0’。‘1’还好说,就是浮栅上没有电子,前面说了想要注入电子,是需要很高的控制栅电压的,所以电子不会自发进入到浮栅上,从而消灭你的数据‘1’。麻烦的是数据‘0’,一旦电子注入到浮栅上后,即便我们不再对存储器进行擦除、写入过程,电子仍然会慢慢逃逸出去(浮栅上的电子化学势比较高),我们一般定义电荷量减小到初始值的50% 时,就称为数据丢失。这个时间可以用下面的公式得到:

ν : 介电弛豫频率,与材料本身性能有关,可理解为热平衡的时间的倒数

q :元电荷电荷量

ϕB :势垒高度

k :玻尔兹曼常数

T : 温度

从中可以看到势垒高度是最重要的参数,势垒高度由介电层的厚度决定。上面我们说的是存储器不再进行擦除与写入过程,这样电子逃逸时间大概是100年,也就是说,理论上,你将SSD写满数据后,然后再也不写入、擦除数据,这份数据可以放置100年。但实际上不太可能完全不擦除、写入。根据擦除、写入的频率,SSD的理论时间是10-30年不等,如果非常频繁,甚至3-5年就坏了。这是因为擦除、写入过程中浮栅下介电层里的化学键退化,导致介电作用减弱,数据保存的时间越来越短,直到最终不能使用。(以前认为擦除、写入过程会致使介电层变薄,最新研究指出并不会变薄,而是化学键退化,电子变得更加容易进出。)

3.2读写速度快

根据性能要求,我们当然希望存储器保存时间越久越好,那么就需要介电层厚度比较厚,但是厚了就有一个问题,编程时间会增加,因为势垒大了之后,隧穿电流会降低,因为编程是否成功是看浮栅上电荷的变化量,而一定数目电荷量是电流的时间积分,电流小了,时间自然就长了。所以为了平衡这两个关键参数,工业届会慢慢去优化介电层厚度,尽量去平衡这对欢乐冤家。下层介电层厚度一般在8 nm左右,上层厚度一般在14 nm左右。

3.3 读写次数多

最后一个参数就是编程次数,编程次数一定是和使用时间有关的,不谈时间的编程次数就是耍流氓。上面说了,每一次擦除、写入过程都会对介电层造成损耗,这是不可逆的。也就是说,擦写频率越高,寿命越短,擦写频率越低,寿命越长。我找了一篇论文,论文中的研究成果显示:若擦写次数在3000次以内,数据能够保存3年左右,若擦除次数在150000,那么数据就只能保存3天。当然并不是说擦写150000次后,就不能用了,你可以在3天之内,读取数据后,重新写入,就可以再用了,但是随着次数的增多,保存的时间会越来越短,看到没有,非易失存储器慢慢在向易失性存储器“进化”。为了解决这样的问题,目前只有从软件层面去解决,通过优化算法代码,降低存储器的擦写频率,从而提高寿命。

参考:

3D Nand基本原理 3D Nand基本原理-你想知道的全在这里(上) - 知乎

参考

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/250182.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【FPGA】Verilog:解码器 | 实现 2-4 解码器

实践内容&#xff1a;解释 2 至 4 解码器的结果和仿真过程 (包括真值表创建和 k 映射、AND 门&#xff09;。 0x00 解码器&#xff08;Decoder&#xff09; 解码器是一种根据输入信号从多个输出 bit 中只选择一个的设备。 例如&#xff0c;如果有一个解码器接收一个 2 位二进…

章鱼网络 Community Call #16|逐步过渡到回购和销毁模型

香港时间2023年12月8日12点&#xff0c;章鱼网络举行第16期 Community Call。 自2023年4月份提出 Octopus 2.0 计划以来&#xff0c;我们一直致力于将这一愿景变为现实。感谢核心团队和章鱼社区的共同努力&#xff0c;我们决定于 12月17日正式推出 Octopus 2.0。 Community Ca…

node.js mongoose Aggregate介绍

目录 简述 Aggregate的原型方法 aggregate进行操作 简述 在 Mongoose 中&#xff0c;Aggregate 是用于执行 MongoDB 聚合操作的类。MongoDB 聚合操作是一种强大的数据处理工具&#xff0c;可以用于对集合中的文档进行变换和计算 通过Model.aggregate创建一个aggregate(Agg…

python批量实现labelImg标注的 xml格式数据转换成 txt格式保存

# -*- coding: utf-8 -*- import os import xml.etree.ElementTree as ETdirpath ********** # 原来存放xml文件的目录 newdir ********* # 修改label后形成的txt目录if not os.path.exists(newdir):os.makedirs(newdir)dict_info {sf6: 0, thermometer: 1,…

jmeter 如何循环使用接口返回的多值?

有同学在用jmeter做接口测试的时候&#xff0c;经常会遇到这样一种情况&#xff1a; 就是一个接口请求返回了多个值&#xff0c;然后下一个接口想循环使用前一个接口的返回值。 这种要怎么做呢&#xff1f; 有一定基础的人&#xff0c;可能第一反应就是先提取前一个接口返回…

低代码与工业4.0:数字化转型的完美伴侣

引言 工业4.0代表了制造业的一场革命&#xff0c;它将数字化、智能化和自动化引入了制造流程&#xff0c;重新定义了生产方式和企业运营。在这个数字时代&#xff0c;低代码技术崭露头角&#xff0c;成为工业4.0的强力支持者。本文将探讨低代码技术与工业4.0之间的紧密联系&am…

Linux 进程通信

文章目录 匿名管道匿名管道使用匿名管道原理匿名管道读写 命名管道命名管道使用命名管道特性 共享内存共享内存原理共享内存使用 补充说明 补充说明部分为相关函数和不太重要的概念介绍 匿名管道 匿名管道使用 使用方法一&#xff1a; 使用函数介绍&#xff1a; #include &…

DevEco Studio自定义代码颜色

这里以ArkTS代码颜色举例 进入设置&#xff08;快捷键CtrlAltS&#xff09; 选择Editor > Color Scheme > JavaScript 由于之前用习惯VsCode了&#xff0c;这里以注释颜色举例&#xff0c;变为绿色。 上面说的不是以ArkTS代码颜色举例吗&#xff1f;为什么选择JavaScr…

极坐标下的牛拉法潮流计算14节点MATLAB程序

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 潮流计算&#xff1a; 潮流计算是根据给定的电网结构、参数和发电机、负荷等元件的运行条件&#xff0c;确定电力系统各部分稳态运行状态参数的计算。通常给定的运行条件有系统中各电源和负荷点的功率、枢纽…

产品经理之如何编写需求PRD文档(医疗HIS项目详细案例模板)

目录 前言 一.需求文档的含义 二.需求文档的作用及目的 三.编写前的准备 四.需求大纲 五.案例模板 前言 继上两篇的可行性分析文档和竞品分析报告&#xff0c;本篇将继续介绍如何编写PRD文档&#xff0c;并且会附上以医疗项目为例的模板 一.需求文档的含义 需求文…

设计模式——享元模式(结构型)

引言 享元模式是一种结构型设计模式&#xff0c; 它摒弃了在每个对象中保存所有数据的方式&#xff0c; 通过共享多个对象所共有的相同状态&#xff0c; 让你能在有限的内存容量中载入更多对象。 问题 假如你希望在长时间工作后放松一下&#xff0c; 所以开发了一款简单的游戏…

论文润色机构哪个好 快码论文

大家好&#xff0c;今天来聊聊论文润色机构哪个好&#xff0c;希望能给大家提供一点参考。 以下是针对论文重复率高的情况&#xff0c;提供一些修改建议和技巧&#xff0c;可以借助此类工具&#xff1a; 标题&#xff1a;论文润色机构哪个好――专业、高效、可靠的学术支持 一…

条件概率密度

设二维随机变量的概率密度为&#xff0c;关于的边缘概率密度为。若对于固定的&#xff0c;有&#xff0c;则称为在条件下的的条件概率密度&#xff0c;记为&#xff1a;

(七)STM32 NVIC 中断、优先级管理及 AFIO 时钟的开启

目录 1. 中断相关知识简介 1.1 什么是中断 1.2 什么是内中断、外中断 1.3 什么是可屏蔽中断、不可屏蔽中断 2. CM3 内核中断介绍 2.1 F103系统异常清单 2.2 F103 外部中断清单 3. NVIC 简介 3.1 NVIC 寄存器简介 3.2 NVIC 相关寄存器的介绍 4. 中断优先级 4.1 优先…

黑马点评01

基础篇-07.Redis命令-数据结构介绍_哔哩哔哩_bilibili 1.NoSQL 非结构化数据库&#xff0c;和sql的区别在于没有数据库表之间的关系&#xff08;主键外键&#xff09;&#xff0c;一般的存储形式是JSON。每个json里面都存储了该记录的所有数据&#xff0c;所以有一定重复性。 …

spring6 为集合类型属性赋值 --引用集合类型的bean

1.准备工作&#xff1a; Student.java package bean.dimap;import java.util.List; import java.util.Map;public class Student {private String sid;private String sname; //private Map<String,Teacher> map;//private List<Lesson> lessonList;public List&…

空洞文件读取空洞部分的返回值

在空洞文件中&#xff0c;未显式写入的部分被称为"空洞"。当读取空洞部分时&#xff0c;系统会返回字节值为0的数据。 这意味着&#xff0c;当你在空洞文件中读取一个偏移量处的数据&#xff0c;而该偏移量位于空洞部分时&#xff0c;读取操作将返回一个全是0的字节…

Spring Boot3.1.6配置对应的Swagger

1. pom.xml导入Swagger依赖 <!--swagger3--> <dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-starter-webmvc-ui</artifactId><version>2.0.2</version> </dependency> 2.创建SwaggerCo…

buuctf-Misc 题目解答分解85-87

85.[UTCTF2020]file header 下载完就是一个图片 &#xff0c;但是显示图片错误&#xff0c;提示文件头 没有 用010editor 打开 找一个png 文件&#xff0c;看一下它的头部 只需要修改前四个字节为 89 50 4E 47 即可 就能拿到flag utflag{3lit3_h4ck3r} 86.[WUSTCTF2020]gir…

v-md-editor高级使用之自定义目录

​ 官方给出的目录设置参见&#xff1a;https://code-farmer-i.github.io/vue-markdown-editor/zh/senior/toc.html#%E7%9B%B8%E5%85%B3%E9%85%8D%E7%BD%AE ​ 在做实际使用中往往可能需要将目录结构独立出来&#xff0c;经过近一天的研究终于明白其实现逻辑&#xff0c;并将目…