《电子技术应用》

一种可编程多路闪存控制器的设计与验证

2017年电子技术应用第9期 作者:张洪柳,张 春
2017/9/26 10:07:00

张洪柳,张  春

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


    摘  要: 介绍了一种可应用于固态硬盘(Solid State Disk)主控芯片中的闪存控制器的设计实现方法。该闪存控制器最大支持4路闪存通路,4路闪存通路共用一个ECC纠错模块,提出一种新型可编程控制方法,CPU可实现4路闪存数据的并发读写,并兼容多种品牌的闪存颗粒。主要介绍了该闪存控制器的硬件架构及关键模块的设计实现思路,并最终给出了闪存控制器的验证结果及综合结果,在多种纠错格式及4路通路的配置下,闪存控制器的性能及成本均能满足一般SSD主控芯片的使用需求。

    关键词: NAND闪存多通道;可编程;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.

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.

继续阅读>>