需要确认注册邮箱后才能开通博客,立即确认我的邮箱
文章 搜索 高级搜索 ?3? ?3?
  • 滤波器new!
  • LED驱动 new!
  • 新能源 new!
  • PLL
  • PCIE协议
  • 可穿戴
  • LSI
  • FCI
文章 论坛 博客 小组 研讨会
EDN电子技术论坛>博客 >阿昏豆博客 >把大象关冰箱的步骤 --- NAND FLASH控制器磨损管理算法芯片化硬实现

阿昏豆的博客——阿昏豆

博主:阿昏豆???? ???? ????
介绍: 关注FPGA,SOC的设计及工程实现等问题。
文章(27)???? 访问(67529)???? 评论(105)???? 投票(190)???? 订阅本博??

博文列表查看方式: ???

把大象关冰箱的步骤 --- NAND FLASH控制器磨损管理算法芯片化硬实现
发布时间:2015-11-21 23:25:35
技术类别:CPLD/FPGA ??? 个人分类:逻辑设计
需要确认注册邮箱后才能下载,立即确认我的邮箱

把大象关冰箱的步骤 --- NAND FLASH控制器磨损管理算法芯片化硬实现

?

目前,存储领域包括eMMC,SATA SSD ,PCIe SSD等控制器是一个非常热门的领域。通常,由于NAND FLASH易于损坏的特性,因此需要控制器做额外的工作,才能满足商用可靠存储的需要。

存储控制器的所做的额外工作就是均衡磨损、坏块管理、以及逻辑地址到物理地址映射的管理。通常在存储控制器中需要集成CPU运行并运行相应的软件才能完成上述的功能,而随着存储性能的增加,则需要更高性能的CPU或者多核处理器以及高速的处理算法。

?本文目的提出一种可以硬实现的均衡磨损,坏块管理,以及逻辑地址映射的算法,(可芯片化)。用于替代处理器的软件(FTL)实现,从总体上较CPU固件实现有较好的功耗比和高速性能的目标。

?

首先说明: NAND FLASH的管理说明:

1:NAND FLASH 只能按页写,且只能写干净的页。(一个页一旦写过就不能写第二次,除非被擦除)

2:NAND FLASH 能按页读,这个可以读多次。

3:NAND FLASH 只能按块擦。(一个块包含多个页)。

4:NAND FLASH的出错一般出现在写,和擦除时,如果NAND FLSAH的块在写或者擦除时,出错,则就不能再使用,内部内容需读出写入其他的位置。

5:如果NAND FLASH的管理中,如果重新改写同一地址,则原地址内容作废,逻辑映射一个新地址写入(原因见规则1)。

?

1:基本操作:读,写;

?? ?那么如何设计相应的硬实现算法:首先是考虑写操作,每次写都要写一个干净的地址。因此我们假设有一个模块,每次吐出一个新的干净页地址,那么每次写操作时,都申请从此模块申请一个新地址。

?? ?写NAND FLASH的步骤:(把大象关冰箱里的步骤)。

0:主机写入一个逻辑地址(LA logic address)中一个page的数据(PD pagedata)。

1:从地址分配器(FIFO)中申请一个干净页地址(PA physical address),然后写到新的页地址中。(这个步骤前少一步,)

2:记录逻辑地址和物理地址的对应关系。(LA->PA)到映射表。这样完成写的流程。

?

下次读的时候,

0:主机读取一个逻辑地址(LA logic address)。

1:查找映射表,对应的映射表LA->PA,则读取PA的页数据(PD)。返回主机。这样就完成了读的流程。

?

write.jpg

???

?? ??这样考虑就是想法简单了,上图是正常的写流程。

?由于写FLASH的步骤,首先要确定原有逻辑地址在映射表里是否存在,映射表相应的表项删除(删除的表项会重新擦除使用,否则很快就会写完)。

??? 写NAND FLASH的步骤:

0:主机写入一个逻辑地址(LA logic address)中一个page的数据(PD pagedata)。

1:查看页地址中是否有相关的逻辑地址表项,如果有,则删除表项,否则直接到下一步。

2:从地址分配器(FIFO)中申请一个干净页地址(PA physical address),

3:记录逻辑地址和物理地址的对应关系。(LA->PA)到映射表。

