一种NandFlash地址映射及块管理算法的制作方法

文档序号:14609088发布日期:2018-06-05 20:25阅读:403来源:国知局
一种NandFlash地址映射及块管理算法的制作方法

本发明涉及存储技术领域,具体涉及一种NandFlash地址映射及块管理方法。



背景技术:

NANDFlash通过缩小工艺尺寸和采用多电平技术可大大降低了闪存单位比特的成本,但是这也同时带来其他的问题,主要表现为器件性能的退化:如访问速度下降、误码率上升、耐久度下降以及保持特性变差等。其中耐久度是指存储单元所能承受的最大编程和擦除次数(P/E Cycles)。之所以会存在最大的擦写次数,是因为闪存的编程和擦除操作都是通过电子隧穿机制进行的,大量的使用隧穿会对隧穿氧化层产生应力,导致浮栅层的电学性能退化,当超过进行了一定数量的擦写之后,最终会使存储单元失去编程和擦除的功能。多电平技术和工艺尺寸下降带来的这些问题,对闪存的应用管理提出了更高的要求。

由于NandFlash闪存器件特性的不断退化,主要在以下四个方面对闪存管理技术提出了挑战:

(1)NandFlash闪存最小的读写单元是页(Page),最小的擦除单位是块(Block),即“擦写操作粒度不对等”特性;

(2)NandFlash闪存在同一物理页更新数据时,必须先将该页所在的块擦除,再将数据写入,即“重写前须擦除”或“异地更新(out-of-place-update)”特性;

(3)NandFlash闪存一旦超过一定的擦除次数,其可靠性将无法满足要求,即“擦除次数有限”特性;

(4)NandFlash闪存器件的误码率不断上升。

针对以上的几个问题,在对NandFlash闪存进行管理时,出现了一系列的管理技术,主要包括:

(1)地址映射技术(Address Mapping)。地址映射主要是实现逻辑地址(Logical Sector Address,LSA)和物理地址(Physical Page Address,PPA)之间的映射。在机械硬盘(HDD)中,主机的逻辑地址和HDD的物理地址是一一对应且相等的,访问单位大小为一个扇区(Sector)。但是在SSD中,由于NandFlash闪存“异地更新”和“擦写操作粒度不对等”的特性,导致逻辑和物理地址不再相等。因此需要建立逻辑-物理地址的映射(LSA-PPA Mapping)。目前地址映射方式主要有三种:页级映射(Page-level Mapping)、块级映射(Block-level Mapping)以及混合映射(Hybrid Mapping)。

(2)垃圾回收技术(Garbage Collection)。垃圾回收技术是针对NandFlash闪存“异地更新”以及擦除时间长的特性提出的。当数据需要更新时,将旧的数据标记为无效,再在其他空白区域写入新的数据,而无需进行擦除块的操作,从而大大提高存储器的写入性能。在特定的时候(系统空闲或者可写入块少于一定阈值)进行垃圾回收操作:把某一个物理块内的有效数据复制到空白块中,然后把该物理块擦除。

(3)磨损均衡技术(Wear-leveling)。由于NAND闪存“擦除次数有限”,而用户数据的更新频率是不同的。那些经常被更新的数据(热数据)会导致所在物理块的擦除次数快速上升,寿命消耗完毕;而更新频率低的数据(冷数据)所在的物理块则只被擦除了很少的次数。当一定量的物理块的擦除次数超过上限,则认为SSD的寿命终结。为了最大化SSD的寿命,提出了磨损均衡技术。通过磨损均衡,各个物理块的擦除次数趋于均衡。虽然磨损均衡技术在很早就被提出,但是在NandFlash闪存器件特性越来越差的今天这种技术已经变得不可或缺,它决定了SSD系统的整体寿命,是闪存映射层中非常重要的一个环节。同时,由于NAND器件特性变差,对于擦除次数上限只有一千次左右的NandFlash闪存,需要均衡效果更好、效率更 高的磨损均衡技术。

(4)坏块管理技术(Bad Block Management)[23,24]。由于NandFlash闪存误码率不断上升、工艺节点不断降低等原因,使得NandFlash闪存出厂时或者使用过程中会出现“坏块”。所谓坏块就是指不能保证读、写、擦时数据的准确性的块。坏块不能参与数据的写入和存储,因此需要通过坏块管理技术创建坏块表,对这些坏块进行管理。坏块管理技术是SSD系统中必须的一个模块。

