基于闪存阵列的缓存容量确定方法

2011-06-13 12:53张娟娟蒲南江
电子测试 2011年8期
关键词:传输数据存储系统存储器

张娟娟,蒲南江

(中北大学 仪器科学与动态测试教育部重点实验室 山西 太原 030051)

0 引言

在以NAND Flash为存储器的大容量存储系统中,有两种方案可以实现连续数据传输:一种是使用两片数据缓存读写,但是这种方案需要两片缓存输入输出数据线分别并联,这大大增加了电路复杂度;另一种方案是使用一片缓存对缓存写始终进行,但每次数据传输只传输半片缓存的数据,保证缓存不会变满变空。此种方法在一定程度上提高了系统的存储速度[2]。但是,由于NAND Flash的编程特点,在传输数据之前需要对Flash进行写编程控制命令和起始地址,使用处理器来实现这段操作花费的时间是相当可观的,虽然传输数据的过程速度快,但是平均传输速度提高的并不明显;基于以上技术的系统,启动一次数据传输的数据量比较大,这就对缓存的容量要求也比较大,为便于对Flash存储数据的管理缓存的容量设置为NAND Flash一页容量的整数倍[3]。另一方面,现今市场上的大容量的FIFO也比较贵,而且对于某些领域的数据存储系统其体积的大小也受到一定的限制。所以使用外部FIFO既增加了系统的成本开销,也给系统的体积增加不少[4-5]。

本文提出一种针对阵列式Flash存储系统缓存设备(FIFO)容量的确定方法,设计用于直接存储的写逻辑控制器(DMA)来实现数据存储,并根据NAND Flash特殊的工作方式,使用FPGA内部的RAM资源设计所需FIFO的容量,减少系统对缓存容量的过度依赖。

1 阵列存储系统的结构与工作原理

存储模块由4片Flash存储芯片组成。4片Flash共用相同的地址和控制信号和不同的片选信号,从而实现一种流水线的存储模式。控制模块主要包括CPU和DMA控制器,其功能是初始化存储模块、向接口部分发送各种命令及发送接收数据。CPU是整个系统的核心,负责协调控制各个模块的工作。在系统启动后,CPU的主要工作有:对通用寄存器及中断的设置、对Flash模块的初始化、数据FIFO的清零。图1为本系统原理框图。

图1 系统原理框图

1.1 并行分路技术

由于NAND Flash存储器的特点其页面编程分两个阶段:首先是加载在一页的数据量到数据寄存器中,称为加载阶段;然后进入编程阶段,将已加载的数据写入实际的存储单元。上述DMA传输数据就是加载阶段,此后Flash进入编程阶段其端口R/B信号被拉低指示Flash正处于忙工作状态,这段时间系统不能对Flash再进行任何操作,直到编程完成后R/B信号被拉高,这时Flash处于准备好状态,可以接受外部的操作命令。Flash的页面编程典型时间为200μs[6-7]。为使DMA连续地传输数据,借鉴时分多路复用技术,设计Flash存储阵列[8]。

借鉴时分多路复用通信技术,可以将输入存储系统的高速数据流看作是以传输一组数据所需的时间为一个时间片。不同的时间片传输不同数据的时分多路数据复用。存储操作时可以将输入的数据流以时间片为单位进行分路,每一个时间片上的数据按控制器的选择分至不同的Flash存储器并写入其中。当一片Flash存储器处于编程阶段时,选择下一片进行数据传输依次执行下去,待一次并行分路操作完成后,这时第一片Flash存储器已经处于准备就绪状态,可以写入新的数据,由此可以等效为Flash存储器的编程时间为0,这样就可以实现Flash阵列的连续传输数据的目的,提高系统的整体速度。并行分路原理见图2所示。

1.2 数据传输方式设计

