大容量NVM接口控制器的制作方法

文档序号:14860446发布日期:2018-07-04 06:58阅读:288来源:国知局
大容量NVM接口控制器的制作方法

本申请涉及存储技术领域,尤其涉及大容量nvm接口控制器。



背景技术:

nand闪存、相变存储器、feram(ferroelectricram,铁电存储器)、mram(magneticrandomaccessmemory,磁阻存储器)、rram(resistiverandomaccessmemory,阻变存储器)等是常见的nvm(non-volatilememory,非易失存储器)。

存储器目标(target)是闪存颗粒封装内的共享芯片使能(ce,chipenable)信号的一个或多个逻辑单元(logicunit),每个逻辑单元具有逻辑单元号(lun,logicunitnumber)。nand闪存封装内可包括一个或多个管芯(die)。典型地,逻辑单元对应于单一的管芯。逻辑单元可包括多个平面(plane)。逻辑单元内的多个平面可以并行存取,而nand闪存芯片内的多个逻辑单元可以彼此独立地执行命令和报告状态。在http://www.onfi.org/~/media/onfi/specs/onfi_3_2%20gold.pdf获得的“opennandflashinterfacespecification(revision3.2)”中,提供了关于目标(target)、逻辑单元、lun、平面(plane)的含义,以及也提供了操作nvm芯片的命令。

固态硬盘控制器包括闪存接口控制器(或称为介质接口控制器、闪存通道控制器),闪存接口控制器耦合到nvm芯片,并以遵循nvm芯片的接口协议的方式向nvm芯片发出命令,以操作nvm芯片,并接收从nvm芯片输出的命令执行结果。已知的nvm芯片接口协议包括“toggle”、“onfi”等。

在公开号为cn1414468a的中国专利申请中,提供了通过执行微指令序列来处理cpu(centralprocessingunit,中央处理单元)指令的方案。当cpu要处理特定指令时,转换逻辑电路将特定指令转换成与之对应的微指令序列,通过执行微指令序列来实现特定指令的功能。微指令序列或者微指令序列的模板存储在rom(readonlymemory,只读存储器)中。在将特定指令转换成微指令序列过程中,可对微指令序列模板进行填充,使之与特定指令相对应。

在中国专利申请cn201610009789.6与cn201510253428.1中提供了用于闪存接口控制器的微指令执行方法与装置,而中国专利申请cn201610861793.5提供了微指令序列的调度方法与装置,将其全文合并于此。闪存接口控制器通常耦合到多个nvm芯片,nvm芯片包括多个lun(logicunit,逻辑单元)或管芯,多个lun和管芯可以并行响应及访问nvm命令,又由于每个lun或管芯上可以有多个待处理的nvm命令,因此nvm控制器需要对多个nvm命令或多段微指令序列进行调度,以维护多个在处理中或待处理的nvm命令,或者维护多段用于生成nvm命令的微指令序列。

在大容量固态硬盘中,控制器需要连接更多的nvm芯片。而在单一nvm芯片内也可包括了多个管芯或目标。由于nvm芯片上的每个管芯或目标都具有芯片使能(chipenable,ce)引脚,并且在操作每个管芯或目标时,要向其施加单独的ce信号,以同固态硬盘中的其它nvm芯片/管芯/目标的操作相区分。然而众多的ce信号需要消耗控制器的大量的io引脚资源。