(5)纠错检错技术(ECC)。以上这些技术在NandFlash闪存器件特性越来越差的背景下,扮演着越来越重要的角色,并逐渐成为了整个NandFlash闪存存储系统核心技术之一。

综上所述,要实现面向不同应用的智能管理,对于不同的应用,对存储设备的访问模式差别非常巨大。比如用于视频服务器和操作系统的存储设备,所接收到的文件大小、逻辑地址分布、读写比例都是完全不同的,最终存储设备表现出的性能的差异也将是巨大的。这就要求在对闪存映射层进行设计时,考虑到不同的应用环境下,存储设备都能够有较好地性能表现。但是,当前的闪存映射层并没有针对不同的应用进行专门的研究和设计,无法做到面向应用的智能管理。



技术实现要素:

本发明提供了一种NandFlash地址映射及块管理方法,解决了高效使用NandFlash的问题,由于NandFlash芯片的特点,如以页、块为存储组织结构(目前NandFlash芯片一般每页为2K或4K字节,每块有64页)、改写数据之前必须先进行擦除操作、擦除以“块”为单位,且擦除次数有限、使用过程中会出现坏块等等;而操作系统对盘的访问是以扇区(512字节)为最小单位进行的,这就需要在操作系统发出的逻辑扇区号和NandFlash芯片的物理地址之间进行映射转换;另外,像分区表等系统数据和用户的常用数据都需要频繁改写,这样就会造成Flash芯片的某些块常常进行擦除操作, 寿命降低;频繁的擦除也会降低盘的读写速度;同时,坏块的产生会对数据的可靠性带来隐患。因此,为了最大限度的降低上述问题的影响,高效的使用NandFlash,提升固态盘的整体性能,对NandFlash地址映射及块管理算法的研究就具有十分重要的意义。其技术方案如下所述:

一种NandFlash地址映射及块管理算法,包括下列步骤:

(1)整个NandFlash芯片空间功能上分成三部分:存储映射表信息部分、存储用户数据部分以及空白部分,使用块管理算法进行三部分的数据操作,块管理算法将整个NandFlash阵列按照物理空间和逻辑空间进行管理;

物理空间是实际的NandFlash存储介质,把NandFlash芯片的每一个存储块单元称之为物理块,并顺序编号;没有存储数据的物理块对应空白部分;

逻辑空间包括:1)数据逻辑块,用来存储用户数据,将主机发送的扇区地址按NandFlash芯片的块大小转换成相应的块号,称之为逻辑块号;2)log块,用作暂存改写的用户数据;3)映射表,用来记录物理块、逻辑块、log块之间的映射关系,以及他们各自的状态信息;

其中,逻辑数据块和log块对应存储用户数据部分,映射表对应存储映射表信息部分;

(2)NandFlash芯片和主机进行数据交换时,块管理算法将主机发送的命令解析为LBA地址后,通过映射表找到对应的数据逻辑块的信息,进而查询到该数据逻辑块在NandFlash中的物理块编号以及相应的块、页信息,根据请求操作的数据数据块的状态进行读操作或写操作;

数据交换过程中,对物理块的使用采用负载均衡算法,使其平均地选取NandFlash的空白块来实现,使得所有的NandFlash块能均衡的被使用;

(3)数据交换时,采用基于最近原则的调度算法,通过为在缓存中的数据和映射表设置访问标志信息,将最近访问过的数据和映射表保留在缓存中,分为映射表的回写操作、数据缓存的管理操作、数据的回写操作和数据的预读操作;

(4)优化NandFlash多通道地址映射,按照NandFlash存储器阵列通 道号和片选号两级循环的方式,将映射物理地址轮流分发到每个芯片中,实现多通道的并行/流水控制。

进一步的,步骤(2)中,块管理算法将主机传来的LBA地址分割为三部分,其中高n位用于定位NandFlash中的块(block),中间m位定位块中的页(page),低s位定位页中的扇区(sector);

同时将映射表分为两级:第一级映射表和第二级映射表;第一级映射表存储地址页的信息,地址页定义为NandFlash中存储第二级映射表的页面;一级映射表在上电后读入缓存中,通过LBA地址的高n位和每一“地址页”中存储的块地址信息的数量计算出“地址页”的逻辑号和偏移量,进而查询到相应的物理块地址,然后定位到其中某一物理块地址信息;

第二级映射表存储的是块地址信息,包括物理块地址,物理块空间使用情况各参数。

