多通道先进先出缓存队列控制器及访问方法

文档序号:6509622阅读:164来源:国知局
多通道先进先出缓存队列控制器及访问方法
【专利摘要】本发明实施例提供了一种多通道FIFO?queue控制器及多通道FIFO?queue访问方法,该多通道FIFO?queue控制器包括:地址确定电路和控制电路;其中,地址确定电路用于:根据业务的标识确定在数据缓存中的待访问的块的物理地址,所述数据缓存包含多个块,每个块包含m个存储单元,m为正整数;根据所述待访问的块的物理地址和待访问的数据在所述待访问的块内的地址,确定所述待访问的数据在所述数据缓存中的物理地址;所述控制电路用于:根据所述地址确定电路确定的所述待访问的数据在所述数据缓存中的物理地址访问所述待访问的数据。上述方案有助于多个业务对数据缓存的共享,有助于减少对FIFO?queue的资源的占用,且可靠性较高。
【专利说明】多通道先进先出缓存队列控制器及访问方法
【技术领域】
[0001]本发明涉及数据传送【技术领域】,尤其涉及多通道先进先出缓存队列(first infirst out queue, FIFO queue)控制器及访问方法。
【背景技术】
[0002]在传送领域,随着传输带宽越来越大(例如100G、200G或者400G),通讯设备中的现场可编程逻辑门阵列(Field Programmable Gate Array,FPGA)在处理多业务时、往往把多路的低带宽业务变换成统一位宽的时分信号(如640bit)。多业务对应的带宽可能随着时间变化。在不同业务处理之间进行适配的时候,需要一个FIFO queue对业务的数据进行缓存。在大位宽的场景下,可能非常消耗FIFO queue的资源。具体来说,可能非常消耗FIFOqueue对应的随机存储器(Random Access Memory, RAM)资源,查找表(Look Up Table, LUT)资源以及布线资源。
[0003]一个现有的解决方案(简称方案I)如图1所示。方案I将多个大位宽的FIFO实体,包封在一起作为一个多业务通道FIFO实体来使用。在数据输入侧,进来的数据流按照业务的通道号分发到对应的FIFO实体;在数据输出侧,根据业务的通道号,从不同的FIFO实体中读取数据。
[0004]上述方案I中,多业务通道FIFO queue中不同业务通道对应的RAM缓存和控制电路都不能共享,多业务通道FIFO queue所使用的RAM的大小必须按照最大业务带宽颗粒的大小来设计,当业务通道数量很多(例如>=64)时,RAM的资源耗费相当巨大,例如一个640bit位宽,80个业务通道,每业务通道最深128个单元的多业务通道FIF0,在FPGA上设计需要近400块RAM,而一片较大的FPGA上总的RAM资源也就2000多块。并且,在实际应用场景中,只有非常少数的几个业务通道会有大带宽的业务,其他业务通道都是空闲的(总的带宽不变,某些业务通道带宽大,其他的业务通道必然带宽小或者没有),这样就造成了RAM资源的浪费。
[0005]另外一种解决方案(下面简述方案2)如图2所示,该方案2中,所有业务通道共享一块大的缓存,每个业务通道按照业务颗粒大小分配空间,每个业务通道的空间通过一个循环链表组织起来。每个业务通道都有自己的链表指针,每个业务通道都通过当前的读写指针进行缓存的读写操作。
[0006]该方案2中所有业务通道的空间通过循环链表形式组织起来,当链表的指针发生异常错误时,会导致无法恢复的错误,可靠性较差。

【发明内容】