? ?4:然后写到新的页地址中。

read.jpg

?

??? 读NAND FLASH的步骤:

0:主机从一个逻辑地址(LA logic address)中一个page的数据(PD pagedata)。

1:在映射标的表项中,查找LAn的表项。

2:查找对应的物理地址(PAm)。

3:从PAm读出PD并返回主机。

?

?

2:擦除:擦除

从上述的机制来看,每次写操作时,都会占用一个PAGE,而假设原有的逻辑地址内部存储数据,则原有的逻辑地址对应的物理地址则被废弃,因此需要将这些物理地址重新擦除后重新使用。(否则FLASH写完一遍后,再也不能再写)。

另一问题,page按页来写,而擦除按照块来擦除,假设每个块有512个page。

按照上述机制,每个块都有512个page放入申请单元中,而这些page写操作时,被依次申请,也就是说,BLOCK中每个page都会被写满,当这些物理page被重新写时,则原有的page变成脏页,可以被擦除。但是前提是512个page的都凑齐。那擦除的情况分为两种,

  1. 情况1:一个块(block)中,所有的page都被写变成dirty后,可以擦除,放入地址分配器中。
  2. 情况2:地址分配器中剩余地址少于一定数量,则就考虑将那些仍然还有数据页部分有效的块(block)擦除,再进行分配。前提是,将数据页先读出换个地方存储。

对于情况1,可以类似数通领域的组片,每个被重复写的逻辑地址,就释放一个物理地址,收齐一个块中所有的物理地址(都被写过后,释放掉),就可以重新擦除后,重新放置在地址分配器中。

erase.jpg

?

?

对应情况1来说:其触发条件新的写入page,原有page被回收后,放入地址回收器中:

因此擦除的步骤可以分为:

1:获取被回收的物理地址PAn;

2:回收器检查PAn所在的BLOCK n,所有的page是否收齐(每个块用1bit标示,所有bit收齐为1时,可被回收),如果收齐转入步骤3,否则置PAn已回收的标示。

3:通过NFC(NAND FLASH)擦除相应块。

4:释放地址(PAn … PAn+511)到地址分配器,供新的写请求申请。

?

???

对于情况2,其触发条件为,地址分配器中的可分配地址低于水位线(可用的地址少于一定数量)。

erase2.jpg

?

?

对于情况2来说:

1:地址分配器FIFO低于阈值,用于触发地址回收器。

2:地址回收器,查找还剩最少page没有收齐的BLOCK及相应的page(PAx,PAy,PAz)。

3:在映射表中,查找相应的物理地址所对应的逻辑地址;

4:通过地址分配器申请新的物理地址,并填写在原来的映射表中。

5:读取原物理位置的数据PD(X,Y,Z)。

6:将数据写入新的申请的物理地址中。(4,5,6可以串行执行,循环多次,将未收齐的地址读出)。

7:转移完毕后,擦除原来的块(BLOCK)。

8:将擦除后的块地址,写入地址分配器中。

完成后(就多出了接近一个BLOCK的地址空间,供上层应用写入)

?

3:坏块管理;

NAND FLASH在写或者擦除时,会出错,出错时,需要将此块标记成坏块,以后将不能使用。

因此坏块管理模块,需要记录所需要不能使用的坏块。因此我们讨论坏块出现的两种情况:

1:在擦除时,出错,则此block为坏块,坏块管理单元记录坏块。

2:在写某page出错,首先所在块(block)读出剩余的page,分配新的物理地址,更新映射表,同时对该块进行擦除,如果出错标记为坏块,如果有幸不出错,则可以重新将地址放入地址分配器。

??

correct.jpg

?

?

对于情况1来说:操作相对简单;

对于情况2来说:坏块管理单元的操作较为复杂:

1:写操作,触发坏块管理单元工作。

2:写出错。坏块管理单元受到触发,记录当前的物理坏块的位置(M)。

3:同时将地址分配器中M坏块中的剩余地址读出,(禁止再向这些page中写入数据)。读出后,申请新的块中的page,将当前数据写入flash。

一种积极的处理方式如上图所示:

4:查找该block对应剩余物理地址所对应的逻辑地址。

5:申请新的物理地址并记录新的映射表。

6:读出物理块地址所对应的数据。

