FLASH学习

FLASH学习


1、Nand Flash基础

NAND Flash是一种非易失性随机访问存储介质,基于浮栅(Floating Gate)晶体管设计,通过浮栅来锁存电荷,电荷被储存在浮栅中,它们在无电源供应的情况下仍然可以保持。

1.1、Nand Flash加工过程

NAND Flash是从原始的硅材料加工出来的,硅材料被加工成晶圆(Wafer),一片晶圆上可以做出几百颗NAND FLASH芯片

在这里插入图片描述

芯片未封装前的晶粒成为Die,它是从Wafer上用激光切割而成的小片,每个Die就是一个独立的功能芯片,它由无数个晶体管电路组成,但最终可被作为一个单位封装起来成为闪存颗粒芯片。

1.2、Nand Flash的结构

NAND Flash的容量结构从大到小可以分为Device、Target、LUN、Plane、Block、Page、Cell

在这里插入图片描述

Die/LUN是接收和执行Flash命令的基本单元,不同的LUN可以同时接受和执行不同的命令。但在一个LUN中,一次只能执行一个命令,不能对其中的某个Page写的同时右对齐他Page进行读访问。

1、Device就是指单片Nand Flash,对外提供Package封装的芯片,通常包含1个或多个Targert
2、Target拥有独立片选单元,可以单独寻址,通常包含1或多个LUN;LUN就是Die,能够独立封装的最新的物理单元,通常包含多个Plane
3、Plane拥有独立的Page寄存器,通常LUN包含1K或2K个奇数Block或偶数个Block
4、Block是能够执行擦除操作的最小单元,通常有多个Page组成
5、Page是能够执行编程和读操作的最小单元,通常大小为4KB/8KB/16KB/32KB等
6、Cell是Page中的最小操作擦写读单元,对应一个浮栅晶体管,可以存储1bit后者多bit数据,主要颗粒类型

在nand flash里,LUN(Logical Unit)和die是同一个意思。都是执行cmd和report status的最小单位一个target对应一个CE、R/B信号线。根据封装的不同,target里可能会有一个或多个die。

下图是 MT29F64G08CBCAB Flash阵列
在这里插入图片描述

一个LUN有两个Plane。上面的图是单个Page的情况,PageBlock的横截面,长8K+448,宽8bit,即一个Page是(8K + 48)B,BlockPlane的高。

下面的图是256个Page的情况,把下面的图朝前放倒就是256个上面的图的叠加。

1.3、Micron Flash芯片型号含义

在这里插入图片描述

MT29F32G08ABCABH1: 则表示
镁光
NAND Flash
32G
8bit
一个Cell1bit
包含一个Die
同步/异步两种模式

1.4、100-Ball BGA 封装

BGA:Ball Grid Array 球栅阵列。该封装是一种表面贴装或芯片载体封装,用于集成电路和微处理器等安装设备。与其他类型的封装相比,BGA封装具有更高的引脚密度、更低的热阻和更低的电感。这意味着与双直插式或扁平封装相比,在高速下有更多的互连引脚和更高的性能

缺点:焊球无法像长引线那样弯曲,并且封装密度使得检查故障或其他像差变得困难。此外,用于大型生产运行的可靠焊接设备可能非常昂贵。

在这里插入图片描述

1.5、阵列地址寻址

其中CA是指列地址,PA指页地址,BA是指Block地址 。
列地址8640 (21C0h)到16,383 (3FFFh)是无效的,超出了范围,在设备中不存在,不能被寻址。
BA[7]用来选择通道:0表示Plane0,1表示Plane1。
LA0为lun选择位。只有当
target**共享2个lun时才会出现;否则,应该保持低利率。

在这里插入图片描述

2、信号定义

信号命(异步模式)信号方向描述
ALEOutputAddress Latch Enable地址锁存使能:用于指示何时能从DQ数据总线上锁存地址信息
CE#OutputChip Enable片选信号,低有效。
CLEOutputCommand Latch Enable命令锁存使能:用于指示何时能从DQ数据总线上锁存命令信息。
DQ[7:0]Inout数据总线,为Inout型,用于传输数据、地址、命令信息。
RE#OutputRead Enable读使能,低有效
WE#OutputWrite Enable写使能,低有效
WP#OutputWrite Protect写保护,低有效。
R/B#InputReady/Busy忙闲信号,用于指示Flash的忙闲状态,高电平为Ready,低电平为Busy。

