NAND Flash控制器硬件设计与仿真验证
冉计全1,3, 郭林2, 张三刚3, 马捷中3, 翟正军3, 郭阳明3     
1. 中国人民解放军31008部队, 北京 100850;
2. 中国航天空气动力技术研究院, 北京 100074;
3. 西北工业大学 计算机学院, 陕西 西安 710072
摘要: NAND Flash存储芯片的整体性能,在很大程度上会受到NAND Flash控制器的影响。为此在对NAND Flash的存储结构和接口进行仔细分析的基础上,设计了控制器的硬件功能,确定了各个命令执行时的设备状态转换关系,并在仿真环境下,利用NAND Flash控制器进行存储介质的读写及擦除等操作,全面验证了控制器的功能。结果表明,控制器工作正常,符合设计目标。
关键词: NAND Flash     控制器     存储结构     接口    

随着固态存储技术的发展,以NAND Flash等构建的存储设备越来越广泛地得到应用。但是, 由于NAND Flash存储芯片存储结构和对外接口的特点, 如读写控制时序复杂、存在位交换 (0、1反转) 等问题, 使得其整体性能不仅取决于NAND Flash存储介质的性能, 而且在很大程度上还受到NAND Flash控制器的影响[1]

NAND Flash具有下列4个特点:① 以页为单位进行读、写操作, 以块为单位进行擦除操作, 写入和擦除操作速度快; ② 没有单独的地址和数据总线, 只能采用串行读取, 不能按字节进行随机读写且速度慢; ③ 体积小, 引脚数目少; ④ 使用时需要将NAND芯片中不影响其他有效块性能的失效块, 在地址映射表中屏蔽以保证数据存储正确性[2-4]。本文将根据上述NAND Flash特点, 探讨在实用环境下, 对其实施控制的方法, 以提升固态存储设备的整体性能, 这无疑具有重要的意义。本文还针对上述需求, 基于FPGA的固态盘开发平台, 进行了NAND Flash控制器设计。

1 NAND Flash的存储结构和接口

NAND Flash具有速度快、密度大、成本低等特点, 在各种片上系统芯片中 (SOC) 集成NAND Flash控制器已逐渐成为一种趋势。NAND Flash利用穿隧注入 (tunnel injection) 技术写入数据, 以穿隧释放 (tunnel release) 技术抹除数据[5]

NAND Flash内部由存储阵列、控制逻辑、I/O逻辑、寄存器等部分组成, 并以页作为基本存储单元, 页的容量范围一般从 (512+16) 至 (4 096+128) 个字节。页是块的组成单位, 根据闪存芯片的容量大小与技术规格的不同, 其内部组成结构的块、页容量也不尽相同。[6]

对NAND Flash进行的基本操作有复位 (reset) 操作、读ID (read ID) 操作、读状态 (read status) 操作、写页 (program page) 操作、块擦除 (block erase) 操作、随机写 (random data input) 操作、随机读 (random data output) 操作、读页 (read page) 操作等。以上对NAND Flash存储芯片的操作, 都是通过控制信号进行的。NAND Flash的控制信号包括ALE, CLE, /CE, RE, /WE, R/B#等。

NAND Flash的I/O端口采用复用的数据线和地址线, 对片上存储介质的存储单元操作必须先通过寄存器串行地进行数据存取。NAND Flash的寻址方式分为行地址和列地址。这样可减少芯片的管脚数目, 有助于提高芯片设备的模块化程度, 不过对芯片的读写数据等操作却变得更加复杂。

2 控制器的设计目标

NAND Flash控制器设计一般有2方面的内容:① 硬件功能设计与实现, 包括对NAND Flash芯片基本操作功能的设计; ② 固件程序实现。本文在基于嵌入式处理器软核NiosⅡ的固态盘开发平台上 (见图 1) 完成了NAND Flash控制的硬件设计。

图 1 固态盘开发平台

本文所确定的控制器设计目标是, NAND Flash存储器芯片能够通过Avalon总线和嵌入式系统处理器NiosⅡ连接, 使得FPGA系统中的其他设备通过Avalon总线访问本控制器, 最终使控制器能够实现对存储器的各种数据进行存取操作。同时, 针对NAND Flash存储器在频繁使用的过程中, 有可能出现的位翻转现象[7-8],在此控制器的硬件设计中建立数据存取操作时的错误检测和纠正机制。

3 NAND Flash控制器硬件设计 3.1 接口定义

本文选用SAMSUNG公司容量为2GB的NAND Flash芯片K9F2G08U0A [9]进行NAND Flash控制器的硬件设计。

