首页 > 范文大全 > 正文

基于FPGA实现的NAND FLASH高速存储控制器

开篇:润墨网以专业的文秘视角,为您筛选了一篇基于FPGA实现的NAND FLASH高速存储控制器范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

【摘 要】本文介绍了一种基于fpga实现一种大容量数据存储的方案。该方案分析了FLASH工作的特点,在FPGA平台上实现对FLASH的控制,达到高速存储的效果。在满足设计需求的前提下,本文给出了FLASH控制器的最简架构,使得占用FPGA资源最优化。

【关键词】嵌入式;FPGA;存储技术

在当今这个电子信息高速发展的时代,数据存储在多个场合都有应用的需求,因此出现了多种数据存储的介质和方式。适用于大容量的数据存储的介质有SRAM、SDRAM和FLASH等,三种常用的存储介质性能比较如表1所示。可见FLASH集成度高、功耗低、价格便宜、不需要定时刷新、掉电不丢失数据等特点优于其他存储介质,为满足本设计对大容量、低功耗、最简架构等设计要求,我们选用FLASH作为存储介质。FLASH又有nand flash和NOR FLASH两种,NOR FLASH的特点是能够在芯片内执行程序,传输效率极高,适用于存储规模小的应用程序,能够不调入外部RAM中直接在NOR FLASH芯片内执行。而NAND FLASH则有着高密度的存储单元,适合用于存储大量数据,可以使得数据存储高密度存储,并且擦除和读写速度都很快,可以达到高速存取的要求。

1.NAND Flash的基本介绍

本设计选用的FLASH有8片晶片,每片晶片包含4096个块,每块包含64个页,每页包含2048字节数据区和64字节SPARE区。8个晶片共用同一组IO口,但控制信号则各用一组。控制信号包括指令锁存使能信号(CLE)、地址锁存使能信号(ALE)、编程使能信号(WE)、读取使能信号(RE)、片选使能信号(CE)以及FLASH的状态反馈信号(RB),信号分布如下图所示。

FLASH的编程操作是以page为单位进行的,控制器先发送编程操作的起始指令80h,同时使指令锁存使能信号(CLE)有效,两路信号同时控制FLASH捕捉到第一个指令。然后发送五个字节的地址,同时使ALE有效,FLASH捕捉到有效的页地址,接着发送需要存储的2048+n个字节的数据,最后发送编程操作结束指令,FLASH开始自主编程,将数据固化到FLASH中去。接收到结束指令后,该片的RB信号会反馈出FLASH的状态,高电平表示READY(已经完成上一步操作),低电平表示BUSY(仍在执行上一步操作),当RB信号为高电平后,需要发送一个状态查询指令70h,读取IO0的状态,如果该位为“1”则表示上一步操作成功,如果为“0”则表示操作失败,该块为新产生的坏块。。FLASH的读取操作也是以page为单位的,也需要起始指令、地址和结束指令组合来控制FLASH读取数据送出。FLASH的擦除操作是以block为单位的,每次发送指令组合被FLASH捕捉之后,都将整块擦除为未使用块,并且在擦除完成之后也需要读取FLASH的完成状况,判断是否产生坏块。常用的FLASH操作指令如下表所示。

由于FLASH的制造工艺,在未使用时,FLASH每一位都保持为“1”,八位组合为一个字节单元,需要固化数据的时候,就将相应位由“1”变为“0”,以此来记录信息,擦除则是将整块的位全部恢复为“1”。当使用过程中,某一块成为坏块,则该块的位信息将保持原状态,无法改变。如果重复对坏块进行编程,则会造成固化的信息为错误信息。

