《电子技术应用》
您所在的位置:首页 > 可编程逻辑 > 设计应用 > 基于AMBA APB总线的Nand Flash控制器的设计
基于AMBA APB总线的Nand Flash控制器的设计
来源:微型机与应用2013年第20期
王新君1, 张 炜2, 冯士维1, 胡 杰2
(1. 北京工业大学 电子信息与控制工程学院, 北京100124; 2. 北京华芯微特科技有限公司,
摘要: 介绍了基于AMBA APB总线Nand Flash控制器的设计,首先简单介绍了 Nand Flash的一些特点,然后详细介绍了Nand Flash 控制器的整体框架、具体功能及其内部的数据通路。该控制器通过ModelSim进行了仿真及FPGA板级验证,结果证明能够满足Nand Flash时序要求。
Abstract:
Key words :

摘  要: 介绍了基于AMBA APB总线Nand Flash控制器的设计,首先简单介绍了 Nand Flash的一些特点,然后详细介绍了Nand Flash 控制器的整体框架、具体功能及其内部的数据通路。该控制器通过ModelSim进行了仿真及FPGA板级验证,结果证明能够满足Nand Flash时序要求。
关键词: Nand Flash; Flash控制器; AMBA APB总线; 仿真; 状态机

    嵌入式系统的广泛应用使得数据存储和数据管理逐步成为一个重要课题。Flash存储器越来越多地应用并逐步取代其他存储器,成为嵌入式系统中重要地数据及程序载体[1]。
    Flash主要分为Nor Flash、Nand Flash、And Flash三种。Nand Flash由于其优越的性能,成为主流内存。Nand Flash不仅具有存储密度高、读出数据快的优点,而且价格上也有优势,适合大数据存储[2]。但是应用Nand Flash必须提供专用的接口控制时序,因此目前设计主流的嵌入式SoC芯片如果要提供对Nand Flash的支持,就需要设计一个Nand Flash控制模块电路。
 本文介绍了Nand Flash的操作方法,并基于此操作方法详细介绍了该接口电路的结构及读写数据流。同时介绍了Nand Flash的详细操作和状态机控制。最后,给出了该模块在服务器上的仿真时序图。
1 Flash简介
    由Intel公司于1988年推出的Nor Flash技术具有工作电压低、随机读取快、功耗低、稳定性高等优点。东芝公司于1989年发表的Nand Flash结构则强调成本和性能,其容量较大、改写速度快,适用于大量数据的存储,在嵌入式产品中得到了广泛的应用,如数码产品、小体积U盘等[3]。
    随着SoC技术的发展,集成SoC的整机系统规模越来越大,功能越来越强大。在这些整机系统中,Nand Flash得到了广泛的应用。为了支持Nand Flash通信,在SoC中必须设计Nand Flash控制器接口。本文设计的Nand Flash控制器支持AMBA APB接口。经ModelSim仿真和FPGA验证表明,本设计完全满足Nand Flash的时序和通信功能要求,并最终成功流片。
2 总体结构与子模块划分
    该设计是基于AMBA APB总线的模块。AMBA2.0总线为嵌入式微控制器定义了一套片上总线标准,用户可独立设计基于该规范的外IP。
 总体结构如图1所示,可分为APB总线接口模块、Flash控制模块。APB总线接口模块控制时序依据AMBA APB总线规范,主要负责与APB总线之间的通信与交互,如锁存总线来的地址、数据、片选、使能等。Flash控制模块主要负责与APB总线接口模块的交互、从Flash获取数据,并将8 bit数据整合成32 bit。
    Read_Done表示读取数据结束,由Flash控制模块输出到APB接口模块,作为中断触发信号触发中断。APB接口模块中的中断(interrupt)部分处理中断信号,并输出Int_Output信号。DATA是Flash控制器由Flash中读出的数据。Flash_Addr、Read_Enable、Read_Type和Addr_Length是由APB接口模块给到Flash控制模块的信号,分别是各自对应寄存器的值。Spi_clk、CS、WP、HOLD、SI和SO是Flash控制模块与Flash对应端口的连接。
3 AMBA APB总线接口模块
 该Flash控制器通过APB总线接口模块与APB总线接口通信。APB总线输入信号包括时钟信号PCLK、片选信号PSEL、复位信号PRESETn、地址信号PADDR[31:0]、写数据信号PWDATA[31:0],还包括控制信号组:PWRITE为读写控制信号、PENABLE为使能信号。APB总线接口模块返回给总线的信号有读数据信号PRDATA[31:0]。APB总线读写按照APB总线读写时序要求,如图2、图3所示。

    APB接口模块中包含多个寄存器,各个寄存器的功能:Addr_Length_Reg是地址长度寄存器,用于锁存Addr_Length信号(Addr_Length是长度信号,表示将要传送的数据长度,该数据长度可以自行定义由APB总线输入,较为灵活,可以拷贝不同长度的数据或程序);Read_Type_Reg是读类型寄存器,用于锁存APB总线的Read_Type信号(Read_Type是读类型信号,标志读取数据时的方式,Read_Type为0时是单通道读数据,为1时是双通道读数据);Flash_Addr_Reg 是Flash地址寄存器,用于锁存Flash_Addr信号(Flash_Addr是Flash读操作的起始地址);Read_Enable_Reg是读使能寄存器,用于锁存APB总线的Read_Enable信号(Read_Enable是使能信号,当Read_Enable置1时,开始从Flash中读取数据,直到数据长度等于Addr_Length_Reg中的数据长度值)。
4 Flash控制模块
    本设计采用的Flash支持标准SPI接口,最高时钟频率可达120 MHz。本设计支持对Flash的读操作分为单通道方式和双通道方式,分别如图4、图5所示。

    Flash控制器对于Flash的读操作通过状态机实现。状态机负责整个模块的状态控制,完成对Nand Flash的读、写、发命令字、发地址等状态控制操作。寄存器堆包括当前状态寄存器、下一状态寄存器、命令寄存器、地址寄存器、数据长度寄存器、数据接收寄存器、地址发送状态寄存器、命令发送状态寄存器和数据接收使能寄存器。当前状态寄存器和下一状态寄存器分别寄存当前状态和下一状态;命令寄存器和地址寄存器分别寄存发给Nand Flash的命令字和地址;数据长度寄存器寄存当前传输数据的个数;两个32位数据接收寄存器轮流交替接收数据;地址发送状态寄存器和命令发送状态寄存器分别标示地址和命令的发送完成与否;两个数据接收使能寄存器标示是否可以接收数据,对应于两个数据接收寄存器。
    状态机部分包括9个状态,分别是Idle、Send_Command、Send_Address_S、Receive_Data_A_S、Receive_Data_B_S、Send_Address_D、Send_M、Receive_Data_A_D和Receive_Data_B_D,用以发出对Nand Flash的控制操作信号。其状态转换关系如图6所示。

 

 

    在有些设计中,会将FIFO控制以及时序控制模块做在一起,形成一个大状态机[3]。还有一些设计对FIFO的控制构造成两个协同工作的状态机,再对时序的控制划分成另一个基本上由计数器组成的模块,使得每个模块思路简单清晰,FIFO利用率高,而且FIFO大小可配置[4]。但是,这样设计的状态机过于复杂,对FIFO的利用率较低或者控制较为烦冗,硬件资源占用较大。本设计对于数据的缓存采取应用寄存器的方法,占用硬件资源较小,而且采用两个32位寄存器轮流缓存数据,消除了等待时间且控制简单,提高了传输效率。
5 模块验证
 该设计Verilog代码编写完成后,编写测试向量(Testbench)并进行了仿真,证实其功能是完全可以实现的。实际波形如图7、图8所示。

    该模块已先后通过了服务器上进行的寄存器级(RTL)模拟、后模拟验证和在FPGA开发板上的仿真验证,并在实际芯片设计中得到了具体的应用验证,流片后芯片功能达到了预期的设计目的。
    软件实现对Flash的各种操作的方式很耗费时钟周期,读写速度大大下降。该设计不仅解决了传输速度慢的问题,同时建立了由片外Flash到片内存储空间的直通道,可将数据直接从Flash传输到片内,传输操作由Flash控制模块完成而不需要CPU参与,减少CPU占用。与此同时,实现了多种Flash数据传输方式,包括单通道读、双通道读,数据传输长度由用户自行定义,根据实际需求自由设置传输长度,增强了该设计的利用范围、灵活性和可移植性。另外,Flash控制模块内的两个数据接收寄存器交替接收数据,消除了两次数据接收之间的等待时间,提高了芯片的工作效率。当然因为Nand Flash的操作复杂,该设计还未能完全实现对Nand Flash所有操作的支持,在今后的设计中需进一步完善。
参考文献
[1] 蔡锦达,王德福,黄小松.大容量Nand Flash在ARM嵌入式系统中的应用[J]. 工业控制计算机, 2004,17(5):43-44.
[2] 王洋,刘卫东,于岗.基于AMBA APB总线Nand Flash控制器的设计研究[J].电子设计工程,2011,19(20):166-168.
[3] 唐宇光,王镇,凌明.一种基于AMBA总线的Nand Flash 控制接口电路设计[J].电子器件,2004,27(2):306-311.
[4] 薛杰,戎蒙恬,刘文江.一种可配置Nand-Flash控制器的设计[J].信息技术,2006(11):1-4.

此内容为AET网站原创,未经授权禁止转载。