NAND Flash控制器硬件模块一端连接NAND Flash芯片, 另一端通过片上总线与系统中处理器总线连接。与Flash芯片端连接的各个信号的名称及定义均与NAND Flash芯片相同。而控制器与处理器端的连接则采用类似于SRAM接口的方式。控制器接口说明如图 2所示。具体信号的引脚定义以及功能描述如表 1所示。

图 2 控制器接口说明
表 1 控制器接口信号描述
引脚方向功能
ADDR[12:0]输入地址输入
CLK输入系统时钟
RSTN输入复位信号, 有效值为低
CEN输入片选信号, 有效值为低
OEN输入输出使能, 有效值为低
WEN输入写入使能, 有效值为低
DATA[7:0]输入/输出数据总线
INT输出提供给处理器中断信号
RBN输出NAND Flash工作状态信号
3.2 寄存器配置

NAND Flash控制器被设计成一个基于Avalon总线的从设备模块。它描述了主从构件间的端口连接关系, 以及构件间通信的时序关系[10-12]。系统中NiosⅡ处理器通过Avalon总线对NAND Flash控制器接口进行的基本操作只有读取和写入2种, 而NAND Flash控制器的硬件模块对存储芯片的基本操作则复杂得多, 包括页编程、页读取、块擦除、读状态、读取ID以及设备复位等。为了在不改变系统接口及操作模式的情况下, 实现NiosⅡ处理器对控制器的直接寻址访问, 本文采用与NAND Flash类似的写控制字的方式。

本文采用16个寄存器组, 并以存储器映射的方式进行编址寻址。地址偏移从0x1FF0到0x1FFF为寄存器区, 0x0000~0x0210为数据缓存区。寄存器地址分配、命名及其功能描述如表 2所示。

表 2 寄存器地址及功能表
寄存器
地址
外部
操作
名称寄存器功能
0x1FF0读/写ByteAddr0页内地址低字节
0x1FF1读/写ByteAddr1页内地址高字节
0x1FF2读/写PageAddr0页地址第一字节
0x1FF3读/写PageAddr1页地址第二字节
0x1FF4读/写PageAddr2页地址第三字节
0x1FF5IDRegister0ID0字节
0x1FF6IDRegister1ID1字节
0x1FF7IDRegister2ID2字节
0x1FF8IDRegister3ID3字节
0x1FF9CMDRegister命令寄存器, 暂存命令相应操作完成后清除, 0x00代表页读取、0x60代表块擦除0x80代表页编程、0x70代表状态读取、0x90代表ID读取、0xF0代表复位、0x50代表随机读取、0x40代表随机写入
0x1FFAERRRegister错误寄存器, ECC模块通过该字节指明错误状态
“?00”时没有错误
“?01”时当前页的第1个512字节有错
“?10”时当前页的第2个512字节有错
0x1FFBECCRegisterECC模块使能信号
0x1FFCStatusRegisterNAND Flash状态信息
0x1FFDRandomRead随机读取数据
0x1FFERandomWrite随机写入数据
3.3 控制器硬件功能设计

NAND Flash控制器硬件模块的功能主要实现对NAND Flash芯片的控制。它直接向Flash发送页读取、页编程和块擦除等控制命令, 并提供与NAND Flash芯片进行数据交互时所要求的时序波形, 是对固态硬盘进行数据存取的桥梁。

本文所设计的NAND Flash控制器硬件功能结构如图 3所示。可以看出, 本模块主要由寄存器组、总线接口、ECC模块、状态机控制以及NAND Flash接口等模块组成。

图 3 NAND Flash控制器硬件功能框图

NAND Flash控制器硬件系统中, 各个模块的功能描述如下:

1) Avalon总线接口模块功能

Avalon总线接口模块接收来自NiosⅡ处理器发送的命令以及数据信息, 然后把相应的设备状态的值, 通过状态寄存器返回给嵌入式处理器。它是NiosⅡ处理器与NAND Flash控制器进行数据、命令等交互的桥梁。

2) 寄存器组模块功能

本模块是控制器的控制部分, 通过各个寄存器实现对NAND Flash具体功能的控制。其中:命令寄存器用于存放NiosⅡ处理器通过Avalon总线接口模块向NAND Flash控制器发送的命令码; 地址寄存器用于存放NiosⅡ发送的读写NAND Flash地址序列; 数据寄存器用于存放读写Flash的数据值; 状态寄存器用于保存NAND Flash工作时反馈的状态信息, 主要是Flash的R/B#信号。设备在工作过程中, 如果数据出错, 系统调用ECC校验模块, 纠正错误结果, 并将校正的数据代码存放在数据寄存器。

