基于NAND Flash的高速大容量存储系统设计
2018-07-20代明清边庆周啸赵谦
代明清 边庆 周啸 赵谦
摘要:针对当前提高存储系统容量和访问速度的迫切需求,设计了一种高速大容量存储系统,系统以PCI总线为通信接口,以FPGA 为控制核心,通过对多片NAND Flash 的逻辑控制实现数据的高速存储。提出了流水线、坏块管理、并行硬件ECC校验等关键技术。验证结果表明,系统工作性能稳定、可靠性高、能够完成大量原始数据的高速记录,保证了数据记录的实时性。
关键词:大容量存储;NAND Flash;流水线;ECC校验
中图分类号:TN274.2 文献标识码:A 文章编号:1009-3044(2018)13-0208-03
Design of High Speed and Mass Storage System Based on NAND Flash
DAI Ming-qing,BIAN Qing,ZHOU Xiao,ZHAO Qian
(Xi'an Aeronautics Computing Technique Research Institute,AVIC,Xi'an 710065,China)
Abstract:For the urgent requirement to improve the capacity and access speed of storage system, a high speed and mass storage system is designed. The system uses PCI bus as the communication interface and FPGA as the core controller to realize the logic control of several NAND Flash slices and complete the high speed storage of data. Key technologies such as pipeline, bad block management and parallel hardware ECC are presented. Experimental results show that the system has the advantages of stable performance, high reliability, can accomplish the high-speed record of original data which ensures the real-time performance of data recording.
Key words: mass storage; NAND Flash; pipeline; ECC verification
随着数字信号处理技术和微电子技术的飞速发展,数据采集和数据存储在雷达、通信、图像处理、语音识别、航空电子等领域中得到了广泛应用,随之对数据存储系统的容量、存储速率、抗振动能力等也提出了更高的要求。
传统的磁存储技术虽然成本低,但其机械特性使得存储设备体积大、功耗高、易损坏,已不再适用于高速大容量数据的存储。近几年快速发展起来的闪存技术具有明显优势,基于闪存形成的固态存储器SSD(solid state disk)存储密度高、可靠性高、體积小、重量轻,且抗震动、抗冲击、温度适应范围宽,可以满足苛刻条件下的数据存储要求,成为当今数据存储系统的首选。
结合实际应用,选用FPGA为硬件平台,以NAND Flash闪存为主要存储介质,设计实现了一款高速、大容量数据存储系统。
1 系统总体结构设计
图1为系统总体结构框图[1]。系统采用16片NAND Flash芯片组成大容量存储阵列,以FPGA为控制核心,以标准PCI总线为外部通信接口,实现与PC7447、PC8270、PC8640等具有标准PCI总线接口的处理器模块的通信,完成大容量数据的存储。
NAND Flash芯片选用MICRON公司的MT29F64G08AJABAWP芯片,单片存储容量8G×8bit,含16384个数据块,每块128个页,每页(4096+224)个字节,4096为每页的数据存储区,224为每页的空闲存储区。系统分为四个通道,每个通道4颗芯片,进行32bit的位扩展,四个通道共计16颗芯片,组成128GB的存储阵列。
FPGA选用Xilinx公司的XQ4VLX60-10FF668M可编程逻辑芯片,完成整个存储器系统的内部控制。四个通道分别采用一组寄存器和一个16KB的数据Buffer实现对各通道命令、地址、状态及数据的传递和处理,每个通道内的数据线和控制线相互独立。PCI接口由FPGA内部的PCI IP核实现,位宽64bit、带宽66MHz。
2 FPGA与Flash接口电路
FPGA是整个硬件系统的核心,完成系统复杂的时序控制, 使系统有条不紊地运行,Flash存储阵列实现数据的存储。图2为FPGA与NAND Flash芯片的连接关系[2]。
与NOR Flash不同,NAND Flash芯片没有专门的地址线,地址和数据共用一组信号线AD[7:0],芯片通过CLE#命令锁存信号、ALE地址锁存信号、WE#写使能信号、RE#读使能信号、CEx#片选信号完成读写控制,R/B#信号为Flash芯片的状态信号,该信号为低电平时,表明flash芯片正在进行当前操作,不响应其他任何外部命令。
3 Flash基本功能实现
NAND Flash在进行读写操作的时候,外部控制器不能通过普通总线的形式对某一位进行操作,而是以页为最小单位进行读写操作,以块为最小单位进行擦除操作的,图3为NAND Flash操作的基本操作流程[3]。
写操作时首先发送写命令0x80h、然后发送5个周期的地址及存储数据,在完成数据加载后发送0x10h命令,此时NAND Flash芯片的RB#信号会自动变低,进入自编程阶段,当RB#信号变高后,表明芯片自编程结束,进入状态读取阶段,检测编程操作是否成功。
读操作时首先发送读命令0x00h、然后发送5个周期的地址及0x30h命令,当RB#信号由低变高后,即可将指定地址的一页数据读出,通过状态读取,检测读操作是否成功。
擦除操作以块为单位进行,首先发送擦除命令0x60h启动当前块的擦除操作,然后传送3个周期的地址及0xd0h命令,即可执行内部块擦除操作,当RB#信号由低变高后,表明芯片擦除结束,进入状态读取阶段,检测擦除操作是否成功。
4 系统关键技术
4.1 流水线设计
就单个NAND Flash 芯片而言,数据存取速率很慢,远远不能满足高速存储的需求,系统采用空间并行与时间并行的方法拓宽存储带宽。空间上将4片位宽为8 bit 的Flash芯片并行扩展为32bit 的Flash 芯片组,可使存储带宽提高为原来的4 倍。
时间上主要采用流水线技术[4]实现。以NAND Flash 数据存储过程为例,存储过程一般包括2 个阶段:第1 阶段进行命令和数据的加载,第2 阶段进行页编程。加载命令阶段的典型时间大约为130us,自编程时间最长为500us,检测大约要0.1us,自编程阶段的时间约是加载操作的4倍,在这期间内NAND Flash 无法响应外部任何控制命令,也无法接收数据。可利用存储系统中每个Flash 芯片组页编程的间隙对其他空闲的芯片组进行数据写入操作,达到流水并行的存储效果,从而大大提高访问速度。Flash流水线操作示意图如图4 所示。
经计算,单片NAND Flash的理论最慢写入速度约为6.4MB/s,芯片并行设计后,速度提高到单片的4倍,约为25.6MB/s。采用4级流水后的写速度计算如下:
[写入速度=一页数据量×并行操作芯片数量×流水级数加载时间×流水级数+自编程时间+检测时间]
可得写速度约为63.0MB/s。
4.2 Flash坏块管理
由于NAND Flash生产工艺的限制,芯片出厂时会有一定数量的初始壞块,厂商会在每个物理块的第0页和第1页的spare区第0字节做标记,正常块标记为0xff,坏块标记为非0xff。在工作过程中,如果某一块的擦除或编程次数过多,也可能导致这一块变成坏块。为了保障闪存的正常使用和数据的安全性,需要建立坏块列表,对坏块进行必要的检测和管理[5]。
图5为坏块列表建立关系,将系统所有物理块划分为两部分,前面为有效块区,后面为保留区,逻辑块数量等于有效块区的物理块数量。由于有效块区的坏块都被保留区的好块替换,因此对于上层来说,只访问逻辑块号即可避免出现访问到坏块的情况,其中第0个物理坏块用来存放坏块映射列表。
4.3 ECC校验
在使用过程中,NAND Flash存储数据偶尔会发生“位”翻转问题,因此存储数据需要采取必要的检错和纠错措施。常用的数据检验方法有奇偶校验和CRC校验等。奇偶校验不具备纠错的能力,CRC校验通常用于通信领域实现差错控制。本系统结合NAND Flash整页访问的特点,采用FPGA逻辑设计了一种并行硬件ECC(Error Checking and Correcting)校验模型。
ECC校验中,每128字节的数据块将生成2.5个字节长度的ECC校验码,校验码的生成过程如下图6所示[6],p1由每字节的第7,5,3,1位相异或所得,p1`由每字节的6,4,2,0相异或生成。
页编程操作时候,将整页数据生成的ECC码存放在每页的Spare区,读操作时,从NAND Flash中读出的ECC码和读出数据计算出的ECC码相异或,根据异或结果检验数据错误,数据及ECC码的存储格式[7]如图7所示。本系统ECC能纠正单比特错误和检测双比特错误,而且计算速度很快,但对1比特以上的错误无法纠正,对2比特以上的错误不保证能检测。
5 结论
设计了一种基于FPGA和NAND Flash的高速大容量通用数据存储系统,介绍了系统总体方案,并引出了大容量存储的一些关键技术,包括Flash芯片的并行操作、流水线技术、坏块列表建立及ECC校验等,大大提高了系统的存储容量、读写速度及数据可靠性。该存储系统已成功应用于多项试验系统中,经过实践检验,达到了系统设计要求。
参考文献:
[1] 王立峰, 胡善清, 林峰,等. 基于闪存的高速海量存储模块设计[J]. 计算机工程, 2011, 37(7).
[2] 孔令振, 穆建文. 基于NAND Flash 大容量数据存储器的设计[J]. 微型机与应用, 2014, 33(9).
[3] 朱知博. 基于NAND FLASH 的高速大容量存储系统设计[J]. 现代电子技术, 2011, 34(8).
[4] 赵亚慧, 金龙旭, 陶宏江,等. 基于NAND Flash 的高速大容量存储系统的设计[J].电光与控制, 2016, 23(5).
[5] 陆浩, 王振占. 高速大容量固态存储器设计[J]. 计算机工程, 2011, 37(15).
[6] 张欣, 刘朝晖, 刘文,等. 基于闪存的高速大容量存储系统设计[J]. 微电子学与计算机, 2010, 27(11).
[7] 邹晨, 高云. 基于FPGA的硬件ECC 校验的设计与实现[J]. 航空计算技术, 2014, 44(6).