《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 设计应用 > 一种可编程多路闪存控制器的设计与验证
一种可编程多路闪存控制器的设计与验证
2017年电子技术应用第9期
张洪柳,张 春
清华大学 微电子学研究所,北京1000861
摘要: 介绍了一种可应用于固态硬盘(Solid State Disk)主控芯片中的闪存控制器的设计实现方法。该闪存控制器最大支持4路闪存通路,4路闪存通路共用一个ECC纠错模块,提出一种新型可编程控制方法,CPU可实现4路闪存数据的并发读写,并兼容多种品牌的闪存颗粒。主要介绍了该闪存控制器的硬件架构及关键模块的设计实现思路,并最终给出了闪存控制器的验证结果及综合结果,在多种纠错格式及4路通路的配置下,闪存控制器的性能及成本均能满足一般SSD主控芯片的使用需求。
中图分类号: TP216
文献标识码: A
DOI:10.16157/j.issn.0258-7998.170744
中文引用格式: 张洪柳,张春. 一种可编程多路闪存控制器的设计与验证[J].电子技术应用,2017,43(9):39-42.
英文引用格式: Zhang Hongliu,Zhang Chun. Design and verification method of one programmable multi-channel NAND Flash controller[J].Application of Electronic Technique,2017,43(9):39-42.
Design and verification method of one programmable multi-channel NAND Flash controller
Zhang Hongliu,Zhang Chun
Tsinghua University Microelectronics Institute,Beijing 1000861,China
Abstract: An effective design and implementation method of NAND flash memory host controller that implemented in Solid State Disk controller was analyzed in this paper. The NAND flash memory host controller supports up to 4 channels NAND flash ports, with 4 channels NAND flash port sharing one ECC error correction module. By using a new type of programmable control method, the CPU can realize 4 channels read and write flash memory data concurrent, and is compatible with a variety of brands of NAND flash. The design philosophy of hardware architecture and critical modules was introduced. The verification and synthesis results were demonstrated finally. Considering of performance and cost evaluation, general SSD controllers could be satisfied by this controller which configured with 4 flash channels and multiple ECC coding formats.
Key words : NAND flash;multi channel;programmable;SSD

0 引言

    固态硬盘相对于传统机械硬盘,凭借其高读写性能、低功耗、低噪音、体积小、抗震性强等诸多优点,近年来在消费类电子、军工、航空航天等领域得到迅猛发展,并不断抢占机械硬盘的原有市场份额。

    固态硬盘主要由主控芯片、闪存芯片和DRAM缓存芯片组成。主控芯片作为固态硬盘的核心器件,其好坏优劣直接决定固态硬盘产品的性能和可靠性;闪存芯片目前主流应用的是15/16 nm的MLC颗粒,虽然存储容量单颗可达128 Gb,接口性能可达400 MB/s,但数据保存性能较差,需要主控芯片具有极强的数据纠错能力,同时配合主控芯片中的FTL(Flash Translation Layer)固件进行磨损均衡调度,以保证固态硬盘的整体寿命。

    固态硬盘主控芯片早期主要以PATA为接口,经过多年的市场发展已经逐步升级为USB3.0(5 Gb/s)/SATAIII(6 Gb/s)接口,甚至在企业级已经升级为PCIE3.0(8 Gb/s)接口,单盘容量最大可支持8 TB。而闪存单颗粒无论是接口速度还是容量,都无法满足固态硬盘的整体需求,一般都是通过一颗主控加上多颗闪存阵列的方案实现。闪存控制器作为固态硬盘主控的关键模块,其兼容性、纠错能力、吞吐量、闪存阵列组合方式等特性,往往决定了最终固态硬盘产品的成本、性能及稳定性。本文所设计的闪存控制器可支持4路闪存通路,共支持4×8片闪存片选,最大容量可支持512 GB,支持更大容量可集成多个闪存控制器;在110 nm工艺下,闪存控制器接口速率可达4×200 MB/s,在55/40 nm工艺下,速率可达4×400 MB/s;在兼容性方面,本文闪存控制器提出了一种可编程的命令编码方式,可有效保证对闪存各个厂商命令层的支持。

