引言
在当今的数字信息时代,人们对大容量数据存储的需求日趋旺盛。作为非易失性存储器的NAND Flash,由于其高容量低成本的特点,逐渐在实际产品,比如固态硬盘、智能手机、平板电脑等消费类电子产品中得到应用。
由于其特殊的内部结构,NAND Flash的操作方式与NOR Flash不太一样,不支持随机字节访问,其读、写操作均要以页面(Page)为单位进行,同一页面在未擦除前不允许进行多次写操作;而擦除操作必须以块(Block)为单位进行。因此,需要针对这一特性设计专用的控制器来完成各种操作。
本文根据这一目的,设计了一款NAND Flash控制器。该控制器不仅能够完成前面提到的基本操作,还能支持ONFI2.1标准中的同步接口模式。使其能够以200MB/s的速度对NAND Flash设备进行读写操作,远远快于其他同类NAND Flash控制器。
1 ONFI标准
ONFI(Open NAND Flash Interface,开放式NAND闪存接口)规范是一种Flash闪存接口的标准,它是Intel为统一当初混乱的闪存接口所倡导的标准。因为在此之前,市场上销售的NAND闪存芯片在引脚定义上都不完全相同。这就使得为一家公司设计的控制器,很有可能无法用在另一家公司的产品上。比如为东芝芯片设计的控制器,就无法用在三星或海力士的产品上,这就给上游的主控设计商以及最终的产品设计人员带来了很大的困难。
为此,Intel联合多家NAND Flash厂商制定了ONFI标准,统一NAND Flash芯片的引脚定义,并在此基础上采用新的技术以实现新的功能。2006年发布了ONFI1.O标准,使得接口的统一迈出了实质性的一步。但是该版本速度较慢,最高速度只有34MB/s,不具有太大的竞争优势。为了提高速度,ONFI组织在2008年发布了ONFI2.0,将接口速度提升到了133MB/s。在该版本中,主要是通过两项技术来提高传输速度。第一项就是在DRAM领域里常用的DDR(Double Data Rate,两倍数据率)信号技术。第二项是使用源同步时钟来精确控制锁存信号,使其能够达到更高的工作频率。2009年,ONFI组织又推出了规格更高的ONFI2.1标准,把最高速度提高到了200MB/s。
2 控制器结构
本文设计的NAND Flash控制器是SOC芯片的一部分,作为AHB Slave被挂在总线上,接收来自CPU的读、写和擦除等命令。其结构框图如图1所示。
其中AHB Slave接口模块主要是负责处理与AHB总线协议相关的操作;ECC编译码模块主要是负责对存入NAND Flash中的数据进行纠错编码和对从NAND Flash中读出的数据进行纠错码译码的工作;异步FIFO模块用来缓存数据,并承担数据跨时钟域的工作;主控模块负责整个控制器的控制;异步收发接口模块主要负责异步模式下的数据读写;同理,同步收发接口模块主要负责同步模式下的数据读写。本文的重点是与ONFI标准相关的接口设计,所以AHB Slave与ECC两个模块在此不再介绍,具体请参阅其他相关文献。
主控模块是整个控制器的中心控制模块,由一个主状态机和多个子状态机构成。主状态机有1个空闲状态和8个工作状态,分别对应着8种具体的操作。其状态转换如图2所示。而每个工作状态又对应1个子状态机,负责每个操作的具体细节。由于篇幅所限,本文只列出Program操作的子状态机状态转换图,如图3所示。其他子状态机的状态可以根据ONFI标准来确定。
3 同步模式设计
3.1 同步接口设计
支持ONFI2.0及以上的NAND Flash芯片既支持传统的异步接口模式,也能通过配置工作在源同步的DDR接口模式下,从而达到速度的提高。如图4所示,在同步工作模式下,增加了DQS信号,并将异步模式下的WE#信号变为CLK信号,RE#变为W/R信号。有很多文献介绍了传统异步接口模式下的NAND Flash控制器设计,本文不再赘述,以下开始介绍同步工作模式下的接口电路设计。
当NAND Flash工作于同步接口模式时,接口I/O数据为DDR形式,读写操作时序见图5,可以发现它非常类似于DDR SDRAM的时序,其中DQ[7:0]为数据,DQS为数据选通信号,其基本思想就是将两组持续时间为一个时钟周期的数据合并,使得在传输过程中一个时钟周期的上升沿和下降沿都能传输数据,从而获得传输速度的倍增。
DQ和DQS均为双向驱动信号,当进行写操作时,由控制器进行驱动,当进行读操作时,由Flash芯片内部进行驱动,本文双向信号采用图6方法实现,该结构需要置于整个设计的顶层,从而利于综合的进行。
DQ与DQS信号间的相位关系对DDR接口非常重要。当对NAND Flash进行写操作时,控制器必须产生一个与DQ数据信号中心对齐的DQS信号,所用发送端口电路如图7所示,CLKS为同步接口模式下系统的整体时钟。通过多路选择器实现16bit数据DATA_O转两组8bit数据DQ_O输出。CL-KS为高时对应DATA_O的高8bit数据,CLKS为低时对应DATA_O的低8bit数据,最后将CLKS进行移相作为DQS_O选通信号输出。
当从Flash存储器件读取的时候,Flash输出的DOS信号是与DQ信号边沿对齐的,需要对接收到的DQS信号进行相移使之与DQ信号中心对齐,以采到准确的数据。图8是DQS移相后与DQ中心对齐的实际仿真波形图。所用读接口结构如图9所示,首先将DQS_I选通信号进行移相,然后通过两组分别为上升沿触发和下降沿触发的寄存器采样与DQS_I上升沿和下降沿对齐的两组8bit数据DQ_I,并通过一组同样是上升沿触发的寄存器将这两组8bit数据合并成16bit数据。
实现读写操作的电路中都使用了DELAY单元,以达到移相的目的,DELAY单元可以由两种方法实现:DLL和延迟线。将相移定为90°,是假设DQ和DQS是理想的源同步接口,并假定DQ和DQS经过芯片内部延时、PCB板上延时及pin脚延时是相同的,这样能得到最理想的数据窗口。
3.2 异步时钟域处理
很明显,同步接口模式下的控制器将涉及到较多的异步时钟域的通信,需要小心处理。首先,由于本文所设计的控制器中所有跨时钟域的单比特控制信号没有窄脉冲形式,因此均可以使用双D触发同步器作同步,此外涉及跨时钟域的数据缓冲需要使用异步FIFO。由于ONFI2.1规定的最快Timing Mode达到了200MB/s的数据速率,而涉及本文应用的连接Flash控制器的下一级模块消耗数据的速率为100MB/s,如果按照公式计算FIFO的深度,可如式(1)所示,其中的4KB是仿真实验所使用的仿真模型的页面(Page)大小。
4KB×(1-100MB/s÷200MB/s)=2KB (1)
这样大的FIFO将带来较大的硬件代价,考虑到NAND Flash的读写操作是可以暂停的,故本文将FIFO深度设为128,宽度为16bit。
如何判断异步FIFO的空满状态也是设计FIFO的难点。本文所使用的FIFO采用图10的结构,FIFO Memory模块采用寄存器组作为核心存储,这是由于本文应用环境下可能经常出现读空或写满的情况,这样会频繁遇到读写同一个地址,因此不适合用双端口SRAM作为FIFO的核心存储;Wptr&Full模块用于产生写指针和满标志;Rptr&Empty模块用于产生读指针和读标志;此外还有两组同步器分别将写指针同步到读时钟域和读指针同步到写时钟域。跨时钟传送的读写指针都事先转换成格雷码,以避免亚稳态问题及提高可靠性。
以下介绍空满标志判断电路的实现。空标志的条件是读操作引起的读写指针相等,满标志的条件是写操作引起的读写指针相等。本文采用的方法是,构造指针宽度为N+1,深度为2N的FIFO,利用多加了一位宽度的指针实现空满状态的判断:当指针最高位不同而其似位相同时,FIFO为满;当指针完全相同时,FIFO为空。指针及地址产生电路见图11,给出的地址addr={addrmsb,ptr[n-3:0]},ptr[n-1:0]作为格雷码指针给出,用于判断空满,其中addrmsb由gnext[n-1]^gnext[n-2]产生。
3.3 异步模式切换到同步模式
根据ONFI 2.1规定,NAND Flash刚上电时一律处在异步接口模式的Timing Mode 0下工作,需要通过SETFEATURES操作才能转换到同步接口模式下工作,步骤如下,同时操作时序见图12。
(1)发出SET FEATURES(EFh)命令;
(2)将地址设为01h;
(3)向P1写入1Xh,其中X表示需要设定的同步接口Timing ModeX;
(4)P2到P3均写入00h;
(5)此时R/B#信号将保持低电平tITC。控制器需要将CE#拉高。在tITC期间,控制器不得向NAND Flash发出任何命令,包括读状态命令。
(6)当tITC结束后R/B#拉高,同步接口开启。在CE#使能之前,控制器需要给出CLK。
注意到异步接口转换到同步接口模式下,需要启动NAND Flash所需的CLK,因此本文将SET FEATURES操作拆分成两部分,以启动CLK为界进行分割,两部分操作中间需产生中断,并告诉CPU此时需要启动CLK。同步模式不同Timing Mode之间的切换操作和上述类似,只不过需要将启动CLK的操作改为转变CLK频率的操作。
4 仿真与综合
使用Verilog硬件描述语言对该控制器进行实现之后,再使用EDA工具仿真和综合。仿真结果表明,本文设计的控制器的功能和时序都工作正常。图13是在同步模式下写1页操作的仿真时序,图14是在同步模式下读1页操作的仿真时序。
使用Synopsys公司的Design Compiler工具对代码进行综合,采用SMIC 0.18 μm工艺。得到的数据如表1所示。
由综合结果可知,最高工作频率达到了118MHz,满足ONFI标准100MHz频率、200MB/s的最快数据传输速率的要求,并有超过15%的裕量。因此,本文设计的NANDFlash控制器具有一定的实用价值。
5 结束语
本文设计了一种满足ONFI2.1标准要求的NANDFlash控制器,并通过了功能仿真和综合。该控制器既可以在传统的异步模式下工作,也可以在同步模式下工作,并达到了ONFI标准要求的200MB/s的数据读写速率。达到了最初的设计目的,对其他的NAND Flash控制器设计具有参考意义。
责任编辑:gt
评论
查看更多