进一步的,步骤(2)中,物理块数量多于逻辑块数量,物理块多出来的那部分用来分配给log块和各种映射表;块管理算法对逻辑数据块进行分组,N个连续的逻辑块作为一组,同时预留一部分物理块当作log块,这些log块能够分配给分好组的逻辑块,同一组的逻辑块共用已分配的log块,每一组最多可分配K个log块;

进行写操作时,当要改写某块中的数据页时,从空白块中选取一个块当作这一组的log块,将待改写的数据顺序写到log块中,如果一个log块写满,则继续选取,直到最大数量K;若K个log块都写满,则需要启动合并操作,把log块中的数据与原来的数据块合并,如果原来同在一个块内的数据则都写到一个新的块中,然后将原数据块和log块擦除,使之重新成为空白块。

进一步的,步骤(2)中,所述负载均衡算法是用于使得所有的NandFlash块能均衡的被使用,在每一个物理块信息中都会记录该块的擦除次数,当需要选择空白块时,依据块擦除次数的多少来决定选取顺序,擦除次数少的块优先选取,这样就避免了部分物理块由于过度擦除而损坏;

对于NandFlash中的坏块采用动态管理,固态盘在进行初始化配置时扫描整个盘,将NandFlash芯片出厂时就产生的坏块标记出来,盘在使用过程中产生了坏块,选取一个空白块替代,将数据拷贝到空白块中,并标记坏块,确保此坏块不会再被使用。

进一步的,步骤(3)中,块管理算法将映射表分为两级:第一级映射表和第二级映射表,第一级映射表由于比较小,加电时一次全部读取到缓存中,每次断电时再回写;

第二级映射表按块进行回写,为每块映射表设置两个标志:一个是更新标志,一个是回写标志,当某块中的映射表内容发生更新时,设置更新标志,更新计数器加1,当计数器达到阈值,设置回写标志,待系统空闲时启动回写;断电时,更新标志或回写标志有效的块进行回写。

进一步的,步骤(3)中,数据缓存的管理操作中为了实现最近访问算法,建立MRU-LRU链表,用作缓存数据页的保留和回收策略;其中,保留是指某一缓存页继续分配给原数据页使用;回收是指释放某一缓存页,将其标记为空白的,并可以分配给其他数据页;

MRU-LRU链表按照缓存的数据最近一次被访问的时间长短来排序,链表头为MRU位置,链表尾为LRU位置,另外,还需为每个缓存数据页分配一个回收寄存器,记录回收策略相关的标志信息,每当缓存数据页被使用一次,相应的回收寄存器置1,并且移动到MRU;当某页移动到了LRU,则需检查其回收寄存器,如果为1,表明在移动到LRU的过程中被使用过,则将回收寄存器清零,并将其移到MRU;如果是0,则可以作为回收的候选对象,还需要判断其数据是否被改写过;进行回收时,从LRU开始,如果数据没被改写过,则回收,否则先回写再回收。

进一步的,步骤(4)中,NandFlash并行/流水控制是充分利用AMBA总线带宽和Flash总线带宽,从而提升固态盘读写性能,其中并行控制是利用AMBA(AMBA:Advanced Microcontroller Bus Architecture,片上总线)总线带宽,使多个NandFlash通道同时进行编程,而流水控制是充分利用 NandFlash总线带宽,使同一通道内的多个片选同时进行流水式编程。

进一步的,步骤(2)中,数据交换时的读操作,且要读取的数据在缓存中,则直接从缓存返回请求数据;否则通过映射表查询到请求地址的状态信息,再判断数据在原数据块还是在log块,最后定位到有效数据的物理地址进行读取;

数据交换时的写操作,且请求的地址已经有数据在缓存中,则直接在缓存中进行改写;否则过映射表查询到请求地址的状态信息,若是空白页,则直接写入数据;若已经有数据,则再判断是否有可用的log块,如果有就将数据写入log块,如果没有就需要启动合并操作,清理出新的log块,再将数据写入,最后更新相关的映射表信息。

NandFlash地址映射及块管理算法是固态盘控制器固件设计的一部分,它主要起到以下几个作用:一是将主机发来的以扇区为单位的地址信息,翻译成NandFlash芯片的物理块、页地址;二是通过块管理算法尽量平均地使用NandFlash芯片的各个块,提高每一块的使用率,避免不必要的擦除操作,减少块被擦除的次数,也就是常说的负载均衡;三是管理使用过程中的出现的坏块,保证数据的可靠性;四是采用优化的NandFlash多通道地址映射设计,实现多通道的并行/流水操作。

