本发明属于数据存储领域,具体涉及一种ram资源分配方法。
背景技术:
随机存取存储器(randomaccessmemory,ram)又称作“随机存储器”,是与cpu直接交换数据的内部存储器,也叫主存(内存)。它可以随时读写,而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储媒介。存储单元的内容可按需随意取出或存入,且存取的速度与存储单元的位置无关的存储器。这种存储器在断电时将丢失其存储内容,故主要用于存储短时间使用的程序。fpga中内嵌的块ram可以大大拓展fpga的应用范围和灵活性,除了块ram,还可以将fpga中的reg和lut灵活地配置为ram结构,芯片内部块ram的数量是选择芯片的一个重要因素。
现有技术中,单片块ram可以根据需要改变其位宽和深度,但需要满足两个原则,首选,修改后的容量(位宽和深度)不能大于单片块ram容量的最大值,其次,位宽不能超过36bit。当需求的数据容量较大时,如果配置的容量大于上述两个原则,则是不被允许的。因此,现有技术的ram配置方式已经远远不能满足用户需求。因此,给出一种根据需求的数据容量灵活配置ram的容量已经成为研究的重点问题。
技术实现要素:
为了解决现有技术中存在的上述问题,本发明提供了一种ram资源分配方法。本发明要解决的技术问题通过以下技术方案实现:
一种ram资源分配方法,包括如下步骤:
(a)获取第一数据位宽和第一地址深度;
(b)根据所述第一数据位宽、所述第一地址深度判断容量是否溢出,若溢出则拼接分配;
若否,则分配1个嵌入内存块。
上述的ram资源分配方法,所述第一数据位宽包括:输入数据位宽和输出数据位宽;所述第一地址深度包括:输入地址深度和输出地址深度。
上述的ram资源分配方法,所述输入数据位宽与所述输出数据位宽的比值为2n或者
上述的ram资源分配方法,根据所述第一数据位宽、所述第一地址深度判断数据是否溢出包括:
(x1)根据所述输入数据位宽和所述输出数据位宽计算第二数据位宽;
(x2)根据所述输入地址深度和所述输出地址深度计算第二地址深度;
(x3)根据所述第二数据位宽和所述第二地址深度计算总需求容量;
(x4)若所述第二数据位宽超过第一阈值并且所述总需求容量大于第三阈值或者所述第二地址深度超过第二阈值并且所述总需求容量大于第三阈值,则溢出;否则未溢出。
上述的ram资源分配方法,所述第一阈值为所述嵌入内存块数据位宽的最大值,所述第二阈值为所述嵌入内存块地址深度的最大值,所述第三阈值为所述嵌入内存块总容量的最大值。
上述的ram资源分配方法,所述拼接分配包括:
(y1)根据所述第二数据位宽和所述第二地址深度计算余量;
(y2)根据所述余量计算各拼接资源块的个数。
上述的ram资源分配方法,步骤(y1)包括:
(y11)根据所述第二数据位宽计算数据余量;
(y12)根据所述第二数据位宽计算地址深度未溢出量;
(y13)根据所述第二地址深度和所述地址深度未溢出量计算地址余量。
上述的ram资源分配方法,步骤(y2)包括:
若所述余量为0或者大于单个所述嵌入内存块容量的一半,则计算拼接的所述嵌入内存块的个数;否则计算拼接的所述嵌入内存块、reg资源块和lut资源块的个数。
上述的ram资源分配方法,所述reg资源块的个数为所述输出数据位宽与所述输入数据位宽的比值。
上述的ram资源分配方法,所述lut资源块的个数为所述输出数据位宽值。
与现有技术相比,本发明的有益效果:
本发明实施例允许需求数据容量超过嵌入内存块的限制,可以满足较大数据位宽以及较深地址深度的ram使用,自动计算分配的嵌入内存块、reg资源块、lut资源快的数量,稳定可靠。
附图说明
图1是本发明实施例提供的一种ram资源分配方法流程示意图;
图2是本发明实施例提供的另一种ram资源分配方法流程示意图。
具体实施方式
下面结合具体实施例对本发明做进一步详细的描述,但本发明的实施方式不限于此。
实施例1:
请参见图1和图2,图1是本发明实施例提供的一种ram资源分配方法流程示意图;图2是本发明实施例提供的另一种ram资源分配方法流程示意图。该ram资源分配方法包括如下步骤:
(a)获取第一数据位宽和第一地址深度;
(b)根据所述第一数据位宽、所述第一地址深度判断容量是否溢出,若溢出则对所述ram资源进行拼接分配;否则分配所述ram资源为1个嵌入内存块。
本发明实施例允许需求数据容量超过嵌入内存块的限制,可以满足较大数据位宽以及较深地址深度的ram使用,稳定可靠。
实施例2:
与上述实施例不同之处。在于本实施例详细介绍一种ram资源分配方法,该ram资源分配方法包括:
(a)获取第一数据位宽和第一地址深度;
(b)根据所述第一数据位宽、所述第一地址深度判断容量是否溢出,若溢出则对所述ram资源进行拼接分配;否则分配所述ram资源为1个嵌入内存块。
其中,所述拼接分配包括:对嵌入内存块进行拼接分配或者对嵌入内存块、reg资源块和lut资源块进行拼接分配。
优选地,所述嵌入内存块为嵌入式ram块(embeddedblockram,简称ebr)。
其中,所述第一数据位宽包括:输入数据位宽和输出数据位宽;所述第一地址深度包括:输入地址深度和输出地址深度。
其中,所述输入数据位宽与所述输出数据位宽的比值为2n或者
优选地,所述输入数据位宽与所述输出数据位宽满足下列两种情况:
第一种情况:1、2、4、8、16、32以及8的偶数倍;
第二种情况:9、18、36以及9的偶数倍。
其中,上述两种情况本发明实施例的资源分配方法均支持,因此本发明实施例的资源分配方法适应性强、也更加灵活。
所述输入数据宽度和所述输出数据宽度可以根据上述两种情况任意组合。
其中,根据所述第一数据位宽、所述第一地址深度判断数据是否溢出包括:
(x1)根据所述输入数据位宽和所述输出数据位宽计算第二数据位宽;
(x2)根据所述输入地址深度和所述输出地址深度计算第二地址深度;
(x3)根据所述第二数据位宽和所述第二地址深度计算总需求容量;
(x4)若所述第二数据位宽超过第一阈值并且所述总需求容量大于第三阈值或者所述第二地址深度超过第二阈值并且所述总需求容量大于第三阈值,则溢出;否则未溢出。
进一步地,第二数据位宽和第二地址深度满足:
进一步地,总需求容量满足:
总需求容量=max{输入数据位宽×输入地址深度,输出数据位宽×输出地址深度}
其中,对第二数据位宽、第二地址深度和总需求容量同时进行判定使溢出判断更加准确,避免出现误判,提高了本分配方法的准确率和效率。
优选地,所述第一阈值为所述嵌入内存块数据位宽的最大值,所述第二阈值为所述嵌入内存块地址深度的最大值,所述第三阈值为所述嵌入内存块总容量的最大值。
优选地,嵌入内存块数据位宽最大值即第一阈值为36,嵌入内存块地址深度的最大值即第二阈值为8192,嵌入内存块总容量的最大值即第三阈值为9216。
进一步地,判断是否溢出条件式a满足:
a=(第二数据位宽>第一阈值)or(第二地址深度>第二阈值)or(总需求容量>第三阈值)
若a为真,则溢出,否则未溢出。
其中,对所述ram资源进行拼接分配包括:
(y1)根据所述第二数据位宽和所述第二地址深度计算余量;
(y2)根据所述余量计算各拼接资源块的个数。
其中,余量包括:数据位宽余量和地址深度余量。
其中,步骤(y1)包括:
(y11)根据所述第二数据位宽计算数据余量;
(y12)根据所述第二数据位宽计算地址深度未溢出量;
(y13)根据所述第二地址深度和所述地址深度未溢出量计算地址余量。
其中,若第二数据位宽为9或者9的偶数倍,则地址深度未溢出量满足:
否则若第二数据位宽为1、2、4、8、16、32以及8的偶数倍,则地址深度未溢出量满足:
如果即是8的偶数倍也是9的偶数倍,则按照9的偶数倍情况进行计算,这样计算的资源最少。
则计算余量,分别满足:
其中,rem表示求余数运算。
进一步地,计算需要的最少嵌入内存块个数满足:
其中,floor表示返回比参数小的最大整数。
进一步地,步骤(y2)包括:若所述余量为0或者大于单个所述嵌入内存块容量的一半,则计算拼接的所述嵌入内存块的个数;否则计算拼接的所述嵌入内存块、reg资源块和lut资源块的个数。
其中,余量为0满足:数据位宽余量=地址深度余量=0,则
ram资源=m1个嵌入内存块
进一步地,若余量大于单个所述嵌入内存块容量的一半,即满足条件式b为真:
此时,ram资源需要拼接的:
ram资源=(m1+1)个嵌入内存块
否则,若余量小于单个所述嵌入内存块容量的一半,则计算需要的嵌入内存块个数、reg资源块个数、lut资源块个数:
ram资源=m1个嵌入内存块+n1个reg资源块+k1个lut资源块
其中,所述reg资源块的个数n1为所述输出数据位宽与所述输入数据位宽的比值。
其中,所述lut资源块的个数k1为所述输出数据位宽值。
另外,下面给出另一种实现方式,与上述方法不同的在于,在余量计算完成后,可先不计算最少的嵌入内存块个数。先判断余量的状态,
若余量大于单个所述嵌入内存块容量的一半,则ram资源只对嵌入内存块进行拼接,需要拼接的嵌入内存块个数为:
否则,若余量为0或者小于单个所述嵌入内存块容量的一半,则需要对嵌入内存块、reg资源块和lut资源块进行拼接以分配ram资源包括:
先计算需要的嵌入内存块个数:
再计算需要拼接的reg资源和lut资源,其中,所述reg资源块的个数n2为所述输出数据位宽与所述输入数据位宽的比值,所述lut资源块的个数k2为所述输出数据位宽值。
最后,得出ram资源容量满足:ram资源=3个嵌入内存块+n2个reg资源块个数+k2个lut资源块。
本发明实施例允许需求数据容量超过嵌入内存块的限制,可以满足较大数据位宽以及较深地址深度的ram使用,自动计算分配的嵌入内存块、reg资源块、lut资源快的数量,稳定可靠。
实施例3
与上述实施例不同的,本实施例通过给出详细的数据的计算过程对本发明实施例ram资源分配方法进行详细说明。
s01:输入第一数据宽度包括:输入数据宽度datain=9,输出数据宽度dataout=36,第一地址深度包括:输入地址深度addressin=256,输出地址深度addressout=256;
s02:计算第二数据宽度data=max{9,36}=36,第二地址深度address=max{256,256}=256,总需求容量=36*256=9216
s03:根据条件公式a判断是否溢出;取嵌入内存块数据位宽最大值即第一阈值为36,嵌入内存块地址深度的最大值即第二阈值为8192,嵌入内存块总容量的最大值即第三阈值为9216。
则a=(第二数据位宽>第一阈值)or(第二地址深度>第二阈值)or(总需求容量>第三阈值)
=(36>36)or(256>8192)or(9216>9216)=0
因此,判定为未溢出。
s04:ram资源分配为1个嵌入内存块。
实施例4
与上述实施例不同的,本实施例通过给出另一组详细的数据的计算过程对本发明实施例ram资源分配方法进行详细说明。
s01:输入第一数据宽度包括:输入数据宽度datain=9,输出数据宽度dataout=36,第一地址深度包括:输入地址深度addressin=512,输出地址深度addressout=512。
s02:计算第二数据宽度data=max{9,36}=36,第二地址深度address=max{512,512}=512,总需求容量=36*512=18432。
s03:根据条件公式a判断是否溢出;取嵌入内存块数据位宽最大值即第一阈值为36,嵌入内存块地址深度的最大值即第二阈值为8192,嵌入内存块总容量的最大值即第三阈值为9216。
则a=(第二数据位宽>第一阈值)or(第二地址深度>第二阈值)or(总需求容量>第三阈值)
=(36>36)or(512>8192)or(18432>9216)=1,
因此,判定为溢出。
s04:计算余量。
s041:计算地址深度未溢出量。第二数据位宽为36,为9的偶数倍,则地址深度未溢出量x满足:x=9216/36=256;
s042:计算数据位宽余量dataflow=rem(36/36)=0,地址深度余量addressflow=rem(512/256)=0。
s05:计算需要拼接的最少嵌入内存块数量:
m1=max(floor(36/36),floor(512/256))=2
即2个嵌入内存块;
s07:根据步骤s042得到余量为0,因此ram资源满足:
ram资源=2个嵌入内存块。
实施例5
与上述实施例不同的,本实施例通过给出再一组详细的数据的计算过程对本发明实施例ram资源分配方法进行详细说明。
s01:输入第一数据宽度包括:输入数据宽度datain=9,输出数据宽度dataout=36,第一地址深度包括:输入地址深度addressin=515,输出地址深度addressout=515。
s02:计算第二数据宽度data=max{9,36}=36,第二地址深度address=max{515,515}=515,总需求容量=36*515=18540。
s03:根据条件公式a判断是否溢出;取嵌入内存块数据位宽最大值即第一阈值为36,嵌入内存块地址深度的最大值即第二阈值为8192,嵌入内存块总容量的最大值即第三阈值为9216。
则a=(第二数据位宽>第一阈值)or(第二地址深度>第二阈值)or(总需求容量>第三阈值)
=(36>36)or(515>8192)or(18540>9216)=1,
因此,判定为溢出。
s04:计算余量。
s041:计算地址深度未溢出量。第二数据位宽为36,为9的偶数倍,则地址深度未溢出量x满足:x=9216/36=256;
s042:计算数据位宽余量dataflow=rem(36/36)=0,地址深度余量addressflow=rem(515/256)=3。
s05:计算需要拼接的最少嵌入内存块数量:
m1=max(floor(36/36),floor(515/256))=2,
即2个嵌入内存块;
s06:判定是否满足余量大于单个所述嵌入内存块容量的一半;
条件式b满足:
条件b不为真,因此不满足。
s07:计算reg资源块个数n1和lut资源块个数k1。
n1=36/9=4;k1=36;
s08:计算ram资源容量,满足:
ram资源=2个嵌入内存块+4个reg资源块+
36个lut资源块。
实施例6
与上述实施例不同的,本实施例通过给出另一组详细的数据的计算过程对本发明实施例ram资源分配方法进行详细说明。
s01:输入第一数据宽度包括:输入数据宽度datain=144,输出数据宽度dataout=144,第一地址深度包括:输入地址深度addressin=512,输出地址深度addressout=512。
s02:计算第二数据宽度data=max{144,144}=144,第二地址深度address=max{512,512}=512,总需求容量=144*512=73728。
s03:根据条件公式a判断是否溢出;取嵌入内存块数据位宽最大值即第一阈值为36,嵌入内存块地址深度的最大值即第二阈值为8192,嵌入内存块总容量的最大值即第三阈值为9216。
则a=(第二数据位宽>第一阈值)or(第二地址深度>第二阈值)or(总需求容量>第三阈值)
=(144>36)or(512>8192)or(73728>9216)=1,
因此,判定为溢出。
s04:计算余量。
s041:计算地址深度未溢出量。第二数据位宽为144,即是8和9的偶数倍,按照9的偶数倍进行计算,则地址深度未溢出量x满足:x=9216/144=64;
s042:计算数据位宽余量dataflow=rem(144/36)=0,地址深度余量addressflow=rem(512/64)=0。
s05:判定余量为0,计算ram资源容量,满足:
以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。