1 闪存控制器总体架构

1.1 总体架构

    本文闪存控制器对外接口主要包括一个AHB[1]配置从端口、一个AHB数据从端口和4路闪存主机端口,每路闪存端口可外挂8片Flash片选[2]。如图1所示。

wdz4-t1.gif

    闪存控制器只包含一个寄存器配置模块,用于控制4路通路的数据传输并反映当前状态。4路通路模块共用一个AHB数据从端口,AHB数据从端口通过地址译码产生选择信号,分别对4路通路进行数据读写,通过共用AHB数据端口,可降低芯片顶层集成的繁琐程度,降低出错概率,便于验证,且不影响数据传输带宽。4路通路模块共用一个ECC解码模块,ECC解码模块数据输入输出位宽为32位,保证与4路闪存8位端口总位宽相一致,出于面积方面考虑,与4个8位宽的ECC解码模块相比,采用32 bit位宽可通过优化算法和DC综合等方法有效降低闪存控制器整体面积。

1.2 单通路模块架构

    单通路模块是整个闪存控制器的核心模块,包含3个时钟:AHB_CLK,NFC_CLK,NAND_CLK。所以按时钟域可分为总线时钟域、模块时钟域和闪存时钟域。按照逻辑划分可分为控制通路和数据通路,控制通路包括流程控制模块、初始化模块、地址生成模块和指令控制模块;数据通路包括数据控制模块、加解扰模块、取反模块和闪存接口模块,闪存控制器单通路模块架构如图2所示。

wdz4-t2.gif

2 设计实现

2.1 指令编码

    由于闪存业界分为两大阵营,各自支持ONFI[3]和Toggle两种不同协议,如果通过硬件实现命令层的传输控制,一旦闪存厂商协议升级或者变更,则会存在命令层不兼容的风险,只有通过重新设计流片才能解决,这样无疑会增加固态硬盘主控厂商的成本。

    本文采用软硬件结合的方式,提出了一种可编程的命令层实现方法,即CPU根据指令集格式进行命令码编程,写入闪存控制器内部指令SRAM中,闪存控制器根据指令SRAM中的指令进行闪存颗粒的读写、擦除等操作,如果需要重复操作,CPU无需再次写入,直接配置闪存控制器执行上次操作即可。

2.1.1 指令集格式

    指令集共包含4条指令:控制指令、地址指令、命令指令和数据指令,如表1所示。

wdz4-b1.gif

    控制指令一般作为一个命令层操作的起始指令,指令标志为0xf,ce_num代表当前操作的闪存片选,i代表操作完成后是否报告中断,byte2和byte1保留,byte0代表当前命令层操作总的word个数。

    地址指令指令标志为0x1,vn代表当前指令有效地址个数,byte0-2分别代表当前操作的地址,比如闪存列地址为2个byte,则vn为2,byte0和byte1有效。

    命令指令包含闪存spec定义的标准命令和自定义用户命令,指令标志为0x2,su代表当前是spec命令还是用户命令,command_code当su为1时由CPU写入闪存标准命令,当su为0时,由CPU写入用户命令。用户命令主要用于满足闪存命令间的一些时序参数及状态操作,定义如表2。

wdz4-b2.gif

    数据指令主要包含系统数据和空闲区数据的读写操作,指令标志为0x4,ms表示当前是系统数据(main data)还是空闲区数据(spare data),rw代表读写操作,sector_count表示当前操作数据块的个数。

2.1.2 命令层编码

    软件通过CPU将闪存控制器指令进行编程后,形成一套闪存命令层编码,可实现对闪存的读写擦除等各种操作。以闪存的擦除操作为例,如表3。

wdz4-b3.gif

2.2 流程控制

    流程控制模块主要负责命令层编码的取址、解析、执行以及数据通路模块的控制等操作。

    流程控制模块的状态机如图3所示。