图1为中国专利cn201632269u的具有芯片使能信号扩展的存储系统的示意图。图1示出的存储系统包含存储器控制器101(也称为固态硬盘控制器)和闪存通道1(102)到闪存通道m(103),每个闪存通道上包括一片或多片闪存芯片(未示出)。在图1的存储系统中,还包括ce扩展器104。ce扩展器104连接到存储器控制器101。ce扩展器104与存储器控制器101的连接,可通过例如ce数据信号线和ce控制信号线。也可以通过iic(inter-integratedcircuit,集成电路总线)、uart(universalasynchronousreceiver/transmitter,通用异步收发传输)、lin((localinterconnectnetwork,本地互联网络)等通信协议在ce扩展器104与存储器控制器101之间传输数据。在图1的实施例中,闪存通道102与103共用数据信号线和除芯片使能之外的控制信号线。应当理解的,存储器控制器101与ce扩展器104之间可使用单一信号线相耦合。

ce扩展器104通过多条芯片使能(ce)信号线,与闪存通道1(102)到闪存通道m(103)上的多个闪存芯片或闪存管芯的芯片使能(ce)端口相连接,这些芯片使能(ce)信号线在图1中用“闪存通道1-ce1”、“闪存通道1-cen”、“闪存通道m-ce1”以及“闪存通道m-cen”指出。

在图1的实施例中,存储系统中有m个闪存通道,每个闪存通道上有1个闪存芯片,每个闪存芯片包含n个管芯以及与该n个管芯相对应的n个芯片使能(ce)端口,因而总共需要用到n*m个ce信号线。将这些n*m个ce信号端口均连接到ce扩展器104,而ce扩展器104与存储器控制器201之间通过较少的信号线进行通信(例如,图1中的ce数据信号线和ce控制信号线)。例如,存储器控制器101向ce扩展器104指示要使能闪存通道103上的第一个闪存芯片的第一管芯,则ce扩展器104在相应的“闪存通道m-ce1”芯片使能信号线上产生有效的使能信号,而在其他芯片使能信号线上不产生有效的使能信号。

依然可以理解的,可提供多个ce扩展器,用于使存储器控制器能够访问更多的闪存芯片。以及中国专利cn201632269u提供的技术可应用于访问其他nvm芯片。



技术实现要素:

本申请的目的包括提供io命令处理方法与大容量nvm接口控制器,用于支持对ce扩展器以及扩展机制的应用,以访问更多的nvm芯片。

根据本发明的第一方面,提供了根据本发明第一方面的第一io命令处理方法,该方法包括:从命令队列获取io命令;从io命令中获取虚拟lun编号和/或虚拟块地址;依据虚拟lun编号选择处理单元;所述处理单元依据虚拟块地址确定io命令所访问的物理lun以及该物理lun上的物理块地址;向提供io命令所访问的物理lun的ce端口发出有效的芯片使能信号;以及向所访问的物理lun发出nvm接口命令。

根据本发明的第一方面的第一io命令处理方法,提供了根据本发明第一方面的第二io命令处理方法,依据所述虚拟块地址寻址虚拟lun的块,虚拟lun的块的数量等于所述虚拟lun所包括的多个物理lun的块的数量的和。

根据本发明的第一方面的第二io命令处理方法,提供了根据本发明第一方面的第三io命令处理方法,其中,所述虚拟lun包括多个物理lun。

根据本发明的第一方面的第一至第三io命令处理方法,提供了根据本发明第一方面的第四io命令处理方法,为每个虚拟lun提供处理单元,以在处理io命令时依据虚拟lun编号选择对应的处理单元。

根据本发明的第一方面的第四io命令处理方法,提供了根据本发明第一方面的第五io命令处理方法,其中,所述处理单元耦合到多个物理lun。

根据本发明的第一方面的第五io命令处理方法,提供了根据本发明第一方面的第六io命令处理方法,其中,所述处理单元通过ce扩展器耦合到所述多个物理lun;以及所述ce扩展器在所述处理单元的控制下向io命令所访问的物理lun的ce端口发出有效的芯片使能信号。

根据本发明的第一方面的第五或第六io命令处理方法,提供了根据本发明第一方面的第七io命令处理方法,所述ce扩展器还在所述处理单元的控制下向io命令所访问的物理lun所属的虚拟lun中的,除该被访问物理lun之外的其他各个物理lun所对应的ce端口发出无效的芯片使能信号。

根据本发明的第一方面的第四至第七io命令处理方法,提供了根据本发明第一方面的第八io命令处理方法,处理单元通过执行微指令序列执行其功能。

根据本发明的第一方面的第八io命令处理方法,提供了根据本发明第一方面的第九io命令处理方法,微指令序列有多个执行上下文,微指令序列每次执行时利用所述多个执行上下文之一。

根据本发明的第一方面的第一至第九io命令处理方法,提供了根据本发明第一方面的第十io命令处理方法,还包括:获取io命令的类型。

根据本发明的第一方面的第十io命令处理方法,提供了根据本发明第一方面的第十一io命令处理方法,若io命令为复位命令,获取虚拟lun所对应的所有物理lun,并向提供所有这些物理lun的ce端口均发出有效的芯片使能信号;以及向所有这些物理lun发出复位命令;以及处理复位命令,直到确认复位命令在所有物理lun上均执行完成。

根据本发明的第一方面的第十io命令处理方法,提供了根据本发明第一方面的第十二io命令处理方法,若io命令为复位命令,获取虚拟lun所对应的所有物理lun,每次向这些物理lun中的一个发出复位命令,以及重复向每个物理lun发出复位命令,并向提供这些物理lun的相应的ce端口发出芯片使能信号;以及处理复位命令,直到复位了虚拟lun中的所有物理lun。

根据本发明的第一方面的第十io命令处理方法,提供了根据本发明第一方面的第十三io命令处理方法,若io命令为编程命令,依据所访问的虚拟块地址确定要访问的物理lun,以及该物理lun上的物理块地址,并向提供该物理lun的ce端口发出芯片使能信号;以及向该物理lun发出编程命令;以及处理编程命令,并获取编程命令的执行状态,直到编程命令执行完成。

根据本发明的第一方面的第一至第十三io命令处理方法,提供了根据本发明第一方面的第十四io命令处理方法,还包括:在待处理命令集中记录命令执行的状态。

根据本发明的第十四io命令处理方法,提供了根据本发明第一方面的第十五io命令处理方法,还包括:从待处理命令集中选择待处理命令之一,获取所选择命令的状态,并依据所选择命令的状态继续对所选择命令的处理,其中对命令的每次执行可以是执行命令的一个阶段。

根据本发明的第一方面的第十四或第十五io命令处理方法,提供了根据本发明第一方面的第十六io命令处理方法,响应于接收到编程命令,在对应的物理lun上处理编程命令;以及暂停编程命令的处理,并在待处理命令集中记录该编程命令的指示命令处理进度的状态;以及响应于恢复编程命令的处理,查询编程命令在对应的物理lun上的处理进度;若编程命令的处理尚未完成,继续编程命令的处理;以及再次暂停该编程命令的处理。

根据本发明的第一方面的第十四至第十六io命令处理方法,提供了根据本发明第一方面的第十七io命令处理方法,若命令队列中有访问同一虚拟lun的至少两条编程命令,处理第一编程命令;以及暂停第一编程命令的处理,并在待处理命令集中记录第一编程命令的指示命令处理进度的状态;若虚拟lun上有其他尚未开始执行的第二编程命令,处理第二编程命令。

根据本发明的第一方面的第十七io命令处理方法,提供了根据本发明第一方面的第十八io命令处理方法,若虚拟lun上没有其他尚未开始执行的第二命令,从待处理命令集中选择第一编程命令,以及获取第一编程命令的状态;若第一编程命令的执行状态指示为未完成,处理第一编程命令;以及连续向第一编程命令所访问的物理lun获取第一编程命令的执行状态,直到第一编程命令的执行状态指示为处理完成。

根据本发明的第一方面的第八io命令处理方法,提供了根据本发明第一方面的第十九io命令处理方法,若第一编程命令的执行状态指示为处理完成,从待处理命令集中继续选择第三编程命令。

根据本发明的第二方面,提供了根据本发明第二方面的第一io命令处理方法,包括:从命令队列获取io命令;从io命令中获取逻辑lun编号和/或逻辑块地址;依据逻辑lun编号和/或逻辑块地址得到与逻辑lun对应的虚拟lun的编号;依据虚拟lun的编号选择处理单元,以及io命令所访问的物理lun;向提供io命令所访问的物理lun的ce端口发出有效的芯片使能信号;以及向所访问的物理lun发出nvm接口命令。

根据本发明的第二方面的第一io命令处理方法,提供了根据本发明第二方面的第二io命令处理方法,其中,虚拟lun包括多个物理lun;以及耦合到不同虚拟lun的一个或多个物理lun,或者耦合到不同虚拟lun的一个或多个物理lun提供的多个物理块被组织为逻辑lun。

根据本发明的第二方面的第二io命令处理方法,提供了根据本发明第二方面的第三io命令处理方法,其中,将逻辑lun映射到多个虚拟lun。

根据本发明的第二方面的第二io命令处理方法,提供了根据本发明第二方面的第四io命令处理方法,其中,逻辑lun同物理lun一一对应。

根据本发明的第二方面的第二io命令处理方法,提供了根据本发明第二方面的第五io命令处理方法,其中,将同一逻辑lun内的具有连续逻辑块地址的多个逻辑块映射到不同的虚拟lun。

根据本发明的第二方面的第二io命令处理方法,提供了根据本发明第二方面的第六io命令处理方法,其中,将不同逻辑lun内的具有相同逻辑块地址的多个逻辑块映射到不同的虚拟lun。

根据本发明的第二方面的第一至第六io命令处理方法,提供了根据本发明第二方面的第七io命令处理方法,其中,为每个虚拟lun提供处理单元,以在处理io命令时依据虚拟lun编号选择对应的处理单元。

根据本发明的第三方面,提供了根据本发明第三方面的第一nvm接口控制器,该nvm接口控制器包括命令队列与nvm命令处理单元,nvm命令处理单元耦合到多个nvm芯片,命令队列用于接收io命令,nvm命令处理单元用于从命令队列获取io命令,并根据io命令的指示向nvm芯片发送nvm接口命令或从nvm芯片接收数据或状态,nvm命令处理单元包括多个处理单元,用于访问对应的nvm芯片,nvm命令处理单元通过一个或多个ce扩展器耦合到nvm芯片的ce端口,nvm命令处理单元还用于,通过设置ce扩展器向指定的nvm芯片发出芯片使能信号,以访问对应的nvm芯片。

根据本发明的第三方面的第一nvm接口控制器,提供了根据本发明第三方面的第二nvm接口控制器,其中,ce扩展器耦合到多个nvm芯片的芯片使能(ce)端口,nvm命令处理单元通过设置ce扩展器,以向多个nvm芯片中的一个发送芯片使能或芯片禁用信号。

根据本发明的第三方面的第一nvm接口控制器,提供了根据本发明第三方面的第三nvm接口控制器,其中,多个处理单元通过多个ce扩展器耦合到多个nvm芯片的ce端口,多个处理单元通过设置对应的ce扩展器,以向指定的nvm芯片发送芯片使能信号或芯片禁用信号。

根据本发明的第三方面的第一至第三nvm接口控制器,提供了根据本发明第三方面的第四nvm接口控制器,其中,从命令队列获取的io命令指示虚拟lun编号,虚拟lun编号用于指示虚拟lun,所述虚拟lun包括多个物理lun。

根据本发明的第三方面的第一至第四nvm接口控制器,提供了根据本发明第三方面的第五nvm接口控制器,其中,所述nvm处理单元耦合到多个物理lun,nvm接口控制器还用于,依据虚拟lun编号选择多个处理单元之一来处理io命令。

根据本发明的第三方面的第一至第五nvm接口控制器,提供了根据本发明第三方面的第六nvm接口控制器,其中,每个nvm芯片包括多个物理lun,处理单元通过ce扩展器耦合到多个物理lun;以及所述ce扩展器在所述处理单元的控制下向io命令所访问的物理lun的ce端口发出有效的芯片使能信号。

根据本发明的第三方面的第六nvm接口控制器,提供了根据本发明第三方面的第七nvm接口控制器,其中,所述ce扩展器还在所述处理单元的控制下向同所述ce扩展器耦合的多个物理lun中,除io命令所访问物理lun之外的其他物理lun所对应的ce端口发出无效的芯片使能信号。

根据本发明的第三方面的第一至第七nvm接口控制器,提供了根据本发明第三方面的第八nvm接口控制器,其中,处理单元通过执行微指令序列执行其功能。

根据本发明的第三方面的第八nvm接口控制器,提供了根据本发明第三方面的第九nvm接口控制器,其中,微指令序列有多个执行上下文,微指令序列每次执行时利用所述多个执行上下文之一。

根据本发明的第三方面的第一至第九nvm接口控制器,提供了根据本发明第三方面的第十nvm接口控制器,nvm命令处理单元还用于,从io命令中获取虚拟lun编号和/或虚拟块地址;以及依据虚拟lun编号选择处理单元,所述处理单元依据虚拟块地址确定io命令所访问的物理lun以及该物理lun上的物理块地址。

根据本发明的第三方面的第十nvm接口控制器,提供了根据本发明第三方面的第十一nvm接口控制器,nvm命令处理单元通过所述虚拟块地址访问虚拟lun的块,虚拟lun的块的数量等于所述虚拟lun所包括的多个物理lun的块的数量的和。

根据本发明的第三方面的第一至第十一nvm接口控制器,提供了根据本发明第三方面的第十二nvm接口控制器,nvm命令处理单元还用于获取io命令的类型。

根据本发明的第三方面的第十二nvm接口控制器,提供了根据本发明第三方面的第十三nvm接口控制器,若io命令为复位命令,nvm命令处理单元还用于,获取由虚拟lun编号所指示的所有物理lun,并通过设置ce扩展器向提供这些物理lun的ce端口均发出芯片使能信号;以及向这些物理lun发出复位命令;以及处理复位命令,直到确认复位命令在所有物理lun上均执行完成。

根据本发明的第三方面的第十二nvm接口控制器,提供了根据本发明第三方面的第十四nvm接口控制器,若io命令为复位命令,nvm命令处理单元还用于,获取由虚拟lun编号所指示的所有物理lun,每次向这些物理lun中的一个发出复位命令,以及重复向每个物理lun发出复位命令,并向提供这些物理lun的相应的ce端口发出芯片使能信号;以及处理复位命令,直到复位了虚拟lun中的所有物理lun。

根据本发明的第三方面的第十二nvm接口控制器,提供了根据本发明第三方面的第十五nvm接口控制器,若io命令为编程命令,nvm命令处理单元还用于,依据所访问的虚拟块地址确定要访问的物理lun,以及该物理lun上的物理块地址,并向提供该物理lun的ce端口发出芯片使能信号;以及向该物理lun发出编程命令;以及处理编程命令,并获取编程命令的执行状态,直到编程命令执行完成。

根据本发明的第三方面的第一至第十五nvm接口控制器,提供了根据本发明第三方面的第十六nvm接口控制器,nvm接口控制器还存储待处理命令集,用于记录命令执行的状态。

根据本发明的第三方面的第十六nvm接口控制器,提供了根据本发明第三方面的第十七nvm接口控制器,nvm命令处理单元还用于,从待处理命令集中选择待处理命令之一,以及获取所选择命令的状态,并执行所选择命令,其中对命令的每次执行可以是执行命令的一个阶段。

根据本发明的第三方面的第十六或第十七nvm接口控制器,提供了根据本发明第三方面的第十八nvm接口控制器,nvm命令处理单元还用于,响应于接收到编程命令,在对应的物理lun上处理编程命令;以及暂停编程命令的执行,并在待处理命令集中记录该编程命令的指示命令处理进度的状态;以及响应于恢复编程命令的执行,查询编程命令在对应的物理lun上的处理进度;若编程命令的处理尚未完成,继续编程命令的处理;以及再次暂停该编程命令的处理。

根据本发明的第三方面的第十六至十八nvm接口控制器,提供了根据本发明第三方面的第十九nvm接口控制器,若命令队列中有访问第一虚拟lun的至少两条编程命令,nvm命令处理单元还用于,处理第一编程命令;以及暂停第一编程命令的处理,并在待处理命令集中记录第一编程命令的指示命令处理进度的状态;若第一虚拟lun上有其他尚未开始执行的第二编程命令,处理第二编程命令。

根据本发明的第三方面的第十九nvm接口控制器,提供了根据本发明第三方面的第二十nvm接口控制器,若第一虚拟lun上没有其他尚未开始执行的第二命令,nvm命令处理单元还用于,从待处理命令集中选择第一编程命令,以及获取第一编程命令的状态;若第一编程命令的执行状态指示为未完成,处理第一编程命令;以及从第一编程命令所访问的第一物理lun查询第一编程命令的执行状态,直到第一编程命令的执行状态指示为处理完成。

根据本发明的第三方面的第十九nvm接口控制器,提供了根据本发明第三方面的第二十一nvm接口控制器,若第一编程命令的执行状态指示为处理完成,nvm命令处理单元还用于,从待处理命令集中选择第三编程命令。

根据本发明的第三方面的第一至第四nvm接口控制器,提供了根据本发明第三方面的第二十二nvm接口控制器,其中从命令队列获取的io命令指示逻辑lun编号,以及其中将耦合到不同虚拟lun的一个或多个物理lun,或者耦合到不同虚拟lun的一个或多个物理lun提供的多个物理块组织为逻辑lun。

根据本发明的第三方面的第二十二nvm接口控制器,提供了根据本发明第三方面的第二十三nvm接口控制器,其中,nvm介质接口控制器将逻辑lun映射到多个虚拟lun。

根据本发明的第三方面的第二十二nvm接口控制器,提供了根据本发明第三方面的第二十四nvm接口控制器,其中,逻辑lun同物理lun一一对应。

根据本发明的第三方面的第二十二nvm接口控制器,提供了根据本发明第三方面的第二十五nvm接口控制器,其中,nvm介质接口控制器将同一逻辑lun内的具有连续逻辑块地址的多个逻辑块映射到不同的虚拟lun。

根据本发明的第三方面的第二十二nvm接口控制器,提供了根据本发明第三方面的第二十六nvm接口控制器,其中,nvm介质接口控制器将不同逻辑lun内的具有相同逻辑块地址的多个逻辑块映射到不同的虚拟lun。

根据本发明的第三方面的第一十二至二十六nvm接口控制器,提供了根据本发明第三方面的第二十七nvm接口控制器,nvm命令处理单元还用于,从io命令中获取逻辑lun编号和/或逻辑块地址;依据逻辑lun编号和/或逻辑块地址得到与逻辑lun对应的虚拟lun的编号;依据虚拟lun的编号选择处理单元;所选择的处理单元用于通过ce扩展器向提供io命令所访问的物理lun的ce端口发出有效的芯片使能信号;以及向所访问的物理lun发出nvm接口命令。

根据本发明的第四方面,提供了根据本发明第四方面的一种固态存储设备,该固态存储设备包括控制部件和多个nvm芯片,控制部件用于访问多个nvm芯片,nvm芯片包括一个或多个物理lun,所述控制部件包括如本发明第三方面的第一至十七所述的nvm接口控制器,以及一个或多个ce扩展器,其中nvm接口控制器通过一个或多个ce扩展器与多个nvm芯片耦合,用于向提供被访问的物理lun的nvm芯片的ce端口发出芯片使能信号。

根据本发明的第五方面,提供了根据本发明第五方面的一种包括指令代码的程序,当被载入固态存储设备并在固态存储设备的控制器上执行时,所述程序使所述控制器执行如本发明第一方面第一至第十九,以及如本发明第二方面第一至第七所述的io命令处理方法。

根据本发明的第六方面,提供了根据本发明第六方面的一种固态存储设备,该固态存储设备包括一个或多个处理器与存储器,所述一个或多个处理器通过运行存储器中的程序来执行如本发明第一方面第一至第十九,以及如本发明第二方面第一至第七所述的io命令处理方法。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为现有技术中的具有芯片使能信号扩展的存储系统的示意图;

图2为根据本发明实施例的固态硬盘控制器的nvm接口控制器的框图;

图3为根据本发明又一实施例的固态硬盘控制器的nvm接口控制器的框图;

图4为根据本发明实施例的虚拟lun的示意图;

图5为根据本发明另一实施例的固态硬盘控制器的nvm接口控制器的框图;

图6为根据本发明实施例的nvm命令处理单元处理命令的流程图;

图7为根据本发明又一实施例的nvm命令处理单元处理命令的流程图;

图8为根据本发明又一实施例的nvm命令处理单元的线程处理命令的流程图;

图9为根据本发明依然另一实施例的固态硬盘控制器的nvm接口控制器的框图;

图10为根据本发明实施例的逻辑lun(以及块)到虚拟lun以及物理lun的映射表的示意图。

图11为根据本发明依然又一实施例的固态硬盘控制器的nvm接口控制器的框图;以及

图12为根据本发明另一实施例的逻辑lun(以及块)到虚拟lun以及物理lun的映射表的示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

实施例一

图2是根据本发明实施例的固态硬盘控制器的nvm接口控制器的框图。图2中的nvm接口控制器包括命令队列201与nvm命令处理单元202。根据本发明的实施例,命令队列201用于接收来自用户或上层系统的命令。来自用户或上层系统的命令可包括读出、写入、删除、标记为无效等命令,还可以包括读取nvm芯片状态、读取或设置nvm芯片特征(feature)等命令,以及也可以包括用户自定义命令。nvm命令处理单元202用于从命令队列201获取命令,并根据命令的指示向nvm芯片发送符合nvm芯片接口标准的nvm接口命令或依照nvm芯片接口标准从nvm接收数据或状态。nvm命令处理单元202耦合到多个nvm芯片。在图2的实施例中,nvm命令处理单元202通过2个通道耦合到4颗nvm芯片,每个nvm芯片包括2个lun。在通道1的nvm芯片提供了lun0-lun3,在通道2的nvm芯片提供lun4-lun7。可以理解的,nvm接口控制器可耦合更多的通道,并访问更多的nvm芯片与更多的lun。

根据本发明的实施例,在nvm命令处理单元202中提供多个处理单元,所述多个处理单元通过执行微指令序列来访问对应的nvm芯片。其中,可被执行的微指令序列被称作线程。由于同一微指令序列在每次执行时拥有自己的执行状态,从而可基于同一微指令序列创建多个线程。在nvm命令处理单元202中还为每个线程存储执行状态。在根据本发明的实施例中,基于所要访问的lun来创建或使用线程。例如使用线程1来访问lun1,和/或使用线程2来访问lun2。

实施例二

图3是根据本发明又一实施例的固态硬盘控制器的nvm接口控制器的框图。图3中的nvm接口控制器包括命令队列201与nvm命令处理单元202。nvm处理单元202包括多个处理单元(未示出),多个处理单元通过执行微指令序列来访问对应的nvm芯片。其中,可被执行的微指令序列被称作线程。图3中还示出了nvm接口控制器中的多个可被调度执行线程。在线程被调度执行时,nvm处理单元202通过设置ce扩展器,来访问多个nvm芯片。

在一个例子中,参看图3,nvm接口控制器通过一个ce扩展器耦合到多个nvm芯片的ce端口,以及通过执行微指令,来设置ce扩展器向多个nvm芯片中的任意一个(或其中的目标(target)之一)产生芯片使能信号或芯片禁用信号,这些多个nvm芯片的同类其他端口(例如,dq、dqs、ale、cle等)共享信号线。例如,通过执行set_ce微指令,向ce扩展器告知所要访问nvm芯片。例如,为访问lun3,线程1执行set_ce微指令,使得ce扩展器向nvm1芯片的ce端口发送有效的芯片使能信号,而向nvm0、nvm2与nvm3的ce端口产生无效的芯片信号,从而使线程1发出的访问nvm芯片的命令对nvm1芯片生效。以此方式,线程能访问多个nvm芯片、多个lun或多个目标。

作为另一个例子,nvm接口控制器通过多个ce扩展器耦合到多个nvm芯片,通过执行微指令,来设置各个ce扩展器向指定的nvm芯片(或者,lun或目标)发送芯片使能信号或芯片禁用信号。

实施例三

图4是根据本发明实施例的虚拟lun的示意图。作为举例,线程2通过ce扩展器耦合到2个nvm芯片,每个nvm芯片包括两个lun(为了清楚的目的,将其称为“物理lun”),从而线程2可访问4个物理lun。参看图4,每个物理lun包括1024个用于存储数据的物理块,提供虚拟lun来代表可由线程2通过ce扩展器访问的4个物理lun,从而虚拟lun包括由4个物理lun提供的4096个物理块。在根据本发明的实施例中,在块地址范围为0-4095的地址空间内访问虚拟lun,而线程2依据虚拟lun的块地址(例如,4000)获得提供该块的物理lun(例如,物理lun3),并指示ce扩展器向物理lun3所在nvm芯片(例如,nvm芯片1)的ce端口发送使能信号,并向其他ce端口发送禁用信号。

实施例四

图5是根据本发明另一实施例的固态硬盘控制器的nvm接口控制器的框图。根据本发明的实施例,nvm接口控制器通过命令队列接收来自用户或上层系统的命令(例如,user_cmd_post(lun,block)),命令中指示了要访问的lun和块(block)。命令中所指示的lun是虚拟lun,而块是由虚拟lun提供的块。例如,命令访问虚拟lun3的块2047。

根据本发明的实施例,响应于接收到io命令,命令中指示了要访问的虚拟lun,nvm命令处理单元为每个虚拟lun提供线程,以及在处理命令时,nvm命令处理单元依据虚拟lun的编号选择对应的线程。例如,由线程3处理访问虚拟lun3的命令。线程3依据命令所访问的块(地址为2047),确定由物理lun3-2(参看图5)的地址为1023的物理块来提供所访问的块,通过设置(例如,执行set_ce微指令)ce扩展器来向提供物理lun3-2的nvm芯片或目标提供有效的芯片使能信号,并向物理lun3-2发出nvm接口命令。

如上所述,根据本发明的实施例,通过将多个物理lun组织为虚拟lun,使得在不需增加线程数量的情况下(每个线程管理对一个虚拟lun的访问),nvm接口控制器能访问更多的物理lun,从而实现更大容量的固态硬盘。并且在nvm接口控制器的上层系统看来,nvm接口控制器的访问方式没有变化,只是虚拟lun所包括的块的数量增加,从而在不改变上层系统或改动很小的情况下,获得了对更多的nvm芯片的访问能力。

实施例五

图6是根据本发明实施例的nvm命令处理单元处理命令的流程图,用于处理实施例四中的io命令。根据本发明的实施例,nvm接口控制器的命令处理单元从命令队列中获取io命令,命令中指示了命令类型、要访问的虚拟lun编号和/或块地址的信息。命令类型包括编程、擦除、读取、复位等。

在一个例子中,命令处理单元从命令队列中获取io命令,命令指示了io命令的类型为复位命令,命令中还指示了要访问的虚拟lun编号(例如lun3)。可选地,复位命令中不包括块地址信息(601)。接下来,nvm命令处理单元判断io命令的类型(602),以及判断io命令为复位命令(613),响应于接收到复位命令,nvm命令处理单元依据虚拟lun编号选择对应线程4(614)。线程4被指定来处理访问虚拟lun3的命令。

接下来,nvm命令处理单元获取虚拟lun编号所指示的所有物理lun(615),并通过设置(例如,执行set_ce微指令)ce扩展器来向提供所有这些物理lun的nvm芯片或目标的ce引脚发出使能信号,以及向所有这些物理lun发出复位命令(616)。以及在这些物理lun上处理复位命令,并且确认复位命令执行完成(617)。

可选地,nvm命令处理单元每次向这些物理lun中的一个发出复位命令,以及重复向每个物理lun发出复位命令,并通过设置(例如,执行set_ce微指令)ce扩展器在提供这些物理lun的相应的ce引脚上发送使能信号。以及在每个物理lun上处理复位命令,直到复位了虚拟lun中的所有物理lun。

在又一个例子中,命令处理单元从命令队列中获取io命令,命令中指示了io命令的类型为编程命令,命令中还指示了要访问的虚拟lun编号(例如lun3)和块,其中块是由虚拟lun提供的块(601)。接下来,nvm命令处理单元判断io命令的类型(602),以及判断io命令为复位命令(623),响应于接收到编程命令,nvm命令处理单元依据虚拟lun编号选择对应的线程4(624)。线程4依据命令所访问的块确定编程命令所访问的物理lun,以及该物理lun上的物理块地址,以及提供该物理lun的nvm芯片或管芯(625)对应的ce端口。

接下来,线程4通过设置(例如,执行set_ce微指令)ce扩展器向提供该物理lun的nvm芯片或管芯的ce引脚发送使能信号(626),以及向该物理lun发出编程命令。响应于接收到编程命令,nvm命令处理单元在对应的物理lun上处理编程命令,以及获取编程命令的执行状态,直到编程命令执行完成(627)。

实施例六

图7是根据本发明又一实施例的nvm命令处理单元处理命令的流程图。用于处理io命令。由于虚拟lun包括多个物理lun,而多个物理lun可以被并行访问,从而需要对访问虚拟lun上不同物理lun的命令提供并行处理能力。提供待处理命令集合,以记录暂时无需占用闪存通道的io命令的指示处理进度的状态。

在根据本发明实施例中,nvm接口控制器的命令处理单元从命令队列中获取io命令(701),io命令中指示了io命令的命令类型、虚拟lun编号和/或块地址的信息。nvm命令处理单元还在待处理命令集合中记录了命令的指示命令处理进度的状态(702),以及从待处理命令集合中选择待处理命令之一(703),获取所选择命令的状态,并执行所选择的命令。其中,对命令的每次执行可以是执行命令的一个阶段(704)。

例如,命令处理单元从命令队列中获取io命令,命令中指示了io命令的类型为编程命令,命令中还指示了要访问的虚拟lun编号(例如lun3)和块,其中块是由虚拟lun提供的块。响应于接收到编程命令,nvm命令处理单元依据虚拟lun编号选择对应的线程5。线程5依据命令所访问的块确定编程命令所访问的物理lun,以及该物理lun上的物理块地址,以及提供该物理lun的nvm芯片或管芯。接下来,线程5通过设置(例如,执行set_ce微指令)ce扩展器向提供该物理lun的nvm芯片或管芯的ce引脚发送使能信号,以及向该物理lun发出编程命令。

在执行该编程命令的第一阶段时,nvm命令处理单元向该编程命令对应的物理lun发送编程命令的地址和/或要写入的数据,随后在待处理命令集合中记录该编程命令的状态(例如,处理进度、访问的地址和/或待写入数据的存储位置)。以及在执行该编程命令时,从待处理命令集合中获取该编程命令,利用待处理命令集合提供的该编程命令的状态,确定要执行该命令的第二阶段,继而查询物理lun对该编程命令的处理是否完成。

在执行该编程命令的第一阶段与第二阶段之间,nvm命令处理单元可从命令队列获取一个或多个io命令进行处理,也可从待处理命令集合中获取一个或多个io命令进行处理。从而将多个io命令提供给虚拟lun。

优选地,每个物理lun在同一时刻仅处理一条io命令。nvm命令处理单元还记录是否已向一物理lun发出了io命令,并选择访问不存在正在处理的io命令的物理lun的io命令来处理。

实施例七

图8是根据本发明又一实施例的nvm命令处理单元的线程处理命令的流程图,用于处理队列中的io命令,以及处理命令队列中出现的访问同一虚拟lun的两条或多条编程命令。

在一个例子中,nvm接口控制器的命令处理单元从命令队列中获取io命令(801),命令中指示了io命令为编程命令,命令中还指示了虚拟lun编号和要访问的块,其中块是由虚拟lun提供的块。响应于接收到编程命令,nvm命令处理单元依据虚拟lun编号选择对应的线程6。线程6依据命令所访问的块确定编程命令所访问的物理lun,以及该物理lun上的物理块地址。接下来,线程6通过设置(例如,执行set_ce微指令)ce扩展器,向要访问的物理lun所在的nvm芯片或目标的ce引脚发出使能信号,并向要访问的物理lun发出编程命令和/或数据。以及在对应的物理lun上处理编程命令(802)。

接下来,nvm命令处理单元暂停对当前命令的处理(例如,向被访问的物理lun发出编程暂停命令),并在待处理命令集合中记录有关当前命令的指示命令处理进度的状态(803)。以及判断当前虚拟lun上是否有其他尚未开始执行的命令(804)。若当前虚拟lun上有其他尚未开始执行的io命令,重复上述处理过程,以获取io命令,在对应的物理lun上处理io命令,以及可选地,暂停被处理的io命令。

若当前虚拟lun上不存在其他尚未开始执行的io命令,nvm命令处理单元选择待处理命令集合中的编程命令之一(805),并获取该编程命令的状态(例如,提取指示命令类型、虚拟lun编号和/或块地址的信息),然后依据该编程命令所访问的虚拟lun编号选择对应的线程7。线程7依据命令所访问的块确定编程命令所访问的物理lun,以及该物理lun上的物理块地址(806)。接下来,线程7通过设置(例如,执行set_ce微指令)ce扩展器,并向要访问的物理lun所在的nvm芯片或目标的ce引脚发出使能信号,并向要访问的物理lun发出查询状态命令,并判断当前编程命令是否处理完成(807)。若查询状态命令指示对应的命令(例如,编程命令)执行完成,继续选择待处理命令集合中的其他命令,直到待处理命令集合中的命令都被处理完成(808)。若查询状态命令指示对应的命令(例如,编程命令)尚未完成,则依据对应命令的状态信息再次向要访问的物理lun发出查询状态命令。

实施例八

图9是根据本发明依然另一实施例的固态硬盘控制器的nvm接口控制器的框图。根据本发明的实施例,nvm接口控制器通过命令队列接收来自用户或上层系统的命令,命令中指示了要访问的lun和块。命令中所指示的lun是逻辑lun,而块是由逻辑lun提供的块。例如,命令访问逻辑lun3的块2047。

在图9的实施例中,由耦合到不同ce扩展器的物理lun来组成逻辑lun,从而有利于访问相同逻辑lun的多个命令在多个物理lun上同时执行。

在图9的实施例中,逻辑lun由4个物理lun组成。每个物理lun提供1024个块,从而逻辑lun3的块2047可由组成逻辑lun3的第2个物理lun(记为逻辑lun3-1)提供。也参看图10,逻辑lun0包括分别耦合到4个ce扩展器(分别记为虚拟lun0、虚拟lun1、虚拟lun2与虚拟lun3)的物理lun(分别记为物理lun0-0,物理lun1-0,物理lun2-0以及物理lun3-0),而逻辑lun3包括分别耦合到4个ce扩展器(分别记为虚拟lun0、虚拟lun1、虚拟lun2与虚拟lun3)的物理lun(分别记为物理lun0-3,物理lun1-3,物理lun2-3以及物理lun3-3)。根据本发明的实施例,由nvm命令处理单元维护诸如图10的逻辑lun(以及块)到虚拟lun以及物理lun的映射关系。响应于从命令队列获取命令,命令处理单元依据命令中指示的逻辑lun编号和块地址,通过诸如图10所示的映射表得到提供所访问块的虚拟lun(或用于访问该虚拟lun的线程)以及物理lun,并指示关联于虚拟lun的线程处理该命令。

作为举例,响应于收到的io命令,命令中指示了要访问的逻辑lun3的块地址2047,nvm命令处理单元确定由线程8(参看图9,虚拟lun1)所关联的物理lun3提供所访问的块;而若收到的io命令指示访问逻辑lun3的块1023,则nvm命令处理单元确定由线程9(参看图9,虚拟lun0)所关联的物理lun3提供所访问的块。根据本发明的实施例,线程8与线程9同时对命令进行处理。线程8与线程9依据所访问的物理lun,通过设置(例如,执行set_ce微指令)ce扩展器来向提供物理lun的nvm芯片或目标提供有效的ce使能信号,并向对应的物理lun发出nvm接口命令。由于线程8访问对应虚拟lun1的ce扩展器,而线程9访问对应虚拟lun0的ce扩展器,因而线程8与线程9对io命令的处理不存在资源(例如,ce扩展器、物理lun等)的冲突,可以同时进行。

作为依然另一个例子,nvm介质接口控制器以不同的方式将逻辑lun(以及块)映射到虚拟lun(以及物理lun),使得对逻辑lun的连续块的访问,被映射到不同的虚拟lun,从而进一步提升命令处理的并行性。

作为依然又一个例子,nvm介质接口控制器将访问逻辑lun内的连续块的命令映射到不同虚拟lun,或将访问多个逻辑lun的具有相同地址的块的命令映射到不同的虚拟lun。

如上所述,通过提供逻辑lun,由nvm命令处理单元依据逻辑lun号与块地址将命令分发给不同的线程。多个线程并行处理命令,增强了nvm接口控制器对nvm芯片访问的并行性。

实施例九

图11是根据本发明依然又一实施例的固态硬盘控制器的nvm接口控制器的框图。根据本发明的实施例,nvm接口控制器通过命令队列接收来自用户或上层系统的命令,命令中指示了要访问的lun和块。命令中所指示的lun是逻辑lun。在图11的实施例中,逻辑lun与物理lun具有相同的尺寸,而每个逻辑lun由一个物理lun提供。

在图11的实施例中,由耦合到不同ce扩展器的物理lun来组成逻辑lun,从而有利于访问相同逻辑lun的多个命令在多个物理lun上同时执行。参看图12,逻辑lun0到逻辑lun3分别由虚拟lun0到虚拟lun3的每个的物理lun0提供(分别记为物理lun0-0,物理lun1-0,物理lun2-0以及物理lun3-0,其中标记“a-b”中在前的a指示虚拟lun号,而在后的b指示虚拟lun中的物理lun编号),而逻辑lun4到逻辑lun7分别由虚拟lun0到虚拟lun3的每个的物理lun2提供(分别记为物理lun0-2,物理lun1-2,物理lun2-2以及物理lun3-2)。作为举例,每个nvm芯片提供两个物理lun,而nvm接口控制器将连续的多个逻辑lun映射到来自不同nvm芯片的物理lun是有利的,因为这能够降低当nvm芯片出现故障时,数据无法恢复的风险。以及将连续的多个逻辑lun映射到耦合到不同ce扩展器的nvm芯片物理页,使得访问连续多个逻辑lun的命令能被同时处理,而不会出现资源(诸如ce扩展器、物理lun等)冲突。

根据本发明的实施例,由nvm命令处理单元维护诸如图12的逻辑lun(以及块)到虚拟lun以及物理lun的映射关系。响应于从命令队列获取命令,命令处理单元依据命令中指示的逻辑lun编号,通过诸如图12所示的映射表得到提供所访问块的虚拟lun(或用于访问该虚拟lun的线程)以及物理lun,并指示关联于所访问的虚拟lun的线程10处理该命令。根据本发明的实施例,线程10对命令进行处理,线程10依据所访问的物理lun,通过设置(例如,执行set_ce微指令)ce扩展器来向提供物理lun的nvm芯片或目标提供有效的ce使能信号,并向物理lun发出nvm接口命令。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1