附图说明

图1是NandFlash算法原理图;

图2是算法总体流程图;

图3是Flash地址映射原理图;

图4是二通道四片选Flash阵列地址映射示意图;

图5是Flash多通道并行控制前仿真图;

图6是Flash多通道并行控制后仿真图;

图7是Flash多片选流水控制前仿真图;

图8是Flash多片选流水控制后仿真图;

图9是Flash并行流水控制仿真图。

具体实施方式

本发明提供的NandFlash地址映射及块管理算法,包括下列步骤:

(1)整个NandFlash芯片空间功能上分成三部分:存储映射表信息部分、存储用户数据部分以及空白部分,使用块管理算法进行三部分的数据操作,块管理算法将整个NandFlash阵列按照物理空间和逻辑空间进行管理;

物理空间是实际的NandFlash存储介质,把NandFlash芯片的每一个存储块单元称之为物理块,并顺序编号;没有存储数据的物理块对应空白部分;

逻辑空间包括:1)数据逻辑块,用来存储用户数据,将主机发送的扇区地址按NandFlash芯片的块大小转换成相应的块号,称之为逻辑块号;2)log块,用作暂存改写的用户数据;3)映射表,用来记录物理块、逻辑块、log块之间的映射关系,以及他们各自的状态信息;

其中,逻辑数据块和log块对应存储用户数据部分,映射表对应存储映射表信息部分;

(2)NandFlash芯片和主机进行数据交换时,块管理算法将主机发送的命令解析为LBA地址后,通过映射表找到对应的数据逻辑块的信息,进而查询到该数据逻辑块在NandFlash中的物理块编号以及相应的块、页信息,根据请求操作的数据数据块的状态进行读操作或写操作;

数据交换过程中,对物理块的使用采用负载均衡算法,使其平均地选取NandFlash的空白块来实现,使得所有的NandFlash块能均衡的被使用;

(3)数据交换时,采用基于最近原则的调度算法,通过为在缓存中的数据和映射表设置访问标志信息,将最近访问过的数据和映射表保留在缓存中,分为映射表的回写操作、数据缓存的管理操作、数据的回写操作和数据的预读操作;

(4)优化NandFlash多通道地址映射,按照NandFlash存储器阵列通道号和片选号两级循环的方式,将映射物理地址轮流分发到每个芯片中,实 现多通道的并行/流水控制。

以下是具体描述:

1.NandFlash算法原理及流程

将整个NandFlash芯片空间按用途分成三个部分:存储映射表信息的、存储用户数据的(包括log块)以及空白部分。算法原理如图1所示。

主机发送的命令解析为LBA地址后,分割成三部分,由此可以先找到对应的数据逻辑块的信息,从而查询到该逻辑块在NandFlash中的物理块号以及相应的块、页信息,这样就能知道主机请求操作的数据块状态,如是否是坏块、是否已经有数据(关系到能不能直接写)、如果有数据的话是否已分配了log块、分配的log块是否已写满、是否需要进行合并操作等,进而确定后续的操作。如果是读操作,且要读取的数据在缓存中,则直接从缓存返回请求数据;否则通过映射表查询到请求地址的状态信息,再判断数据在原数据块还是在log块,最后定位到有效数据的物理地址进行读取。如果是写操作,且请求的地址已经有数据在缓存中,则直接在缓存中进行改写;否则过映射表查询到请求地址的状态信息,若是空白页,则可以直接写入数据;若已经有数据,则再判断是否有可用的log块,如果有就将数据写入log块,如果没有就需要启动合并操作,清理出新的log块,再将数据写入,最后更新相关的映射表信息。

算法总体流程图如图2所示。

2.NandFlash算法方案设计

固态盘是以硬盘替代者的姿态出现,为了实现与现有系统额无缝对接,必须对外提供的是块接口。作为主机端,所看到的固态盘是一个和硬盘一样的块设备。为了达到模拟块设备的目的,固态盘需要对块设备基于扇区的指令进行转换。另外,由于Flash存储器必须先擦后写以及擦除次数有限等特点,也需要采取相应措施延长Flash寿命,提高访问性能,为此本发明设计提出一种Flash存储资源管理算法,其地址映射原理如图3所示。

