一种乒乓缓冲装置 【技术领域】
本发明涉及数据缓存领域,尤其涉及处理零散、多类型数据接收,分类定量发送的数据缓存技术。
背景技术
乒乓缓存(PingPong Buffer)机制是一种比较常用的增加数据带宽的缓存方式。可以用在任何一个需要读操作和写操作同时进行的系统中,比如交换机和路由器系统中的数据重组缓存,或者计算机系统中的数据批量传输。
图1是普通缓存的示意图。如图1所示,这是一个普通的缓存(buffer),假设它的输入(An)和输出(Dn)有数据单元的处理(批量处理),在每个数据单元时间(我们称之为时隙)内,零个(An=0)或者一个(An=1)新的数据单元会输入,而且也可能有零个(Dn=0)或者一个(Dn=1)数据单元输出;这意味着在每个时隙,有两个独立的存储器操作发生。如果采用双端口存储器,是可以达到是两个操作同时进行的目的的;但是双端口存储器价格昂贵,出于经济上的考虑,一般都会采用单端口存储器,那么这就要求缓存的存储器带宽(等于缓存输入速率和输出速率的和)必须是线速(输入或者输出)的两倍。以OC-48(OC〔Optical Carrier,光载波〕是SONET〔Synchronous Optical NETwork,光纤同步网络〕规范中定义的传输速度。OC定义光设备的传输速度,OC-48线速2.4Gbps)为例子,它需要的存储器带宽是4.8Gbps,对应到32位的存储器,那么存储器的访问时间必须为6.4ns,这对存储器和系统时钟的要求是非常苛刻的。
除了采用双端口存储器,还有另外一种机制来实现读和写同时操作,这就是乒乓缓存机制。乒乓缓存采用两块单端口存储器,在每个时隙,每块存储器只需要执行一种操作(读或者写)。乒乓缓存地一般结构如图2所示,假设乒乓缓存的总容量是M(单位是存储单元),它的输入处理和输出处理分别用An和Dn表示。乒乓缓存包含两块物理上分开的存储器件,每个的容量分别是M/2,两个存储器接口是绑在一起的,从外部看(从An和Dn的角度来看)到只是一个缓存,可操作容量是M/2。
相对于一般的单端口存储器缓存,在乒乓缓存中,读操作和写操作可以同时发生,但是分别交替作用在不同的存储器器件上。图3是乒乓缓存的操作示例图。如图3所示,当输入(An)数据单元到达的时候,如果其中一块缓存(buffer1)正在被读,那么这些数据单元会被写到另外一块缓存(buffer2)上;当缓存1写满,缓存2读空之后,操作就交换了过来,An写入缓存2中,而Dn从缓存1总读取数据。从An或者Dn的角度看,操作都是在两个缓存之间交替进行的。乒乓缓存是目前比较常用的缓存机制,其基本的原理被业界广泛接受。对于实际的不同的系统中,需求是多种多样的,具体控制方式千变万化的。
但是传统的乒乓缓存在实际应用中还是存在着一些缺点的。例如:通常的乒乓缓存只能在乒乓缓存中的其中的一个缓存(如缓存1或者缓存2)写满或者读空的时候才发生跳转。当缓存的数据是不同类型的数据时,系统往往要求输出的数据类型也要分别保持一致,若采用传统的乒乓缓存,对于数据流中的不同类型的数据就必须在区分数据类型之后,采用多套乒乓缓存来分别缓存不同类型的数据,这在资源上比较浪费,并且无疑会增加整个系统的规模和复杂度。
【发明内容】
本发明的目的就是提出一种经济可靠的,适用于缓存不同数据类型的乒乓缓存装置。
本发明的核心思想是:根据输入数据的随路信息区分的不同类型,不同类型的数据必须区分开来存放在乒乓缓存内部不同缓存(缓存1或者缓存2)中,若数据类型发生变化,即便是缓存未满,乒乓缓存也要发生跳转,以保证每个缓存(缓存1或者缓存2)内存放的是同一类型的数据;对于随路信息表明是同类型的数据,也可以根据数据的附加信息对数据进行进一步的分类,不同类别的数据也存放在不同的乒乓缓存内部不同的缓存实体内。
本发明的技术方案为:
一种乒乓缓存装置,包括:
数据附加信息分析模块,用于分析输入的数据附加信息,将分析结果输入到附加信息输入选择器,同时产生写满正常跳转条件和附加信息异常跳转条件输出到写跳转条件处理模块;
附加信息输入选择器,接收数据附加信息分析模块和写跳转处理模块的输出结果,选择数据附加信息进入缓存1的数据附加信息寄存器或是缓存2的数据附加信息寄存器;
输入数据分析模块,用于分析输入的数据和数据的随路信息,将分析后附加状态的数据输出到写缓存选择器,并产生数据类型异常跳转条件输出到写跳转条件处理模块;
写缓存选择器,接收输入数据分析模块输出的附加状态的数据以及写跳转处理模块的输出,选择将数据放进缓存1中或是缓存2中;
写跳转条件处理模块,用于处理接收到的各种跳转条件,将产生的选择结果输出到附加信息输入选择器和写缓存选择器进行选择;
乒乓缓存的实体模块,用于缓存输入数据和输入数据附加信息;
具体包括
A、缓存1和缓存2,乒乓缓存模块中的两个缓存实体,用于缓存写缓存选择器输出的数据;
B、缓存1内数据附加信息寄存器和缓存2内数据附加信息寄存器,用于寄存附加信息输入选择器输出的数据附加信息;
C、缓存1的有效数据个数寄存器和缓存2的有效数据个数寄存器,用于寄存当前缓存1或缓存2内有效数据的个数;
D、缓存1的写指针寄存器和缓存1的读指针寄存器,用于寄存缓存1的写指针和读指针;
E、缓存2的写指针寄存器和缓存2的读指针寄存器,用于寄存缓存2的写指针和读指针;
附加信息输出选择器,用于根据读跳转条件选择输出缓存1内数据附加信息寄存器或缓存2内数据附加信息寄存器中的数据附加信息;
读缓存选择器,用于根据读跳转条件选择输出缓存1或缓存2中的数据。
上述缓存1和缓存2是物理上分开的对称的存储器器件,可以由单端口RAM构成,也可以由寄存器组搭建。缓存1内数据附加信息寄存器和缓存2内数据附加信息寄存器组合在一起是内部缓存深度为1的一个乒乓缓存。
使用本发明的提出的乒乓缓存装置,能够实现只用一套乒乓缓存实体即可对数据流中不同类型数据进行分类缓存,本发明提出的乒乓装置,扩展了传统乒乓缓存的功能,有效地解决了使用传统乒乓缓存浪费资源的问题,节省了电路资源,提高了系统中数据缓存的效率。
【附图说明】
图1是普通缓存的示意图;
图2是传统的乒乓缓存的结构示意图;
图3是乒乓缓存的操作示例图;
图4是本发明提出的乒乓缓存装置的结构示意图。
【具体实施方式】
下面结合附图和实施例对本发明作进一步的详细说明。
图1、图2和图3已经在背景技术中进行过详细说明。
图4是本发明提出的乒乓缓存装置的结构示意图。本发明涉及的乒乓缓存装置的主要输入是:输入数据和输入数据的附加信息。如图4所示,本发明提出的乒乓缓存装置包括:
数据附加信息分析模块,用于分析输入的数据附加信息,将分析结果输入到附加信息输入选择器,同时产生写满正常跳转条件和附加信息异常跳转条件输出到写跳转条件处理模块。
附加信息输入选择器,接收数据附加信息分析模块和写跳转处理模块的输出结果,选择数据附加信息进入缓存1的数据附加信息寄存器或是缓存2的数据附加信息寄存器。
输入数据分析模块,用于分析输入的数据和数据的随路信息,将分析后附加状态的数据输出到写缓存选择器,并产生数据类型异常跳转条件输出到写跳转条件处理模块。该分析模块要求输入数据中含有数据类型信息,若输入数据中不含有随路信息,则装置认为所有数据都是同一类型,这就保证了本发明提出的乒乓缓存装置能够完全与传统的缓冲装置功能兼容。
写缓存选择器,接收输入数据分析模块输出的附加状态的数据以及写跳转处理模块的输出,选择将数据放进缓存1中或是缓存2中;
写跳转条件处理模块,用于处理接收到的各种跳转条件,将产生的选择结果输出到附加信息输入选择器和写缓存选择器进行选择;
乒乓缓存的实体模块,用于缓存输入数据和输入数据附加信息;
具体包括
A、缓存1和缓存2,乒乓缓存模块中的两个缓存实体,用于缓存写缓存选择器输出的数据;缓存数据的高位附加了类型等实时控制信息。
B、缓存1内数据附加信息寄存器和缓存2内数据附加信息寄存器,用于寄存附加信息输入选择器输出的数据附加信息;比如目标地址等。
C、缓存1的有效数据个数寄存器和缓存2的有效数据个数寄存器,用于寄存当前缓存1或缓存2内有效数据的个数;
D、缓存1的写指针寄存器和缓存1的读指针寄存器,用于寄存缓存1的写指针和读指针;
E、缓存2的写指针寄存器和缓存2的读指针寄存器,用于寄存缓存2的写指针和读指针;
附加信息输出选择器,用于根据读跳转条件选择输出缓存1内数据附加信息寄存器或缓存2内数据附加信息寄存器中的数据附加信息;
读缓存选择器,用于根据读跳转条件选择输出缓存1或缓存2中的数据。
下面详细描述一下本发明所提出的乒乓缓存装置的工作原理。首先解释一下“跳转”。所谓跳转,是指对乒乓缓存进行操作(读或者写)时从一个缓存跳转到另外一个,“正常跳转”指写满(对于读操作)或者读空(对于读操作)时候发生的。那么“异常跳转”就是指在其它条件(非写满条件)触发下发生的写跳转;因此:异常跳转条件只会产生在乒乓缓存的写端口,乒乓缓存的读端口的跳转条件是唯一的:就是乒乓缓存的某个缓存被“读空”了,当然这也包含了本来因为异常跳转而未被写满的缓存被读空。
输入数据的附加信息是非实时性的,或者是由数据的最终接收方送过来的控制信息,可以利用这些信息对数据进行进一步的分类。数据附加信息分析模块对数据的附加信息进行分析,也可以产生异常跳转条件,并将分析后的信息存在在数据所在的缓存对应的附加信息寄存器中,供后续的处理单元读取使用。
缓存1内数据附加信息寄存器和缓存2内数据附加信息寄存器组合在一起也是内部缓存深度为1的一个乒乓缓存。在缓存实体内部,缓存1和缓存2是物理上分开的存储器器件,它们是对称的,可以由单端口RAM构成,也可以由寄存器组搭建;缓存内的存储结构是:数据+数据的控制和状态信息;其中的控制和状态信息根据需要而定,可以是需要传递到下一级处理单元的数据随路信息,也可以是本模块中要用的中间参数。缓存的深度可以根据具体需要而定,一般为4、8或者16;缓存的宽度取决于数据宽度(一般是32)和控制状态信息的宽度。
每次对每个缓存(缓存1或者缓存2)的读或者写操作都是缓存的起始位置开始的,但是由于乒乓缓存存在异常跳转的情况,所以有可能某个缓存没有写满,所以需要有“写指针寄存器”来表示对当前缓存的写操作进行到了哪个位置(表示了当前缓存中有多少数据是有效的),这个寄存器在An开始对某个缓存进行写操作的时候复位,在进行写操作的同时不断更新,当写操作发生跳转的时候,写指针寄存器保留当时的值不变;当Dn对这个缓存进行读操作的时候,会参考这个写指针寄存器数值来指导读操作,同时每个缓存也有一个“读指针寄存器”,Dn每读一个数,就更新一次“读指针寄存器”,更新规则和更新“写指针寄存器”的一致,这样当“读指针寄存器”的数值等于“写指针寄存器”的数值的时候,就表示读空了,读空的同时,读指针清零,读操作跳转到另外一个缓存上。