为达到数据的高速传输的目的,FIFO到主存的传输使用DMA方式,从数据FIFO中读出后不经过控制器直接写入NAND Flash存储器。于是,设计专用的DMA控制器将数据从FIFO中读出并写入Flash存储器中。DMA的传输速度也就是读FIFO的速度,系统的整体速度主要取决于DMA方式下的传输速度。根据NAND Flash的编程时序特点,数据在FIFO到NAND Flash存储器的传输之前,要写入编程控制命令、还要根据系统的存储策略计算并写入NAND Flash地址。FIFO到主存单元Flash的传输中虽然没有复杂的计算,但数据传输量大(要远大于控制字、地址等信息),所以说FIFO到NAND Flash的传输速度决定着系统整体传输性能。另外,NAND Flash存储器的编程时间较长,这部分时间也直接影响到系统的整体传输性能。系统设计中DMA控制器的状态转换如图3所示。

图2 并行分路技术原理应用

图3 DMA控制器状态图

以K9F8G08U0A型NAND Flash为例说明DMA控制器的各状态功能描述。S0为空闲状态,当使能写逻辑控制时进入S1状态,此时控制器将读取第一个有效块地址,在S2状态对地址值进行加工整理后,对Flash写入编程命令及整理后的地址值,系统在S4状态进入页面加载阶段,将对选中的Flash的指定地址加载2KB数据(K9F8G08U0A页面数据量为2KB),结束后写入第二个编程命令;S6状态为判断状态:如果此时写逻辑内部存储块计数器达到要求的块数,本次写操作结束;如果存储块计数器未到达指定值,而页计数器等于64时(K9F8G08U0A一个块包含64页),表示此时完成了一个块地址的存储,系统将再次进入S1读取下一个有效块地址,继续写逻辑操作;如果片选值= 4,且页地址< 64,表示Flash同一个块中同一个页地址全部完成了数据加载,此时页地址要加“1”,系统再次进入S2状态重新进行地址加工整理;如果片选值< 4,表示同一页地址还未全部完成数据加载,此时片选值将加“1”,即选中下一片Flash进行相同命令和地址的写入及不同数据的加载。

2 系统传输速度计算

从上述的系统工作原理可知:在进行数据加载前首先要向Flash写入地址和命令,而在写入地址和命令的时间段内,外部数据同时在进行缓存。假设数据进入FIFO的速度与读出FIFO的速度一样,因此FIFO的容量就是在写入地址和命令的时间段内进入FIFO的数据量。在系统中为了减少使用逻辑器件的数量,控制成本, 减少设备的体积和重量,并且考虑到充分利用FPGA内部的丰富资源,提高资源利用率,简化硬件结构。接口所用的FIFO 和设备所需完成的数据处理功能在一片FPGA中完成的。存储器是FPGA内部的重要资源,从数据传输上说,缓存容量越大,对后续电路时序要求就越低,可减少总线操作的频次;但从数据存储上说,就意味着需要开辟更大的存储空间来进行缓冲,会增加系统资源的开销,而且容量越大,成本也越高。因此,在综合考虑系统性能和成本的基础上,设计满足系统需要的FIFO即可。以FPGA内部的存储器设计FIFO时,需要考虑FIFO容量大小的问题。

2.1 Flash存储器的数据存储特点

Flash存储器编程是以页为单位,对于单片NAND Flash的单页编程操作过程比较特殊。先使能命令锁存使能信号CLE向端口写入要操作的命令,使能地址锁存使能信号ALE 写入要操作的地址, 然后开始传输2KB数据,数据传输完毕后在写入结束命令,Flash进入编程阶段,一般典型的编程时间为200μs。由此可以看出Flash存储数据的过程由写地址命令阶段、数据传输阶段以及Flash编程阶段组成。

系统启动DMA控制器时,首先从地址FIFO中读出一个Flash存储器的有效地址,接着写入编程命令,然后是五周期的地址接着就是判断数据FIFO是否为空,如果FIFO中有数据就会连续地读FIFO并往Flash存储器中写入数据。只到写入的数据达到Flash存储器的一页2KB为止。在此过程中如果FIFO中一直有数据则可计算出DMA存储数据的速度。设传输2KB数据的时间为T则其中包含该读地址FIFO的时间TR=60ns、写编程命令的时间Tc=40ns、写五周期的行列地址的时间TA =220ns、以及写入2KB的数据的时间TD=(60ns×2048)。可以得出T=TR+Tc+TA+TD=123200ns。由此可以计算出传输数据的平均速度为16.6MB/S。