图中将主机传来的逻辑地址分割为三部分,其中高n位用于定位 NandFlash中的块(block),中间m位定位块中的页(page),低s位定位页中的扇区(sector)。映射分为两级:第一级映射表存储地址页的信息,“地址页”定义为NandFlash中存储第二级映射表的页面(相对于“地址页”,NandFlash中存储用户数据的称为“数据页”);第二级映射表存储的是块地址信息(包括块物理地址,块空间使用情况等参数)。一级映射表在上电后读入Cache中,通过逻辑地址高n位和每一“地址页”中存储的块地址信息的数量计算出“地址页”的逻辑号和偏移量,进而查询到相应的“地址页”的物理地址,然后定位到其中某一块地址信息(即是二级映射表中的某一项)。

块管理算法采用“逻辑块分组和日志(log)块”的方法,将整个NandFlash阵列按照物理空间和逻辑空间进行管理。物理空间是实际的NandFlash存储介质,把NandFlash芯片的每一个存储块单元称之为物理块,并顺序编号(即为物理块号)。逻辑空间包括三部分,一是逻辑数据块,用来存储用户数据,将主机发送的扇区地址按NandFlash芯片的块大小转换成相应的块号,称之为逻辑块号(逻辑块号=LBA地址高n位);二是log块,用作暂存改写的用户数据;三是映射表,用来记录物理块、逻辑块、log块之间的映射关系,以及他们各自的状态信息。物理块数量是整个NandFlash阵列所包含的块单元总和,逻辑块数量与用户可访问的空间大小相对应,比物理块要少;物理块多出来的那部分用来分配给log块和各种映射表。算法对逻辑数据块进行分组,N个连续的逻辑块作为一组,同时预留一部分物理块当作log块,这些log块可以分配给分好组的逻辑块,同一组的逻辑块共用已分配的log块,每一组最多可分配K个log块。当要改写某块中的数据页时,从空白块中选取一个块当作这一组的log块,将待改写的数据顺序写到log块中,如果一个log块写满,则继续选取,直到最大数量K;若K个log块都写满,则需要启动合并操作,把log块中的数据与原来的数据块合并(原来同在一个块内的数据都写到一个新的块中),然后将原数据块和log块擦除,使之重新成为空白块。这样,在未合并之前,一个逻辑块实际上有可能映射到多个物 理块。这就需要建立相应的映射表来记录这些对应关系,包括逻辑块与物理块的对应关系、log块与物理块的对应关系、逻辑块与log块的对应关系;还要记录每个逻辑块、物理块、log块的各种状态信息,如空白与否、剩余页面数量、擦除次数等。

负载均衡算法通过在盘的使用过程中,尽量平均地选取NandFlash的空白块来实现,使得所有的NandFlash块能均衡的被使用。在每一个物理块信息中都会记录该块的擦除次数,当需要选择空白块时,依据块擦除次数的多少来决定选取顺序,擦除次数少的块优先选取,这样就避免了部分物理块由于过度擦除而损坏。

坏块采用动态管理,固态盘在进行初始化配置时扫描整个盘,将NandFlash芯片出厂时就产生的坏块标记出来,盘在使用过程中产生了坏块,选取一个空白块替代,将数据拷贝到空白块中,并标记坏块,确保此坏块不会再被使用。

缓存的调度包括两部分,一是数据的调度,二是映射表的调度。本设计中采用基于最近原则的调度算法,通过为在缓存中的数据和映射表设置访问标志信息,将最近访问过的数据和映射表保留在缓存中。

3.缓存管理和调度

缓存主要用来在主机和NandFlash之间缓冲/缓存请求的读/写数据,同时也作为地址映射表和部分链表在系统工作时的暂存空间。本设计中对缓存的调度采用最近访问原则,即最近访问过的数据优先留在缓存中,长时间没有访问过的数据写回NandFlash中。

(1)映射表的回写

一级映射表由于比较小,加电时一次全部读取到缓存中,每次断电时再回写。二级映射表按块进行回写,为每块映射表设置两个标志:一个是更新标志,一个是回写标志,当某块中的映射表内容发生更新时,设置更新标志,更新计数器加1,当计数器达到阈值,设置回写标志,待系统空闲时启动回写。断电时,更新标志或回写标志有效的块进行回写。

(2)数据缓存的管理

数据缓存区按照页为单位进行管理,即将数据缓存区以NandFlash页面大小为一页,分为若干页,从起始地址开始,依次编序号为0~xx。建立缓存数据地址信息表,结构如表1所示。

