存储数据的方法、存储控制器和芯片与流程

文档序号:21406932发布日期:2020-07-07 14:41阅读:294来源:国知局
存储数据的方法、存储控制器和芯片与流程

本申请涉及数据处理领域,并且更具体地涉及存储数据的方法、存储控制器和芯片。



背景技术:

通常,芯片内的数据存储区被划分为n个存储容量(例如32字节、64字节等)相等的存储单元,每个存储单元对应一个地址。对于数据报文长度为(s+1)字节的报文(其中s为定长的存储单元的大小),这种使用定长的存储单元的存储方式需要2个存储单元才能存储该报文,存储空间利用率低。



技术实现要素:

本申请提供存储数据的方法、存储控制器和芯片,能够提高数据存储区的利用率。

第一方面,本申请提供了一种存储数据的方法,该方法包括:该存储控制器获取待存储的数据报文的大小;在该待存储的数据报文的大小小于或者等于单位存储容量的情况下,该存储控制器确定存储该待存储的数据报文的目标地址,该目标地址对应的存储容量被完全占用时能够存储n个大小小于或者等于单位存储容量的数据报文,该单位存储容量为一个地址对应的存储容量的1/n,n为大于或者等于2的整数。

在上述技术方案中,存储控制器可以将多个大小较小的数据报文存储在同一个地址下,这样相较于每个数据报文占用一个地址,可以提高数据存储区的利用率。

在一种可能的实现方式中,该存储控制器确定存储该待存储的数据报文的目标地址,包括:该存储控制器读取地址记录寄存器,该地址记录寄存器用于存储第一地址,该第一地址下已经存储m个大小小于或者等于该单位存储容量的数据报文,m为大于或者等于1且小于n的整数;当读取到该第一地址时,该存储控制器确定该目标地址为该第一地址;当未读取到该第一地址时,该存储控制器确定该目标地址为第二地址,该第二地址下未存储任何数据报文。

在上述技术方案中,存储控制器设置地址记录寄存器,并把已经存储过至少一个较小的数据报文的地址记录在该地址记录寄存器中。在该地址记录寄存器中有地址时,在该地址记录寄存器中没有地址时才重新分配地址,这样可以将数据报文重复写入地址记录寄存器中的地址,提高数据存储区的利用率。

在一种可能的实现方式中,在该存储控制器确定存储该待存储的数据报文的目标地址之后,该方法还包括:在该存储控制器确定该目标地址为该第一地址的情况下,该存储控制器记录该第一地址的存储状态为第一存储状态,该第一存储状态指示该第一地址下存储m+1个数据报文;当m+1=n时,该存储控制器将该第一地址从该地址记录寄存器中释放。

在上述技术方案中,存储控制器记录地址记录寄存器中的地址下已经存储的数据报文的个数,存储控制器不断将大小较小的数据报文写入该地址,直到达到该地址支持存储的数据报文的最大次数。这样可以充分利用该地址对应的存储单元,提高数据存储区的利用率。

在一种可能的实现方式中,在该存储控制器确定存储该待存储的数据报文的目标地址之后,该方法还包括:在该存储控制器确定该目标地址为该第二地址的情况下,该存储控制器记录该第二地址的存储状态为第二存储状态,该第二存储状态指示该第二地址下存储一个数据报文;该存储控制器将该第二地址记录在该地址记录寄存器中。

在上述技术方案中,当地址记录寄存器中没有地址时,存储控制器将新分配给待存储的数据报文的地址记录在该地址记录寄存器中。这样在不断有大小较小的数据报文到来时,可以不断进行数据报文的拼接存储,提供数据存储区的利用率。

在一种可能的实现方式中,该方法还包括:在接收到针对该目标地址的读取请求后,在该目标地址的存储状态指示的该目标地址下存储的数据报文的个数等于该目标地址已经被读取的次数k与1之和时,该存储控制器回收该目标地址,并且记录该目标地址未被读取过。

在一种可能的实现方式中,该方法还包括:在接收到针对该目标地址的读取请求后,在该目标地址的存储状态指示的该目标地址下存储的数据报文的个数大于该目标地址已经被读取的次数k与1之和,该存储控制器记录该目标地址已经被访问过k+1次。