3、Flash状态

在这里插入图片描述

即使R/B#或RDY已准备就绪,也不要在tWB期间发出新命令。

延时参数说明(mode0)(具体可参照手册,从P134开始)

tADL:从地址周期开始计数,在WEn的第一个上升沿结束,用于数据输入
tDS:数据建立时间 40ns
tDH:数据保持时间 20ns
tRP: 读使能脉冲宽度 50ns
tREH: 读使能高电平保持时间 30ns

在这里插入图片描述

定时模式默认为0
在这里插入图片描述

参数定义地址

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Kkx9zqj2-1680614890244)(./1652087600373.png)]

3.1、总线空闲状态

总线空状态即为:CE#为低电平,片选中;WE#与RE#均为高电平,非有效。此时总线上没有任何命令、地址、数据的传输。当异步接口激活时,DQS是三态。

3.2、命令输出

命令输出是指,控制器向Flash发送Flash命令序列,以供Flash对命令进行锁存。这一过程的时序如下图所示:
在这里插入图片描述

当CE#为低、CLE为高、ALE为低、RE#为高时,Flash将在WE#的上升沿采样DQ数据总线上的信息,作为命令信息

当对应Flash为Busy时,大部分命令的传输会被忽略,除了READ STATUS(70h)以及READ STATUS ENHANCED(78h),这两种命令在Flash Busy的状态下也可以传输。

3.3、地址输出

地址输出是指,控制器向Flash发送Flash操作地址序列,以供Flash对地址信息进行锁存。这一过程的时序如下图所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oKkdPURp-1680614890244)(./1651668471915.png)]

当CE#为低、CLE为低、ALE为高、RE#为高时,Flash将在WE#的上升沿采样DQ数据总线上的信息,作为地址信息。

图中展示了发送完整5Byte操作地址的过程,先发送2Byte列地址,再发送3Byte行地址。需要注意,在地址中的无效位(例如不在地址空间中),必须置为0。

3.4、数据输出(FLASH写入)

数据输出是指,控制器向Flash发送Flash需要接收的数据序列。这一过程的时序如下图所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oAlnbjz9-1680614890244)(./1651668871283.png)]

当CE#为低、CLE为低、ALE为低、RE#为高时,Flash将在WE#的上升沿采样DQ数据总线上的信息,作为数据信息。当对应Flash为Busy时,输出至Flash的数据将被忽略。

3.5、数据输入(FLASH读取)

数据输入是指,控制器从Flash获取Flash发送来的数据序列。这一过程的时序如下图所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Rv3KX1pU-1680614890245)(./1651669017956.png)]

当CE#为低、CLE为低、ALE为低、WE#为高、R/B#为高时,控制器可以类似时钟信号一样使RE#周期性的高低跳变,Flash会根据RE#信号将数据输入至控制器。在当前RE#周期中RE#下降沿要读出的数据,将在下一个RE#周期的RE#下降沿允许采样。

不难发现,这里的接收Flash数据时序与常规不太相同。这是由于我们要求Flash工作于Mode 5,此时RE# Cycle time=20ns<30ns,因此要工作于Extended Data Ouput mode(EDO mode)。若RE# Cycle time>30ns则只需在同一RE#周期中RE#上升沿采样数据即可

3.6暂停数据输入/输出

暂停数据输入或数据输出分别通过保持WE#或RE#高来完成。

mode0读时钟:3.29M

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nLp7TmEt-1680614890245)(FLASH学习.assets/image-20230214142221033.png)]

mode0写时钟:7.8125M

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R6fxB8SH-1680614890245)(FLASH学习.assets/image-20230214142256412.png)]

4、FLASH命令说明

Nand Flash需要执行多种Flash命令,这些命令有其各自的命令码以及需要的地址信息。(具体可看手册P55)

命令分类命令名命令码周期1地址周期数目数据周期数目命令码周期2
复位操作RESETFFh0--
识别操作READ ID90h1--
配置操作SET FEATUREEFh14-
配置操作GET FEATUREEEh1--
状态操作READ STATUS70h0--
读操作READ PAGE00h5-30h
写操作PROGRAM PAGE80h5Yes10h
擦除操作ERASE BLOCK60h3-D0h

