NAND Flash浮栅晶体管的结构、工作原理及其局限性
作为最为常见的存储芯片,NAND Flash已经被广泛采用,特别是在消费类电子产品当中,因此,在其存储密度不断提升的同时,成本也越来越敏感。由于Flash闪存的成本取决于其芯片面积,如果可以在同一区域存储更多数据,Flash将更具成本效益。NAND闪存主要有三种类型:Single Level Cell(SLC),Multi Level Cell(MLC)和Triple Level Cell(TLC)。顾名思义,TLC Flash在与MLC相同的区域中存储的数据更多,同理,MLC存储的数据多于SLC。另一种类型的NAND闪存称为3D NAND或V-NAND(垂直NAND),其通过在同一晶片上垂直堆叠多层存储器单元,这种类型的闪存实现了更大的密度。 浮栅晶体管 闪存将信息存储在由浮栅晶体管组成的存储单元中。为了更好地理解不同类型的NAND闪存,让我们来看看浮栅晶体管的结构、工作原理及其局限性。 浮栅晶体管或浮栅MOSFET(FGMOS)非常类似于常规MOSFET,区别在于它在栅极和沟道之间具有额外的电绝缘浮栅。由于浮栅是电隔离的,所以即使在去除电压之后,到达栅极的电子也会被捕获。这就是闪存非易失性的原理所在。与具有固定阈值电压的常规MOSFET不同,FGMOS的阈值电压取决于存储在浮栅中的电荷量,电荷越多,阈值电压越高。与常规MOSFET类似,当施加到控制栅极的电压高于阈值电压时,FGMOS开始导通。因此,通过测量其阈值电压并将其与固定电压电平进行比较来识别存储在FGMOS中的信息,被称为闪存中的读操作。 可以使用两种方法将电子放置在浮动栅极中:Fowler-Nordheim隧穿或热载流子注入。对于Fowler-Nordheim隧穿,在带负电的源极和带正电的控制栅极之间施加强电场。这使得来自源极的电子隧穿穿过薄氧化层并到达浮栅。隧穿所需的电压取决于隧道氧化层的厚度。利用热载流子注入,高电流通过沟道,为电子提供足够的能量以穿过氧化物层并到达浮动栅极。 通过在控制栅极上施加强负电压并在源极和漏极端子上施加强正电压,使用福勒 - 诺德海姆隧道效应可以从浮栅移除电子。这将导致被捕获的电子通过薄氧化层回到隧道。在闪存中,将电子放置在浮动栅极中被认为是编程/写入操作,去除电子被认为是擦除操作。 隧道工艺有一个主要缺点:它会逐渐损坏氧化层。这被称为闪存中的磨损。每次对单元进行编程或擦除时,一些电子都会卡在氧化层中,从而磨损氧化层。一旦氧化层达到不再能够在编程和擦除状态之间进行可靠性区分的点,则该单元被认为是坏的。由于读取操作不需要隧穿,因此它们不会将单元磨掉。这就是为什么闪存的寿命表示为它可以支持的编程/擦除(P / E)周期的数量。SLC闪存 在SLC闪存中,每个存储单元仅存储一位信息:逻辑0或逻辑1.单元的阈值电压与单个电压电平进行比较,如果电压高于电平,则该位被视为逻辑0。反之则为逻辑1。 由于只有两个级别,因此两个级别之间的电压裕度可能非常高。这使得读取单元格更容易,更快捷。原始误码率(RBER)也很低,因为由于较大的电压余量,在读取操作期间泄漏或干扰的影响较小。低RBER还减少了给定数据块所需的ECC位数。 大电压裕量的另一个优点是磨损的影响相对较小,因为微小的电荷泄漏具有相对较低的影响。每个逻辑电平的更宽分布有助于以更低的电压对单元进行编程或擦除,这进一步增加了单元的耐久性,进而增加了寿命,即P / E循环的数量。 同时也有一个缺点,就是与在相同芯片区域中存储更多数据的其他类型的Flash相比,每个单元的成本更高。SLC闪存通常用于对成本不敏感且需要高可靠性和耐用性的场合,例如需要大量P / E循环次数的工业和企业应用。MLC闪存 在MLC闪存中,每个存储器单元存储两位信息,即00,01,10和11,在这种情况下,阈值电压与三个电平进行比较(总共4个电压带)。 通过更多级别进行比较,读取操作需要更加精确,与SLC Flash相比,读取速度更慢。由于较低的电压余量,原始误码率(RBER)也相对较高,并且给定数据块需要更多的ECC比特。现在磨损的影响更为显着,因为与SLC闪存相比,任何电荷泄漏都会产生更大的相对影响,从而减少寿命(P / E循环次数)。 由于需要仔细编程以将电荷存储在每个逻辑电平所需的紧密窗口内,因此编程操作也要慢得多。其主要优点是每比特成本更低,比SLC闪存低2~4倍。MLC闪存通常用于成本更敏感的应用,例如消费电子或游戏系统,其性能、可靠性和耐用性不是那么关键,并且所需的P / E循环次数相对较低。企业级多单元(eMLC)闪存 MLC闪存的低可靠性和耐用性使它们不适合企业应用,而低成本是一个驱动因素。为了带来更低成本的优势,闪存制造商创建了一种优化级别的MLC闪存,具有更高的可靠性和耐用性,称为eMLC。eMLC中的数据密度通常会降低,从而提供更好的电压余量以提高可靠性。较慢的擦除和编程循环通常用于减少磨损的影响并提高耐用性。还有许多其他技术可以提高eMLC的可靠性和耐用性,这些技术因制造商而异。TLC闪存 在TLC Flash中,每个存储器单元存储3位信息。现在将阈值电压与7个电平(总共8个电压带)进行比较。与SLC Flash相比,TLC的读取操作需要高度精确且速度慢。原始误码率也很高,增加了对给定数据块的更多ECC位的需求。磨损的影响也被放大,大大减少了寿命(P / E循环次数)。编程操作也较慢,因为电压需要精确以将电荷存储在每个逻辑电平所需的窗口内。 TLC的优势在于每比特的最低成本,与SLC或MLC闪存相比要低得多。TLC闪存用于高成本敏感型应用,对P / E循环的需求较少,例如消费类应用。SLC,MLC,eMLC和TLC的比较 表1给出了假设类似光刻工艺的不同类型闪存的主要参数的比较。这些值仅表示比较性能,并且就特定存储器产品而言可能不准确。
表1:每种不同类型Flash的主要参数的比较。 * ECC位数取决于制程节点; 较小的制程节点需要更多的ECC位。 3D NAND Flash 上面讨论的所有不同的闪存都是二维的,意味着存储单元仅布置在芯片的XY平面中。使用2D闪存技术,在同一晶圆中实现更高密度的唯一方法是缩小制程工艺节点。其缺点是,对于较小的节点,NAND闪存中的错误更为频繁。另外,可以使用的最小制程工艺节点存在限制。 为了提高存储密度,制造商开发了3D NAND或V-NAND(垂直NAND)技术,该技术将Z平面中的存储单元堆叠在同一晶圆上。以这种方式构建有助于为相同的芯片区域实现高位密度。在3D NAND闪存中,存储器单元作为垂直串连接而不是2D NAND中的水平串。 第一批3D Flash产品有24层。随着该技术的进步,已经制造出32,48,64甚至96层3D闪存。3D闪存的优势在于同一区域中的存储单元数量明显更多。这也使制造商能够使用更大的制程工艺节点来制造更可靠的闪存。 3D Flash的另一个主要技术转变是使用电荷阱Flash而不是浮栅晶体管。除了用氮化硅膜代替浮栅之外,电荷阱在结构上类似于FGMOS。注意,由于大规模制造的困难,电荷阱在市场上没有被广泛使用。由于难以制造浮栅晶体管的垂直串以及电荷阱的其他固有优点,已经采用电荷阱技术用于3D闪存。 与FGMOS相比,基于电荷阱的存储器有许多优点。可以在较低电压下编程和擦除基于电荷阱的存储器,从而提高耐用性。由于捕获层(氮化物)是绝缘层,电荷不会泄漏,从而提高了可靠性。由于电荷不会从电荷阱的一侧流到另一侧,因此可以在同一阱层存储多于一位的电荷。赛普拉斯(前Spansion)在NOR闪存中有效地利用了这种功能,称为MirrorBit技术,将两位数据存储在一个类似于MLC闪存的单个存储单元中。未来的趋势 所有主要的闪存制造商都积极致力于开发不同的方法,以降低每比特闪存的成本,同时正在积极研究增加3D NAND Flash中垂直层的数量。虽然15nm似乎是目前NAND闪存中最小的成功节点,但Flash的光刻节点的缩小仍在继续。将MLC和TLC技术与3D NAND闪存相结合的方法也正在积极探索当中,许多制造商已经看到了成功的曙光。随着新技术的出现,我们可能很快就会看到存储单元可以存储一个字节的数据和垂直层,达到256层,甚至更高
基于存储器映射的Flash高速低功耗驱动实现
李 杰,任勇峰,李辉景
(中北大学 电子测试技术国家重点实验室,山西 太原030051)
摘 要: 针对高速大容量Flash芯片控制中面临的高速可靠性不高与动态功耗大的问题,研究了一种将复杂状态机操作映射到内嵌RAM上运行的方法。通过对内嵌RAM读地址的切换,实现了等延时的状态跳变与输出控制。同时采用加强时钟管理、分割组合逻辑来避免信号不必要的翻转,极大地提高了时序运行的可靠性并降低了其动态功耗。实践表明,该方法实现的Flash控制时序比传统的状态机在资源消耗和功耗方面均能降低50%以上,为复杂时序逻辑的实现提供了一个新思路。
0 引言
在FPGA对Flash控制操作中,有限状态机(Finite State Machine,FSM)与多进程描述方式相比有着层次分明、结构清晰、易于修改和移植的明显优势而被广泛应用。传统状态机在描述实现寄存器存储状态信息、组合逻辑产生下一个状态和输出值时,大量使用了FPGA的布线、查找表、寄存器等宝贵资源[1]。
为了实现FPGA的可编程性,在其内部使用了大量的可编程逻辑开关。由于可编程逻辑开关的电阻较金属线大得多,而且引入了大量的寄生电容,从而增加了电路功耗,降低了电路速度[2](研究表明,总动态功耗中62%来自于可编程布线资源)。而且大量组合逻辑容易受到布局布线延迟,在查找表的输出端产生“毛刺”,当系统时钟频率、操作密度大幅提高时,极易引起时序逻辑错误[3]。为此,研究了一种基于存储器映射的有限状态机逻辑实现方法,对FPGA资源进行选择性使用,从而达到降低FPGA功耗、提高运行可靠性的目的。
1 NAND Flash芯片接口及底层驱动实现
NAND Flash芯片是通过异步高性能I/O与主控芯片通信的,8位复用总线传输操作指令、操作地址以及数据,多个控制信号来区分总线接口状态以及获取芯片工作状态,如图1。
NAND Flash芯片控制器主要完成初始化、无效块检测、块擦除、页编程和页读取共5个基本操作模式。其中初始化操作与无效块校验是在系统上电后需要率先完成的操作,随后控制器将进入到空闲状态,并根据输入的相应控制信号完成剩下的块擦除、页编程和页读取操作。各个操作模式都是状态转移实现一定时序的输出与接收,并且用状态机容易实现。以块擦除为例,其中输入信号有Erase_en、Earse_do和R/B 3个信号,输出信号有CLE、ALE、WE、RE 4个信号,状态转移如图2所示。
2 基于存储器映射的有限状态机设计
2.1 基于优化资源配置的低功耗、高可靠设计思路
目前主流的FPGA芯片内部除含有查找表、触发器、布线资源等基本逻辑资源外,还集成了块RAM、分部式RAM、时钟管理等多种丰富的资源。FPGA的可编程特性主要靠布线结构中的可编程开关连接可编程逻辑块实现。
不同类型资源所消耗的动态功耗在FPGA总功耗中所占比例不同。其中总动态功耗的62%来自于布线资源,19%来自于时钟网络,而可编程逻辑块只占动态功耗的19%[4]。
根据FPGA中各种资源性能、功耗不同的现象,提出了一种新的设计思路,即在满足系统性能的前提下,对FPGA资源进行优化选择性使用,尽可能使用相对较低功耗的资源完成设计任务。将有限状态机映射到FPGA内部RAM中执行,不仅可以减少布线资源的使用,从而降低FPGA的动态功耗,而且能够消除高速状态下切换布线延迟产生的错误或者无效状态[5]。
2.2 基于存储器映射的有限状态机设计方法
状态机组合逻辑都可以抽象为一定输入编码与一定输出编码的对应,即当前状态与输入信号共同决定次态的编码[6]。为了能在块RAM中执行有限状态机,需要将状态机的编码及状态转移等信息映射到块RAM中。具体方法为:块RAM中每个存储单元内容分为状态机的状态编码信息与状态机的输出信息两部分。由状态机的当前编码信息和状态机的输入信息一起构成下一个状态编码信息的存储地址。
如果采用[D2:D0]表示Flash块擦除状态机的8个操作状态、[D4:D3]表示分3次发送的操作块地址信息、[D5]表示所用的两个操作命令,则操作状态编码、地址编码、命令编码即可唯一确定该状态机当前所处的状态(具体编码方式如图3所示)。其中次态的高4位是状态机向下一状态转化时的输出值,用于对Flash芯片的控制;当前态的高3位是状态机的输入控制信号。采用这种编码方式容易将图2所示的有限状态机表示为当前态与次态对应的真值表见表1。
将表1中当前态作为RAM的存储地址,次态作为RAM中存储的数据,即可以将图2所示的有限状态机映射到存储器上执行,如图4所示。状态机进行转化时,下一状态的编码信息存储地址由当前状态的编码信息和状态机的输入信息共同决定。同样,Flash操作中其他的操作模式均可以按这种方式编码并映射为用存储器执行的有限状态机。
实现有限状态机到存储映射所需要的存储空间最大为:
M=2i×(O+S)
其中i表示状态机输入的位数,O表示状态机输出的位数,S是状态编码的位数。
当然,当有限状态机越来越复杂时,其所需的存储空间容量越来越大,也可以适当地根据实际情况通过逻辑控制对地址控制进行修正来减小存储空间需求。
3 NAND Flash控制中的低功耗优化设计
FPGA的功耗主要包含静态功耗和动态功耗两部分。静态功耗主要取决于所选FPGA的型号;动态功耗是所有电容性节点充放电产生的组合功耗和电路转换过程中的短路电流形成的功耗[7]。降低FPGA动态功耗的思路为:在保证满足设计要求的情况下,通过降低内部信号的翻转率来降低功耗。其手段包括对时钟进行管理与增加防火墙寄存器。
3.1 基于时钟管理模块的低功耗优化
在FPGA内部时钟信号不断翻转,由时钟信号派生出的信号通常运行在主时钟频率的较小分量[8](通常为12%~15%)。所以在所有高耗能信号中,时钟是主要矛盾。通常情况下,一个状态机会在某个时间段内保持同一个状态不变,但其时钟始终处于翻转状态。因此,关闭闲置模块程序的时钟可以降低时钟资源产生的功耗[9]。在Flash操作中,当FPGA处于擦除模式时,初始化操作、无效块校验、页编程和页读取模式均处于闲置状态。图4中时钟管理模块负责对FPGA内部各模块的时钟进行管理,只有该模块处于工作状态时时钟信号才会翻转。在设计中增加时钟管理模块非常简单,可以在硬件描述语言中添加,也可以通过综合工具自动添加。
3.2 增加防火墙寄存器的低功耗优化
在FPGA程序设计中大量组合逻辑很容易受到布局布线延迟在查找表的输出端产生“毛刺”。“毛刺”在后续组合逻辑电路的传播中,可能导致多米诺骨牌效应,致使系统变得不稳定,而且增加了调试难度,消耗了大量的能量。研究表明,由“毛刺”在大量组合逻辑中的传递引起的动态功耗占总动态功耗的10%。用FPGA实现大多数电路功能时,FPGA内部大部分的基本逻辑单元中的触发器(Flip-Flop,FF)没有使用,将这些未用的FF添加到信号传输路径上被称作增加防火墙寄存器[10](如图5)。通过在程序中添加防火墙寄存器来分割组合逻辑,把每个逻辑功能限制在相邻的逻辑单元中,从而缩短布线长度和减小负载电容,将“毛刺”波的传递限制在最小范围,达到降低功耗的目的。
4 仿真实验结果及分析
为了比较分析传统状态实现方法与基于RAM映射的有限状态机设计以及低功耗优化方法的性能差别,对设计完成FPGA内部资源消耗情况、功耗评估以及理论最高工作频率3方面进行测试。
整个试验以Xilinx公司的Spartan-6系列FPGA XC6SLX150为目标器件,选用ISE13.1版本的综合工具,并利用ISE中自带的XPower进行功耗分析。XPower从布局和布线(.ncd)文档中获得FPGA设计信息,从Vcd文档中获得设计中所需的时钟、开关活动等信息,该文件可在布局和布线时在Pwr文档中得出功耗报告。仿真结果如表2。
从表中可以看出,基于RAM映射的有限状态机设计仅仅增加一个片内Block RAM资源的使用就使内部其他资源占用率下降到传统方式的1/3,总功耗也能下降到原来的50%以下,并且最大工作频率有明显提高。对基于RAM映射的有限状态机进行低功耗优化后仅仅增加了小部分闲置FFs资源的使用,使FPGA总功耗进一步下降到传统状态机设计的43.1%,而且最大工作频率提高了65.6%。
5 结论
文章针对Flash控制应用中实现复杂状态机的设计时存在高速可靠性与动态功耗的问题进行研究,提出了一种优化FPGA内部资源使用方法,利用FPGA内部存储资源构成有限状态机的设计并进行了低功耗优化。其将传统方式下的状态机电路结构中不断变化的状态机寄存器信息转化成RAM中的固定模块,减少了使用功耗较高的布线资源。不仅有效降低了FPGA动态功耗,而且能够消除高速状态下切换布线延迟产生的错误或者无效状态,特别适合大规模的复杂状态机结构,使得各个状态机切换具有等间隔的时间延迟。增加时钟管理模块关闭闲置模块的运行以及添加防火墙寄存器限制“毛刺”传播,进一步降低了FPGA的动态功耗,提高了系统可靠性。该方法很容易迁移到其他FPGA应用设计中,有较高的实用价值。
参考文献
[1] 马寅,安军社,王连国.基于Scrubbing的空间SRAM型FPGA抗单粒子翻转系统设计[J].空间科学学报,2012,32(2):270-276.
[2] SHANG L,KAVIANI A,BALHALA K.Dynamic power consumption in Vinex-I1 FPGA family[C].Proceedings of the 2002 ACM/SIGDA tenth international symposium on Field-programmable gate arrays.2002:157-164.
[3] CROMAR S,LEE J,CHEN D M.FPGA-targeted high-level binding algorithm for power and area reduction with glitch-estimation[C].Proc of the 46th Annual Design Automation Conference.New York:ACM Press,2009:838-843.
[4] 李列文.FPGA低功耗设计相关技术研究[D].长沙:中南大学信息科学与工程学院,2014.
[5] 吴强,张逸中.FPGA位流解析及电路还原方法[J].计算机工程,2013,39(5):714-726.
[6] 储成群.存储测试系统若干关键技术研究[D].太原:中北大学仪器与电子学院,2015.
[7] 李宏钧,胡小龙.流水线的FPGA低功耗设计[J].计算机系统应用,2011(8):234-237.
[8] WANG Q,GUPTA S,ANDERSON J.Clock power reduction for Virtex-5 FPGAs[C].Proceedings of the ACM/SIGDA international symposium on Field programmable gate arrys.2009:13-22.
[9] 何艳霞,何永泰.FPGA低功耗的设计研究[J].楚雄师范学院学报,2012(6):22-25.
[10] 黄娟,杨海钢,谭宜涛,等.防火墙寄存器技术的FPGA低功耗布线算法研究[J].计算机应用研究,2011(8):2954-2957.
相关问答
如何做到 Flash 按钮控制影片播放某一帧到某一帧停止? - 139**...你不在MC上放Stop();怎么能让MC不会自动播放全部影片呢?a.onRelease=function(){_mc.gotoAndPlay(10);_root.onEnterFrame=funct...
怎么样禁用nvidia显卡控制面板里的相关热键-ZOL问答NIVIDIA显卡驱动安装完以后,自动添加开机启动和服务(一般开机启动有两项,服务里有一项),用WINDOWS优化大师或是360安全卫士把开机启动里和服务里的NIVIDIA相关项...
flash 里如何控制音量 - 张源3 的回答 - 懂得先给你做一个,是不是这样的效果.是这个效果的话,就给你源文件,写教程很费时.
Adobe Flash Player设置页面无法设置该咋办,我想关掉里面的硬件加速,但打开了,点不了,也关不了?解决方法:打开控制面板——找到“flashplayer”并双击——弹出的窗口中选中“允许站点在此计算机上保存信息”,并点击“站点的本地存储设置”,看res.tnt.qq...
rt809h 编程 器有哪些功能?关于这个问题,RT809H编程器是一种高性能的编程工具,主要用于电视、液晶显示器、笔记本电脑等电子设备的主板维修和升级。它具有以下功能:1.芯片读写:可以读...
flash 按钮控制动画怎么做?要实现flash按钮控制动画,首先需要在flash中创建一个按钮组件,并设置其动作脚本为控制动画的播放和停止。然后在动画的关键帧中添加触发按钮的事件监听器,当...
PPT里 flash 文件怎么控制播放?调整好大小,在“属性”面板中作如下设置:“名称”中输入“cmd_play”,“Caption”中输入“播放”。双击该按钮,进入VBA编辑窗口,输入如下内容:PrivateSub...
如何在 flash 中实现动画的停止?很简单吗!用AS实现,先将你的FLASH跳到最后一帧,打开“动作-帧”面板,然后展开“影片剪辑控制”、“时间轴控制”、“stop”这样,这样,到最后一帧就会停止了...
怎样用 flash 制作的按钮控制动画?..3、为动画五角星的形状设置补间动画功能选项。4、创建一个新层并绘制3个按钮以开始,暂停和停止。5、首先编辑动画的第一帧,然后编辑按钮。6、然后,我们选...
怎样解决 flash 导致的win10系统卡死问题?1、首先要检查下自己有无安装,没有安装就下载安装。2、开始菜单/控制面板/FlashPlayer/更新/立即更新。按确定就可以了。3、另外一种办法就是用腾讯电脑管...