[0007]本发明实施例提供了一种多通道先进先出缓存队列控制器及多通道先进先出缓存队列访问方法,有助于减少对多个业务进行处理时,对FIFO queue的资源占用较多的问题。
[0008]第一方面,提供了一种多通道FIFO queue控制器,包括:地址确定电路和控制电路;
[0009]所述地址确定电路用于:
[0010]根据业务的标识确定在数据缓存中的待访问的块的物理地址,所述数据缓存包含多个块,每个块包含m个存储单元,m为正整数;
[0011]根据所述待访问的块的物理地址和待访问的数据在所述待访问的块内的地址,确定所述待访问的数据在所述数据缓存中的物理地址;
[0012]所述控制电路用于:
[0013]根据所述地址确定电路确定的所述待访问的数据在所述数据缓存中的物理地址访问所述待访问的数据。
[0014]第一方面的第一种可能的实现方式中,所述地址确定电路具体用于:
[0015]根据所述业务的标识,确定所述待访问的块的逻辑地址和所述待访问的数据在所述待访问的块内的地址;
[0016]根据所述待访问的块的逻辑地址,以及所述待访问的块的逻辑地址与所述待访问的块的物理地址之间的映射关系,确定所述待访问的块的物理地址;
[0017]根据所述待访问的块的物理地址和所述待访问的数据在所述待访问的块内的地址,确定所述待访问的数据在所述数据缓存中的物理地址。
[0018]根据第一方面的第一种可能的实现方式,在第一方面的第二种可能的实现方式中,所述地址确定电路具体用于:
[0019]根据所述业务的标识查询逻辑地址表,获取所述待访问的数据的逻辑地址;
[0020]根据所述待访问的数据的逻辑地址得到所述待访问的块的第一逻辑地址logic_blk_addr 和块内偏移地址 logic_shift_addr ;
[0021]根据所述业务的标识查询首块地址表,得到所述业务占用的多个块中首个块的逻辑地址 f irst_blk_addr ;
[0022]根据待访问的块的第二逻辑地址查询块地址表,得到所述待访问的块的物理地址,所述待访问的块的第二逻辑地址等于logic_blk_addr与f irst_blk_addr的和;
[0023]根据所述待访问的块的物理地址和所述块内偏移地址,确定所述待访问的数据在所述数据缓存中的物理地址;
[0024]其中,所述块地址表中记载所述业务的标识,以及所述业务占用的多个块的第二逻辑地址和所述业务占用的多个块的物理地址的映射关系,所述业务占用的多个块的第二逻辑地址和所述业务占用的多个块的物理地址一一对应,所述待访问的块的第二逻辑地址取值为[first_blk_addr, first_blk_addr+n]中任一整数,所述η为所述业务占用数据缓存中的块的数量;
[0025]所述首块地址表中记载所述业务的标识,以及所述业务占用的多个块中首个块的逻辑地址;
[0026]所述逻辑地址表中记载所述业务的标识,以及所述待访问的数据的逻辑地址,所述待访问的数据的逻辑地址的取值为[0,mX所述业务占用的块的数量]中任一整数。
[0027]根据第一方面的第一种可能的实现方式,在第一方面的第三种可能的实现方式中,所述地址确定电路具体用于:
[0028]根据所述业务的标识查询逻辑地址表,获取所述待访问的数据的逻辑地址;[0029]根据所述待访问的数据的逻辑地址,得到所述待访问的块的逻辑地址logic_blk_addr和块内偏移地址logic_shift_addr ;
[0030]根据所述业务的标识和所述待访问的块的逻辑地址logiC_blk_addr查询块重映射表,得到所述待访问的块的物理地址;
[0031 ] 根据所述待访问的块的物理地址和所述块内偏移地址,确定所述待访问的数据在所述数据缓存中的物理地址;
[0032]其中,所述逻辑地址表中记载所述业务的标识,以及所述待访问的数据的逻辑地址,所述待访问的数据的逻辑地址的取值为[0,mX所述业务占用的块的数量]中任一整数;
[0033]所述块重映射表中记载所述业务的标识、以及所述业务占用的多个块的逻辑地址和所述业务占用的多个块的物理地址的映射关系,所述业务占用的多个块的逻辑地址和所述业务占用的多个块的物理地址一一对应,所述待访问的块的逻辑地址取值为[0,n]中的任一整数,所述η为所述业务占用数据缓存中的块的数量。
[0034]根据第一方面的第二种可能的实现方式或者第三种可能的实现方式,在第一方面的第四种可能的实现方式中,所述地址确定电路还用于:
[0035]在所述控制电路访问所述待访问的数据之后,使用所述业务下次访问的数据的逻辑地址替换所述逻辑地址表中所述待访问的数据的逻辑地址。
[0036]第二方面,提供了一种多通道FIFO queue的访问方法,包括:
[0037]根据业务的标识,确定在数据缓存中待访问的块的物理地址,所述数据缓存包含多个块,每个块包含m个存储单元,m为正整数;
[0038]根据所述待访问的块的物理地址和待访问的数据在所述待访问的块内的地址,确定所述待访问的数据在所述数据缓存中的物理地址;
[0039]根据所述地址确定电路确定的所述待访问的数据在所述数据缓存中的物理地址访问所述待访问的数据。
[0040]第二方面的第一种可能的实现方式中,所述确定所述待访问的数据在所述数据缓存中的物理地址,包括:
[0041]根据所述业务的标识,确定所述待访问的块的逻辑地址和所述待访问的数据在所述待访问的块内的地址;
[0042]根据所述待访问的块的逻辑地址,以及根据所述待访问的块的逻辑地址与所述待访问的块的物理地址之间的映射关系,确定所述待访问的块的物理地址;
[0043]根据所述待访问的块的物理地址和所述待访问的数据在所述待访问的块内的地址,确定所述待访问的数据在所述数据缓存中的物理地址。
[0044]根据第二方面的第一种可能的实现方式,在第二方面的第二种可能的实现方式中,根据所述业务的标识,确定所述待访问的块的逻辑地址和所述待访问的数据在所述待访问的块内的地址,根据所述待访问的块的逻辑地址,以及根据所述待访问的块的逻辑地址与所述待访问的块的物理地址之间的映射关系,确定所述待访问的块的物理地址,根据所述待访问的块的物理地址和所述待访问的数据在所述待访问的块内的地址,确定所述待访问的数据在所述数据缓存中的物理地址,具体包括:
[0045]根据所述业务的标识查询逻辑地址表,获取所述待访问的数据的逻辑地址;[0046]根据所述待访问的数据的逻辑地址得到所述待访问的块的第一逻辑地址logic_blk_addr 和块内偏移地址 logic_shift_addr ;
[0047]根据所述业务的标识查询首块地址表,得到所述业务占用的多个块中首个块的逻辑地址 f irst_blk_addr ;
[0048]根据待访问的块的第二逻辑地址查询块地址表,得到所述待访问的块的物理地址,所述待访问的块的第二逻辑地址等于logic_blk_addr与f irst_blk_addr的和;
[0049]根据所述待访问的块的物理地址和所述块内偏移地址,确定所述待访问的数据在所述数据缓存中的物理地址;
[0050]其中,所述块地址表中记载所述业务的标识,以及所述业务占用的多个块的第二逻辑地址和所述业务占用的多个块的物理地址的映射关系,所述业务占用的多个块的第二逻辑地址和所述业务占用的多个块的物理地址一一对应,所述待访问的块的第二逻辑地址取值为[first_blk_addr, first_blk_addr+n]中任一整数,所述η为所述业务占用数据缓存中的块的数量;
[0051]所述首块地址表中记载所述业务的标识,以及所述业务占用的多个块中首个块的逻辑地址;
[0052]所述逻辑地址表中记载所述业务的标识,以及所述待访问的数据的逻辑地址,所述待访问的数据的逻辑地址的取值为[0,mX所述业务占用的块的数量]中任一整数。
[0053]根据第二方面的第一种可能的实现方式,在第二方面的第三种可能的实现方式中,根据所述业务的标识,确定所述待访问的块的逻辑地址和所述待访问的数据在所述待访问的块内的地址,根据所述待访问的块的逻辑地址,以及根据所述待访问的块的逻辑地址与所述待访问的块的物理地址之间的映射关系,确定所述待访问的块的物理地址,根据所述待访问的块的物理地址和所述待访问的数据在所述待访问的块内的地址,确定所述待访问的数据在所述数据缓存中的物理地址,具体包括:
[0054]根据所述业务的标识查询逻辑地址表,获取所述待访问的数据的逻辑地址;
[0055]根据所述待访问的数据的逻辑地址,得到所述待访问的块的逻辑地址logic_blk_addr和块内偏移地址logic_shift_addr ;
[0056]根据所述业务的标识和所述待访问的块的逻辑地址logic_blk_addr查询块重映射表,得到所述待访问的块的物理地址;
[0057]根据所述待访问的块的物理地址和所述块内偏移地址,确定所述待访问的数据在所述数据缓存中的物理地址;
[0058]其中,所述逻辑地址表中记载所述业务的标识,以及所述待访问的数据的逻辑地址,所述待访问的数据的逻辑地址的取值为[0,mX所述业务占用的块的数量]中任一整数;
[0059]所述块重映射表中记载所述业务的标识、以及所述业务占用的多个块的逻辑地址和所述业务占用的多个块的物理地址的映射关系,所述业务占用的多个块的逻辑地址和所述业务占用的多个块的物理地址一一对应,所述待访问的块的逻辑地址取值为[0,n]中的任一整数,所述η为所述业务占用数据缓存中的块的数量。
[0060]根据第二方面的第三种可能的实现方式或者第二方面的第四种可能的实现方式,在第二方面的第五种可能的实现方式中,在所述控制电路访问所述待访问的数据之后,还包括:
[0061]使用所述业务下次访问的数据的逻辑地址替换所述逻辑地址表中所述待访问的数据的逻辑地址
[0062]本发明实施例的有益效果包括:
[0063]本发明实施例提供了多通道FIFO queue控制器及多通道FIFO queue访问方法。多通道FIFO queue控制器包地址确定电路和控制电路。数据缓存被分为多个块,地址确定电路可以根据业务的标识确定待访问的块的物理地址。地址确定电路还可以据此进一步确定待访问的数据在数据缓存中的物理地址。控制电路可以根据地址确定电路确定的待访问的数据在数据缓存中的物理地址访问待访问的数据。因此,上述技术方案有助于多个业务对数据缓存的共享,有助于减少对FIFO queue的资源的占用。此外,本发明实施例提供了待访问的数据的物理地址的确定方法。即根据业务的标识,确定待访问的块的物理地址,并根据待访问的块的物理地址和待访问的数据在待访问的块内地址,确定待访问的数据在数据缓存中的物理地址。根据待访问的数据在数据缓存中的物理地址访问待访问的数据。上述技术方案中,确定待访问的数据在数据缓存中的物理地址的过程中,不需要依赖链表指针,可靠性较高。
【专利附图】