4.1、复位操作

Reset命令用来将Nand Flash中的target进行复位,使之被恢复至一个初始确定状态,在复位的过程中Flash会放弃所有正在执行的命令。Reset命令会被target内的所有LUNs就收,即使它们处于Busy状态。下图是reset命令时序:
在这里插入图片描述

(1)控制器向Flash发送命令周期1,命令码为FFh。
(2)在WE#从低恢复为高的上升沿开始计算,最多经过100ns后,Flash进入Busy状态
(3)Flash进入Busy状态开始计算,最多经过5us后,Flash重新回到Ready状态。
(4)回到Ready状态则基本说明复位完成。

4.2、操作页

在输入数据之前的的任何时候,都可以更改列地址和行地址。数据输入完成后,向命令寄存器写入8’h10。当die从忙变为ready后,应该检查失败bit的状态。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3nGL543u-1680614890246)(./1652256593023.png)]

4.3、读取页

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ih3qiFa0-1680614890246)(FLASH学习.assets/image-20230209100230010.png)]

5、 Flash 仿真

5.1、加速仿真

为了加快仿真,需要对模型的时间参数做些修改:

tBERS_min:擦除操作最小时间 1500000 -> 15000
tBERS_max:擦除操作最大时间 7000000 -> 70000
tFEAT:配置读取参数 1000 -> 100
tPROG_typ:将数据从数据寄存器搬进对应Page的最小时间 350000 -> 3500
tPROG_max:将数据从数据寄存器搬进对应Page的最大时间 560000 -> 5600
tR_max:将数据从Page搬进数据寄存器的最大时间 35000 -> 3500

在编译命令前加**+define+SHORT_RESET**,加快复位时间
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dYOp0LQq-1680614890246)(./1652441758415.png)]

5.2、选择模型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qncEna4E-1680614890246)(./1652441873309.png)]

通过+define+CLASSU定义对应的宏定义,选择自己对应的模型,配置好后就可以仿真。

5.3、模型各个文件功能

整个model包括nand_defines.vh,nand_parameters.vh,subtest.vh,nand_die_model.v,nand_model.v,tb.v六个部分,下面对这六个部分主要功能分别做出说明:

  1. nand_die_model.v
    单个逻辑单元(die)的模型。
  2. nand_model.v
    一片Flash的模型,对多个逻辑单元(die)进行结构封装。
  3. nand_defines.vh
    用于为nand_model实例化生成正确的端口映射。
  4. nand_parameters.vh
    包含模型使用的所有参数。
  5. tb.v
    模型的测试文件,主要定义Flash各项功能相关的task任务。
  6. subtest.vh
    根据需求调用tb.v文件中的各项任务,模拟Flash功能实现的顺序。
    仿真时,使用modelsim编译nand_model.v,nand_die_model.v和tb.v。
    仿真测试文件tb即可。

6、 Flash ECC校验

6.1、 二进制域与多项式

二进制的11011,可以表示成[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WVclHhvC-1680614890247)(./1656915031864.png)]

二进制的四则运算和十进制差不多。1+1=2=0,所以11*11用多项式表示就是[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c92UnZNj-1680614890247)(./1656915102140.png)]
x的系数2在二进制中就是0.

在二进制域中,加等于减,[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LR8Mui13-1680614890247)(./1656915202091.png)]相当于[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TuvDxoFG-1680614890247)(./1656915214207.png)]

6.1、 检错与纠错

纠错码分为两种,一种是块状编码(简称块状码或分组码),一种是卷积编码(简称卷积码)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PuUGuXLz-1680614890248)(./1656900366161.png)]

6.1.1、块状码

进行块状编码时,需要对用户数据分成固定长度的组,针对每一组计算并添加冗余bit。以Flash ( 闪存 ) 为例, 其内部的数据被划分为512比特( 每一块数据的比特数n = 512 ) 的块, 针对每个块有k个按照一定算法生成的冗余比特。这些冗余比特是根据n比特数据产生的奇偶校验比特。数据比特(n) 及冗余比特(k)共同构成编码字, 这 n+k 比特被存储在闪存中从闪存中读出数据时,n+k比特被读出, 此后需要根据编码规则进行错误纠正在块状码中, 两个编码块之间不存在相互关联, 每个数据块独立地进行错误纠正,与其他数据块无关。