第二方面,本申请提供一种存储控制器,该存储控制器包括:解析模块,用于获取待存储的数据报文的大小;处理模块,用于在该待存储的数据报文的大小小于或者等于单位存储容量的情况下,确定存储该待存储的数据报文的目标地址,该目标地址对应的存储容量被完全占用时能够存储n个大小小于或者等于单位存储容量的数据报文,该单位存储容量为一个地址对应的存储容量的1/n,n为大于或者等于2的整数。

在上述技术方案中,存储控制器可以将多个大小较小的数据报文存储在同一个地址下,这样相较于每个数据报文占用一个地址,可以提高数据存储区的利用率。

在一种可能的实现方式中,该处理模块具体用于:读取地址记录寄存器,该地址记录寄存器用于存储第一地址,该第一地址下已经存储m个大小小于或者等于该单位存储容量的数据报文,m为大于或者等于1且小于n的整数;当读取到该第一地址时,确定该目标地址为该第一地址;当未读取到该第一地址时,确定该目标地址为第二地址,该第二地址下未存储任何数据报文。

在上述技术方案中,存储控制器设置地址记录寄存器,并把已经存储过至少一个较小的数据报文的地址记录在该地址记录寄存器中。在该地址记录寄存器中有地址时,在该地址记录寄存器中没有地址时才重新分配地址,这样可以将数据报文重复写入地址记录寄存器中的地址,提高数据存储区的利用率。

在一种可能的实现方式中,该处理模块还用于:在确定该目标地址为该第一地址的情况下,记录该第一地址的存储状态为第一存储状态,该第一存储状态指示该第一地址下存储m+1个数据报文;当m+1=n时,将该第一地址从该地址记录寄存器中释放。

在上述技术方案中,存储控制器记录地址记录寄存器中的地址下已经存储的数据报文的个数,存储控制器不断将大小较小的数据报文写入该地址,直到达到该地址支持存储的数据报文的最大次数。这样可以充分利用该地址对应的存储单元,提高数据存储区的利用率。

在一种可能的实现方式中,该处理模块还用于:在确定该目标地址为该第二地址的情况下,记录该第二地址的存储状态为第二存储状态,该第二存储状态指示该第二地址下存储一个数据报文;将该第二地址记录在该地址记录寄存器中。

在上述技术方案中,当地址记录寄存器中没有地址时,存储控制器将新分配给待存储的数据报文的地址记录在该地址记录寄存器中。这样在不断有大小较小的数据报文到来时,可以不断进行数据报文的拼接存储,提供数据存储区的利用率。

在一种可能的实现方式中,该处理模块还用于:在接收到针对该目标地址的读取请求后,在该目标地址的存储状态指示的该目标地址下存储的数据报文的个数等于该目标地址已经被读取的次数k与1之和时,回收该目标地址,并且记录该目标地址未被读取过。

在一种可能的实现方式中,该处理模块还用于:在接收到针对该目标地址的读取请求后,在该目标地址的存储状态指示的该目标地址下存储的数据报文的个数大于该目标地址已经被读取的次数k与1之和,记录该目标地址已经被访问过k+1次。

第三方面,本申请提供一种芯片,该芯片包括如第二面或第二方面的任意一种可能的实现方式所述的存储控制器。

第四方面,本申请提供一种存储介质,该存储介质包括多个大小相同的存储单元,每个该存储单元对应一个存储地址,该存储单元包括n个子存储单元,该n个子存储单元的存储容量相同,n为大于或者等于2的整数,该存储介质支持存储控制器执行如第一方面或第一方面的任意一种可能的实现方式所述的方法。

第五方面,本申请提供一种存储系统,包括如第二面或第二方面的任意一种可能的实现方式所述的存储控制器。

附图说明

图1是可以应用本申请实施例的方法的存储系统的示意图。

图2是是本申请实施例的数据存储区102的示意性结构图。

图3是本申请实施例的存储数据的方法的示意性流程图。

图4是本申请实施例的存储控制器的示意性结构图。

图5是本申请实施例的存储系统的示意图。

具体实施方式

下面将结合附图,对本申请中的技术方案进行描述。

图1是可以应用本申请实施例的方法的存储系统的示意性结构图。如图1所示,存储系统100至少包括存储控制器101、数据存储区102、存储状态表103和读取状态表104。