3) ECC校验模块功能

ECC校验模块用于数据校验。在页编程时, 每一页数据产生校验码将其写入NAND Flash芯片中每一页后面的空闲区 (spare area), 在读取数据时, 再次对结果产生校验码, 根据2次校验码的结果判断是否出错, 若有错误, 则启动相应的错误处理模块。

4) NAND Flash接口模块功能

NAND Flash闪存接口模块为控制器与NAND Flash芯片提供接口, 闪存芯片通过复用的地址数据总线来完成命令、数据、状态的传输, 总线宽度一般为8位或者16位。以相应的芯片控制信号配合执行对芯片总线的控制。

5) 控制器状态机功能

控制器固件对NAND Flash芯片的各种操作由状态机完成, 状态机包含NAND Flash控制器运行的各种状态, 每一个命令码操作由NAND Flash控制器的各种状态有序组合而成, 共同完成对NAND Flash存储芯片的一次操作。

3.4 控制器的功能实现

NAND Flash控制器的功能实现由控制器状态机模块完成。系统没有操作时, 控制器处于IDLE状态, 命令代码被写入命令寄存器, 确定下一步要执行的命令后,NAND Flash控制器转移到某个相应的子状态序列, 完成对存储器的指定操作。NAND Flash控制器系统的总状态图如图 4所示。

图 4 控制器状态机转换图

在控制器状态机中, 程序将执行不同功能的控制。每个独立的过程由一个子状态机来实现, 通过系统的时钟来控制所有的状态转换。每个子状态操作完成需要的步骤和时钟个数可能不尽相同, 程序则通过维护一个专用寄存器进行协调, 以确保满足NAND Flash器件的时间控制要求。

4 NAND Flash控制器功能仿真验证

对本文所设计实现的NAND Flash控制器的功能, 在EDA软件环境下进行了仿真验证, 其测试流程如图 5所示。

图 5 控制器仿真流程

图 5所示的仿真验证过程中, 需对NAND Flash芯片进行一系列交互操作, 如读ID、擦除、读设备、页编程、页读取、ECC校验、I/O读等, 且每次操作完成后, 都要读设备状态并判断操作是否成功, 只有操作正常完成才继续进行下一步的操作, 否则退出测试过程。各个功能仿真测试的波形如图 6图 13所示。

图 6 读ID操作波形图
图 7 擦除操作波形图
图 8 读设备状态波形
图 9 页编程操作写命令波形图
图 10 页编程操作写
图 11 页读取命令数据波形图
图 12 读出校验码操作波形图
图 13 页读取操作数据波形图波形图

图 6中, 读ID操作命令发出后, 读出的4个字节信息即是设备ID信息。图 7中, 输入擦除命令和要擦除的块地址之后, 输入第二个擦除命令, 此后R/B#信号为“低”表明设备处于执行擦除任务的忙状态。等待设备R/B#信号变“高”后发出读状态命令, 若得到结果为E0h表明擦除命令正常执行完成, 波形如图 8所示。图 9表示输入页编程命令操作波形图, 页编程操作的写数据波形图则如图 10所示。页读取操作波形图则如图 11所示, 先写入页读取命令与要页读取的地址, 然后输出第二个命令30H, R/B#信号变“低”, 设备进入忙状态, 说明数据正在被读出到内部寄存器中。ECC校验码数据从I/O读出的波形图如图 14所示。图 15则为数据从I/O读出的波形图。

由以上波形图可以看出, 各个功能模块的功能都较好地符合了预期设计目标。

5 结论

本文在对NAND Flash的存储结构和接口进行仔细分析的基础上, 设计了控制器硬件功能及其各个命令执行时的设备状态转换关系。然后在仿真环境下, 利用NAND Flash控制器进行存储介质的读写以及擦除等操作, 全面验证了控制器的设计功能。结果表明, 控制器工作正常, 能控制多片NAND Flash, 有效扩充了NAND Flash的容量, 实现了并行访问多片NAND Flash, 提高了数据存取的速度, 实现了预期的设计目标。

