本文介绍了一种可使用于固态硬盘(Solid State Disk)主控芯片中的闪存控制器的规划实现方式。该闪存控制器最大支持4路闪存通路,4路闪存通路共用一个ECC纠错模块,提出一种新型可编程控制方式,处理器可实现4路闪存数据的并发读写,并兼容多种品牌的闪存颗粒。主要介绍了该闪存控制器的硬件架构及关键模块的规划实现思路,并最终给出了闪存控制器的验证结果及综合结果,在多种纠错格式及4路通路的配置下,闪存控制器的性能及成本均能满足一般SSD主控芯片的运用需要。 引言 固态硬盘相对于传统机械硬盘,凭借其高读写性能、低功耗、低噪音、体积小、抗震性强等诸多优点,近年来在消费类电子、军工、航空航天等领域得到迅猛发展,并不断抢占机械硬盘的原有市场份额。 固态硬盘主要由主控芯片、闪存芯片和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所示。 1.2 单通路模块架构 单通路模块是整个闪存控制器的核心模块,包含3个时钟:AHB_CLK,NFC_CLK,NAND_CLK。所以按时钟域可分为总线时钟域、模块时钟域和闪存时钟域。按照逻辑划分可分为控制通路和数据通路,控制通路包括流程控制模块、初始化模块、地址生成模块和指令控制模块;数据通路包括数据控制模块、加解扰模块、取反模块和闪存接口模块,闪存控制器单通路模块架构如图2所示。 2.1 指令编码 由于闪存业界分为两大阵营,各自支持ONFI[3]和Toggle两种不一样协议,如果通过硬件实现命令层的传输控制,一旦闪存厂商协议升级或者变更,则会存在命令层不兼容的风险,只有通过重新规划流片才能搞定,这样无疑会增加固态硬盘主控厂商的成本。 本文采用软硬件结合的方式,提出了一种可编程的命令层实现方式,即处理器根据指令集格式进行命令码编程,写入闪存控制器内部指令SRAM中,闪存控制器根据指令SRAM中的指令进行闪存颗粒的读写、擦除等操作,如果需要重复操作,处理器无需再次写入,直接配置闪存控制器执行上次操作即可。 2.1.1 指令集格式 指令集共包含4条指令:控制指令、地址指令、命令指令和数据指令,如表1所示。 地址指令指令标志为0x1,vn代表当前指令有效地址个数,byte0-2分别代表当前操作的地址,比如闪存列地址为2个byte,则vn为2,byte0和byte1有效。 命令指令包含闪存spec定义的标准命令和自定义用户命令,指令标志为0x2,su代表当前是spec命令还是用户命令,command_code当su为1时由处理器写入闪存标准命令,当su为0时,由处理器写入用户命令。用户命令主要用于满足闪存命令间的一些时序参数及状态操作,定义如表2。 2.1.2 命令层编码 软件通过处理器将闪存控制器指令进行编程后,形成一套闪存命令层编码,可实现对闪存的读写擦除等各种操作。以闪存的擦除操作为例,如表3。 流程控制模块主要负责命令层编码的取址、解析、执行以及数据通路模块的控制等操作。 流程控制模块的状态机如图3所示。 2.3 加解扰 由于MLC工艺越来越先进,闪存内部单元间的干扰效应(cell-cell-interference)越加显著,如果一段数据全为0或者全为1,则会加剧该效应,以致超出ECC解码模块的纠错能力,所以需要将明文数据离散化后存入到闪存介质中,最大化降低单元干扰效应。 本文采用线性反馈的方式实现数据的离散化,如图4。 前仿真主要分为模块级前仿真芯片级前仿真及系统级前仿真,系统级前仿真涉及技术层面太多,仿真效果精准但仿真速度慢,往往花费大量时间和人力,现在阶段可实用性不强,本文主要进行了模块级前仿真及芯片级前仿真。 3.1 模块级前仿真 模块级前仿真通过Verilog或者SystemVerilog[4]等硬件描述语言完成仿真平台及闪存模型的实现,主要针对闪存控制器的功能性及代码覆盖率进行仿真,仿真速度快,覆盖率高。如图5所示。 ONFI接口读取多个sector波形图如图6,Toggle接口读取多个sector波形图如图7。 芯片级前仿真主要基于SoC最小化平台[5],通过C语言编写ARM 处理器的驱动程序,对闪存控制器进行典型使用的激励仿真,主要验证闪存控制器集成适用性及软硬件结合的效率。芯片级验证平台如图8。闪存控制器读取闪存数据波形如图9,闪存控制器写入闪存数据波形如图10。 由于不一样主控对闪存控制器的需要不一样,集成参数不相同,最终的综合结果也各不相同。本文中针对一般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 结论 本文根据固态硬盘主控芯片对闪存控制的操作需要,通过软硬件结合可编程的方式,规划了一种高效且兼容性极强的专用固态硬盘闪存控制器。该控制器可覆盖支持各类闪存厂商的操作命令,纠错能力能够满足不一样工艺下闪存颗粒的需要,在支持容量、接口传输速率、电路面积、动态功耗等方面也均可满足固态硬盘主控芯片的要求,具有广泛的使用价值,并已成功使用在固态硬盘规划中。 |
发表评论