存储控制器101用于为待存储的数据报文分配存储地址和在数据报文不再占用存储地址时对存储地址进行回收。

数据存储区102用于为待存储的数据提供存储空间。数据存储区102被平均划分成多个存储单元,每个存储单元对应一个地址。本申请实施例的数据存储区102的每个存储单元又被平均划分为n个部分,每个存储单元的n个部分共用同存储单元的地址,n为大于或者等于2的整数。

应理解,存储状态表103和读取状态表104可以存储在存储控制器中,也可以存储在可以被存储控制器读写的其他任意区域,本申请实施例对此不作具体限定。

图2是本申请实施例的数据存储区102的示意性结构图。如图2所示,数据存储区102的存储单元在物理上按位宽均匀拆分为上存储单元和下存储单元。从控制平面的角度看,上存储单元和下存储单元拼位宽,共同为同一个存储单元提供存储空间;从数据平面角度看,上存储单元存储空间和下存储单元的存储空间可以独立读写。

一个数据报文可以按照顺序写入上存储单元和下存储单元。可选地,一个数据报文可以先写入上存储单元,剩余部分在写入下存储单元。应理解,上存储单元和下存储单元中的上、下仅为描述方便,并不将数据存储区102的存储单元的划分形式限定为上下划分,存储单元的划分还可以是任意其他可能的方式。

还应理解,图2仅以存储单元被划分为两个部分为例,存储单元还可以被划分为更多的部分。

图3是本申请实施例的存储数据的方法的示意性流程图。图3所示的方法可以由存储控制器执行。图3所示的方法包括以下内容的至少部分内容。

在310中,存储控制器获取待存储的数据报文的大小。

可选地,存储控制器可以获取每一个待存储的数据报文的大小。

可选地,当每个数据流的大小可知时,存储控制器也可以仅获取每个数据流的最后一个数据报文的大小。

在320中,在该待存储的数据报文的大小小于或者等于单位存储容量的情况下,该存储控制器确定存储该待存储的数据报文的目标地址,该目标地址对应的存储容量被完全占用时能够存储n个大小小于或者等于单位存储容量的数据报文,该单位存储容量为一个地址对应的存储容量的1/n,n为大于或者等于2的整数。

应理解,每个地址会对应一个存储单元,一个地址对应的存储容量即为该地址对应的存储单元的存储容量。

通常一个数据流会被分成大小相同的多个数据报文依次发送。由于数据流的长度并不是固定的,因此可能会出现数据流的最后一个数据报文的大小可能会小于正常数据报文的大小。这样对于大小小于正常数据报文的大小的数据报文来说,可以为几个数据报文分配同一个地址,使得该几个数据报文占用一个存储单元。在上述技术方案中,存储控制器可以将多个大小较小的数据报文存储在同一个地址下,这样相较于每个数据报文占用一个地址,可以提高数据存储区的利用率。

在一些实施例中,存储控制器中设置有一个地址记录寄存器,其中记录着一个或者多个已经存储了m个大小小于或者等于该单位存储容量的数据报文的第一地址,m为大于或者等于1且小于n的整数。

当存储控制器获取的待存储的数据报文的大小小于或者等于单位存储容量时,存储控制器读取地址记录寄存器。当读取到第一地址时,存储控制器确定该目标地址为该第一地址,也就是说存储控制器将第一地址分配给待存储的数据报文。当未读取到第一地址时,存储控制器确定该目标地址为第二地址,第二地址下未存储任何数据报文,也就是说存储控制器为待存储的数据报文分配一个新的地址。

在上述技术方案中,存储控制器设置地址记录寄存器,并把已经存储过至少一个较小的数据报文的地址记录在该地址记录寄存器中。在该地址记录寄存器中有地址时,在该地址记录寄存器中没有地址时才重新分配地址,这样可以将数据报文重复写入地址记录寄存器中的地址,提高数据存储区的利用率。

在存储控制器确定存储待存储的数据报文的目标地址之后,存储控制器记录目标地址的存储状态。具体地,可以设置存储状态表,该表中记录每个地址中已经存储的数据报文的个数。也就是说为每个地址记录一个存储状态,存储状态表的表项深度为地址的个数。

在一些实施例中,在存储控制器确定目标地址为第一地址的情况下,存储控制器记录第一地址的存储状态为第一存储状态,第一存储状态指示第一地址下存储m+1个数据报文。