6.1.2、卷积码

与块状码不同, 卷积编码的当前编码输出不仅与当前输入有关, 还与此前的输入有关。

6.1.3、纠错原理

假如我们的真正的消息是m(x),然后乘上一个编码多项式p(x),得到m(x)p(x)再将其发送过去。发送过程中会会受到很多干扰,于是多项式被加上错误多项式e(x),而接收者接收者的消息为c(x),就有

在这里插入图片描述

接收者怎么知道消息有没错呢?接收者事先就会和发送者商量好p(x),然后就很简单,只要让c(x)除以p(x),如果余项是0,即没有e(x),没有受到干扰,那么商就是m(x),就是正确的消息。如果余项不是零,我们的商就变成了m(x) + e(x)/p(x),无法将真正的消息分离出来。前提是p(x)必须是不可约的本原多项式(primitive polynomials),这样才能让e(x)不被除尽,我们才能意识到有干扰的存在。本原多项式就好在,在所有错误余项e(x)出现前前,e(x)/p(x)的余项不会重复。之后将开始重复,这就是被称为循环(cyclic)码的原因。

本源多项式规则:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iit3ZalF-1680614890248)(FLASH学习.assets/image-20230209170051488.png)]

如果要纠正多个错误,此时仅一个编码多项式p(x)就不够了,我们还需要更多的编码多项式来让我们能找出多个错误。这时就轮到BCH码出场了,其编码多项式标准形式是:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R89TLRdo-1680614890248)(FLASH学习.assets/image-20230209170419335.png)]

如果我们要设计一个可以纠正两个错误的编码多项式:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U0uMkBZS-1680614890249)(FLASH学习.assets/image-20230209170541669.png)]

要设计一个可以纠正三个错误的编码多项式:

在这里插入图片描述

纠正多个错误的例子:
在这里插入图片描述

前两项余项不为0,而第三项为0说明接到的只有两处错误。

把错误位置找出来就需要错误定位多项式(error locator polynomial)

在这里插入图片描述

如果能找到这个函数的两个根,也就找到了e1和e2

6.2、 汉明码

汉明码是一种线性码,对于一个长度为比特的编码块,有n个冗余比特,其余的为数据比特。常用的汉明码有(7,5)和15,11)。(7,5)汉明码表示编码块长度为7,其中包括4个数据比特和3个冗余比特。每个冗余比特都是部分数据比特按照一定方式进行异或运算(等效于选择部分比特进行奇偶校验运算)得到的。汉明码是一个线性编码集合,每个编码块都可以检测岀两个以内的比特错误,可以纠正单比特错误。

6.3、有限域

二进制中-等于+,2等于0

在这里插入图片描述

6.4、 BCH编码

在GF( 2 q )中,用多项式表示对应的有限域中的数值,多项式又可表示成二进制bit流的形式,等于二进制bit流与符号之间的一一映射,同时二进制多项式加法和二进制的按位异或等同(二进制流所受的干扰可用加法表示),多项式乘法及其逆运算能够实现多项式的恢复,本原多项式能保证逆运算结果具有唯一性。

BCH码使用有限域上的域论与多项式,可以构建一个检测多项式,这样接收端就可以检测是否有错误发生。

本原多项式:一个 m 阶的不可约多项式 f ( x ) ,如果 f ( x )整除 x ^n + 1的最小正整数 n 满足 n = 2 ^m − 1,则该多项式是本原的。

若线性循环码的生成多项式具有如下形式g(x)=LCM[m1(x),m3(x)…m2t−1(x)]。由此生成的循环码叫做BCH码
LCM:表示最小公倍数
t:纠错个数
mi(x):素多项式,不能被分解的叫做素多项式
其中最小码距d≥d0=2t+1,d0为设计码距,两个编码块中对应位不同的bit数量,则这个码可以纠正t个随机独立差错
在这里插入图片描述

BCH 码是线性循环码的一种,它明确了码的最小距离、码长、以及校验位数目,跟其它纠错算法相比,在同样的编码效率下,纠错能力较强;它特别适合码长不太长的情况,比如本文的码长是 4304bit,就比较合适。

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值