SPARE区是提供给使用者自由支配的一个区域,可以用来写入数据信息、纠错码等。厂家在出厂的时候会在每一块的首页SPARE区的前两个字节标记出本块是否为坏块,不为“FF”则为坏块。为了在使用之前找出坏块的分布,需要遍历整片FLASH芯片以建立完备的坏块信息表。即遍历整个FLASH芯片,读出每一块首页中2048和2049字节的数据,找出所有坏块的分布,建立坏块信息表。有些使用者会将第一片FLASH第一块专门用于管理坏块,把坏块信息表存放在该块中。但是,在数据存储过程中,每次都需要读取该块中相应的坏块信息,进行判断后才能进行操作,并且在产生新的坏块之后要对该块进行随机编程操作,这些过程大幅降低了FLASH存储数据的整体速率,因此本设计将坏块信息表的维护工作划分给CPU,由CPU提供可用的非坏块地址并在有坏块产生时更新坏块信息表。

2.FLASH控制器最简架构实现

为了实现在FPGA上占用的资源尽量少,必须明确FLASH控制器和CPU的工作任务划分,并且实现两者间的无缝互接。给出控制器与CPU和FLASH互连的外部接口如图n所示。CPU管理了FLASH的坏块信息表,因此要根据坏块信息表提供可用的块地址给控制器;当控制器检测到新的坏块产生时,要将这一新的坏块地址传送给CPU,由CPU更新坏块信息表。同时,CPU根据各数据源的数据量和数据接收器的状态来产生对FLASH的擦除、读取数据的指令,当控制器接收到指令时,控制FLASH执行相应操作。

为了保证各路不同速率不同数据量的数据源能够正常存储,各路数据源都将数据发送给控制器,控制器将数据存放在内部的缓冲区,例化出的缓冲区以2048字节为单位存放,以备后续以页的单位发送数据给FLASH。每次从FLASH里读出的数据也将在控制器中进行缓存,当外部数据接收器准备好接收数据时,即回放数据使能有效的时候,控制器将缓冲区的数据以字节为单位输出,这样可以使得存储数据和回放数据的功能独立起来,在往数据接收器回放数据的同时,也可以正常存储数据,提高控制器和FLASH的工作效率。

2.1顶层模块

顶层模块主要用于控制并协调各模块之间的工作,接收各路数据源的数据,根据优先级发送给写操作模块缓存区域,与存储控制模块的接口互联,接收指令之后调度各模块进行对FLASH的操作。

主控制状态机的工作流程如下图所示,上电之后控制初始化模块自动开始初始化,生成完备的BAT信息,之后处于等待状态,当数据缓存已满或者CPU发送过来指令后开始相应操作。操作完成后要进行判断,检查操作是否完成,即是否产生坏块;若有坏块产生,则对坏块进行相应操作的处理;若无坏块产生则回到等待状态,等待下一次操作指令或数据缓存已满信号。

2.2初始化模块

对FLASH以页为单位进行遍历,扫描出各页的使用信息,再根据每块的所有页信息,将块进行归类,生成BAT信息数据,由CPU读走以供此后正常工作时使用。根据分析,一共有八种块类型,未写块、正常写满块、正常写但未写满块、写坏块、替代并写满块、替代但未写满块以及初始坏块,其中初始坏块包括出厂时的坏块以及前一次初始化之前使用产生的坏块。根据各块的类型,设计标记,并将该块的逻辑块计数、已使用页计数等信息嵌入BAT信息中,存放等待CPU读走。

2.3写操作模块

FLASH的写入操作是以页为单位的,每次发生指令和地址组合起来控制FLASH进行一页的写入操作。写入操作如上图所示。可以一次性写入2048个字节的数据,和64字节的Spare标记,也可以利用随机写入指令对某一字节进行写入操作。为了减少写入操作的时间,本设计将利用连续写操作指令和随机写操作指令,同时写入2048字节的数据和4字节标记码。