wdz4-t3.gif

    其中初始化状态主要负责检测当前闪存控制器外挂闪存的数量,通过轮询单个闪存片选,发送复位指令后检查闪存RB_n引脚状态,如果发送指令后检测到RB_n信号线下降沿,则表示闪存外挂有效。CMDREC状态主要记录当前CPU配置的命令层编码起始地址及命令层有效个数,如果执行完一个命令层编码后,需要在此状态检查命令层编码的有效个数,如果有效个数为0才能跳转至IDLE状态。

2.3 加解扰

    由于MLC工艺越来越先进,闪存内部单元间的干扰效应(cell-cell-interference)越加明显,如果一段数据全为0或者全为1,则会加剧该效应,以致超出ECC解码模块的纠错能力,所以需要将明文数据离散化后存入到闪存介质中,最大化降低单元干扰效应。

    本文采用线性反馈的方式实现数据的离散化,如图4。

wdz4-t4.gif

3 验证方法

    前仿真主要分为模块级前仿真芯片级前仿真及系统级前仿真,系统级前仿真涉及技术层面太多,仿真效果精准但仿真速度慢,往往花费大量时间和人力,目前阶段可实用性不强,本文主要进行了模块级前仿真及芯片级前仿真。

3.1 模块级前仿真

    模块级前仿真通过Verilog或者SystemVerilog[4]等硬件描述语言完成仿真平台及闪存模型的实现,主要针对闪存控制器的功能性及代码覆盖率进行仿真,仿真速度快,覆盖率高。如图5所示。

wdz4-t5.gif

    ONFI接口读取多个sector波形图如图6,Toggle接口读取多个sector波形图如图7。

wdz4-t6.gif

wdz4-t7.gif

3.2 芯片级前仿真

    芯片级前仿真主要基于SoC最小化平台[5],通过C语言编写ARM CPU的驱动程序,对闪存控制器进行典型应用的激励仿真,主要验证闪存控制器集成适用性及软硬件结合的效率。芯片级验证平台如图8。闪存控制器读取闪存数据波形如图9,闪存控制器写入闪存数据波形如图10。

wdz4-t8.gif

wdz4-t9.gif

wdz4-t10.gif

4 综合结果

    由于不同主控对闪存控制器的需求不同,集成参数不相同,最终的综合结果也各不相同。本文中针对一般SATA类SSD主控的需求,后端综合采用110 nm工艺库,闪存控制器典型配置参数如下:

    闪存通路数:4

    AHB接口位宽:32

    闪存接口位宽:8

    AHB_CLK/NFC_CLK:200 MHz

    NAND_CLK:400 MHz

    ECC纠错格式:1/8/16/24/40/60/72

    线负载模型:enG1000K

    综合结果总门数约为1 030 K逻辑门,其中ECC解码模块占用490 K逻辑门,单路控制器门数约为135 K逻辑门。功耗情况如下:

    单元内部功耗:39.885 2 mW(89%)

    线开关电源:4.929 6 mW(11%)

    整体动态功耗:44.814 9 mW(100%)

    单元漏电功耗:3.574 6 mW

5 结论

    本文根据固态硬盘主控芯片对闪存控制的操作需求,通过软硬件结合可编程的方式,设计了一种高效且兼容性极强的专用固态硬盘闪存控制器。该控制器可覆盖支持各类闪存厂商的操作命令,纠错能力能够满足不同工艺下闪存颗粒的需求,在支持容量、接口传输速率、电路面积、动态功耗等方面也均可满足固态硬盘主控芯片的要求,具有广泛的应用价值,并已成功应用在固态硬盘设计中。

参考文献

[1] ARM.AMBA@3 AHB-Lite Protocol V1.0 Specification.www.arm.com,2006.

[2] 陈宏铭,程玉华.针对固态硬盘应用的多通路闪存控制器实现[J].中国集成电路,2012(1):37.

[3] Intel,Micron,Phison,et al.Open NAND Flash Interface Specification Revision 3.2.www.onfi.org,2013.

[4] Accellera,SystemVerilog 3.1a Language Reference Manual.www.accellera.org,2004.

[5] 张磊,李清江,聂洪山,等.基于SATA接口的固态硬盘设计[J].微处理机,2011(4):77-78.



作者信息:

张洪柳,张  春

(清华大学 微电子学研究所,北京1000861)