一种闪存接口控制方法及装置
技术领域
本发明属于数据存储领域,更具体地,涉及一种闪存接口控制方法及装置。
背景技术
随着固态存储设备的快速发展,闪存器件也在不断地推陈出新。20nm及以下先进工艺的闪存器件开始得到广泛的应用。新工艺的闪存不但在容量上得到大幅改善,而且能够支持更快的接口时序以及更多的控制命令。这种状况在有效提高了固态存储设备的性能与容量的同时,却使得闪存器件的控制过程变得愈发复杂。例如,为了能够读取性能,闪存器件具有随机读取、缓存读取(CacheRead)以及多平面读取(Multi-PlaneRead)等多种读取命令。这些读取命令不仅本身复杂,而且还需要与其他命令配合来完成一些复杂的操作。
传统的闪存控制器由于采用全硬件实现的方式,需要在设计的复杂度与灵活性之间进行折衷。若通过硬件方式实现所有的命令,则设计复杂且开销较大;若仅仅实现有限的数条命令,则无法完全发挥闪存器件的性能。而以固态硬盘为代表的高性能固态存储设备在工程实践往往既要求能够支持多种复杂命令,又要求实现的开销能够最小化。因而,在这种矛盾中,需要为闪存器件设计一种能够权衡控制灵活性与设计复杂度的新方案,以提高固态存储设备的性能,并降低其成本。
发明内容
针对现有技术的以上缺陷或改进需求,本发明提供了一种闪存接口控制方法,不同于过去采用硬件直接实现的方法,本发明通过将软件指令控制与底层硬件时序控制相结合的方式来实现对外部闪存器件的控制。相应的可有效解决现有技术中硬件方式实现接口控制时设计复杂且开销较大的问题,同时本发明中软硬件协同工作机制不仅应用灵活,而且实现简单、易于扩展,因而尤其适用于固态存储的嵌入式应用场合。
为实现上述目的,按照本发明的一个方面,提出了一种闪存接口控制装置,其特征在于,所述接口控制装置包括控制器、微代码存储器及接口控制器三部分,所述控制器,用于完成对用户数据请求的处理,根据操作类型的不同,从所述微代码存储器中读取对应的微代码序列进行执行;所述微代码存储器,用于保存有与操作类型相对应的微代码序列;所述接口控制器,与外部的闪存器件相连,用于以硬件方式实现接口时序。
作为进一步优选的,所述控制器可同时管理多组接口控制器。
作为进一步优选的,所述控制器中包括寄存器组,用来与微代码存储器配合操作。
作为进一步优选的,所述寄存器组包括命令寄存器、地址寄存器,其中所述命令寄存器,用于存放用户的操作命令;所述地址寄存器,用于存放用户需要访问的闪存地址内容或者用户的内存操作地址。
作为进一步优选的,所述操作类型具体包括数据读取、数据写入、数据擦除。
为实现上述目的,按照本发明的另一个方面,提出了一种闪存接口控制方法,其特征在于,所述方法包括:
(1)控制器接收用户请求并译码,判断用户请求的操作类型;
(2)控制器从微代码存储器中取指,得到操作类型对应的微代码序列的存储位置,并将所述微代码序列逐一取出;
(3)完成取指操作后,控制器将根据微代码序列中每条微代码的操作数的索引,依次链接寄存器组中的操作数,生成与用户操作对应的时序与闪存命令;
(4)控制器将所述时序与闪存命令送往对应的接口控制器执行,从而完成与外部闪存数据的交互。
作为进一步优选的,所述操作类型具体包括数据读取、数据写入、数据擦除。
作为进一步优选的,所述微代码包括时序类型及操作索引,其中,所述时序类型,用于指明数据或命令传输时所应使用的时序控制类型;所述操作索引,用于指明当前操作数的寄存器索引。
作为进一步优选的,所述微代码分为命令类型微代码、地址类型微代码及数据类型微代码,其中所述命令类型微代码,用于处理闪存命令中的命令字;所述地址类型微代码,用于处理闪存命令中的操作地址;所述数据类型微代码,用于处理闪存命令中的数据传输。
总体而言,通过本发明所构思的以上技术方案与现有技术相比,主要具备以下的技术优点:
1.本发明提出的一种闪存接口控制方法及装置,通过配置微代码方式,实现了对多种外部的闪存器件接口时序的灵活控制,与采用全硬件实现的方式相比,大大降低了设计的复杂度及成本开销;
2.本发明方法中,通过各种闪存命令与相应的时序绑定,在实现单一闪存命令的基础上,由操作控制组合更多的闪存命令,从而实现用户所期望的闪存功能;
3.通过将本发明的方法及相应装置应用于固态存储设备中,从而实现对多种闪存器件的灵活支持,显著降低了研发周期与风险。
附图说明
图1是本发明的闪存接口控制装置结构图;
图2是本发明的闪存接口控制方法流程图。
图3是本发明的闪存接口控制操作的层次框图;
图4是时序类型框图;
图5是微代码取指及链接示意图;
图6是读取操作类型格式图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
本发明提出了一种闪存接口控制装置,如图1所示,本发明的硬件实施方案由控制器、微代码存储器以及接口控制器三部分组成。其中,控制器完成对用户数据请求的处理,并包括有相应的寄存器组,用来与微代码存储器配合操作。微代码存储器则保存有诸如读取、写入、擦除等操作类型相对应的微代码序列,控制器将根据操作类型的不同,从微代码存储器中读取相对应的微代码序列进行执行。而接口控制器则以硬件方式实现接口时序,并于外部的闪存器件相连。根据应用需要的不同,控制器可以同时管理多组接口控制器,从而实现对外部的多个闪存器件的控制。
在具体实现过程中,本发明在控制器中使用了包含多个命令寄存器与地址寄存器的寄存器组。其中,命令寄存器用于存放用户填写的闪存操作命令;地址寄存器用于存放用户需要访问的闪存地址内容或者内存操作地址。读取操作时,由两个地址寄存器用于分别存放从闪存器件读出数据的目标内存地址以及闪存地址;而写入操作时,同样由两个地址寄存器用于分别存放向闪存器件写入数据的源内存地址以及闪存地址。这样,寄存器接口可以有效地配合微代码存储器可以实现相关的闪存操作命令。
控制器是闪存控制接口模块的核心。在实现中,控制器可以采用类似于经典处理器的流水线结构。也就是说,如图2所示,为本发明的一种闪存接口控制方法流程图,所述方法具体为:
当用户请求输入到控制器后,控制器将首先进行译码,判断用户请求的操作类型,从而在下一步中能够从微代码存储器中进行取指,得到操作类型对应的微代码序列的存储位置,并将所述微代码序列逐一取出;接下来,控制器将根据微代码中的操作索引,与寄存器中的操作数相链接,从而获得完整的闪存命令。最终,时序与闪存命令被发送到相应的接口控制器中予以处理,从而在总线上产生相关的时序与闪存命令,完成与外部闪存器件的数据交互。
根据闪存操作的实现过程,本发明将整个操作控制过程划分为如图3所示的三个层次:时序控制、命令控制以及操作控制。其中,时序控制层是整个操作的最底层,用来在物理电气上实现对闪存器件信号的时序,从而保障控制器与闪存器件的基本物理通信。命令控制则是在时序控制的基础上完成对闪存命令内容的实现。在命令控制的过程中,各种闪存命令的命令字与操作地址与相应的时序绑定,从而完整实现闪存命令。在实现单一闪存命令的基础上,由操作控制组合更多的闪存命令,从而实现用户所期望的闪存操作功能。
在具体实现中,本发明首先将闪存命令的时序拆分为若干基本时序。如图4所示,以闪存操作的异步时序为例,本发明将其分解为命令时序、地址时序、写数据时序以及读数据时序四个基本时序。由于这些时序具有功能简单、重复性强的特点,因此可由硬件寄存器直接实现。
在时序控制之上是命令控制。命令控制用于将时序与对应的闪存命令内容相绑定。在本发明中,闪存命令的逻辑控制通过微代码的方式予以实现。其中,微代码的格式由时序类型以及操作索引两部分组成。时序类型用于指明数据或命令传输时所应使用的时序控制类型;操作索引则是当前操作数在寄存器组中的索引位置。这样通过将时序类型与寄存器组中的操作数链接起来的方式,可以表达闪存操作过程中的闪存命令。本发明在控制器的寄存器组中设置有多组命令寄存器、地址寄存器,用于存放用户的操作数,用户可以在操作启动之前,预先填写这些寄存器。此外,本发明使用了三种类型的微代码:命令类型、地址类型以及数据类型。命令类型的微代码用于处理闪存命令中的命令字,其时序类型为命令类,其操作索引为命令寄存器索引,指向控制器寄存器组中的命令寄存器;地址类型的微代码用于处理闪存命令中的操作地址,其时序类型为地址类,其操作索引为闪存地址寄存器索引,指向控制器寄存器组中的地址寄存器;数据类型的微代码用于处理闪存命令中的数据传输,根据命令的输入输出类型,使用写数据或者读数据的时序类型,其操作索引为内存地址寄存器索引,指向控制器寄存器组中的地址寄存器,用于存放数据传输时的目标内存地址。这样通过将命令所需的多个微代码组合为有序队列的形式可以实现闪存命令。
如图5所示,控制器接收到用户操作请求后,首先根据请求的类型,从微代码控制器进行取指,读取相应的微代码序列。然后,控制器将根据微代码序列中每条微代码中的操作索引,链接寄存器组中保存的寄存器。例如,对于命令类型的微代码,控制器将根据微代码中的命令操作索引,链接寄存器组中对应的命令,从而,组成由时序和命令构成的一条命令类型的闪存操作。对于地址类型的微代码,控制器将根据微代码中的闪存地址操作索引,链接寄存器组中对应的闪存地址,从而,组成由时序和命令构成的一条地址类型的闪存操作。对于数据类型的微代码,控制器将根据微代码中的数据地址操作索引,链接寄存器组中对应的内存地址,从而,组成由时序和命令构成的一条数据传输类型的闪存操作。这样,处理器将微代码与用户的操作组合为完整的闪存命令后,将发送给接口控制器进行执行。
当用户在固件中进行操作控制时,用户首先向寄存器组中填入相关操作数,并且请求发送给控制器。控制器在接收到用户请求后,将调用与用户请求相应的微代码序列,并逐一与寄存器组中的操作数相链接,写就可以实现诸如读取、写入等操作请求,完成对闪存器件的操作。此外,通过对微代码进行编程与重新组合可以进一步地实现新命令。经过以上的实现划分后,本发明可以实现复杂的闪存命令,并且有效地降低了相关的硬件开销,非常适用于固态存储的应用环境。
具体实施过程以用户进行读取操作请求为例进行说明。如图6所示,当用户需要对闪存数据进行操作时,首先组织操作控制命令,分别在寄存器组中填写读取操作、数据传输所需的内存地址和闪存地址。在操作命令执行后,控制器根据用户请求的内容,从微代码存储器中逐一取出与读取操作相关的微代码序列,然后将取出的每条微代码的操作索引依次与寄存器组中保存的操作数相链接。这样完成了闪存命令内容与相关时序之间的绑定。剩下的工作就是由硬件模块依次执行微代码,在物理数据总线上产生相关的信号,从而完成与外部闪存器件之间的数据交互。
本发明通过以上软硬件协同工作的方式,仅用简单的硬件,实现了复杂多样的闪存命令。这种新的控制方式可以满足固态存储设备对闪存操作上的灵活需求,并降低了实现开销,可以有效提高相关设备的竞争力。
本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。