具有在运行中可变的存储区域的FIFO存储器的制作方法

文档序号:11807776阅读:477来源:国知局
具有在运行中可变的存储区域的FIFO存储器的制作方法与工艺

本发明涉及一种具有在运行中可变的存储区域的FIFO(先进先出)存储器。



背景技术:

本发明从具有可变存储区域的FIFO存储器出发,其中,该FIFO存储器构型为线性存储器,其中,FIFO存储器配置为环形缓冲器(Ringbuffer),其中,FIFO存储器具有状态机,所述状态机包括下指针base、上指针top、写指针wr和读指针rd,其中,该FIFO存储器包含当前被分配的存储区域,所述当前被分配的存储区域的下边界通过下指针base定义,并且所述当前被分配的存储区域的上边界通过上指针top定义,其中,写指针wr定义当前的写地址,并且读指针rd定义当前的读地址。

FIFO通常作为具有固定尺寸的环形缓冲器被实现并且可以包含确定数目的数据元素:http://en.wikipedia.org/wiki/Circular_buffer

当需要相对配置用于环形缓冲器的存储器更多的存储器时,有两种方法来处理这:

1.可以不将新数据元素接收到环形缓冲器中。

2.在将最旧的数据从缓冲器删除之后,将新的数据元素写入到环形缓冲器中。

在此或者丢失新数据(1.)或者丢失数据历史(2.)。当两种方法不可接受时,必须增大缓冲器。大多数用于改变FIFO尺寸的方法涉及软件实现,在软件实现中重新分配存储器中的缓冲器,或者将缓冲器内容从小缓冲器复制到更大的缓冲器。在此使用在硬件(HW)实现中不可用、或者是低效且费事的机制。现有技术中的另一种解决方法在存储器中使用标准区域和扩展区域。当要增大FIFO时,将数据首先写入到扩展区域中,以便然后在下一个完整运行时将所述区域一起集成到标准区域中。 http://blog.labix.org/2010/12/23/efficient-algorithm-for-expanding-circular-buff ers



技术实现要素:

本发明应能够实现:

1.FIFO能够在持续运行中被增大或缩小。

2.在此应将现有的存储区域向下或向上扩展或缩小。

3.在存储器中所包含的数据元素不应丢失并且应能够以同样的顺序再读入/读出。

本发明的优点

本发明从具有可变存储区域的FIFO存储器出发,其中,所述FIFO存储器构型为线性存储器,其中,FIFO配置为环形缓冲器(Ringbuffer),FIFO存储器具有状态机,所述状态机包括下指针base、上指针top、写指针wr和读指针rd,所述FIFO存储器包含当前被分配的存储区域,所述当前被分配的存储区域的下边界通过所述下指针base定义,所述当前被分配的存储区域的上边界通过所述上指针top定义,其中,写指针wr定义当前写地址,并且读指针rd定义当前读地址。本发明的核心在于,所述状态机包括用于定义将来被分配的存储区域的新低值new_base和新高值new_top,所述将来被分配的存储区域的下边界通过所述新低值new_base定义并且所述将来被分配的存储区域的上边界通过所述新高值new_top定义,并且所述状态机如此构型,使得在所述FIFO存储器的读运行中和/或在所述FIFO存储器的写运行中所述FIFO存储器的被分配的存储区域能够通过将所述下指针base移动到所述新低值new_base和/或通过将所述上指针top移动到所述新高值new_top来改变。根据本发明,在所述存储区域的上端处和下端处分别设置一个指针(base,top)和一个阴影指针(Schattenzeiger)(新值:new_base,new_top),以这些指针首先定义新的被改变的存储区域并且在合适的时刻将其固定。

本发明的一种有利的构型是,所述FIFO具有空闲区域,在所述空闲区域中不存在未读数据,并且状态机如此构型,使得选择一个时刻用于将下指针base和/或上指针top置于值new_base和/或new_top,在所述时刻不但 指针的旧值处于空闲区域中,而且指针的新值也处于空闲区域中。

