一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于NandFlashAIPR的命令预处理方法与流程

2022-11-30 09:21:24 来源:中国专利 TAG:

一种基于nand flash aipr的命令预处理方法
技术领域
1.本发明涉及芯片技术领域,具体涉及一种基于nand flash aipr的命令预处理方法。


背景技术:

2.通常,nand flash芯片也叫device/package,每个device包含一个或多个target,一个target由一个或多个lun组成,并且lun是nand flash独立执行命令的最小单元。一个lun可以拥有多个plane,每个plane由数百乃至数千个block构成,而且每个plane都有独立的page register和cache register,其中,page register能够缓存写入或读出nand flash的数据。因此,基于该nand flash结构,不仅可以实现多lun并行操作,而且同lun中不同plane的独立读操作也可以实现。
3.目前,ssd主要是通过命令 地址的方式对nand flash进行读、写、擦等操作,其中,地址信息包括target,lun,plane,block,page和column地址,常用的命令包含single plane(sp)read/write/erase,multiple plane(mp)read/write/erase和aipr。sp每次仅对一个lun中一个plane执行读操作;mp虽然能够对一个lun中多个plane执行操作,但是需要设置相同的page地址;aipr是一种灵活的mp read操作,可以对同lun中的多个plane的不同page进行独立读操作,相对mp read而言,它显著地提高了ssd的读速率。鉴于nand flash支持aipr技术的特点,通过对fw下发的命令进行预处理是提高ssd性能的有效方法。


技术实现要素:

4.有鉴于此,本发明的目的在于提出一种基于nand flash aipr的命令预处理方法,针对nand flash具有多lun并行机制以及支持aipr技术的优势,将fw下发的命令首先进行预处理,然后发送给硬件模块来控制nand flash进行相应操作。本发明的主要创新点在于提出了一种命令预排序方法,并介绍了一种实现流程,通过这种方法不仅节省了命令通道资源,而且提高了ssd的命令执行速率和数据通道利用率。
5.基于上述目的,一方面,本发明提供了一种基于nand flash aipr的命令预处理方法,该方法包括以下步骤:
6.根据fw下发的命令的类型和地址信息对命令进行预处理排序,并传输给硬件模块进行处理;
7.将排序后的命令依次发送给硬件模块,当硬件模块检测到continue number值大于1后,自动向nand flash发送开启aipr功能的命令,并将continue number标记的命令以一个命令组的形式发送给nand flash。
8.作为本发明的进一步方案,一个通道连接k个nand flash芯片,每个nand芯片包括l个target,每个target包含m个lun,每个lun拥有n个plane。
9.作为本发明的进一步方案,一个通道连接k个nand flash芯片中,k,l,m,n均是大于等于1的值,基于nand flash支持独立平面读取。
10.作为本发明的进一步方案,所述基于nand flash aipr的命令预处理方法,还包括预排序,预排序的步骤为:
11.检测该命令是否是mp read,若是mp read,则不进行排序处理,直接发送给硬件模块执行;
12.根据需求实时设置进行排序的命令条数p,每p条命令完成一次排序操作;
13.命令分类:sp read命令为read类型,sp/mp write和erase命令为非read类型;
14.获取fw发送的一条命令,若是read类型,则根据其target、lun和plane地址信息插入到相应的位置上,使相邻命令的地址符合aipr的要求或者满足多lun并行执行的要求;若非read类型,则按照它的target、lun地址插入到对应的位置上,使相邻命令的地址符合多lun并行执行的要求;
15.对于符合aipr要求的多个读命令,使用信号进行记录,用于硬件进行识别。
16.作为本发明的进一步方案,read类型的命令具有高优先级,将read类型的命令排在整个命令序列的前半部分,非read类型的命令具有低优先级,将非read类型的命令排在整个命令序列的后半部分。
17.作为本发明的进一步方案,相邻命令的地址符合aipr的要求时,target相同、lun相同、plane不同。
18.作为本发明的进一步方案,基于预排序原则,若每p条指令执行一次排序,对read类型命令(read指令)和非read类型命令(notread指令)进行排序,其中,read类型命令为read指令,非read类型命令为notread指令,包括以下步骤:
19.每条指令包含[target value][lun value][plane value][status[read/notread]];
[0020]
对于p条指令,先进行遍历,得到read指令条数[readnum],以及notread指令条数[p-readnum];
[0021]
创建两个string数组array_read和array_notread,长度分别为readnum和p-readnum,分别记录read指令和notread指令;
[0022]
对于array_read,创建check函数和insert函数;
[0023]
判断array_read数组中每个元素[target value][lun value]是否与前面所有指令相同,并调整array_read元素位置;
[0024]
创建check_new函数和insert_new函数;
[0025]
调用check_new函数,判断array_read数组中每个元素[target value][lun value][plane value]是否与前面所有指令相同,如果返回值小于当前数组下标,调用insert_new函数调整;
[0026]
计算(readnum-begin)/same_num=k,将begin 1开始的same_num-1个元素分别后移k,2k,...,(same_num-1)k;
[0027]
设置一个continue number和一个链表,链表的每个元素是一个二元组,分别是target-lun以及continue number,循环时如果指令下标为0或者下标的target-lun与前一个元素不同,就设置continue number=1,否则就设置continue number 1;
[0028]
对于array_notread数组,循环判断每个元素[target][lun]是否与前面所有指令相同,调用check函数,若返回值小于当前数组下标,则将该指令移动的array_notread最
后;
[0029]
根据实际格式需求,将array_read和array_notread数组以及continue number链表输出至硬件模块。
[0030]
作为本发明的进一步方案,check函数包含四个参数:数组、原下标、target和lun;check函数用于检查数组0~src位置之间的指令中与该条指令target和lun相同的指令位置,并返回相同指令在数组中的下标;
[0031]
insert函数包含三个参数:指令、原下标和目标下标;insert函数用于将数组中src位置的指令移动到dest位置,同时原数组中dest到src-1位置的所有指令后移一位。
[0032]
作为本发明的进一步方案,循环调用check函数,若check返回值等于当前数组下标,不进行调整;若check返回值小于当前数组下标,则调用insert函数调整array_read。
[0033]
作为本发明的进一步方案,判断array_read数组中相邻元素[target][lun][plane]相同的个数,通过一个链表输出相邻元素相同的开始下标begin以及相同元素个数same_num。
[0034]
本发明的再一方面,还提供了一种计算机可读存储介质,存储有计算机程序指令,该计算机程序指令被执行时实现上述任一项根据本发明的基于nand flash aipr的命令预处理方法。
[0035]
本发明的又一方面,还提供了一种计算机设备,包括存储器和处理器,该存储器中存储有计算机程序,该计算机程序被处理器执行时执行上述任一项根据本发明的基于nand flash aipr的命令预处理方法。
[0036]
本发明的另一方面,还提供了一种根据上述任一项根据本发明的基于nand flash aipr的命令预处理方法进行流量控制的芯片,其中所述芯片的架构中具有cpu复位向量寄存器、cpu释放控制管脚、cpu释放控制寄存器、调试接口,其中,
[0037]
所述cpu复位向量寄存器用于控制cpu释放后读取并执行的指令的地址;
[0038]
所述cpu释放控制寄存器用于控制芯片上电时的cpu释放;
[0039]
所述cpu释放控制管脚用于控制所述cpu释放控制寄存器的有效性;
[0040]
所述调试接口用于读写片上ram和各寄存器以执行芯片的流量控制。
[0041]
本发明至少具有以下有益技术效果:
[0042]
本发明提出了一种基于nand flash aipr的命令预处理方法,将sp read命令进行预排序处理,使得多条同target同lun不同plane的sp read命令能够以一条命令组的形式发送给nand,不仅节省了命令通道资源,而且提高了读速率。
[0043]
另一方面,本发明对上述非read类型命令进行预排序处理后,相邻命令的lun地址大概率保持不同,使发送给硬件模块的命令尽可能满足多lun并行执行的要求,从而提高命令执行的速率,进一步提高ssd性能。
[0044]
本技术的这些方面或其他方面在以下实施例的描述中会更加简明易懂。应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本技术。
附图说明
[0045]
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本
发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的实施例。
[0046]
在图中:
[0047]
图1示出了根据本发明的基于nand flash aipr的命令预处理方法中device结构示意图;
[0048]
图2示出了根据本发明的基于nand flash aipr的命令预处理方法的流程图;
[0049]
图3示出了根据本发明的实现基于nand flash aipr的命令预处理方法的计算机可读存储介质的实施例的示意图;
[0050]
图4示出了根据本发明的实现基于nand flash aipr的命令预处理方法的计算机设备的实施例的硬件结构示意图;
[0051]
图5示出了根据本发明的芯片的实施例的框架的示意图。
具体实施方式
[0052]
为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明实施例进一步详细说明。
[0053]
需要说明的是,本发明实施例中所有使用“第一”和“第二”的表述均是为了区分两个相同名称的非相同的实体或者非相同的参量,可见“第一”“第二”仅为了表述的方便,不应理解为对本发明实施例的限定。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备固有的其他步骤或单元。
[0054]
为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明实施例进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本技术,并不用于限定本技术。
[0055]
下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
[0056]
附图中所示的流程图仅是示例说明,不是必须包括所有的内容和操作/步骤,也不是必须按所描述的顺序执行。例如,有的操作/步骤还可以分解、组合或部分合并,因此实际执行的顺序有可能根据实际情况改变。
[0057]
下面结合附图,对本技术的一些实施方式作详细说明。在不冲突的情况下,下述的实施例及实施例中的特征可以相互组合。
[0058]
由于目前,ssd主要是通过命令 地址的方式对nand flash进行读、写、擦等操作,其中,地址信息包括target,lun,plane,block,page和column地址,常用的命令包含single plane(sp)read/write/erase,multiple plane(mp)read/write/erase和aipr。sp每次仅对一个lun中一个plane执行读操作;mp虽然能够对一个lun中多个plane执行操作,但是需要设置相同的page地址;aipr是一种灵活的mp read操作,可以对同lun中的多个plane的不同page进行独立读操作,相对mp read而言,它显著地提高了ssd的读速率。鉴于nand flash支持aipr技术的特点,通过对fw下发的命令进行预处理是提高ssd性能的有效方法。
[0059]
在ssd中,对于fw下发的命令通常会依次传输给硬件模块进行处理。一方面,sp read命令会单独占用一个命令通道,控制nand flash执行读操作,这种方式在很大程度上造成命令通道资源的浪费;另外,如果相邻两个sp read命令的地址信息是相同target相同lun不同plane,那么第二个sp read命令需要等待第一个sp read命令执行结束后才能开始执行,增大了read延时。
[0060]
鉴于此,本发明的实施例提供了一种基于nand flash aipr的命令预处理方法,将sp read命令进行预排序处理,使得多条同target同lun不同plane的sp read命令能够以一条命令组的形式发送给nand,不仅节省了命令通道资源,而且提高了读速率。
[0061]
另一方面,本发明对非read类型命令进行预排序处理后,相邻命令的lun地址大概率保持不同,使发送给硬件模块的命令尽可能满足多lun并行执行的要求,从而提高命令执行的速率,进一步提高ssd性能。
[0062]
在本发明的一些实施例中,参见图1和图2所示,提供了一种基于nand flash aipr的命令预处理方法,包括以下步骤:
[0063]
步骤s10、根据fw下发的命令的类型和地址信息对命令进行预处理排序,并传输给硬件模块进行处理;
[0064]
步骤s20、将排序后的命令依次发送给硬件模块,当硬件模块检测到continue number值大于1后,自动向nand flash发送开启aipr功能的命令,并将continue number标记的命令以一个命令组的形式发送给nand flash。
[0065]
在本实施例中,一个通道连接k个nand flash芯片(device),如图1所示,每个nand芯片包括l个target,每个target包含m个lun,每个lun拥有n个plane,其中,k,l,m,n均是大于等于1的值。鉴于nand flash可以支持独立平面读取(aipr)技术,在本发明中首先根据fw下发的命令的类型和地址信息对命令进行预处理,然后传输给硬件模块进行处理。
[0066]
在本发明的一些实施例中,所述基于nand flash aipr的命令预处理方法,还包括预排序,预排序的步骤为:
[0067]
(1)首先检测该命令是否是mp read,如果是mp read,则不进行排序处理,直接发送给硬件模块执行。
[0068]
(2)根据需求实时设置进行排序的命令条数p,每p条命令完成一次排序操作。
[0069]
(3)命令分类:sp read命令为read类型,sp/mp write和erase命令为非read类型。read类型的命令具有高优先级,将其排在整个命令序列的前半部分,非read类型的命令具有低优先级,将其排在整个命令序列的后半部分。
[0070]
(4)对于fw发送的一条命令,如果是read类型,则根据它的target、lun和plane地址信息插入到相应的位置上,使相邻命令的地址符合aipr的要求(target相同、lun相同、plane不同)或者满足多lun并行执行的要求;如果是非read类型,则按照它的target、lun地址插入到对应的位置上,使相邻命令的地址符合多lun并行执行的要求。
[0071]
(5)对于符合aipr要求的多个读命令,使用信号(continue number)进行记录,便于硬件进行识别。
[0072]
在本发明的实施例中,将排序后的命令依次发送给硬件模块,当硬件模块检测到continue number值大于1后,自动向nand flash发送开启aipr功能的命令,并将continue number标记的命令以一个命令组的形式发送给nand flash。
[0073]
按照上述的预排序原则,假设每p条指令执行一次排序,对read类型命令(read指令)和非read类型命令(notread指令)进行排序的具体步骤如下:
[0074]
(1)每条指令包含[target value][lun value][plane value][status[read/notread]];
[0075]
(2)对于p条指令,先进行遍历,得到read指令条数[readnum],以及notread指令条数[p-readnum];
[0076]
(3)创建两个string数组array_read和array_notread,长度分别为readnum和p-readnum,分别记录read指令和notread指令;
[0077]
(4)对于array_read,创建check函数和insert函数:
[0078]
check函数包含四个参数(array_read,src,target value,lun value),分别是数组,原下标,target,和lun。check函数的作用是检查数组0~src位置之间的指令中与该条指令target和lun相同的指令位置,并返回相同指令在数组中的下标。
[0079]
insert函数包含三个参数(instruct,src,dest),分别是指令、原下标和目标下标,insert函数的作用是将数组中src位置的指令移动到dest位置,同时原数组中dest到src-1位置的所有指令后移一位。
[0080]
(5)判断array_read数组中每个元素[target value][lun value]是否与前面所有指令相同。循环调用check函数,若check返回值等于当前数组下标,不进行调整;若check返回值小于当前数组下标,则调用insert函数调整array_read。
[0081]
(6)创建check_new函数和insert_new函数,原理与上述check和insert函数相同。
[0082]
(7)调用check_new函数,判断array_read数组中每个元素[target value][lun value][plane value]是否与前面所有指令相同,如果返回值小于当前数组下标,调用insert_new函数调整。
[0083]
判断array_read数组中相邻元素[target][lun][plane]相同的个数,通过一个链表输出相邻元素相同的开始下标begin以及相同元素个数same_num。这是循环操作。
[0084]
(8)计算(readnum-begin)/same_num=k,将begin 1开始的same_num-1个元素分别后移k,2k,...,(same_num-1)k,注意若要移动的目标位置的指令与前一个位置指令的[target][lun]相同,则再后移一位,直至不相同。
[0085]
(9)设置一个continue number和一个链表,链表的每个元素是一个二元组,分别是target-lun以及continue number,循环时如果指令下标为0或者下标的target-lun与前一个元素不同,就设置continue number=1,否则就设置continue number 1。
[0086]
(10)对于array_notread数组,循环判断每个元素[target][lun]是否与前面所有指令相同,调用check函数,若返回值小于当前数组下标,则将该指令移动的array_notread最后。
[0087]
(11)根据实际格式需求,将array_read和array_notread数组以及continue number链表输出至硬件模块,使硬件模块便于进行处理。
[0088]
相对于现有技术在ssd中,对于fw下发的命令通常会依次传输给硬件模块进行处理。一方面,sp read命令会单独占用一个命令通道,控制nand flash执行读操作,这种方式在很大程度上造成命令通道资源的浪费;另外,如果相邻两个sp read命令的地址信息是相同target相同lun不同plane,那么第二个sp read命令需要等待第一个sp read命令执行结
束后才能开始执行,增大了read延时。
[0089]
本发明将sp read命令进行预排序处理,使得多条同target同lun不同plane的sp read命令能够以一条命令组的形式发送给nand,不仅节省了命令通道资源,而且提高了读速率。
[0090]
另一方面,本发明对上述非read类型命令进行预排序处理后,相邻命令的lun地址大概率保持不同,使发送给硬件模块的命令尽可能满足多lun并行执行的要求,从而提高命令执行的速率,进一步提高ssd性能。
[0091]
应该理解的是,上述虽然是按照某一顺序描述的,但是这些步骤并不是必然按照上述顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,本实施例的一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
[0092]
本发明实施例的第二个方面,还提供了一种计算机设备400,包括存储器420和处理器410,该存储器中存储有计算机程序,该计算机程序被该处理器执行时实现上述任意一项实施例的方法,包括以下步骤:
[0093]
根据fw下发的命令的类型和地址信息对命令进行预处理排序,并传输给硬件模块进行处理;
[0094]
将排序后的命令依次发送给硬件模块,当硬件模块检测到continue number值大于1后,自动向nand flash发送开启aipr功能的命令,并将continue number标记的命令以一个命令组的形式发送给nand flash。
[0095]
其中,所述基于nand flash aipr的命令预处理方法,还包括预排序,预排序的步骤为:
[0096]
(1)首先检测该命令是否是mp read,如果是mp read,则不进行排序处理,直接发送给硬件模块执行。
[0097]
(2)根据需求实时设置进行排序的命令条数p,每p条命令完成一次排序操作。
[0098]
(3)命令分类:sp read命令为read类型,sp/mp write和erase命令为非read类型。read类型的命令具有高优先级,将其排在整个命令序列的前半部分,非read类型的命令具有低优先级,将其排在整个命令序列的后半部分。
[0099]
(4)对于fw发送的一条命令,如果是read类型,则根据它的target、lun和plane地址信息插入到相应的位置上,使相邻命令的地址符合aipr的要求(target相同、lun相同、plane不同)或者满足多lun并行执行的要求;如果是非read类型,则按照它的target、lun地址插入到对应的位置上,使相邻命令的地址符合多lun并行执行的要求。
[0100]
(5)对于符合aipr要求的多个读命令,使用信号(continue number)进行记录,便于硬件进行识别。
[0101]
按照上述的预排序原则,假设每p条指令执行一次排序,对read类型命令(read指令)和非read类型命令(notread指令)进行排序的具体步骤如下:
[0102]
(1)每条指令包含[target value][lun value][plane value][status[read/notread]];
[0103]
(2)对于p条指令,先进行遍历,得到read指令条数[readnum],以及notread指令条数[p-readnum];
[0104]
(3)创建两个string数组array_read和array_notread,长度分别为readnum和p-readnum,分别记录read指令和notread指令;
[0105]
(4)对于array_read,创建check函数和insert函数:
[0106]
check函数包含四个参数(array_read,src,target value,lun value),分别是数组,原下标,target,和lun。check函数的作用是检查数组0~src位置之间的指令中与该条指令target和lun相同的指令位置,并返回相同指令在数组中的下标。
[0107]
insert函数包含三个参数(instruct,src,dest),分别是指令、原下标和目标下标,insert函数的作用是将数组中src位置的指令移动到dest位置,同时原数组中dest到src-1位置的所有指令后移一位。
[0108]
(5)判断array_read数组中每个元素[target value][lun value]是否与前面所有指令相同。循环调用check函数,若check返回值等于当前数组下标,不进行调整;若check返回值小于当前数组下标,则调用insert函数调整array_read。
[0109]
(6)创建check_new函数和insert_new函数,原理与上述check和insert函数相同。
[0110]
(7)调用check_new函数,判断array_read数组中每个元素[target value][lun value][plane value]是否与前面所有指令相同,如果返回值小于当前数组下标,调用insert_new函数调整。
[0111]
判断array_read数组中相邻元素[target][lun][plane]相同的个数,通过一个链表输出相邻元素相同的开始下标begin以及相同元素个数same_num。这是循环操作。
[0112]
(8)计算(readnum-begin)/same_num=k,将begin 1开始的same_num-1个元素分别后移k,2k,...,(same_num-1)k,注意若要移动的目标位置的指令与前一个位置指令的[target][lun]相同,则再后移一位,直至不相同。
[0113]
(9)设置一个continue number和一个链表,链表的每个元素是一个二元组,分别是target-lun以及continue number,循环时如果指令下标为0或者下标的target-lun与前一个元素不同,就设置continue number=1,否则就设置continue number 1。
[0114]
(10)对于array_notread数组,循环判断每个元素[target][lun]是否与前面所有指令相同,调用check函数,若返回值小于当前数组下标,则将该指令移动的array_notread最后。
[0115]
(11)根据实际格式需求,将array_read和array_notread数组以及continue number链表输出至硬件模块,使硬件模块便于进行处理。
[0116]
如图4所示,为本发明提供的执行基于nand flash aipr的命令预处理方法的计算机设备的一个实施例的硬件结构示意图。以如图4所示的计算机设备400为例,在该计算机设备中包括一个处理器410以及一个存储器420,并还可以包括:输入装置430和输出装置440。处理器410、存储器420、输入装置430和输出装置440可以通过总线或者其他方式连接,图4中以通过总线连接为例。输入装置430可接收输入的数字或字符信息,以及产生与基于nand flash aipr的命令预处理有关的信号输入。输出装置440可包括显示屏等显示设备。
[0117]
存储器420作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块,如本技术实施例中的基于nand flash aipr的命
令预处理方法对应的程序指令/模块。存储器420可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储基于nand flash aipr的命令预处理方法的使用所创建的数据等。此外,存储器420可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器420可选包括相对于处理器410远程设置的存储器,这些远程存储器可以通过网络连接至本地模块。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
[0118]
处理器410通过运行存储在存储器420中的非易失性软件程序、指令以及模块,从而执行服务器的各种功能应用以及数据处理,即实现上述方法实施例的基于nand flash aipr的命令预处理方法,步骤以下步骤:
[0119]
根据fw下发的命令的类型和地址信息对命令进行预处理排序,并传输给硬件模块进行处理;
[0120]
将排序后的命令依次发送给硬件模块,当硬件模块检测到continue number值大于1后,自动向nand flash发送开启aipr功能的命令,并将continue number标记的命令以一个命令组的形式发送给nand flash。
[0121]
其中,所述基于nand flash aipr的命令预处理方法,还包括预排序,预排序的步骤为:
[0122]
(1)首先检测该命令是否是mp read,如果是mp read,则不进行排序处理,直接发送给硬件模块执行。
[0123]
(2)根据需求实时设置进行排序的命令条数p,每p条命令完成一次排序操作。
[0124]
(3)命令分类:sp read命令为read类型,sp/mp write和erase命令为非read类型。read类型的命令具有高优先级,将其排在整个命令序列的前半部分,非read类型的命令具有低优先级,将其排在整个命令序列的后半部分。
[0125]
(4)对于fw发送的一条命令,如果是read类型,则根据它的target、lun和plane地址信息插入到相应的位置上,使相邻命令的地址符合aipr的要求(target相同、lun相同、plane不同)或者满足多lun并行执行的要求;如果是非read类型,则按照它的target、lun地址插入到对应的位置上,使相邻命令的地址符合多lun并行执行的要求。
[0126]
(5)对于符合aipr要求的多个读命令,使用信号(continue number)进行记录,便于硬件进行识别。
[0127]
按照上述的预排序原则,假设每p条指令执行一次排序,对read类型命令(read指令)和非read类型命令(notread指令)进行排序的具体步骤如下:
[0128]
(1)每条指令包含[target value][lun value][plane value][status[read/notread]];
[0129]
(2)对于p条指令,先进行遍历,得到read指令条数[readnum],以及notread指令条数[p-readnum];
[0130]
(3)创建两个string数组array_read和array_notread,长度分别为readnum和p-readnum,分别记录read指令和notread指令;
[0131]
(4)对于array_read,创建check函数和insert函数:
[0132]
check函数包含四个参数(array_read,src,target value,lun value),分别是数
组,原下标,target,和lun。check函数的作用是检查数组0~src位置之间的指令中与该条指令target和lun相同的指令位置,并返回相同指令在数组中的下标。
[0133]
insert函数包含三个参数(instruct,src,dest),分别是指令、原下标和目标下标,insert函数的作用是将数组中src位置的指令移动到dest位置,同时原数组中dest到src-1位置的所有指令后移一位。
[0134]
(5)判断array_read数组中每个元素[target value][lun value]是否与前面所有指令相同。循环调用check函数,若check返回值等于当前数组下标,不进行调整;若check返回值小于当前数组下标,则调用insert函数调整array_read。
[0135]
(6)创建check_new函数和insert_new函数,原理与上述check和insert函数相同。
[0136]
(7)调用check_new函数,判断array_read数组中每个元素[target value][lun value][plane value]是否与前面所有指令相同,如果返回值小于当前数组下标,调用insert_new函数调整。
[0137]
判断array_read数组中相邻元素[target][lun][plane]相同的个数,通过一个链表输出相邻元素相同的开始下标begin以及相同元素个数same_num。这是循环操作。
[0138]
(8)计算(readnum-begin)/same_num=k,将begin 1开始的same_num-1个元素分别后移k,2k,...,(same_num-1)k,注意若要移动的目标位置的指令与前一个位置指令的[target][lun]相同,则再后移一位,直至不相同。
[0139]
(9)设置一个continue number和一个链表,链表的每个元素是一个二元组,分别是target-lun以及continue number,循环时如果指令下标为0或者下标的target-lun与前一个元素不同,就设置continue number=1,否则就设置continue number 1。
[0140]
(10)对于array_notread数组,循环判断每个元素[target][lun]是否与前面所有指令相同,调用check函数,若返回值小于当前数组下标,则将该指令移动的array_notread最后。
[0141]
(11)根据实际格式需求,将array_read和array_notread数组以及continue number链表输出至硬件模块,使硬件模块便于进行处理。
[0142]
本发明实施例的第三个方面,还提供了一种根据上述任一项根据本发明的基于nand flash aipr的命令预处理方法进行流量控制的芯片500。图5示出了根据本发明的芯片500的框架的示意图。如图5所示,在该实施例中,芯片500的架构中具有cpu复位向量寄存器510、cpu释放控制管脚520、cpu释放控制寄存器530、调试接口540,其中
[0143]
所述cpu复位向量寄存器510用于控制cpu释放后读取并执行的指令的地址;
[0144]
所述cpu释放控制寄存器520用于控制芯片500上电时的cpu释放;
[0145]
所述cpu释放控制管脚530用于控制所述cpu释放控制寄存器520的有效性;
[0146]
所述调试接口540用于读写片上ram和各寄存器以执行芯片的流量控制。
[0147]
本领域技术人员还将明白的是,结合这里的公开所描述的各种示例性逻辑块、模块、电路和算法步骤可以被实现为电子硬件、计算机软件或两者的组合。为了清楚地说明硬件和软件的这种可互换性,已经就各种示意性组件、方块、模块、电路和步骤的功能对其进行了一般性的描述。这种功能是被实现为软件还是被实现为硬件取决于具体应用以及施加给整个系统的设计约束。本领域技术人员可以针对每种具体应用以各种方式来实现的功能,但是这种实现决定不应被解释为导致脱离本发明实施例公开的范围。
[0148]
最后需要说明的是,本文的计算机可读存储介质(例如,存储器)可以是易失性存储器或非易失性存储器,或者可以包括易失性存储器和非易失性存储器两者。作为例子而非限制性的,非易失性存储器可以包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦写可编程rom(eeprom)或快闪存储器。易失性存储器可以包括随机存取存储器(ram),该ram可以充当外部高速缓存存储器。作为例子而非限制性的,ram可以以多种形式获得,比如同步ram(dram)、动态ram(dram)、同步dram(sdram)、双数据速率sdram(ddr sdram)、增强sdram(esdram)、同步链路dram(sldram)、以及直接rambus ram(drram)。所公开的方面的存储设备意在包括但不限于这些和其它合适类型的存储器。
[0149]
结合这里的公开所描述的各种示例性逻辑块、模块和电路可以利用被设计成用于执行这里功能的下列部件来实现或执行:通用处理器、数字信号处理器(dsp)、专用集成电路(asic)、现场可编程门阵列(fpga)或其它可编程逻辑器件、分立门或晶体管逻辑、分立的硬件组件或者这些部件的任何组合。通用处理器可以是微处理器,但是可替换地,处理器可以是任何传统处理器、控制器、微控制器或状态机。处理器也可以被实现为计算设备的组合,例如,dsp和微处理器的组合、多个微处理器、一个或多个微处理器结合dsp和/或任何其它这种配置。
[0150]
本发明提出了一种基于nand flash aipr的命令预处理方法,使用一个硬件看门狗实现多个子系统的监控,节约成本实现方便;在系统异常reset前向主机发送通知,要求主机端停止与板卡固件的通信,防止板卡固件重启导致主机端异常,减少异常的扩散,提高主机端的稳定性;可以实现将核心数据自动转储到主机侧,方便分析定位问题;支持在主机端主动触发核心数据的生成并导出,有利于开发人员分析系统运行状态。
[0151]
以上是本发明公开的示例性实施例,但是应当注意,在不背离权利要求限定的本发明实施例公开的范围的前提下,可以进行多种改变和修改。根据这里描述的公开实施例的方法权利要求的功能、步骤和/或动作不需以任何特定顺序执行。此外,尽管本发明实施例公开的元素可以以个体形式描述或要求,但除非明确限制为单数,也可以理解为多个。
[0152]
应当理解的是,在本文中使用的,除非上下文清楚地支持例外情况,单数形式“一个”旨在也包括复数形式。还应当理解的是,在本文中使用的“和/或”是指包括一个或者一个以上相关联地列出的项目的任意和所有可能组合。上述本发明实施例公开实施例序号仅仅为了描述,不代表实施例的优劣。
[0153]
所属领域的普通技术人员应当理解:以上任何实施例的讨论仅为示例性的,并非旨在暗示本发明实施例公开的范围(包括权利要求)被限于这些例子;在本发明实施例的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,并存在如上的本发明实施例的不同方面的许多其它变化,为了简明它们没有在细节中提供。因此,凡在本发明实施例的精神和原则之内,所做的任何省略、修改、等同替换、改进等,均应包含在本发明实施例的保护范围之内。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献