表1数据缓存地址信息

主机发来一个请求时,先判断请求页是否已经在缓存中,如果已在缓存,则搜索缓存数据地址信息表,定位数据在缓存中的位置。搜索采用哈希算法(建立数据地址表时建立相应哈希数组)。由于很多情况下一个请求的数据在缓存中是连续的,因此当找到第一页的数据时,后面数据的查找可以接着第一页后开始。如果不在缓存,则为其分配一个空白的缓存页。

为了实现最近访问算法,建立MRU-LRU链表(见表2),用作缓存数据页的保留和回收策略。其中,保留是指某一缓存页继续分配给原数据页使用;回收是指释放某一缓存页,将其标记为空白的,并可以分配给其他数据页。

表2 MRU-LRU链表信息

具体做法是:MRU-LRU链表按照缓存的数据最近一次被访问的时间长短来排序,链表头为MRU位置,链表尾为LRU位置。另外,还需为每个缓存数据页分配一个回收寄存器,记录回收策略相关的标志信息。每当缓存数据页被使用一次,相应的回收寄存器置1,并且移动到MRU;当某页移动到了LRU,则需检查其回收寄存器,如果为1,表明在移动到LRU的过 程中被使用过,则将回收寄存器清零,并将其移到MRU;如果是0,则可以作为回收的候选对象(还需要判断其数据是否被改写过)。进行回收时,从LRU开始,如果数据没被改写过,则回收,否则先回写再回收。

(3)数据的回写

缓存数据区中的数据页,当数据发生更新后,标记该页为改写过的,表示没有更新到NandFlash中,并将其链接到回写链表中,待链表长度达到预先设定的阈值后,适时启动回写操作(将经常改写的数据页排在链表后面)。

(4)数据的预读

系统上电启动时,可以预读一部分常用的系统数据到缓存中,如文件系统分区表,常用程序的运行文件等。

4.NandFlash算法优化设计

(1)NandFlash多通道地址映射优化设计

固态盘控制器硬件设计上采用了NandFlash多通道架构,而通常的NandFlash地址映射方法是按照通道号进行顺序映射,这样做的好处是地址映射简单,Flash块管理方便,但无法实现多通道的并行/流水操作。为了能充分发挥多通道的优势,必须对NandFlash地址映射算法进行优化。

典型的闪存两通道、四片选NandFlash存储器阵列结构如图4所示,其中序号1为闪存芯片,序号2为闪存块单元,序号3为闪存页单元,序号4为PBN子块。为了能实现对NandFlash存储器阵列的并行和流水操作,经过地址映射算法映射后得到的对NandFlash芯片的实际访问地址必须是在具有并行或流水关系的芯片上。据此,按照NandFlash存储器阵列通道号和片选号两级循环的方式,将映射物理地址轮流分发到每个芯片中,物理页0分配到第一个通道的0片选0页,物理页1分配到第二个通道的0片选0页,依次分发;当所有通道的0片选0页分配完之后,再将后续物理页分配到第一个通道的1片选0页、第二个通道1片选0页,依此类推,直到所有物理页分配完毕。如图中,将PPN0分配在CH0-CE0-CBN0-CPN0,PPN1分配在CH1-CE0-CBN0-CPN0,PPN2分配在CH0-CE1-CBN0-CPN0,PPN3分配 在CH1-CE1-CBN0-CPN0,PPN8分配在CH0-CE0-CBN0-CPN1,PPN9分配在CH1-CE0-CBN0-CPN1。通过这种地址分发方式,每个物理块被平均分成了M(M=通道数×片选数)份,每个Flash芯片的块单元包含其中1/M,且在片内相同的地址空间,如图中PBN0。如果请求PBN0,则需要访问每个芯片的CBN0的前1/M,于是硬件上就可以实现通道间的并行和片选间的流水操作,提高了Flash接口的访问带宽。

(2)NandFlash并行/流水控制技术设计

NandFlash并行和流水控制技术是充分利用AMBA总线带宽和Flash总线带宽,显著提升固态盘读写性能的一项关键技术。其中并行控制是利用AMBA总线带宽,使多个NandFlash通道同时进行编程,而流水控制是充分利用NandFlash总线带宽,使同一通道内的多个片选同时进行流水式编程。