7:将数据写入新申请的物理地址。

注释:步骤4,5,6,7可以顺序执行,循环多次,取决于该block的已用的page的个数;

8:等搬完毕后,重新擦除该块(M);

9:如果擦除成功,则将地址重新放入分配池,否则该块丢弃。

?

另一种消极的方法:

在步骤3后,只需要记录当前块位置,将M坏块中的剩余地址读出后,放入地址回收器,等待该块剩余位置被重新写时,则该page被废弃,由地址分配器收齐所有地址后再进行擦除。

剩余步骤从8开始,直接擦除该块,擦除错误,直接废弃该块,擦除成功可重新放入地址分配器。

?

4:均衡磨损;

均衡磨损是NAND FLASH的基本功能,通过将可用的地址放入先入先出的地址分配器中,能够保证均衡磨损的效果。

如何将磨损程度最小的可用块,放入地址分配器(FIFO),是本节讨论的要点?

这个问题转化为:设计均衡磨损管理模块,其功能将磨损程度最小的块,首先放入地址分分配器。

均衡管理模块需要将统计所有块的磨损次数,然后找到最小磨损的块。对于需要分配地址时,如果涉及到查找最小磨损块,则可能会影响写的效率。因此,涉及一个链表,将块的磨损次数按照次数的多少进行排序,如果磨损次数相同,则按照地址的大小排序。如此一来,则可以保证,则需要快速申请有效地址时,则可以按照链表的顺序,迅速将可用块地址放入地址分配器。

存储.jpg

?

?

???????? 因此:对于均衡磨损来所,涉及到链表的生成和链表的读取;

  1. 对于初始化时,由于此时所有块都是可用的,因此其擦除次数可以都设置为1,此时课可以按照的地址的大小进行链表的链接。
  2. 对于地址回收器,来说如果已回收某块,(如上图中,地址回收器标示第4块已被回收)。触发均衡磨损管理模块,标示其收到已擦除的块。
  3. 将已擦除的块(第四块)擦除次数自加,标示为有效(可以将此块放入地址分配器),
  4. 排序,建立新的链表。建立的过程一种方式是,查找到比其磨损次数多的块n0,比其磨损次数少的块n5,同时修改其上一块(pre block)和下一块(post block)。这样就建立了一条按照磨损次数由小到大的链表。(建链的过程可以通过设计最新擦除的次数块的cache,加大能够碰撞的几率,因为如果大块数据的写操作,其回收的块的磨损次数应该近似,写时申请page所在的块磨损次数就接近(我们按照由小到大的顺序放入的),因此回收时,磨损次数也接近,因此cache对处理此种空间相关性大的算法,效率较高)。

?