【附图说明】
[0064]图1为现有技术的方案I中FIFO queue读写数据的示意图;
[0065]图2为现有技术的方案2中FIFO queue读写数据的示意图;
[0066]图3为本发明实施例提供的多通道FIFO queue控制器的结构示意图;
[0067]图4为本发明实施例提供的实例一的多通道FIFO queue控制器和数据缓存的结构示意图;
[0068]图5为本发明实施例提供的CH_BLK_MAP_TBL与其他各表的关联关系示意图;
[0069]图6为本发明实施例提供的表项自动刷新单元的工作过程的示意图;
[0070]图7为本发明实施例提供的本实例一提供的多通道FIFO queue控制器的逻辑框图;
[0071]图8为本发明实施例提供的实例二的多通道FIFO queue控制器和数据缓存的结构示意图;
[0072]图9为本发明实施例提供的实例二中块重映射表的数据结构的示意图;
[0073]图10为本发明实施例提供的一个例子中BLK_REMAP_TBL的内容的示意图;
[0074]图11为本发明实施例提供的多通道FIFO queue访问方法的流程图。
【具体实施方式】
[0075]下面结合说明书附图,对本发明实施例提供的一种多通道先进先出缓存队列控制器及多通道先进先出缓存队列访问方法的【具体实施方式】进行说明。
[0076]本发明实施例涉及的业务可以承载在开放系统互连参考模型(Open SystemsInterconnection reference model, OSI reference model)定义的第一层至第七层中的至少一层。例如,所述业务可以是承载在第三层的业务或者承载在第四层的业务。所述承载在第三层的业务可以是网际协议(Internet Protocol, IP)业务。所述承载在第四层的业务可以是传输控制协议(Transmission Control Protocol,TCP)业务或者用户数据报协议(User Datagram ProtocoI,UDP)业务。所述业务可以是视频传输业务、音频传输业务或者文本传输业务。
[0077]首先对本发明实施例提供的多通道FIFO queue控制器进行详细说明。
[0078]如图3所示,本发明实施例提供的FIFO queue控制器,包括:地址确定电路301和控制电路302 ;其中:
[0079]地址确定电路301用于:
[0080]根据业务的标识确定在数据缓存中的待访问的块的物理地址;根据待访问的块的物理地址和待访问的数据在所述待访问的块内的地址,确定待访问的数据在所述数据缓存中的物理地址;
[0081]在本发明实施例中,数据缓存包含多个块,每个块内都包含有m个存储单元,m为正整数,数据缓存可以为RAM或其他常用存储器。
[0082]控制电路302用于:
[0083]根据所述地址确定电路302确定的所述待访问的数据在所述数据缓存中的物理地址访问所述待访问的数据。
[0084]上述访问的操作可以是例如读和/或写的操作,待访问的数据即待读出或写入的数据,待访问的块即待读出或写入的数据所在的块。
[0085]本发明实施例中,数据缓存预先被划分为若干个块(块的总数 > 最大可能的业务数,在本发明实施例适用的多业务的应用场景中,块的总数不小于2个),每个块m个单元,m的大小可以按照多业务中的最小带宽需求来设计。由于总的业务带宽不变,当多通道FIFO实体在处理大带宽的业务时,必然业务通道比较少,从而对于每个业务来说,其对应的业务通道能够分配到更多的块;当处理小带宽的业务时,业务通道变多,对于每个业务来说,其对应的业务通道仍然能够分配到满足要求的块。多业务的应用场景下,每个业务分配的块的多少可以根据该业务实际需要占用带宽的大小来决定,占用带宽多的可分配较多的块,否则,分配较少的块,也可根据各业务带宽需求的变化,对各业务分配的块的数量进行实时调整。
[0086]上述地址确定电路301在具体实施时,可以通过一个整体的电路模块来实现,也可以依据不同的访问的需求例如读操作以及写操作的要求,分设在两块不同的电路模块上,以分别实现读操作的地址确定功能和写操作的地址确定功能,具体的电路实现方式属于现有技术,在此不再赘述。
[0087]类似地,上述控制电路302,在具体实施时,可以通过一个整体的电路模块来实现,也可以依据不同的访问的需求例如读操作以及写操作的要求,分设在两块不同的电路模块上,以分别实现对读和写操作的控制。
[0088]本发明实施例提供的上述多通道FIFO queue控制器中,地址确定电路301,进一步用于根据业务的标识(例如业务对应的通道号等),确定所述待访问的块的逻辑地址和所述待访问的数据在所述待访问的块内的地址;
[0089]并根据所述待访问的块的逻辑地址,以及所述待访问的块的逻辑地址与所述待访问的块的物理地址之间的映射关系,确定所述待访问的块的物理地址;
[0090]根据所述待访问的块的物理地址和所述待访问的数据在所述待访问的块内的地址,确定所述待访问的数据在所述数据缓存中的物理地址。
[0091]更进一步地,上述地址确定电路301根据业务的标识(例如业务对应的通道号等),确定所述待访问的块的逻辑地址和所述待访问的数据在所述待访问的块内的地址;根据所述待访问的块的逻辑地址,以及所述待访问的块的逻辑地址与所述待访问的块的物理地址之间的映射关系,确定所述待访问的块的物理地址;根据所述待访问的块的物理地址和所述待访问的数据在所述待访问的块内的地址,确定所述待访问的数据在所述数据缓存中的物理地址,在具体实施时,可以有两种具体的实施方式,具体说明如下:
[0092]第一种方式:
[0093]地址确定电路根据业务的标识(例如业务对应的通道号)查询逻辑地址表,获取所述待访问的数据的逻辑地址;
[0094]根据所述待访问的数据的逻辑地址得到所述待访问的块的第一逻辑地址logic_blk_addr 和块内偏移地址 logic_shift_addr ;
[0095]根据所述业务的标识查询首块地址表,得到所述业务占用的多个块中首个块的逻辑地址 f irst_blk_addr ;
[0096]根据待访问的块的第二逻辑地址查询块地址表,得到所述待访问的块的物理地址,所述待访问的块的第二逻辑地址等于logic_blk_addr与first_blk_addr的和(即:logic_blk_addr+first_blk_addr);
[0097]根据所述待访问的块的物理地址和所述块内偏移地址,确定所述待访问的数据在所述数据缓存中的物理地址;
[0098]其中,所述块地址表中记载:所述业务的标识,以及所述业务占用的多个块的第二逻辑地址和所述业务占用的多个块的物理地址的映射关系,所述业务占用的多个块的第二逻辑地址和所述业务占用的多个块的物理地址一一对应,所述待访问的块的第二逻辑地址取值为[first_blk_addr, first_blk_addr+n]中任一整数,所述η为所述业务占用数据缓存中的块的数量;
[0099]所述首块地址表中记载:所述业务的标识,以及所述业务占用的多个块中首个块的逻辑地址;
[0100]所述逻辑地址表中记载:所述业务的标识,以及所述待访问的数据的逻辑地址,所述待访问的数据的逻辑地址的取值为[0,mx所述业务占用的块的数量]中任一整数。
[0101]对于多业务的应用场景来说,上述块地址表中,可以记载多个业务的标识、每个业务分别占用的所有块的第二逻辑地址和每个业务占用的所有块的物理地址的映射关系。
[0102]类似地,上述首块地址表中,可以记载多个业务的标识、每个业务分别占用的所有块中首个块的逻辑地址。
[0103]类似地,上述逻辑地址表中,可以记载多个业务的标识、每个业务待访问的数据的逻辑地址(当前访问操作涉及的逻辑地址)。
[0104]上述待访问的数据的逻辑地址、待访问的块的第一逻辑地址、首个块的逻辑地址和待访问的块的第二逻辑地址等逻辑地址,均为线性,以某业务A待访问的数据的逻辑地址为29,每个块10个存储单元为例,地址确定电路根据所述待访问的数据的逻辑地址(29)得到所述待访问的块的第一逻辑地址logic_blk_addr和块内偏移地址logic_shift_addr的过程,实际上就是以待访问的数据的逻辑地址除以每个块的存储单元数得到,即:待访问的块的第一逻辑地址(logic_blk_add)等于所述待访问的数据的逻辑地址(29)除以每个块的存储单元数(10)得到的商(2),块内偏移地址(logic_shift_addr)等于所述待访问的数据的逻辑地址(29)除以每个块的存储单元数(10)得到的余数(9)。
[0105]对于多业务的场景来说,每个业务所占用的数据缓存中的块是不同的,如果数据缓存中所有块统一按照线性来设计其逻辑地址(例如0、1、2、3……)相应地,在首块地址表中,每个业务所占用的所有块的首个块的逻辑地址不同,还是以上述某业务A为例,例如该业务A占用的占用的所有块的首个块的地址为12,则待访问的块的第二逻辑地址等于14(12+2),根据块地址表中的每个块的第二逻辑地址和物理地址之间的映射关系,就可以查找到所述待访问的块的物理地址。
[0106]上述说明中,为了说明的方便,将待访问的块的逻辑地址采用第一逻辑地址和第二逻辑地址来分别称呼,实际上,第一逻辑地址表征的是针对某个业务所占用的所有块中,待访问的块到底是第几个块,某业务A待访问的数据的逻辑地址为29,每个块10个存储单元为例,待访问的块的第一逻辑地址(logic_blk_add)等于2,意味着待访问的块为该业务A所占用的所有块中第2个块(从第O个块开始计),第二逻辑地址表征的是对于整个数据缓存中所有块来说,其实际的逻辑地址是多少,例如业务A所占用的所有块的首个块的逻辑地址为12时,由于逻辑地址是线性的,业务A待访问的块的第二逻辑地址为14。
[0107]第二种方式:
[0108]地址确定电路根据所述业务的标识(例如业务对应的通道号)查询逻辑地址表,获取所述待访问的数据的逻辑地址;
[0109]根据所述待访问的数据的逻辑地址,得到所述待访问的块的逻辑地址logic_blk_addr和块内偏移地址logic_shift_addr ;
[0110]根据所述业务的标识和所述待访问的块的逻辑地址logic_blk_addr查询块重映射表,得到所述待访问的块的物理地址;
[0111]根据所述待访问的块的物理地址和所述块内偏移地址,确定所述待访问的数据在所述数据缓存中的物理地址;
[0112]其中,所述逻辑地址表中记载所述业务的标识,以及所述待访问的数据的逻辑地址,所述待访问的数据的逻辑地址的取值为[0,mX所述业务占用的块的数量]中任一整数;
[0113]所述块重映射表中记载所述业务的标识、以及所述业务占用的多个块的逻辑地址和所述业务占用的多个块的物理地址的映射关系,所述业务占用的多个块的逻辑地址和所述业务占用的多个块的物理地址一一对应,所述待访问的块的逻辑地址取值为[0,n]中的任一整数,所述n为所述业务占用数据缓存中的块的数量。
[0114]第二种方式与第一种方式的区别在于,第二种方式使用块重映射表来替代块地址表和首块地址表的作用。
[0115]对于多业务的应用场景来说,上述逻辑地址表中,可以记载多个业务的标识、每个业务待访问的数据的逻辑地址(当前访问操作涉及的逻辑地址)。
[0116]类似地,上述块重映射表中,可以记载多个业务的标识、以及每个业务占用的所有块的逻辑地址和每个业务占用的所有块的物理地址的映射关系。
[0117]对于块重映射表来说,其记载有每个业务,每个业务占用的所有块的逻辑地址和对应的物理地址,在具体实施时,该表可以是一个n*x大小的二维表(η为数据缓存的分块总数,X为业务的总数),有若干纪录项,每个纪录项记录第i个业务第j个块的物理地址,i的取值为(O-X)中的任一整数,j的取值为(O-η)中任一整数。
[0118]第二种方式中,上述地址确定电路根据所述业务的标识(例如业务对应的通道号)查询逻辑地址表,获取所述待访问的数据的逻辑地址;以及根据所述待访问的数据的逻辑地址,得到所述待访问的块的逻辑地址logic_blk_addr和块内偏移地址logic_shift_add的步骤,与前述第一种方式相同,在此不再赘述。
[0119]为了更好地说明本发明实施例提供的上述多通道FIFO queue控制器的结构和功能,下面以两个具体实例对其进行详细说明:
[0120]实例一:
[0121]如图4所示,在本实例一的多通道FIFO queue控制器中,地址确定电路通过两个独立的电路模块来实现即:FIF 0写地址重映射单元401 (负责确定写操作的地址)和FIFO读地址重映射单元402 (负责确定读操作的地址),控制电路(在图4中未示意出)分别通过发出RAM读写使能信号(ram_wr_en,ram_rd_en),控制数据缓存(RAM) 403中数据的读和写的操作。
[0122]上述FIFO写地址重映射单元401和FIFO读地址重映射单元402的功能相互独立,对于整个多通道FIFO queue控制器来说,当前可只执行RAM403的读或写操作,也可以同时执行RAM的读和写的操作。
[0123]RAM403被划分为η (η >最大可能的业务通道数)个块,每个块m个单元,m的大小可以按照各业务通道中的最小带宽需求来设计。
[0124]RAM403的访问地址,分为两个层次:逻辑地址和物理地址。逻辑地址在某个FIFO业务通道的空间内是线性的,例如RAM中的块的逻辑地址为0、1、2、3……等;通过这个逻辑地址,可以产生数据缓存空满的状态告警和是否达到设置的水线等告警信息,物理地址则是RAM中的实际访问地址。
[0125]如图4所示,对于FIFO写地址重映射单元401和FIFO读地址重映射单元402来说,分别包含四个表:块数量表(BLK_NUM_TBL)、首块地址表(FIRST_BLK_ADDR_TBL)、逻辑地址表(L0GIC_ADDR_TBL)和块地址表(BLK_ADDR_TBL),FIFO写地址重映射单元401和FIFO读地址重映射单元402通过分别查询各自包含的表,完成逻辑地址到物理地址的重映射(即确定当前业务通道读写操作访问的物理地址),上述过程对于FIFO写地址重映射单元401和FIFO读地址重映射单元402来说是类似的,以下针对读和写的地址重映射过程进行统一的说明。
[0126]FIFO写地址重映射单元401和FIFO读地址重映射单元402包含的各表的内容说明如下:
[0127]块数量表(BLK_NUM_TBL):在多应用的场景下,该表的大小为最大可能的业务数X,内容为每个业务占用的缓冲(BUFFER)块数。例如第5个地址空间的内容为6,表示业例如业务通道号为5的业务占共用了 6个块。
[0128]首块地址表(FIRST_BLK_ADDR_TBL):在多应用的场景下,该表大小为最大可能业务数,地址为业务通道号,内容为各业务通道号的业务所占用的块地址在BLK_ADDR_TBL表内的首地址(即占用的所有块中首个块的逻辑地址)。[0129]逻辑地址表(L0GIC_ADDR_TBL):该表大小为最大可能业务数x,地址为业务通道号,内容为该业务待读(写)的数据的线性逻辑地址。逻辑地址范围=(O, m*占用块数)中任一整数。换言之,FIFO写地址重映射单元401中包含的逻辑地址表的内容为各业务待写的线性逻辑地址,FIFO读地址重映射单元402中包含的逻辑地址表的内容为各业务待读的线性逻辑地址,逻辑地址可用于判断数据缓存的状态,如空满、水线等等。
[0130]块地址表(BLK_ADDR_TBL):该表大小为RAM403的分块数n,记载了每个业务占用的所有块的实际块地址(即物理地址)。
[0131]如图4所示,实例一中,除了 FIFO写地址重映射单元401和FIFO读地址重映射单元402之外,该多通道FIFO queue控制器还可以包括:表项自动刷新单元404,表项自动刷新单元404分别与FIFO写地址重映射单元401和FIFO读地址重映射单元402相连,用于根据通道-块映射表(CH_BLK_MAP_TBL)分别生成并刷新FIFO写地址重映射单元401和FIFO读地址重映射单元402中包含的块数量表(BLK_NUM_TBL)、块地址表(BLK_ADDR_TBL)和首块地址表(FIRST_BLK_ADDR_TBL)的表项。
[0132]CH_BLK_MAP_TBL的内容是根据用户的需求预先设置的,大小为RAM的分块数n,内容为业务通道号。例如业务通道号为2 (简称业务通道2)的业务占用第2、3个块,则CH_BLK_MAP_TBL的第2、3个地址空间的内容都为2。
[0133]以一个简单的实例说明上述各表的内容以及它们之间的关联关系,在该实例中,多通道FIFO实体的数据缓存(RAM)分块数为12,最多业务数为6,实际使用的只有3个业务(对应的业务通道号为0、2、5)情况,其中:
[0134]业务通道O的业务占用了 0、3、6、9的块;
[0135]业务通道2的业务占用了 1、4、7、10的块;
[0136]业务通道5的业务占用了 2、5、8、11的块;
[0137]如图5所示,CH_BLK_MAP_TBL中,不同填充图案代表一个业务通道,填充右向斜线的块均为通道号为O的业务占用的块(0、3、6、9),填充左向斜线的块均为业务通道号为2的业务占用的块(1、4、7、10),填充交叉网格线的块均为业务通道号为5的业务占用的块(2、
5、8、11)。
[0138]在BLK_NUM_TBL中,业务通道号为0、2和5的业务占用的块数均为4、其他业务占用的块数则均为0,这三个业务占用的块数分别使用相应的填充图案显示。
[0139]在BLK_ADDR_TBL中,记载了各业务占用的块的物理地址,例如业务通道号为O的业务占用的块的物理地址为0、3、6和9,业务通道号为2的业务占用的块的物理地址为1、
4、7和10,业务通道号为5的业务占用的块的物理地址为2、5、8和11。
[0140]相应地,在FIRST_BLK_ADDR_TBL中,业务通道号为O的业务所占有的所有块中首个块的地址为0,业务通道号为2的业务所占有的所有块中首个块的地址为4,通道号为5的业务首个块的地址为8。
[0141]FIFO写地址重映射单元401和FIFO读地址重映射单元402读写地址重映射的过程如下:
[0142]根据前级送来的业务通道号,查询块数量表(BLK_NUM_TBL)、首块地址表(FIRST_BLK_ADDR_TBL)和逻辑地址表(L0GIC_ADDR_TBL),得到该业务通道号的业务所占用的块数(blk_num)、该业务待读写的块的逻辑地址(logic_blk_addr)和块内偏移地址(logic_shift_addr)、该业务所占用的所有块中首个块的逻辑地址(first_blk_addr)。
[0143]查询该业务所占用的块数(blk_num),可以获知该业务所占用的块的逻辑地址范围,在该业务需读写的块的逻辑地址在逻辑地址范围内时,也就是说该业务待读写的块的逻辑地址未超出该逻辑地址范围的上限时,继续根据logic_blk_addr+first_blk_addr查询块地址表(BLK_ADDR_TBL),得到该业务待读写的块的物理地址(phy_blk_addr),根据该业务待读写的块的物理地址(phy_bIk_addr)和块内偏移地址(logic_shift_addr),确定该业务待读写的数据在数据缓存中的物理地址(phy_addr),完成逻辑地址到物理地址的映射。同时,将{logic_blk_addr, logic_shift_addr}+l作为下次读写操作的逻辑地址(logic_addr_next)写回(L0GIC_ADDR_TBL),更新逻辑地址表。
[0144]随着读写操作的进行,由于逻辑地址表中记载的逻辑地址不断向前推进,有可能会出现逻辑地址超出业务占用的块的地址范围,为了防止读写操作访问非该业务对应的缓存空间,在本发明实施例中,FIFO写地址重映射单元401和FIFO读地址重映射单元402如果查询各自的逻辑地址表,判断该业务待读写的块的逻辑地址超出逻辑地址的范围的上限时,将逻辑地址表中该业务待读写的块的逻辑地址置为0,意味着本次读写需要从该业务占用的首个块开始,保证读写操作都在该业务占用的块内进行。
[0145]还有一种情况,如果在上述地址重映射的过程中,FIFO写地址重映射单元401和FIFO读地址重映射单元402读取的该业务占用数据缓存的块数为O时,确定该业务的业务通道号为非法,读写控制单元会据此情况,控制该业务的读写使能为O。
[0146]本实例一中,还提供了根据业务待读写的逻辑地址进行空满告警和水线告警的机制,具体由FIFO告警单元405来实现,同时,前述逻辑地址表中,除了记载各业务待读和写的数据的线性逻辑地址之外,还包括记载各业务当前读和写的符号位,这样,逻辑地址表的数据结构为{写地址符号位(I比特),写地址},{读地址符号位(I比特),读地址}。
[0147]上述写地址符号位(读地址符号位)表征当前各业务写(读)的逻辑地址是否增加到等于所占空间大小的比特位。
[0148]逻辑地址表中的写地址符号位(读地址符号位)会在下述情况下发生翻转:当待写(读)的数据的逻辑地址增加到等于空间大小时,写(读)地址符号位发生一次翻转(与当前值取反,O —或者I — 0,初始值为0),并且,此时待写(读)的数据的逻辑地址将归O。
[0149]FIFO告警单元405针对每个业务,通过下述方式计算水线值:
[0150]1、待读的数据的逻辑地址(以下简称为读逻辑地址)大于待写的数据的逻辑地址(以下简称写逻辑地址)时,水线值=地址空间大小-(读逻辑地址-写逻辑地址);
[0151]2、读地址小于写地址时,水线值=写逻辑地址-读逻辑地址;
[0152]高水线告警:当水线值大于预先设定的高水线值时,上报高水线告警,否则撤销告
m.1=I ,
[0153]低水线告警:当水线值小于预先设定的低水线值时,上报低水线告警,否则撤销告m.1=I ,
[0154]空告警:当读地址符号位=写地址符号位,且读逻辑地址=写逻辑地址,空告警有效,否则无效;
[0155]满告警:读地址符号位古写地址符号位,且读逻辑地址=写逻辑地址,满告警有效,否则无效;[0156]写溢出告警:读地址符号位古写地址符号位,且读逻辑地址〈写逻辑地址,写溢出告警有效,否则无效;
[0157]读溢出告警:当读地址符号位=写地址符号位,且读逻辑地址〉写逻辑地址,读溢出告警有效,否则无效。
[0158]由于上述块数量表(BLK_NUM_TBL )、块地址表(BLK_ADDR_TBL )和首块地址表(FIRST_BLK_ADDR_TBL)都是根据业务通道-块映射表(CH_BLK_MAP_TBL)自动生成,在用户根据需求实时更新CH_BLK_MAP_TBL的内容时,本发明实施例还提供了相应的表项刷新的机制,进一步地,表项自动刷新单元404,还用于根据用户预先配置的业务通道-块映射表,生成块数量表、首块地址表和块地址表作为主表以供FIFO写地址重映射单元和FIFO读地址重映射单元进行查询,并备份块数量表、首块地址表和块地址表作为备表。
[0159]由于用户可能会根据需求实时更新CH_BLK_MAP_TBL的内容,因此,上述表项自动刷新单元,还用于周期性地按照用户对业务通道-块映射表的配置的内容,对块数量表、首块地址表和块地址表的备表进行刷新,并将刷新后的各备表切换成对应的主表以供FIFO写地址重映射单元和FIFO读地址重映射单元进行查询。
[0160]表项自动刷新单元的工作过程如图6所示,生成FIFO写地址重映射单元和FIFO读地址重映射单元中的BLK_NUM_TBL、FIRST_BLK_ADDR_TBL和BLK_ADDR_TBL的主表和备表,由多通道FIFO工作逻辑操作主表,由表项自动刷新单元操作备表并实时进行备表的刷新和主备的切换。
[0161]表项自动刷新单元可保证主备表信息的一致性,并且刷新表项的操作不会影响多通道FIFO queue控制器的读写过程,实现了根据用户的需求动态增删业务,并且不会对原有业务造成影响。
[0162]表项刷新单元生成各表以及每一次刷新各表的过程实际上是相同的,为了简化说明,下面以刷新各表的过程为例详细进行说明如下:
[0163]每y个周期遍历业务通道-块映射表,所述y=n*x,n为数据缓存的分块数,x为业务的数量(最大可能的业务的总数);在y个周期内,正好遍历了 CH_BLK_MAP_TBL x次。
[0164]每次遍历时,针对每个业务,将该业务占用的块的数量进行累加,统计各业务占用的块的数量,写入待刷新的块数量表(备表);
[0165]每次遍历时,针对数据缓存中的每个块,将该块对应的物理地址写入待刷新的块地址表(备表);
[0166]每次遍历时,针对数据缓存中的每个块,当其为被占用的业务对应的首个块时,将该块的逻辑地址写入待刷新的首块地址表(备表)。
[0167]图7所示的是本实例一提供的多通道FIFO queue控制器的逻辑框图,数据缓存分为η个块,各业务分块共享数据缓存,地址重映射逻辑(例如可以由地址重映射单元实现)可以根据读写的业务通道号,确定读写操作在数据缓存中的访问地址,同时空满状态产生逻辑(例如可以由FIFO告警单元实现)根据逻辑地址产生业务存储空间空满的状态报警,重映射表项刷新逻辑(由表项自动刷新单元)对重映射所需的表项进行刷新。
[0168]实例二:
[0169]本实例二提供的多通道FIFO queue控制器的结构与工作原理与实例一提供的多通道FIFO queue控制器类似,如图8所示,该多通道FIFO queue控制器也包括FIFO写地址重映射单元801 (负责确定写操作的地址)和FIFO读地址重映射单元802 (负责确定读操作的地址)、数据缓存803、读写控制单元(图8中未示意出)、表项自动刷新单元804和FIFO告警单元805,所不同的是,对于FIFO写地址重映射单元801和FIFO读地址重映射单元802来说,其包含的表项与实例一不同。
[0170]具体来说,如图8所示,FIFO写地址重映射单元801和FIFO读地址重映射单元802中分别包含数量表(BLK_NUM_TBL)、逻辑地址表(L0GIC_ADDR_TBL)和块重映射表(BLK_REMAP_TBL),其中:
[0171]块数量表和逻辑地址表的内容与实例一相同,在此不再赘述;
[0172]块重映射表的数据结构如图9所示,该表是一个n*x大小的二维表(η为RAM分块数,X为最大可能的业务数),内容为某个业务通道号为i (i取值为(O?X)中任一整数)的业务所占用的第j (j取值为(O?η)中任一整数)个块的物理地址k。
[0173]实际上实例二中的BLK_REMAP_TBL在地址的重映射过程中,实现了实例一中FIRST_BLK_ADDR_TBL+BLK_ADDR_TBL配合在一起完成的功能,该表的占用的存储空间比单个FIRST_BLK_ADDR_TBL或单个BLK_ADDR_TBL大,是以空间变大换取复杂度的降低另一种实施方式。
[0174]还是以数据RAM分块数为12,最大可能的业务数量为6,实际使用的只有3个通道(通道号为0、2、5)情况为例,BLK_REMAP_TBL的内容如图10所示,通道O占用了 0、3、6、9的块;通道2占用了 1、4、7、10的块;通道5占用了 2、5、8、11的块。图11中填充x的空格表示不存在的通道对应的块。
[0175]相应地,在本实例二中,FIFO写地址重映射单元801和FIFO读地址重映射单元802在进行读写地址的重映射的过程也与实例一不同,具体说明如下:
[0176]FIFO写地址重映射单元801和FIFO读地址重映射单元802根据前级送来的业务通道号,分别查询块数量表(BLK_NUM_TBL)和逻辑地址表(L0GIC_ADDR_TBL),得到该业务所占用的块数(bIk_num)、该业务待读写的块的逻辑地址(1gic_bIk_addr )和块内偏移地址(logic_shift_addr);
[0177]FIFO写地址重映射单元801和FIFO读地址重映射单元802通过查询该业务所占用的块数(blk_num),可以获知该业务所占用的块的逻辑地址范围,在该业务待读写的块的逻辑地址在逻辑地址范围内时,根据该业务的业务通道号和该业务待读写的块的逻辑地址(logic_blk_addr),查询块重映射表(BLK_REMAP_TBL),得到该业务待读写的块的物理地址(phy_b Ik_addr ),根据该业务待读写的块的物理地址(phy_b Ik_addr )和块内偏移地址(logic_shift_addr ),确定该业务待读写的数据在数据缓存中的物理地址(phy_addr );并将{logic_blk_addr, logic_shift_addr} +1作为所述业务待访问的数据的逻辑地址更新逻辑地址表(L0GIC_ADDR_TBL)。
[0178]类似地,FIFO写地址重映射单元801和FIFO读地址重映射单元902如果查询各自的逻辑地址表判断该业务待读写的块的逻辑地址超出逻辑地址的范围的上限时,将逻辑地址表中该业务待读写的块的逻辑地址置为O。
[0179]如果在上述地址重映射的过程中,FIFO写地址重映射单元和FIFO读地址重映射单元读取的该业务占用数据缓存的块数为O时,确定该业务的业务通道号为非法,读写控制单元会据此情况,控制该业务的读写使能为O。[0180]对于实例二中的FIFO告警单元805来说,其具体工作原理与实例一中相同,在此不再赘述。
[0181]对于实例二中的表项自动刷新单元804,与实例一类似,分别与FIFO写地址重映射单元801和FIFO读地址重映射单元802相连,用于根据用户预先配置的通道-块映射表(CH_BLK_MAP_TBL),分别生成FIFO写地址重映射单元和FIFO读地址重映射单元中包含的块数量表(BLK_NUM_TBL)和块重映射表(BLK_REMAP_TBL)作为主表以供FIFO写地址重映射单元801和FIFO读地址重映射单元802进行查询,并备份块数量表和块重映射表作为备表。
[0182]表项自动刷新单元804,还可以周期性地按照用户对业务通道-块映射表的配置的内容,对块数量表和块重映射表的备表进行刷新,并将刷新后的各备表切换成对应的主表以供FIFO写地址重映射单元和FIFO读地址重映射单元进行查询。
[0183]进一步地,上述表项刷新单元804,具体通过下述方式刷新各表:
[0184]每y个周期遍历业务通道-块映射表,所述y=n*x,n为数据缓存的分块数,x为业务的数量(最大可能的业务的总数);
[0185]每次遍历时,针对每个业务,将该业务占用的块的数量进行累加,统计各业务占用的块的数量,写入待刷新的块数量表;
[0186]每次遍历时,针对每个业务,将该业务占用的每个块的物理地址写入待刷新的块
重映射表。
[0187]上述表项刷新单元生成块数量表和块重映射表的过程与刷新块数量表和块重映射表的过程是相同的,在此不再赘述。
[0188]本发明实施例提供的上述多通道FIFO queue控制器,可以通过多种硬件电路单元实现,例如可通过常见的FPGA实现。
[0189]采用本发明实施例提供的上述多通道FIFO queue控制器,可实现多个业务共享同一个数据缓存,大大节省了超大位宽多通道FIFO实体的RAM占用的资源,经过实验证明,在业务数为80,最小业务深度需求为16个存储单元,最大业务深度需求为128个存储单元的多通道FIFO的情形下,如果按照现有方案I的方式设计,大概需要400块RAM,而采用本发明实施例提供的上述多通道FIFO queue控制器的实现方式,则只需要不多于80块RAM(包括附加的表项),从RAM资源来看节省了约80%,而其他资源也能节省也能节约近70%,节省的资源还是非常可观的。
[0190]基于同一发明构思,本发明实施例还提供了一种多通道FIFO queue的访问方法,由于该方法所解决问题的原理与前述多通道FIFO queue控制器相似,因此该方法的实施可以参见前述多通道FIFO queue控制器的实施,重复之处不再赘述。
[0191]本发明实施例提供的多通道FIFO queue的访问方法,如图11所示,包括下述步骤:
[0192]S1101、根据业务的标识,确定在数据缓存中待访问的块的物理地址,所述数据缓存包含多个块,每个块包含m个存储单元,m为正整数;
[0193]SI 102、根据所述待访问的块的物理地址和待访问的数据在所述待访问的块内的地址,确定所述待访问的数据在所述数据缓存中的物理地址;
[0194]S1103、根据所述地址确定电路确定的所述待访问的数据在所述数据缓存中的物理地址访问所述待访问的数据。
[0195]上述SI 101中,所述确定所述待访问的数据在所述数据缓存中的物理地址,可以通过下述方式实现:
[0196]根据所述业务的标识,确定所述待访问的块的逻辑地址和所述待访问的数据在所述待访问的块内的地址;
[0197]根据所述待访问的块的逻辑地址,以及根据所述待访问的块的逻辑地址与所述待访问的块的物理地址之间的映射关系,确定所述待访问的块的物理地址;
[0198]根据所述待访问的块的物理地址和所述待访问的数据在所述待访问的块内的地址,确定所述待访问的数据在所述数据缓存中的物理地址。
[0199]进一步地,上述根据所述业务的标识,确定所述待访问的块的逻辑地址和所述待访问的数据在所述待访问的块内的地址,根据所述待访问的块的逻辑地址,以及根据所述待访问的块的逻辑地址与所述待访问的块的物理地址之间的映射关系,确定所述待访问的块的物理地址,根据所述待访问的块的物理地址和所述待访问的数据在所述待访问的块内的地址,确定所述待访问的数据在所述数据缓存中的物理地址,在具体实施时,可以通过下述两种方式实现:
[0200]方式一:
[0201 ] 根据所述业务的标识查询逻辑地址表,获取所述待访问的数据的逻辑地址;
[0202]根据所述待访问的数据的逻辑地址得到所述待访问的块的第一逻辑地址(logic_blk_addr)和块内偏移地址(logic_shift_addr);
[0203]根据所述业务的标识查询首块地址表,得到所述业务占用的多个块中首个块的逻辑地址(first_blk_addr);
[0204]根据待访问的块的第二逻辑地址查询块地址表,得到所述待访问的块的物理地址,所述待访问的块的第二逻辑地址等于logic_blk_addr与f irst_blk_addr的和;
[0205]根据所述待访问的块的物理地址和所述块内偏移地址,确定所述待访问的数据在所述数据缓存中的物理地址;
[0206]其中,所述块地址表中记载所述业务的标识,以及所述业务占用的多个块的第二逻辑地址和所述业务占用的多个块的物理地址的映射关系,所述业务占用的多个块的第二逻辑地址和所述业务占用的多个块的物理地址一一对应,所述待访问的块的第二逻辑地址取值为[first_blk_addr, first_blk_addr+n]中任一整数,所述η为所述业务占用数据缓存中的块的数量;
[0207]所述首块地址表中记载所述业务的标识,以及所述业务占用的多个块中首个块的逻辑地址;
[0208]所述逻辑地址表中记载所述业务的标识,以及所述待访问的数据的逻辑地址,所述待访问的数据的逻辑地址的取值为[0,mX所述业务占用的块的数量]中任一整数。
[0209]方式二:
[0210]与方式一不同的是,在方式二中,确定出待访问的数据在数据缓存中的物理地址需要查询逻辑地址表和块重映射表,具体来说,其过程如下:
[0211 ] 根据所述业务的标识查询逻辑地址表,获取所述待访问的数据的逻辑地址;
[0212]根据所述待访问的数据的逻辑地址,得到所述待访问的块的逻辑地址(logic_blk_addr)和块内偏移地址(logic_shift_addr);
[0213]根据所述业务的标识和所述待访问的块的逻辑地址logiC_blk_addr查询块重映射表,得到所述待访问的块的物理地址;
[0214]根据所述待访问的块的物理地址和所述块内偏移地址,确定所述待访问的数据在所述数据缓存中的物理地址;
[0215]其中,所述逻辑地址表中记载所述业务的标识,以及所述待访问的数据的逻辑地址,所述待访问的数据的逻辑地址的取值为[0,mX所述业务占用的块的数量]中任一整数;
[0216]所述块重映射表中记载所述业务的标识、以及所述业务占用的多个块的逻辑地址和所述业务占用的多个块的物理地址的映射关系,所述业务占用的多个块的逻辑地址和所述业务占用的多个块的物理地址一一对应,所述待访问的块的逻辑地址取值为[0,n]中的任一整数,所述η为所述业务占用数据缓存中的块的数量,具体数据结构可参见前述图8。
[0217]在上述S1102确定所述待访问的数据在所述数据缓存中的物理地址的步骤之后,本发明实施例提供的多通道FIFO queue的访问方法,还可以执行下述步骤:
[0218]将{logic_blk_addr, logic_shift_addr}+1作为业务下次待访问的数据的逻辑地址更新逻辑地址表。
[0219]进一步地,在上述方式一和方式二中,在根据所述业务的标识查询逻辑地址表,获取所述待访问的数据的逻辑地址的同时,还可以根据业务标识执行查询块数量表的步骤,块数量表记录有多个业务的业务标识、每个业务所占用的数据缓存的块数,查询块数量表的目的,可以获知该业务所占用的数据缓存的块数,继而确定该业务逻辑地址的范围,当判断业务待访问的数据的逻辑地址超出其逻辑地址范围的上限时,将逻辑地址表中该业务待访问的数据的逻辑地址置为O。
[0220]进一步地,在上述方式一和方式二中,当根据业务通道号查询块数量表得到业务所占用的块的数量为O时,确定该业务的业务通道号为非法,控制该业务的读写使能为O(即阻止该业务的读写操作)。
[0221]进一步地,本发明实施例提供的多通道FIFO queue的访问方法中,逻辑地址表中还记载有各业务当前读和写地址的符号位,该符号位是表征各业务待读和写的数据的逻辑地址是否增加到等于所占空间大小的比特位;在上述访问数据缓存(读和/或写操作)的过程中,还可以实现数据缓存空满的告警以及水线的告警,具体过程如下:
[0222]针对每个业务,当待读的数据的逻辑地址(以下简称为读逻辑地址)大于待写的数据的逻辑地址(以下简称为写逻辑地址)时,计算水线值=地址空间大小-(读逻辑地址-写逻辑地址),当读逻辑地址小于写逻辑地址时,计算水线值=写逻辑地址-读逻辑地址;
[0223]并且,当水线值高于预先设定的高水线值时,上报高水线告警;
[0224]当水线值小于设定的低水线值时,上报低水线告警;
[0225]当读地址符号位=写地址符号位,且当前读逻辑地址=写逻辑地址,则上报为空的
告警;
[0226]当读地址符号位古写地址符号位,且读逻辑地址=写逻辑地址,则上报为满的告
m.1=I ,
[0227]当读地址符号位古写地址符号位,且读逻辑地址〈写逻辑地址,则上报写溢出告m.1=I ,
[0228]当读地址符号位=写地址符号位,且读逻辑地址 > 写逻辑地址,则上报读溢出告
m
目O
[0229]进一步地,前述方式一中查询使用的所述块数量表、首块地址表和块地址表通过下述方式生成:
[0230]根据用户配置的业务通道-块映射表,生成块数量表、首块地址表和块地址表作为主表以供查询;其中,业务通道-块映射表记载有数据缓存中的每个块与被占用的业务(使用业务通道号作为标识)之间的映射关系。
[0231]较佳地,在生成块数量表、首块地址表和块地址表作为主表之后,本发明实施例还可以执行下述步骤:
[0232]备份所述块数量表、首块地址表和块地址表作为备表;
[0233]周期性地按照用户对业务通道-块映射表的配置的内容,对作为备表的块数量表、首块地址表和块地址表进行刷新,并将刷新后的各表切换成对应的主表以供查询。
[0234]进一步地,对作为备表的块数量表、首块地址表和块地址表进行刷新,具体通过下述过程实现:
[0235]每y个周期遍历业务通道-块映射表,其中,y=n*x,η为数据缓存的分块数,χ为业务的数量;
[0236]每次遍历时,针对每个业务,将该业务占用的块的数量进行累加,统计各业务占用的块的数量,写入待刷新的块数量表;
[0237]每次遍历时,针对数据缓存中的每个块,将该块对应的物理地址写入待刷新的块地址表;
[0238]每次遍历时,针对数据缓存中的每个块,当其为被占用的业务对应的首个块时,将该块的逻辑地址写入待刷新的首块地址表。
[0239]进一步地,前述方式二中查询使用的块数量表、块重映射表通过下述方式生成:
[0240]根据用户配置的业务通道-块映射表,生成块数量表和块重映射表作为主表以供查询;其中,业务通道-块映射表记载有数据缓存中的每个块与被占用的业务之间的映射关系。
[0241]较佳地,在生成块数量表和块重映射表作为主表之后,本发明实施例还可以执行下述步骤:
[0242]备份所述块数量表和块重映射表作为备表;
[0243]周期性地按照用户对业务通道-块映射表的配置的内容,对作为备表的块数量表和块重映射表进行刷新,并将刷新后的各表切换成对应的主表以供查询。
[0244]进一步地,对作为备表的块数量表和块重映射表进行刷新,具体通过下述过程实现:
[0245]每y个周期遍历业务通道-块映射表,其中,y=n*x,η为数据缓存的分块数,χ为业务的数量;
[0246]每次遍历时,针对每个业务,将该业务占用的块的数量进行累加,统计各业务占用的块的数量,写入待刷新的块数量表;
[0247]每次遍历时,针对每个业务,将该业务占用的每个块的物理地址写入待刷新的块重映射表。
[0248]本发明实施例提供的上述多通道FIFO queue控制器及其访问方法,多通道FIFOqueue控制器包地址确定电路和控制电路。数据缓存被分为多个块,地址确定电路可以根据业务的标识确定待访问的块的物理地址。地址确定电路还可以据此进一步确定待访问的数据在数据缓存中的物理地址。控制电路可以根据地址确定电路确定的待访问的数据在数据缓存中的物理地址访问待访问的数据。因此,上述技术方案有助于多个业务对数据缓存的共享,有助于减少对FIFO queue的资源的占用。此外,本发明实施例提供了待访问的数据的物理地址的确定方法。即根据业务的标识,确定待访问的块的物理地址,并根据待访问的块的物理地址和待访问的数据在待访问的块内地址,确定待访问的数据在数据缓存中的物理地址。根据待访问的数据在数据缓存中的物理地址访问待访问的数据。上述技术方案中,确定待访问的数据在数据缓存中的物理地址的过程中,不需要依赖链表指针,可靠性较闻。
[0249]进一步地,本发明实施例提供的上述多通道FIFO queue控制器及其访问方法,数据缓存的访问地址分为两个层次,逻辑地址和物理地址,并建立两者之间的映射关系,通过逻辑地址来确定对应的物理地址,由于逻辑地址在数据缓存空间内是线性的,这样,可以通过逻辑地址来识别当前数据缓存的空满状态以及当前水线是否达到预设的高低水线的情况,弥补了现有技术例如方案I和方案2无法识别数据缓存存储状态的缺陷。
[0250]进一步地,本发明实施例提供的上述多通道FIFO queue控制器及其访问方法中,各业务的读写地址的确定所依据的块数量表、首块地址表和块地址表(或者块数量表和块重映射表),都是依据用户配置的业务通道-块映射表的内容生成和刷新的,因此,各业务的待读写的数据的物理地址的确定的可靠性几乎等价于用户配置的表项的可靠性,与业务的带宽和其他异常无关,进一步保证了多通道FIFO读写操作的可靠性。
[0251]另外,本发明实施例提供的上述多通道FIFO queue控制器及其访问方法,对于各业务的待读写的数据的地址的确定所依据的块数量表、首块地址表和块地址表(或者块数量表和块重映射表)进行周期性地刷新,并提供了主备切换机制,在不影响业务数据读写操作的情况下,实现对业务的增删等动态变化。
[0252]显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
【权利要求】
1.一种多通道先进先出缓存队列FIFO queue控制器,其特征在于,包括:地址确定电路和控制电路; 所述地址确定电路用于: 根据业务的标识确定在数据缓存中的待访问的块的物理地址,所述数据缓存包含多个块,每个块包含m个存储单元,m为正整数; 根据所述待访问的块的物理地址和待访问的数据在所述待访问的块内的地址,确定所述待访问的数据在所述数据缓存中的物理地址; 所述控制电路用于: 根据所述地址确定电路确定的所述待访问的数据在所述数据缓存中的物理地址访问所述待访问的数据。
2.如权利要求1所述的FIFOqueue控制器,其特征在于,所述地址确定电路具体用于: 根据所述业务的标识,确定所述待访问的块的逻辑地址和所述待访问的数据在所述待访问的块内的地址; 根据所述待访问的块的逻辑地址,以及所述待访问的块的逻辑地址与所述待访问的块的物理地址之间的映射关系,确定所述待访问的块的物理地址; 根据所述待访问的块的物理地址和所述待访问的数据在所述待访问的块内的地址,确定所述待访问的数据在所述数据缓存中的物理地址。
3.如权利要求2所述的 FIFOqueue控制器,其特征在于,所述地址确定电路具体用于: 根据所述业务的标识查询逻辑地址表,获取所述待访问的数据的逻辑地址; 根据所述待访问的数据的逻辑地址得到所述待访问的块的第一逻辑地址logic_blk_addr和块内偏移地址logic_shift_addr ; 根据所述业务的标识查询首块地址表,得到所述业务占用的多个块中首个块的逻辑地址 first_blk_addr ; 根据待访问的块的第二逻辑地址查询块地址表,得到所述待访问的块的物理地址,所述待访问的块的第二逻辑地址等于logic_blk_addr与f irst_blk_addr的和; 根据所述待访问的块的物理地址和所述块内偏移地址,确定所述待访问的数据在所述数据缓存中的物理地址; 其中,所述块地址表中记载所述业务的标识,以及所述业务占用的多个块的第二逻辑地址和所述业务占用的多个块的物理地址的映射关系,所述业务占用的多个块的第二逻辑地址和所述业务占用的多个块的物理地址一一对应,所述待访问的块的第二逻辑地址取值为[first_blk_addr, first_blk_addr+n]中任一整数,所述η为所述业务占用数据缓存中的块的数量; 所述首块地址表中记载所述业务的标识,以及所述业务占用的多个块中首个块的逻辑地址; 所述逻辑地址表中记载所述业务的标识,以及所述待访问的数据的逻辑地址,所述待访问的数据的逻辑地址的取值为[0,mX所述业务占用的块的数量]中任一整数。
4.如权利要求2所述的FIFOqueue控制器,其特征在于,所述地址确定电路具体用于: 根据所述业务的标识查询逻辑地址表,获取所述待访问的数据的逻辑地址; 根据所述待访问的数据的逻辑地址,得到所述待访问的块的逻辑地址logiC_blk_addr和块内偏移地址logic_shift_addr ; 根据所述业务的标识和所述待访问的块的逻辑地址logiC_blk_addr查询块重映射表,得到所述待访问的块的物理地址; 根据所述待访问的块的物理地址和所述块内偏移地址,确定所述待访问的数据在所述数据缓存中的物理地址; 其中,所述逻辑地址表中记载所述业务的标识,以及所述待访问的数据的逻辑地址,所述待访问的数据的逻辑地址的取值为[0,mX所述业务占用的块的数量]中任一整数;所述块重映射表中记载所述业务的标识、以及所述业务占用的多个块的逻辑地址和所述业务占用的多个块的物理地址的映射关系,所述业务占用的多个块的逻辑地址和所述业务占用的多个块的物理地址一一对应,所述待访问的块的逻辑地址取值为[0,n]中的任一整数,所述η为所述业务占用数据缓存中的块的数量。
5.如权利要求3或4所述的FIFOqueue控制器,其特征在于,所述地址确定电路还用于: 在所述控制电路访问所述 待访问的数据之后,使用所述业务下次访问的数据的逻辑地址替换所述逻辑地址表中所述待访问的数据的逻辑地址。
6.一种多通道先进先出缓存队列FIFO queue的访问方法,其特征在于,包括: 根据业务的标识,确定在数据缓存中待访问的块的物理地址,所述数据缓存包含多个块,每个块包含m个存储单元,m为正整数; 根据所述待访问的块的物理地址和待访问的数据在所述待访问的块内的地址,确定所述待访问的数据在所述数据缓存中的物理地址; 根据所述地址确定电路确定的所述待访问的数据在所述数据缓存中的物理地址访问所述待访问的数据。
7.如权利要求6所述的方法,其特征在于,所述确定所述待访问的数据在所述数据缓存中的物理地址,包括: 根据所述业务的标识,确定所述待访问的块的逻辑地址和所述待访问的数据在所述待访问的块内的地址; 根据所述待访问的块的逻辑地址,以及根据所述待访问的块的逻辑地址与所述待访问的块的物理地址之间的映射关系,确定所述待访问的块的物理地址; 根据所述待访问的块的物理地址和所述待访问的数据在所述待访问的块内的地址,确定所述待访问的数据在所述数据缓存中的物理地址。
8.如权利要求7所述的方法,其特征在于,根据所述业务的标识,确定所述待访问的块的逻辑地址和所述待访问的数据在所述待访问的块内的地址,根据所述待访问的块的逻辑地址,以及根据所述待访问的块的逻辑地址与所述待访问的块的物理地址之间的映射关系,确定所述待访问的块的物理地址,根据所述待访问的块的物理地址和所述待访问的数据在所述待访问的块内的地址,确定所述待访问的数据在所述数据缓存中的物理地址,具体包括:根据所述业务的标识查询逻辑地址表,获取所述待访问的数据的逻辑地址; 根据所述待访问的数据的逻辑地址得到所述待访问的块的第一逻辑地址logic_blk_addr和块内偏移地址logic_shift_addr ; 根据所述业务的标识查询首块地址表,得到所述业务占用的多个块中首个块的逻辑地址 first_blk_addr ; 根据待访问的块的第二逻辑地址查询块地址表,得到所述待访问的块的物理地址,所述待访问的块的第二逻辑地址等于logic_blk_addr与f irst_blk_addr的和; 根据所述待访问的块的物理地址和所述块内偏移地址,确定所述待访问的数据在所述数据缓存中的物理地址; 其中,所述块地址表中记载所述业务的标识,以及所述业务占用的多个块的第二逻辑地址和所述业务占用的多个块的物理地址的映射关系,所述业务占用的多个块的第二逻辑地址和所述业务占用的多个块的物理地址一一对应,所述待访问的块的第二逻辑地址取值为[first_blk_addr, first_blk_addr+n]中任一整数,所述η为所述业务占用数据缓存中的块的数量; 所述首块地址表中记 载所述业务的标识,以及所述业务占用的多个块中首个块的逻辑地址; 所述逻辑地址表中记载所述业务的标识,以及所述待访问的数据的逻辑地址,所述待访问的数据的逻辑地址的取值为[0,mX所述业务占用的块的数量]中任一整数。
9.如权利要求7所述的方法,其特征在于,根据所述业务的标识,确定所述待访问的块的逻辑地址和所述待访问的数据在所述待访问的块内的地址,根据所述待访问的块的逻辑地址,以及根据所述待访问的块的逻辑地址与所述待访问的块的物理地址之间的映射关系,确定所述待访问的块的物理地址,根据所述待访问的块的物理地址和所述待访问的数据在所述待访问的块内的地址,确定所述待访问的数据在所述数据缓存中的物理地址,具体包括: 根据所述业务的标识查询逻辑地址表,获取所述待访问的数据的逻辑地址; 根据所述待访问的数据的逻辑地址,得到所述待访问的块的逻辑地址logiC_blk_addr和块内偏移地址logic_shift_addr ; 根据所述业务的标识和所述待访问的块的逻辑地址logiC_blk_addr查询块重映射表,得到所述待访问的块的物理地址; 根据所述待访问的块的物理地址和所述块内偏移地址,确定所述待访问的数据在所述数据缓存中的物理地址; 其中,所述逻辑地址表中记载所述业务的标识,以及所述待访问的数据的逻辑地址,所述待访问的数据的逻辑地址的取值为[0,mX所述业务占用的块的数量]中任一整数;所述块重映射表中记载所述业务的标识、以及所述业务占用的多个块的逻辑地址和所述业务占用的多个块的物理地址的映射关系,所述业务占用的多个块的逻辑地址和所述业务占用的多个块的物理地址一一对应,所述待访问的块的逻辑地址取值为[0,n]中的任一整数,所述η为所述业务占用数据缓存中的块的数量。
10.如权利要求8或9所述的方法,其特征在于,在所述控制电路访问所述待访问的数据之后,还包括:使用所述业务下次访问的数据的逻辑地址替换所述逻辑地址表中所述待访问的数据的逻 辑地址。
【文档编号】G06F12/08GK103455442SQ201310388500
【公开日】2013年12月18日 申请日期:2013年8月30日 优先权日:2013年8月30日
【发明者】郑述乾, 李天林, 区树雄 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1