写操作模块主要负责控制FLASH进行写入操作。由于FLASH的指令周期比较复杂,时序要求较严格,因此要选择合适的时钟周期对FLASH进行操作。由写操作模块发送给FLASH指令和地址,控制FLASH的正常写操作。同时为了提高数据写入的速率,本设计提出流水操作进行写入数据,写模块要保证控制八片FLASH晶片进行流水写入操作。每次写入操作自主编程完成之后还需对每片晶片进行检查,是否页写时产生坏块,并且在坏块产生时,抽取同一片的下一块作为替代块,从数据缓存区调出写坏页的数据再次进行存储,保证数据的完整性。

2.4回放操作模块

FLASH的回放操作是以页为单位进行回放的,发送给FLASH指令和地址组合控制FLASH后,FLASH会自主加载数据,当数据加载完成之后RB信号变低,然后给出RE信号进行数据读出,每次回放出2048字节的数据。

2.5擦除操作模块

FLASH的擦除操作是以块为单位进行操作的,每次发送指令和地址的组合控制FLASH进行擦除操作,每次擦除一块。FLASH接到擦除指令和地址之后,进行自主擦除,当擦除完成,RB信号变低,控制器要对擦除操作进行查询,检查是否完成了擦除操作,是否出现新的坏块。如果有坏块产生,则对坏块进行标记。

2.6标记模块

标记模块主要功能是将写操作失败和擦除操作失败产生的坏块标记为初始坏块,以便下一次初始化时产生完备的BAT表。

3.仿真与总结

通过仿真工具验证,以及包含CPU和数据源等配合的板级测试,验证数据存储速率最高可达50Mbps,数据回放速率最大达到10Mbps,遇到坏块时能够自动跳过坏块,产生新的坏块时可以及时更新坏块信息表。占用300万门的FPGA资源仅9%,能够很好地精简FPGA控制器,将资源留给其他必要设备使用。 [科]

【参考文献】

[1]Samsung.K9F4G08 手册.2006.

[2]王崇剑,李玉山.基于 FPGA的 K9F2G08U0M Nand FLASH 控制器设计[J].电子元器件应用,2008,10(3):4-7.

[3]陈明义,连帅军,周建国.基于 FPGA的 FLASH 控制器系统设计及实现[J].电子科技,2008,21(7):11-13.

[4]王诚,吴继华.Altera FPGA/CPLD设计[M].北京:人民邮电出版社,2005.

[5]夏雨闻.Verilog 数字系统设计教程 [M].北京:北京航天航空大学出版社,2003.

[6]南京沁恒电子有限公司.CH372中文手册(一),2007.

[7]刘彬彬,高春艳,孙秀梅.VB从入门到精通[M].北京:清华大学出版社,2008.

[8]李兰,宁永海,基于CH372的USB数据采集系统的设计与实现[J].微计算机信息,2007,23(12):76-77.

[9]周治良,刘俊,张斌珍.基于FPGA及FLASH的数据采集存储系统设计[J].微计算机信息,2007,23(31):91-92.

[10]王等,吴继华,范丽珍等.Altera FPGA/CPLD设计[M].北京:人民邮电出版社,2005.

[11]248gb nand m49a 1.fm-Rev.B4/06 EN.Micron Technology,Inc.

[12]256M@8bit/128M@16bit NAND Flash Memory.SAM SUNG Electronics Co. Ltd.

[13]NAND Flash Spare Area Assignment Standard. Samsung.

[14]Elect ronics Co. Ltd. 27.April,2005.

[15]赵海登,刘晓文,胡景军,等.基于FPGA的UARTIP核的设计实现[J].通信技术,2009,42(05):177-179.

[16]韩康榕,陆宏,季晓勇.数字处理器与通用异步串口通信的实现[J].通信技术,2002(01):55-57.

[17]HU Zhe,ZHANG Jun,LUO Xi-ling. A Novel Design of Efficient Multi-channel UART Controller Based on FPGA[J].Chinese Journal of Aeronautics,2007(20):66-74.

[18]熊红兵,陈琦.基于FPGA的异步FIFO设计与实现[J].微计算机信息,2006,22(6-2):216-218.