快讯
HOME
快讯
正文内容
verilog nand flash 案例分析,NAND FLASH流水实现高速存储
发布时间 : 2024-10-06
作者 : 小编
访问数量 : 23
扫码分享至微信

案例分析,NAND FLASH流水实现高速存储

流水技术原理

所谓流水线处理,如同生产装配线一样,是将操作执行工作量分成若干个时间上均衡的操作段,从流水线的起点连续地输入,流水线的各操作段以重叠方式执行。这使得操作执行速度只与流水线输入的速度有关,而与处理所需的时间无关。这样,在理想的流水操作状态下,其运行效率很高。

如果某个设计的处理流程分为若干步骤,而且整个数据处理是单流向的,即没有反馈或者迭代运算,前一个步骤的输出是下一个步骤的输入,则可以采用流水线设计方法来提高系统的工作效率。

利用流水线的设计方法,可大大提高系统的工作速度。这种方法可广泛运用于各种设计,特别是大型的、对速度要求较高的系统设计。虽然采用流水线会增大资源的使用,但是它可降低寄存器间的传播延时,保证系统维持高的系统时钟速度。在实际应用中,考虑到资源的使用和速度的要求,可以根据实际情况来选择流水线的级数以满足设计需要。

下面我们以房屋装修为例展示一下流水线的流程,如图3-7所示。

图3-7 房屋装修流水线示意图

房屋装修分4个步骤,分别是水电改造、木工上场、瓦工上场和油工上场。

如果设计团队由4个人员组成,那么在装修A小区某房屋的时候,需要按照上述出场顺序工作。水电改造工人完成A小区的工作后,可以去B小区某房屋工作,B小区工作完毕后,再去C小区工作。同理,木工、瓦工和油工也是如此。

我们可以得出结论,从水平方向上看,对于某个小区的房屋,需要四个人顺序出场;但是基于某个特定人员,在整个平面上来看,在平面方向上是排满饱和的。

所以基于团队,用流水线的方式确保了高效率,每个人工作量饱满,收益最大。

案例:NAND FLASH流水实现高速存储

NAND FLASH的详细介绍见第9章。

我们知道,NAND FLASH的特点是读/写速度比较慢。

以写为例,写数据后,必须有长时间的编程等待时间,编程结束之后,才能进行下一次写数据过程。

例如:K9K4G08UOM这款芯片的最大写入时间(编程时间)为700 μs,写数据阶段的时间为125 μs(2 Kb/16 M,假如用16 MHz时钟,一次写入2 Kb个数据)。评估一下有效的写入速率为2 Kb/(125 μs+700 μs)=2.42 Mb/s。

我们可以利用流水线技术来提高读/写速度,如图3-8所示。

图3-8 FLASH控制器流水线式进行写操作

示例中,我们用了5片芯片,为写入时间(编程时间)分配了800 μs的时间,为写数据分配了200 μs时间,组成了5级流水。第一片芯片写数据结束、编程等待的时候,对第二片芯片进行写数据,第二片芯片写数据结束、编程等待的时候,对第三片芯片进行写数据,以此类推,第五片芯片写数据结束后,重新对第一片芯片进行写数据。

重新评估一下写入速度为2Kb/200 μs=10Mb/s。

当然,上面的计算是为了方便读者理解来设定的,目的是让800 μs成为200 μs的整数倍,图片看上去美观一些。实际上我们还是用125 μs来进行写数据,写入速度接近16Mb/s。

在大容量存储类的项目中,不止使用流水线技术,还采用并行工作方式,优化之后的速度能达到几百兆。

以上介绍的为FLASH写阶段的流水线过程,读和擦除也可以利用流水线技术,此处不展开论述。

专栏推荐,【零基础学FPGA】

本专栏基于Altera公司的器件和Verilog HDL语言。学完以后,相信读者能够掌握FPGA开发的基本技术,并能够独立进行FPGA项目开发。

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

张洪柳,张 春

(清华大学 微电子学研究所,北京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所示。

闪存控制器只包含一个寄存器配置模块,用于控制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所示。

2 设计实现

2.1 指令编码

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

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

2.1.1 指令集格式

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

控制指令一般作为一个命令层操作的起始指令,指令标志为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。

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

2.1.2 命令层编码

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

2.2 流程控制

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

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

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

2.3 加解扰

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

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

3 验证方法

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

3.1 模块级前仿真

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

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

3.2 芯片级前仿真

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

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.

相关问答

程序员的定义是什么?会敲代码的都是程序员吗?

二、几乎一半的.NET用户不参与开源项目RedHat+Ubuntu占有率超过70%应用到.NET平台上的开源项目,“大量使用”的比例数仅为8.68%,尚不足一成;“少量应用”的...

想学习怎么自己制作电路板100分 - 小红薯85942C59 的回答 - 懂得

谬论一:高中老师常对我们说,大家现在好好学,考上了大学就轻松了,爱怎么玩怎么玩。这真是狗屁。别的专业我不好说,电气、电子、电力、通信、自动化等...

帮个忙老司机们!有谁知道 郑州残保金优化流程是怎样的,残...

[回答]HDL原理图编辑/VHDL或Verilog文本编辑——编译优化——门级仿真调试——硬件下载调试一、产品定位与市场分析阶段1、目的(UI设计师应了解产品的市...

 烧荒  妈妈的袜子 
王经理: 180-0000-0000(微信同号)
10086@qq.com
北京海淀区西三旗街道国际大厦08A座
©2024  上海羊羽卓进出口贸易有限公司  版权所有.All Rights Reserved.  |  程序由Z-BlogPHP强力驱动
网站首页
电话咨询
微信号

QQ

在线咨询真诚为您提供专业解答服务

热线

188-0000-0000
专属服务热线

微信

二维码扫一扫微信交流
顶部