2.2 数据FIFO缓存容量的确定

本设计中保持写FIFO的速度与转存速度一致就会是使系统正确连续的运行,由上述得出系统的存储速度为16.6MB/s,所以FIFO的写入速度应小于或等于整体存储速度就不会导致FIFO溢出。设写FIFO的速度为16MB/s,整个系统在上电后,DMA总是开启的直到完成所要求的存储容量才停止。在DMA控制器开启后,除了传输数据外,还要读出地址FIFO的有效块地址,写Flash的编程命令和地址等。这段时间里如果向数据FIFO中写入的数据没有溢出则其他任何时候都不会溢出。所以数据FIFO的容量最小也要大于这段时间里面写入的数据量。由上可知这段时间具体可分为读地址FIFO的时间TR =60ns、写编程命令的时间Tc=40ns、写五周期的行列地址的时间TA =220ns。具体时序图如图4所示。所要求的FIFO的容量只要大于在DMA传输数据之前对Flash的写编程命令以及写地址的这段时间内,写入FIFO的数据量即可。设FIFO大小为W则W>16MB/S×TR+Tc+TA=16MB/S×(60ns+40ns+220ns)=5.12Byte。由此看出在改变电路结构后系统对FIFO缓存容量的依赖减小很多。为系统增加一点冗余设计,FIFO的容量可以设计为8Byte的深度,这仅消耗了FPGA内部很少的存储器资源。

图4 数据加载时序

3 结果分析

此方法经过试验验证,从示波器上得到加载过程的波形如图4所示。0、1、2、3通道为Flash的数据加载时序,4通道是FIFO的写入时序。可得出结论FIFO的写入速度与读取速度是一致的,因此FIFO的大小仅仅由对Flash输入命令值和地址值的大小决定。

又如图5所示,4通道反映了系统对Flash进行命令值地址值写入时序,可清楚的看到总8BYTE数据,包括两个命令码和五个地址码。因此FIFO的长度为8BYTE即可。与理论上得到的值一致。

图5 FIFO写入时序

4 结束语

本文通过对用NAND Flash存储器组成阵列构成存储系统的关键技术的研究,提出采用单片FPGA技术实现存储系统的具体方案,设计专用的DMA控制器用以解决存储系统对FIFO缓存容量的依赖。并通过实验验证了此方法的可行性。本方案集成度高、成本低、非易失、可靠性高,可以满足冲击、振动等恶劣环境下的高速海量数据存储的需要。

[1]刘继斌,胡修林.高速大容量存储通道的设计[J].华中科技大学学报:自然科学版),2005,11(3):30-32.

[2]何维.一种高速数据采集及存储系统的研究[D].西安:西北工业大学,2007.

[3]朱岩.基于闪存的星载高速大容量存储技术的研究[D].北京:中国科学院研究生院,2006.

[4]王俊,郑焱.基于DMA 的并行数字信号高速采集系统[J].电子技术应用,2010,3 (3):40-44.

[5]晏敏,龙小奇.开放式大容量NAND Flash 数据存储系统设计与实现[J].微电子学与计算机,2009,26(11):13-16.

[6]孙建,苏中.基于Flash的大容量高速数据记录仪设计[J].微计算机信息,2009,26 (92):55-57.

[7]朱岩.基于闪存的星载高速大容量存储技术的研究[D].北京:中国科学院研究生院,2006.

[8]张锐.高速大容量存储系统的研究和设计[J].航空计算技术,2008(7).

猜你喜欢
传输数据存储系统存储器
基于单片机的物联网传输数据高并发读写系统设计
基于SSL VPN实现安全共享疾控单位之间的数据
静态随机存储器在轨自检算法
基于深度强化学习的物联网传输数据实时调度方法
分布式存储系统在企业档案管理中的应用
苹果专利可采用光纤输出灯光并传输数据将光纤隐藏于车辆部件内
天河超算存储系统在美创佳绩
华为震撼发布新一代OceanStor 18000 V3系列高端存储系统
一种基于STM32的具有断电保护机制的采集存储系统设计
存储器——安格尔(墨西哥)▲