参考文献
[1] 申风有. 多通道NAND Flash控制器的设计[D]. 武汉: 华中科技大学, 2011
Shen Fengyou. Design of Multi-Channel NAND Flash Controller[D]. Wuhan, Huazhong University of Science and Technology, 2011 (in Chinese) http://cdmd.cnki.com.cn/Article/CDMD-10487-1012013116.htm
[2] Park C, Seo J, Seo D, Kim S, Kim B. Cost-Efficient Memory Architecture Design of NAND Flash Memory Embedded Systems[C]//Proceddings of 21st International Conference on Computer Design, 2003:474-480
[3] Bai Ymgwen, Tsai Fuen. Design and Implementation of a Table-Based GUI for MP3 Players[C]//2006 IEEE Tenth International Symposium on Consumer Electronics, 2006:1-6
[4] Choi Jungdai, Cho Seongsoon, Yim Yongsik, Joo Kyungjoong. Highly Manufacturable 1 Gb NAND Flash Using 0.12 um Process Technology[C]//2001 IEDM International Electron Devices Meeting, 2001:2-5
[5] 林刚. NAND Flash坏块管理算法及逻辑层驱动设计[D]. 西安: 西安电子科技大学, 2009
Lin Gang. Algorithm for NAND Flash Bad Block Management and Design for Logical Layer Driver[D]. Xi'an, Xidian University, 2009 (in Chinese) http://cdmd.cnki.com.cn/Article/CDMD-10701-2009195608.htm
[6] Corporation B M. Dual Solid State Drive (SSD) Goes Offline or Defunct DDD-IBM Blade Center HS21 XM[EB/OL].(2008-12-04)[2016-01-23]. http://www-947.ibm.com/systems/support/supportsite.wss/docdisplay?Lndocid=MIGR-5078827&brandind=5000020
[7] 彭兵. 基于Flash的电子硬盘研究与设计[D]. 长沙: 国防科学技术大学, 2007
Peng Bing. Flash-Based Electric Hard Disk Research and Design[D]. Changsha, National University of Defense Technology, 2007 (in Chinese) http://cdmd.cnki.com.cn/Article/CDMD-90002-2008098600.htm
[8] Chiao Mongling, Chang Dawei. A Novel Flash Translation Layer for NAND Flash Memory Based on Hybrid Address Translation[J]. IEEE Trans on Multimedia, 2011, 60(6): 753–766.
[9] Samsung Electronics. K9WAG08U1A Datasheet[EB/OL]. (2005-11-09)[2016-01-23].http://member.ic37.com/sell/pdf.asp?keyword=K9WAG08U1A&type=pdf
[10] 张湘丽. 基于NiosⅡ的嵌入式系统研究与开发[D]. 天津: 河北工业大学, 2008
Zhang Xiangli. The Research and Development of Embedded System Based on NiosⅡ[D]. Tianjin, Hebei University of Technology, 2008 (in Chinese)
[11] 宋宇. 基于SoPC系统的软硬件划分[D]. 上海: 复旦大学, 2007
Song Yu. Hardware/Software Partitioning Based on System on Programmable Chip[D]. Shanghai, Fudan University, 2007 (in Chinese) http://cdmd.cnki.com.cn/Article/CDMD-11914-2009233572.htm
[12] Lin Chuansheng, Dung Lanrong. A NAND Flash Memory Controller for SD/MMC Flash Memory Card[J]. IEEE Trans on Magnetics, 2007, 43(2): 933–935. DOI:10.1109/TMAG.2006.888520
Hardware Design and Simulation Test for NAND Flash Controller
Ran Jiquan1,3, Guo Lin2, Zhang Sangang3, Ma Jiezhong3, Zhai Zhengjun3, Guo Yangming3     
1. Chinese People's Liberation Army 31008, Beijing 100850, China;
2. China Academy of Aerospace Aerodynamics, Beijing 100074, China;
3. School of Computer Science, Northwestern Polytechnical University, Xi'an 710072, China
Abstract: The performance of NAND Flash memory chips is largely affected by the NAND Flash controller. So the NAND Flash storage structure and interfaces are analyzed in this paper, then the functions of the controller are designed and each command transition in execution is described. All the operations, such as read and write, are executed via simulation to test the controller's functions. The results show that the controller works well and it meets with the design requirements.
Key words: NAND Flash     controllers     storage structure     interface    
西北工业大学主办。
0

文章信息

冉计全, 郭林, 张三刚, 马捷中, 翟正军, 郭阳明
Ran Jiquan, Guo Lin, Zhang Sangang, Ma Jiezhong, Zhai Zhengjun, Guo Yangming
NAND Flash控制器硬件设计与仿真验证
Hardware Design and Simulation Test for NAND Flash Controller
西北工业大学学报, 2017, 35(2): 304-309.
Journal of Northwestern Polytechnical University, 2017, 35(2): 304-309.

文章历史

收稿日期: 2016-10-08

相关文章

工作空间