NandFlash芯片一次完整的编程操作包括三个阶段:控制器向Flash发送编程命令(CMD阶段)、控制器启动DMA并将数据写入Flash芯片内部数据寄存器(DATA阶段)、Flash芯片进入编程状态(PROG阶段)。其中CMD阶段时间很短可以忽略,DATA阶段和PROG阶段所耗费的时间与控制器时钟和Flash颗粒固有特性有关,并且PROG阶段Flash芯片不再占用其所在通道的数据总线。

下面以NandFlash编程操作为例,对并行和流水控制进行详细的说明。

并行控制

固态盘控制器内部AMBA总线上集成了4个独立的Flash控制器和龙芯CPU等设备,龙芯CPU可以分别对每一个Flash控制器进行配置。由于这4个Flash控制器完全独立,包括独立的寄存器、数据总线、DMA模块、FIFO模块、BCH模块等,因此它们可以同时进行DMA传输和编程操作从而实现4个通道并行控制,从而极大地提升系统性能。

并行控制原理:在第一个通道下发编程命令,进入DATA阶段时,若继续等待该阶段和PROG阶段完成,由于系统采用单线程控制,其它三个通道在该时间段内无法进行任何操作,从而造成时间和带宽上的浪费。因此, 在第一个通道进入DATA阶段时,第二个通道下发编程命令并进入DATA阶段,以此类推,从而实现了四个通道同时进行编程,充分利用系统带宽,从而提升了系统性能。

流水控制

固态盘控制器中Flash控制器每个通道最多支持8个片选,由于这些片选复用该通道的控制信号和数据信号,因此不能实现所有片选同时进入DATA阶段。

流水控制原理:在一个片选进入PROG阶段时该片选不再占用数据总线,因此可以在该阶段对另一片选下发编程命令并使其进入DATA阶段,从而实现对该通道内片选的流水控制。由此可知,流水控制是通过充分利用PROG阶段的数据总线带宽达到性能提升。

在具体实施例中,根据本发明的设计方案,使用专业的仿真工具ModelSim进行仿真,首先对设计中的核心算法进行仿真,针对NandFlash算法的并行与流水采用Modelsim进行RTL级仿真,对比仿真后的结果与理论分析结果,从而验证法对性能的提升以及算法的可行性。

1.并行控制

控制器中AMBA总线上集成了4个独立的Flash控制器和龙芯CPU等设备,由于这4个Flash控制器完全独立,包括独立的寄存器、数据总线、DMA模块、FIFO模块、BCH模块等,由NandFlash并行控制原理可知,Flash子系统性能大概提升4倍,整个系统的性能提升还与SATA DMA性能、Flash管理算法复杂度有关。下面用实际数据分析并行控制对Flash子系统性能的提升,以CPU和总线频率100MHz、Flash控制器写脉冲30ns、Flash页大小4KB、PROG阶段160us(SLC Flash颗粒典型编程时间)、SATA请求为256个扇区为例,并行前后所需时间如下:(依据仿真数据,两个编程命令之间CPU处理时间取5.5us)

并行前:T=128KB÷4KB×(30ns×4K+160us)+(128KB÷4KB–1)×5.5us≈9.1ms

并行后:T=128KB÷4KB÷4×(30ns×4K+160us+5.5us)≈2.3ms

由以上数据可知,并行控制前后Flash子系统性能提升约为4倍。图5、图6显示了采用并行控制前后Flash性能的提升。

2.流水控制

本设计中Flash控制器每个通道最多支持8个片选,由于这些片选复用该通道的控制信号和数据信号,因此不能实现所有片选同时进入DATA阶段。

下面用实际数据分析流水控制对Flash子系统性能的提升,以CPU和总线频率100MHz、FLASH控制器写脉冲30ns、Flash页大小4KB、PROG阶段160us(SLC颗粒典型编程时间)、SATA请求为256个扇区为例,流水前后所需时间如下(依据仿真数据,两个编程命令之间CPU处理时间取5.5us)。

流水前:T=128KB÷4KB×(30ns×4K+160us)+(128KB÷4KB–1)×5.5us≈9.1ms

流水后:T=128KB÷4KB×30ns×4K+(128KB÷4KB–1)×5.5us+160us≈4.2ms

由以上数据可知,流水控制前后FLASH子系统性能提升约为2倍。图7、图8显示了采用流水控制前后Flash性能的提升。

同时采用Flash并行流水控制后,仿真如图9所示。

由测试结果可见,采用并行与流水控制后,可以有效的提高控制器的效率,提升系统性能。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1