那什么时候均衡管理模块将数据放入地址分配器中?

  1. 触发条件:当地址分配器中的FIFO低于设定的阈值,触发均衡管理模块开始工作。
  2. 将入口地址n3块放入地址分配器。(将块号转换为块中所有的512个page号(假设为每个块中有512个page)。
  3. 根据链表,将n5变为入口地址,等待下次触发条件,然后将 n5放入地址分配器。

?? 这样,根据上述的算法,就可以使所有的块,均衡的磨损,保证所有块被擦除的次数一致。

?

5:总结一下;

回应开头,本文的目标是设计一种可以硬件(硬件描述语言)实现的NAND FLASH的均衡磨损的算法。替代CPU+软件的方式实现在当前较热门的存储控制器中。

(1),所有的操作,都需要触发条件(读,写,擦除,坏块管理,均衡磨损),其他时间可以模块可以休眠,因此功耗容易控制;预计比CPU有更好的能耗比(也跟实现相关)。

(2)硬件实现不取决于CPU的能力,特别是对于PCIe的NAND FLASH控制器来说,可以达到非常高的处理能力,瓶颈在NAND的读写擦除速率。

(3)缺点:设计中需要多个表项的管理。

??? 分别是1:映射表,管理逻辑page地址和物理page地址的对应关系。

????????? ?2:地址回收器中,block内page的回收表;(每个page需要1bit表示)。

????????? ?3:均衡管理模块中的链表,存储所有块的磨损次数以及链表信息。

?这些表项与NAND的大小有关系(是8G/16G/32G?),这些表项是按比例增加的,因此NAND,这些表项需要大块的RAM存储。

其次映射表的查找,同时需要设计CAM模块及操作,来加速表的查找。

如果在PCIe的控制器中,可以放在外部DRAM中,掉电检测时,存储在NAND中,加电时再将数据读出。如果没有外部DRAM,则就需要将映射表一部分放入NAND中,另一部分放入片内SRAM中,同时也会占用较多的SRAM。 同时需要不断的取出及存入NAND中(这个设计同时保证可靠性就是一个挑战)。

(4):总结,此种算法应该适合应用于高速的NAND控制器中,替代高性能多核CPU来实现FTL。具有较高的能耗比与可行性。

???????????????????????????????????????????????????????????????????????????? ?

分享到:? 新浪微博 ?? 微信 ??


打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮

1.扫描左侧二维码
2.点击右上角的分享按钮
3.选择分享给朋友
qq空间 ?? 腾讯微博 ?? 人人网 ?? 百度搜藏 ??
??????有[ 6 ]名读者喜欢此文
阅读(3123)?? 评论(7)?? 收藏??I?? 打印??I?? 推荐到小组??I?? 转发到我的博客 (1)
对不起,您还没有登录,请先登录注册
下一篇:平行宇宙的追逐--异步FIFO控制器的设计
最近到访博主
lingjunm
牛人有话说 - 把大象关冰箱的步骤 --- NAND FLASH控制器磨损管理算法芯片化硬实现
美国的游客 (您将以游客身份发表,请登录 | ?注册)
?
你还可以输入1000
验证码:
分享: 新浪微博?? qq空间?? qq微博?? 人人网?? 百度搜藏??
?
有 [ 7 ] 名读者发表评论 - 把大象关冰箱的步骤 --- NAND FLASH控制器磨损管理算法芯片化硬实现
写得很详细
(0) ???? (0) ???? 回复(0)
对不起,您还没有登录,请先登录注册
???? 2016-06-03 14:32
楼主博客写的很不错,顶一下,不过这个NAND控制器至少还要有cache的控制吧,否则谈什么高速。
(0) ???? (0) ???? 回复(0)
对不起,您还没有登录,请先登录注册
???? 2016-04-21 20:25
怎么还申请一个地址,一块一块往下写不行么,每个块再分页一页一页地写
(0) ???? (0) ???? 回复(0)
对不起,您还没有登录,请先登录注册
???? 2016-02-14 13:53
只能按页写的表述不对,现在大部分nand可按任意字节写入,前提是目标字节为0xff或不影响写入内容的其他数据。
(0) ???? (1) ???? 回复(0)
对不起,您还没有登录,请先登录注册
???? 2016-01-26 08:46
有所了解,谢谢分享!
(0) ???? (0) ???? 回复(0)
对不起,您还没有登录,请先登录注册
???? 2016-01-11 09:07
看来还是NorFlash比较简单啊
(0) ???? (0) ???? 回复(0)
对不起,您还没有登录,请先登录注册
???? 2015-12-14 10:22

四川省成都市的游客
可以做为研究课题用,实际应用不合适,CPU做的FTL 远远不止这些,不过作为硬件能做成这样 实属不易了。
(0) ???? (1) ???? 回复(0)
对不起,您还没有登录,请先登录注册
???? 2015-11-24 17:46
转发到我的博客
评论?@阿昏豆?的“把大象关冰箱的步骤 --- NAND FLASH控制器磨损管理算法芯片化硬实现”
把大象关冰箱的步骤---NANDFLASH控制器磨损管理算法芯片化硬实现目前,存储领域包括eMMC,SATASSD,PCIeSSD等控制器是一个非常热门的领域。通常,由于NANDFLASH易于损坏的特性,因此需要控制器做额外的工作,才能满足商用可靠存储的需要。存储控制器的所做的额外工作就是均衡磨损、...
你还可以输入30000
同时评论给?阿昏豆
????
快速回复
?
你还可以输入1000
????
引用回复
引用评论?
?
你还可以输入1000
????
博主资料

从事FPGA设计,SOC设计等相关工作。

个人文章分类
文章存档
最新评论
阅读排行
阿昏豆的小组???? 加入小组
暂未加入小组,你可以立即
最新网络博文
返回博客首页
有问题请反馈