当m+1=n即第一地址下存储的数据报文的个数已经达到最大个数时,存储控制器将第一地址从地址记录寄存器中释放。

在上述技术方案中,存储控制器记录地址记录寄存器中的地址下已经存储的数据报文的个数,存储控制器不断将大小较小的数据报文写入该地址,直到达到该地址支持存储的数据报文的最大次数。这样可以充分利用该地址对应的存储单元,提高数据存储区的利用率。

在另一些实施例中,在存储控制器确定目标地址为第二地址的情况下,存储控制器记录第二地址的存储状态为第二存储状态,第二存储状态指示第二地址下存储一个数据报文。此时,存储控制器将该第二地址记录在地址记录寄存器中。

在上述技术方案中,当地址记录寄存器中没有地址时,存储控制器将新分配给待存储的数据报文的地址记录在该地址记录寄存器中。这样在不断有大小较小的数据报文到来时,可以不断进行数据报文的拼接存储,提供数据存储区的利用率。

应理解,第一地址和第二地址只是对地址的不同存储状态的区分,一个既可以是第一地址,也可以是第二地址。例如,某个地址下未存储数据报文,此时该地址为第二地址;当该地址下存储至少一个数据报文后,此时该地址为第一地址;当该地址下存储的数据报文达到最大数量,存储控制器将其释放,此时该地址又为第二地址。

在一些实施例中,在待存储的数据报文的大小等于正常数据报文的大小(即n个单位存储容量的大小)的情况下,存储控制器为待存储的数据报文分配一个第二地址,并记录该第二地址的存储状态为第二状态。但由于该第二地址对应的存储空间已经完全被占用,不支持再继续存储数据报文,因此不会将该第二地址记录在地址记录寄存器下。

在一些实施例中,存储控制器记录每一个地址的已经被读取的次数。具体地,可以设置读取状态表,该表中记录每个地址中已经被读取的次数。也就是说为每个地址记录一个读取状态,读取状态表的表项深度为地址的个数。

在接收到针对目标地址的读取请求后,存储控制器根据目标地址的存储状态和读取状态,判断是否对目标地址进行回收。

在一些实施例中,在目标地址的存储状态所指示的存储的数据报文的个数等于目标地址已经被读取的次数k与1之和的情况下,存储控制器回收该目标地址,并且记录该目标地址未被读取过。例如,当目标地址的存储状态指示存储了2个数据报文,读取状态指示该地址已经被读取过1次,那么本次读取数据后回收该地址,并更新该地址的读取状态为未被读取过。

在另一些实施例中,在目标地址的存储状态所指示的存储的数据报文的个数大于目标地址已经被读取的次数k与1之和的情况下,存储控制器记录目标地址已经被访问过k+1次。例如,当目标地址的存储状态指示存储了2个数据报文,读取状态指示该地址未被读取过,那么本次读取数据后更新该地址的读取状态为被读取过1次,并且不回收该地址。

对于仅存储了一个正常数据报文(即大小为n个单位存储容量的大小的数据报文)的地址,由于仅存储了一个数据报文,只要被读取过,就可以直接回收该地址。

下面结合具体的例子对本申请实施例的数据存储的方法进行描述,以n=2为例。

地址记录寄存器记录一个地址,该地址为存储了一个大小小于正常数据报文大小一半的数据报文的地址。

存储状态表包含两个存储状态:第一存储状态指示地址存储了2个数据报文,第二存储状态指示地址存储了1个数据报文。

读取状态表包含两个读取状态:第一读取状态指示该地址未被读取过,第二读取状态指示该地址已经被读取过1次。

收到数据报文写入请求后,存储控制器获取待存储的数据的大小。

在待存储的数据报文的大小大于单位存储容量的情况下,数据报文需要占用一个完整的存储单元,则:

1、存储控制器分配一个新的、完整的存储单元给该数据报文(也即分配一个未存储数据报文的地址给该数据报文);

2、存储控制器更新该地址的存储状态为第一存储状态(存储了1个数据报文)。

在待存储的数据报文的大小小于或者等于单位存储容量的情况下,数据报文仅需占用半个存储单元,则存储控制器读取地址记录寄存器的内容。

若该地址记录寄存器没有记录,表示没有地址需要拼接,则:

1、存储控制器分配一个新的、完整的存储单元给该数据报文(也即分配一个未存储数据报文的地址给该数据报文),该数据报文仅占用存储单元的上存储单元;

2、存储控制器把该地址记录到地址记录寄存器中;

3、存储控制器更新该地址的存储状态为第一存储状态(存储了1个数据报文)。

若该地址记录寄存器有记录,表示已经有数据报文已经占了该记录对应的地址的存储单元的一半,则:

1、存储控制器不需要分配一个新的存储单元,把该数据报文写入该记录对应的地址的下存储单元;

2、存储控制器从地址记录寄存器中释放该地址(已经拼接存储完成);

3、存储控制器更新该地址的存储状态为第一存储状态(存储了2个数据报文)

存储控制器收到数据报文读取请求后,判断是否回收该数据报文对应的地址。

存储控制器检查该地址对应的存储状态和读取状态。

若该地址的存储状态为第二存储状态(存储了1个数据报文),表示该地址没有拼接数据报文,可以直接回收。

若该地址的存储状态为第一存储状态(存储了2个数据报文),表示该地址被拼了2个数据报文,所以必须等2个数据报文都从缓存读出后才释放地址。

具体地,若该地址的读取状态为第一读取状态,表示当前读取为第一次读取,则:

1、存储控制器读取数据报文;

2、存储控制器更新该地址的读取状态为第二读取状态(已经被读取过1次)。

此时,存储控制器不回收该地址。

若该地址的读取状态为第二读取状态,表示当前读取为第二次读取,则:

1、存储控制器读取数据报文;

2、存储控制器回收该地址;

3、存储控制器更新该地址的读取状态为第一读取状态(初始化内容,为下次读做准备)。

相对于现有技术,本申请实施例的方案在存储长度为(s+1)字节的数据报文时,存储利用率可以提升到:

图4是本申请实施例的存储控制器的示意性结构图。如图4所示,存储控制器400包括解析模块410和处理模块420。

解析模块410,用于获取待存储的数据报文的大小。

处理模块420,用于在该待存储的数据报文的大小小于或者等于单位存储容量的情况下,确定存储该待存储的数据报文的目标地址,该目标地址对应的存储容量被完全占用时能够存储n个大小小于或者等于单位存储容量的数据报文,该单位存储容量为一个地址对应的存储容量的1/n,n为大于或者等于2的整数。

可选地,该处理模块420,具体用于读取地址记录寄存器,该地址记录寄存器用于存储第一地址,该第一地址下已经存储m个大小小于或者等于该单位存储容量的数据报文,m为大于或者等于1且小于n的整数;具体用于当读取到该第一地址时,确定该目标地址为该第一地址;具体用于当未读取到该第一地址时,确定该目标地址为第二地址,该第二地址下未存储任何数据报文。

可选地,该处理模块420,还用于在确定该目标地址为该第一地址的情况下,记录该第一地址的存储状态为第一存储状态,该第一存储状态指示该第一地址下存储m+1个数据报文;还用于当m+1=n时,将该第一地址从该地址记录寄存器中释放。

可选地,该处理模块420,还用于在确定该目标地址为该第二地址的情况下,记录该第二地址的存储状态为第二存储状态,该第二存储状态指示该第二地址下存储一个数据报文;用于将该第二地址记录在该地址记录寄存器中。

可选地,该处理模块420,还用于在接收到针对该目标地址的读取请求后,在该目标地址的存储状态指示的该目标地址下存储的数据报文的个数等于该目标地址已经被读取的次数k与1之和时,回收该目标地址,并且记录该目标地址未被读取过。

可选地,该处理模块420,还用于在接收到针对该目标地址的读取请求后,在该目标地址的存储状态指示的该目标地址下存储的数据报文的个数大于该目标地址已经被读取的次数k与1之和,记录该目标地址已经被访问过k+1次。

应理解,本申请各实施例所述的存储控制器可能是一种集成电路,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器中的硬件的集成逻辑电路或者软件形式的指令完成。本申请各实施例所述的处理器可以是通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现成可编程门阵列(fieldprogrammablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。

图5是本申请实施例的存储系统的示意图。如图5所示,存储系统500包括数据存储区510和如图4所示的存储控制器400。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。

所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。

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

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