本发明的一种有利的构型设置,其特征在于,状态机如此构型,使得当读指针rd=base时,实现将上指针移动到值new_top。

本发明的一种有利的构型是,状态机如此构型,使得当写指针wr=top时,实现将下指针移动到值new_base。

优点:

1.在HW方面以受限的单元(尤其存储器)实现是可能的

2.在尺寸改变发生期间,能够保持FIFO的运行

3.能够遵守写和读的实时要求,因为FIFO不必为了可能的复制过程而在尺寸改变中受阻。

特别有利地,本发明可用在具有安卓操作系统的智能手机的上下文(Kontext)中并且在那里用于传感器数据的所谓批处理(Batching)。在那里更多FIFO用于不同的传感器。本发明能够实现:对于这些FIFO中的每一个在持续运行中增大或缩小存储器或者为所需要的或不再需要的FIFO提供存储器以及将存储器重新集成到其他的FIFO中。

与上述现有技术不同,本发明更高效,因为本发明在耗尽标准区域之前避免用于扩展区域的指针管理(Poniter-Management)并且允许在准备阶段(也就是说在传感器完全运行之前)的增大。

安卓的一个重要要求(在运行中的模式切换时所有传感器还应连续提供它们的数据)被遵守,因为没有数据因为尺寸的改变而丢失。

附图说明

图1示出具有被分配的存储区域的FIFO存储器,该存储区域具有连贯的被占用区域和分离的空闲区域;

图2示出具有被分配的存储区域的FIFO存储器,该存储区域具有分离的被占用区域和连贯的空闲区域;

图3示出在运行中的根据本发明的FIFO存储器,其中,读指针rd=base,其中,可以缩小或增大上指针top;

图4示出在运行中的根据本发明的FIFO存储器,其中,写指针wr=top,其中,可以缩小或增大下指针base。

具体实施方式

如在FIFO的经典实现中那样,固定地在线性存储器中分配环形缓冲器并且通过两个地址指针base和top定义该环形缓冲器的边界。还有一个用于这样的位置的地址指针wr——从该位置开始插入新的数据元素,以及有一个用于这样的位置的地址指针rd——从该位置开始读出数据元素。

·在初始化时

1.将base置于存储区域的下端,并且

2.将top置于存储区域的上端。

3.将写指针wr和读指针rd置于base

·在wr的当前地址处将新的数据元素写入到存储器中。

1.然后使wr增值

2.当wr达到值top时,将wr置于base(warp-around:回绕式)

·从地址rd读出数据元素。

1.然后使rd增值

2.当rd达到值top时,将rd置于base(warp-around)

图1示出具有被分配的存储区域的FIFO存储器,该FIFO存储器具有连贯的被占用区域和分离的空闲区域。

图2示出具有被分配的存储区域的FIFO存储器,该FIFO存储器具有分离的被占用区域和连贯的空闲区域。

所述FIFO的特征在于,在存储器区域中具有一个部分,该部分包括当前的数据并且因此是被占用的(在图中以阴影标出),以及具有另一个部分,该部分是空闲的(未画阴影)。与指针wr和rd的当前位置相关地可以出现以下情况:

1.wr>rd:被占用区域连贯地处于存储区域中(图1)

2.wr<rd:被占用区域划分为2个部分:一个在存储器区域的下端处,一个在存储器区域的上端处(图2)

3.wr=rd:在这种情况下FIFO是空的,其可以被处理用于进一步考虑,如wr>rd的情况。

为了能够实现FIFO的尺寸改变和位置改变,根据本发明引入地址指针 new_base和new_top,这些地址指针包含目标尺寸或者也包括FIFO的在改变后的新位置。(见图1)

只有当新指针new_base和new_top的位置处于被占用区域之外时,才能够实现存储器区域边界的改变。在将数据写入到FIFO中和从FIFO中读出期间,空闲区域相对于被占用区域朝相反的方向移动。所述算法基于:对于指针base和top的改变选择一个时刻,在所述时刻不仅所述指针的旧值而且所述指针的新值处于空闲区域中。

通常能够实现FIFO的增大。然而只有当FIFO的填充高度(Füllstand)小于或等于FIFO的新尺寸时,才能够实现缩小。如果填充高度更大,则在所述时刻就不能够实现FIFO的缩小。对于这种情况下的处理,在变型方案3中描述一些可能的实施方式。

改变top和/或base:

1.通过将new_top置于与top不相同的值来告知top的改变的要求。替代地或同时地,通过将new_base置于与base不相同的值来告知base的改变。

2.数据元素的写和读如目前为止那样继续。在每次更新rd或wr时检查:

·当(rd==base)时(见图3)

·当(new_top>wr)时:将top置于值new_top

·否则:此时不能够实现top的改变

·当(wr==top)时(见图4)

·当(new_base<rd)时:将base置于值new_base

·否则:此时不能够实现base的改变

3.当top==new_top且base==new_base时,所述增大结束

图3示出在运行中的根据本发明的FIFO存储器,其中,读指针rd=base,其中,可以缩小或增大上指针top。

通过选择用于改变top的时刻(当rd达到值base时)来确保:FIFO的上方区域是未被使用的并且top的新值不破坏FIFO内容的连续性。New_top1和new_top2指示top的增大和缩小的情况。

与此类似地通过选择用于改变base的时刻来确保:FIFO的下方区域是 未被使用的。图4这里示出在运行中的根据本发明的FIFO存储器,其中,写指针wr=top,其中,可以缩小或增大下指针base。

变型方案1(对于基本变型方案替代地)

所述FIFO替代地也可以用减值指针实现,而不是增值指针wr和rd。这一般性地适用于每个FIFO并且也适用于该FIFO,然而必须相应地匹配指针更新的时刻和顺序。

变型方案2(基本变型方案的改进)

与简单的调节(在下一个Wrap-around时更新指针)相对地也有以下可能性:当读指针和写指针的、确定的条件满足时,立即执行指针的更新。这里尤其相关的是,指针wr是否位于rd之下或之上,也就是说是否越过Wraparound区域地存储有效数据。

1.通过将new_top置于与top不相同的值告知top的改变的要求。

替代地或同时地,通过将new_base置于与base不相同的值告知base的改变的要求。

2.当(wr>rd)时

·当(new_top>wr)时:将top置于值new_top

·当(new_base<rd)时:将base置于值new_base

否则:(返回到基本变型方案)

数据元素的写和读如目前为止那样继续。在每次更新rd或wr时检查:

·当(rd==base)时

·当(new_top>wr)时:将top置于值new_top

·否则:此时不能够实现top的改变

·当(wr==top)时

·当(new_base<rd)时:将base置于值new_base

·否则:此时不能够实现base的改变

3.当top==new_top且base==new_base时,所述增大结束。

这些变型方案的优点在于,在满足所述条件时能够更快地结束尺寸的改变。

变型方案3(基本变型方案的或变型方案1-2的扩展)

上面已经描述了,只有当FIFO的填充高度小于或等于FIFO的新尺寸时,才能够实现FIFO的缩小。如果不是这种情况,则有以下可能性:

1.替代地可以如此设计算法,使得在指针的下一个循环时与所要求的相比较较少地缩小FIFO并且发回关于所达到的缩小的报告,而不是等待可能永不出现的、成功的缩小。

2.丢弃FIFO中的如此多的旧值,直至能够实现所述缩小

3.如此长时间不将新值写入到FIFO中,直至填充高度足够小,以便能够实现缩小(丢弃新值)

4.所述缩小的要求一直保持,直至FIFO的填充高度足够小

附图标记列表

Base 下指针

top 上指针

wr 写指针

rd 读指针

new_base 新低值

new_top 新高值。

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