一种报文共享储存管理的fpga实现方法

文档序号:10552636阅读:156来源:国知局
一种报文共享储存管理的fpga实现方法
【专利摘要】本发明公开了一种报文共享储存管理的FPGA实现方法,包括以下步骤:将存储空间分成若干个小单元,每个小单元指定一个地址指针,并将每一个地址指针作为资源池化,在初始时所有地址指针用空链表池;在系统上电或者复位后,将FREE_PTR进行初始化;响应报文入队列请求,改变指针状态RAM中using位和aging位,将所要入队列的指针及其有效信息写入PRAM里;响应报文出队列请求,通过判断所述指针状态RAM中using位,将所要出队列的指针写入FREE_PTR中,并同时改变所述指针状态RAM;解决了网络接口突发报文存储问题,可以替代NP和TM专有芯片大大节约成本、缩短开发周期和提高接口带宽处理能力。
【专利说明】
一种报文共享储存管理的FPGA实现方法
技术领域
[0001]本发明涉及报文共享、储存管理、FPGA技术等领域,具体的说,是一种报文共享储存管理的FPGA实现方法。
【背景技术】
[0002]目前网络设备对报文存储一般采用先进先出FIFO技术存储报文,这种技术主要针对一种数据流的存储转发行为的解决方法。
[0003]目前网络设备会采用专用NP或TM芯片技术存储报文,这是目前路由器上常用的芯片技术。
[0004]采用先进先出FIFO技术存储报文,这种技术主要针对一种数据流的存储转发行为,这种方式会面临两个问题:一是当报文存储的队列数巨大时,FIFO数量随之巨大,无法实现;二是队列数量加大分给每个队列的存储空间很小,FIFO存储是独享存储空间的,无法保证网络突发数据不丢包。
[0005]采用专用NP或TM芯片技术存储报文会加到网络设备成本和开发难度,且供应此类芯片的厂商商有限,同时市面上目前NP和TM芯片处理带宽比较小,无法解决100G接口设备报文存储问题。

【发明内容】

[0006]本发明的目的在于一种报文共享储存管理的FPGA实现方法,解决多队列共享存储和队列调度问题,解决了网络接口突发报文存储问题,可以替代NP和TM专有芯片大大节约成本、缩短开发周期和提高接口带宽处理能力。
[0007]本发明通过下述技术方案实现:一种报文共享储存管理的FPGA实现方法,包括下述步骤:
1)将存储空间分成若干个小单元,每个小单元指定一个地址指针,并将每一个地址指针作为资源池化,在初始时所有地址指针用空链表池;
2)初始化:在系统上电或者复位后,将FREE_PTR进行初始化;
3)入队列操作:响应报文入队列请求,改变指针状态RAM中using位和aging位,将所要入队列的指针及其有效信息写入PRAM里;
4)出队列操作:响应报文出队列请求,通过判断所述指针状态RAM中using位,将所要出队列的指针写入FREE_PTR中,并同时改变所述指针状态RAM。
[0008]进一步的为更好的实现本发明,特别采用下述设置方式:所述入队列操作包括以下具体步骤:
3-1 )Pop出上级fifo中需要入队列的指针信息,提取出指针和src_pid;
3-2)将指针状态RAM中步骤3-1)所提取出的指针的using位无条件置为I,aging位无条件置为0;
3-3)改变PQ_LIST中的TP和PRAM,将所入队列的指针写入本src_pid对应的TP中。
[0009]进一步的为更好的实现本发明,特别采用下述设置方式:所述出队列操作包括以下具体步骤:
4-1) Pop出PTX放入f i f ο中的请求;
4-2 )利用pop出的指针访问指针状态RAM中相应的指针状态;
4-3)判断步骤4-2)所述相应的指针状态中using位是否为I,如为I,则将using位置为O,并将aging位置为O,然后将此指针push进FREE_PTR ;如using位为O,则将aging位置为O,但不将此指针放入FREE_PTR ;
4-4)判断push进FREE_PTR的此指针是否为队列中最后一个出队列的指针,如果是最后一个,则将PQ_LIST中该src_pid对应的值写为O。
[0010]进一步的为更好的实现本发明,特别采用下述设置方式:还包括以下步骤:
5)扫描:定时扫描所述指针状态RAM中的信息,比较各指针的aging位,包括以下具体步骤:
5-1)扫描模块自身产生扫描请求信号,仲裁模块响应扫描请求,并将扫描请求信号寄存器拉低;
5-2)扫描模块利用扫描请求所对应的指针访问指针状态RAM;
5-3)判断从指针状态RAM中读出的信息中的aging位是否为O,如为O,则将aging位置I;如aging位为I,同时scanmod_enSUf,将指针push进FREE_PTR中;如aging位为I,同时scanmod_en为O时,则不将指针放入FREE_PTR中;
5-4)将扫描所对应的指针信号寄存器的值加I,指向下一个要扫描的指针地址,当扫描所对应的指针到1023时,再加I时,扫描所对应的指针值跳回I。
[0011]进一步的为更好的实现本发明,特别采用下述设置方式:还包括以下步骤:
6)空拽:定时将FREE_PTR中的指针拿出来,再放入FREE_PTR中;包括以下具体步骤:
6-1)空拽模块自身产生空拽请求信号,仲裁模块响应空拽请求之后,FPGA内空拽请求寄存器信号拉低;
6-2)Pop出FREE_PTR fifo中的空拽所请求的指针数据;
6-3)将指针状态RAM中此指针的aging位置为O,如using位为O时,将此指针push进FREE_PTR;如 using 位为 1,则不将指针 push 进 FREE_PTR。
[0012]进一步的为更好的实现本发明,特别采用下述设置方式:所述将FREE_PTR进行初始化具体为将FREE_PTR初始化为1,2,3……1022,1023。
[0013]进一步的为更好的实现本发明,特别采用下述设置方式:将FREE_PTR进行初始化后,指针O始终不使用。
[0014]进一步的为更好的实现本发明,特别采用下述设置方式:所述报文共享储存管理的FPGA实现方法还包括如何解决链表异常发现和纠正的方法:
用一位来表示是否已经出队,如果第二次出队则终结链表,进行链表清空;或者采用每个队列用地址指针所在链表的顺序号SQ,一旦顺序SQ错序则表示链表出错,则终结链表,进行链表清空;
采用老化机制将长期没用游离在外的空指针回收到空指针链表中。
[0015]本发明与现有技术相比,具有以下优点及有益效果:
(I)本发明解决多队列共享存储和队列调度问题,解决了网络接口突发报文存储问题,可以替代NP和TM专有芯片大大节约成本、缩短开发周期和提高接口带宽处理能力。
[0016](2)本发明解决了报文共享存储难点,给出FPGA实现方法,同时解决大带宽报文存储的解决方法和异常处理的解决方法,在FPGA中可靠实现大带宽共享报文存储。
【附图说明】
[0017]图1为本发明在FPGA中的操作流程示意图。
[0018]图2为本发明所述共享缓存管理的架构图。
[0019]图3为使用本发明时第一次取指针示意图。
[0020]图4为使用本发明时中间取指针示意图。
[0021]图5为使用本发明时第一次入队示意图。
[0022]图6为使用本发明时中间入队示意图。
[0023]图7为使用本发明时中间出队示意图。
[0024]图8为使用本发明时最后出队示意图。
[0025]图9为使用本发明时空指针未满回收指针示意图。
[0026]图10为使用本发明时空指针全部回收示意图。
[0027]图11为使用本发明时把空链表拿出来用FIFO实现的示意图。
[0028]图12为使用本发明时初始化后各存储器状态图。
[0029]图13为使用本发明时指针I入队列操作后各存储器状态图。
[0030]图14为使用本发明时指针2入队列后各存储器状态图。
[0031]图15为使用本发明时指针3入队列后各存储器状态图。
[0032]图16为使用本发明时指针I进行出队列操作后各存储器状态图。
[0033]图17为使用本发明时指针2出队列后各存储器状态图。
[0034]图18为使用本发明时对指针I进行扫描后的各存储器状态图。
[0035]图19为使用本发明时对指针4进行空拽后各存储器状态图图20为使用本发明时持续空拽操作各存储器状态图。
【具体实施方式】
[0036]下面结合实施例对本发明作进一步地详细说明,但本发明的实施方式不限于此。
[0037]中文释义:
FREE_PTR中,空指针链表;
using位标识在用,aging位标识预老化;
Pop,弹出;
Fifo,先进先出; src_pid,源端口 ID;
TP,tail pinter简写,标识链尾指针;
PTX,packet transmit简写,标识报文发送模块;
Push,压入;
scanmod_en,扫描模式使能信号简写;
SQ ,sequence简写,标识序列号。
[0038]实施例1:
一种报文共享储存管理的FPGA实现方法,结合图1?图20所示,包括下述步骤:
1)将存储空间分成若干个小单元,每个小单元指定一个地址指针,并将每一个地址指针作为资源池化,在初始时所有地址指针用空链表池;
2)初始化:在系统上电或者复位后,将FREE_PTR进行初始化;
3)入队列操作:响应报文入队列请求,改变指针状态RAM中using位和aging位,将所要入队列的指针及其有效信息写入PRAM里;
4)出队列操作:响应报文出队列请求,通过判断所述指针状态RAM中using位,将所要出队列的指针写入FREE_PTR中,并同时改变所述指针状态RAM。
[0039]实施例2:
本实施例是在上述实施例的基础上进一步优化,进一步的为更好的实现本发明,结合图1?图20所示,特别采用下述设置方式:所述入队列操作包括以下具体步骤:
3-1 )Pop出上级fifo中需要入队列的指针信息,提取出指针和src_pid;
3-2)将指针状态RAM中步骤3-1)所提取出的指针的using位无条件置为I,aging位无条件置为O;
3-3)改变PQ_LIST中的TP和PRAM,将所入队列的指针写入本src_pid对应的TP中。
[0040]实施例3:
本实施例是在上述任一实施例的基础上进一步优化,进一步的为更好的实现本发明,结合图1?图20所示,特别采用下述设置方式:所述出队列操作包括以下具体步骤:
4-1)Pop出PTX放入f i f ο中的请求;
4-2 )利用pop出的指针访问指针状态RAM中相应的指针状态;
4-3)判断步骤4-2)所述相应的指针状态中using位是否为I,如为I,则将using位置为O,并将aging位置为O,然后将此指针push进FREE_PTR ;如using位为O,则将aging位置为O,但不将此指针放入FREE_PTR ;
4-4)判断push进FREE_PTR的此指针是否为队列中最后一个出队列的指针,如果是最后一个,则将PQ_LIST中该src_pid对应的值写为O。
[0041 ] 实施例4:
本实施例是在上述任一实施例的基础上进一步优化,进一步的为更好的实现本发明,结合图1?图20所示,特别采用下述设置方式:还包括以下步骤:
5)扫描:定时扫描所述指针状态RAM中的信息,比较各指针的aging位,包括以下具体步骤:
5-1)扫描模块自身产生扫描请求信号,仲裁模块响应扫描请求,并将扫描请求信号寄存器拉低;
5-2)扫描模块利用扫描请求所对应的指针访问指针状态RAM;
5-3)判断从指针状态RAM中读出的信息中的aging位是否为O,如为O,则将aging位置I;如aging位为I,同时scanmod_enSUf,将指针push进FREE_PTR中;如aging位为I,同时scanmod_en为O时,则不将指针放入FREE_PTR中;
5-4)将扫描所对应的指针信号寄存器的值加I,指向下一个要扫描的指针地址,当扫描所对应的指针到1023时,再加I时,扫描所对应的指针值跳回I。
[0042]实施例5:
本实施例是在上述任一实施例的基础上进一步优化,进一步的为更好的实现本发明,结合图1?图20所示,特别采用下述设置方式:还包括以下步骤:
6)空拽:定时将FREE_PTR中的指针拿出来,再放入FREE_PTR中;包括以下具体步骤:
6-1)空拽模块自身产生空拽请求信号,响应空拽请求之后,FPGA内寄存器信号拉低;
6-2)Pop出FREE_PTR fifo中的空拽所请求的指针数据;
6-3)将指针状态RAM中此指针的aging位置为O,如using位为O时,将此指针push进FREE_PTR;如 using 位为 1,则不将指针 push 进 FREE_PTR。
[0043]实施例6:
本实施例是在上述任一实施例的基础上进一步优化,进一步的为更好的实现本发明,结合图1?图20所示,特别采用下述设置方式:所述将FREE_PTR进行初始化具体为将FREE_PTR 初始化为1,2,3……1022,1023。
[0044]实施例7:
本实施例是在上述任一实施例的基础上进一步优化,进一步的为更好的实现本发明,结合图1?图20所示,特别采用下述设置方式:将FREE_PTR进行初始化后,指针O始终不使用。
[0045]实施例8:
本实施例是在上述任一实施例的基础上进一步优化,进一步的为更好的实现本发明,结合图1?图20所示,特别采用下述设置方式:所述报文共享储存管理的FPGA实现方法还包括如何解决链表异常发现和纠正的方法:
用一位来表示是否已经出队,如果第二次出队则终结链表,进行链表清空;或者采用每个队列用地址指针所在链表的顺序号SQ,一旦顺序SQ错序则表示链表出错,则终结链表,进行链表清空;
采用老化机制将长期没用游离在外的空指针回收到空指针链表中。
[0046]实施例9:
本实施例是在上述任一实施例的基础上进一步优化,一种报文共享储存管理的FPGA实现方法,首先把存储空间分成一块一块的小空间作为存储空间的最小存储单元,每个最小存储单元指定一个地址指针,同时把这些最小存储单元的地址指针作为资源池化,初始时所有最小存储单元的指针用空链表池。共享缓存管理架构主要由DRAM(数据存储单元)、PRAM(指针存储单元)、PQ_LIST(包队列链表)、Free_List(空闲指针链表)组成;如2所示:
初始化时DRAM全为空,PRAM当前指针指向它相邻的下一指针,PQ_LIST全部为空,Free_List是满的,即链头为I而链尾为最大指针32k— I。
[0047]当数据包需要入队存储时从空链表取指针作为包存储地址,同时修改PRAM状态把取出的地址指针作为报文队列链表的链尾(只有一个报文时也是链头),取出的地址指针从空链表中剔除,修改空链表的链头。在有数据需要入队时首先需要POP空指针,即把空链表的链头POP出来,需要用当前链头(指针为I)指向的NextPtK指针为2)作为新的空链表的链头(链头从I更新为2);为将POP出的空指针作为新PQ的链尾,同时把当前链头(指针为I)的指向即NextPtK指针为2)改为空。
[0048]第一次取指针如图3所示;
中间取指针如图4所示; 数据队列在入队前已经拿到将要入队的指针(指针为I),入队就是把当前的数据连接到数据队列的尾巴上,用将要入队指针(指针为I)替换当前链尾指针(指针为空),同时把当前链尾指针(指针为空)的下一指向更新为将要入队指针(指针为1),如果当前链尾指针为空时将要入队的数据为队列的第一个数据,需要更新链头指针为将要入队的指针(指针为1),而当前链尾的指向不需要更新。更新PRAM的指向的同时需要更新将要入队DRAM的指针(即将要入队数据存储指针,一般为当前将要入队的指针。
[0049]第一次入队如图5所示;
中间入队如图6所示;
数据出队和空指针出队操作基本一致,需要用当前链头(指针为I)指向的NextPtK指针为2)作为新的数据链表的链头(链头从I更新为2);为将出队的指针作为新Free_List的链尾回收,同时把当前链头(指针为I)的指向即NextPtK指针为2)改为空,CellPtr(为I)也改为空。
[0050]如果是最后数据出队,链头自然更新为空,此时链尾因为链头为空所以也更新为空,其他操作不变;最后出队如图8所示。
[0051]空链表入队和数据链表入队操作基本一致,用将要入队指针(指针为I)替换当前链尾指针(指针为32k — 1),同时把当前链尾指针(指针为32k — I)的下一指向更新为将要入队指针(指针为I)。
[0052]空指针未满回收指针如图9所示;
空指针全部回收如图10所示;
在实际应用时,本发明所述方法借用链表技术应用到FPGA内部存储管理,存储空间是共享按需分配,结合队列管理WRED算法可以达到最佳的QoS性能。PRAM操作频率为数据包频率的4倍。如果1Gbps带宽即包频率为15Mpps则需要60Mhz的PRAM操作频率。20Gbps则需要120Mhz,30Gbps则需要180Mhz,40Gbps则需要240Mhz,在高带宽下PRAM的操作带宽是一个瓶颈;在大带宽情况下,PRAM的访问是最大瓶颈,在10Gbps带宽下,最小报文是150Mpps,对PRAM访问带宽需要4*150M,FPGA内部时钟是很难实现的,为了减少PRAM的访问压力,优选的提出把空链表拿出来用FIFO实现,PRAM访问只需要2* 150M的性能,改进实现方式如图11 (使用本发明时把空链表拿出来用FIFO实现的示意图)所示;
在链表操作出现异常如链表相交,即两个队列链表指向同一指针,如链表成环,即链表首尾相连没有终点,本发明所述方法还提出如何解决链表异常发现和纠正的方法。因为无论链表相交还是成环,一定在出队时某一个节点会出队2次;因此可以用一位来表示是否已经出队,如果第二次出队则终结链表(链表清空)。或者采用每个队列用地址指针所在链表的顺序号SQ,一旦顺序SQ错序则表示链表出错,则终结链表(链表清空)。
[0053]终结链表后会留下一些游离在外的空指针无法回收,本发明所述方法同时提出用老化机制把长期没用游离在外的空指针回收到空指针链表中。
[0054]共享BUFFER管理BM模块内部主要包含一个BM_ARB,负责仲裁几个访问PTR_STATES_RAM和PRAM的请求以及回收指针的请求。
[0055]共享BUFFER管理模块的数据处理流程如图1(本发明在FPGA中的操作流程示意图)所示,主要包括以下几个:
初始化:在系统上电或者复位后,将FREE_PTR初始化为1,2,3……1022,1023。0指针一直不用(保留)。
[0056]入队列操作:响应报文入队列请求,改变指针状态RAM中using和aging位,将所要入队列的指针及其有效信息写入PRAM(参数随机存取存储器)里。
[0057]出队列操作:响应报文出队列请求,通过判断指针状态RAM中using位,将所要出队列的指针写入FREE_PTR中,并同时改变指针状态RAM。出队列会比较此出队列的指针是否为每个队列最后一个出队列的指针。如果是最后一个出队列的指针,则将PQ_LIST中此队列的队列尾指针TP赋值为O,表示此队列正空。
[0058]扫描:定时扫描指针状态RAM中的信息,比较各指针的aging位,如发现为I,scanmod_en信号有效时,则将这个指针放入到FREE_PTR中,并同时设置using和aging位(都为O)。如scanmod_en无效时,则不将指针放入FREE_PTR中。
[0059]空拽:为了使扫描到的数据有效,定时将FREE_PTR中的指针拿出来,再放入FREE_PTR中,其间改变指针状态RAM中aging位为0(这样如果扫描中看到的aging为I,说明在两次扫描的间隔中此指针没有被使用过,而空拽的周期要小于扫描的周期,这样一般情况下不会发生扫描都aging为I的情况。如发生aging为I的情况,说明此指针不在FREE_PTR中,故将其添加进去)。空拽时也会看每个指针的using位。空拽时应该看到的每个指针的using位都为0,即都不在用。如看到哪个指针的using位为I,则将其aging置为0,但不把指针放入到FREE_PTR中。
[0060]初始化:
在设备上电或者复位时,初始化负责初始化FREE_PTR,此请求具有最高优先级。
[0061 ]初始化后各存储器状态如图12所示。
[0062]入队列:
prx_bqm_linkFifoEmpty非空即为入队列有请求的条件,此请求除初始化外具有最高优先级;流程如下:
步骤1、POP出上级fifo中需要入队列的指针信息,提取出指针和src_pid ;
步骤2、将指针状态RAM中此指针的using位无条件置为I,aging位无条件置为O;
步骤3、改变PQ_LI ST中的TP和PRAM (将所入队列的指针写入本sr c_p i d对应的TP中)。
[0063]在PRAM中存放的是各个chunk地址的info。
[0064]指针I入队列操作后各存储器状态如图13所示,为将指针I从FREE_PTR中拿出,并且入队列操作(src_pid为O)后的各存储器状态;
指针2入队列后各存储器状态如图14所示,为将指针2从FREE_PTR中拿出,并且入队列操作(src_pid为O)后的各存储器状态;
指针3入队列后各存储器状态如图15所示,为将指针3从FREE_PTR中拿出,并且入队列操作(sr c_pid为I)后的各存储器状态;
在入队列流程中,初始化之后PQ_LIST中所有的TP都为0,这样就会导致如果每次入队列都用现有的指针写入到TP的地址中,会产生一个错误,即每个入端口第一次进行入队列操作时,都会将本次指针更新到PRAM的O处,这样就会导致覆盖(如本例中3覆盖了 I)。解决的办法有两种,一种是在PQ_LIST中加入一位,进行每次入队列是否是每个入端口的判断,如是第一次入队列,就不更新PRAM。另一种方法是指针O不使用,这样就算PRAM中O的位置被重复覆盖,也不会导致错误。本发明优选采用第二种方法,即指针O不使用。
[0065]出队列:
出队列的请求放在一个f if ο中。由报文发送模块进行push,本模块进行pop,f if ο不为空即为有请求的条件。此请求除初始化和入队列外,具有最高优先级。
[0066]流程如下:
步骤1、Pop出PTX放入fifo中的请求。
[0067]步骤2、利用pop出的指针访问指针状态RAM中相应的指针状态。
[0068]步骤3、判断指针状态中using位是否为I,如为I,则将using位置为0,并将aging位置为O,然后将此指针push进FREE_PTR;如using位为O,将aging位置为O,但不将指针放入FREE_PTR;
步骤4、判断此出队列指针是否为链表中最后一个出队列的指针,如果是最后一个,则将PQ_LIST中该src_pid对应的值写为O。
[0069]将指针I进行出队列操作后各存储器状态如图16所示;
将指针2进行出队列操作,因为指针2为src_pid=0中的最后一个指针,则此时要更新PQ_LIST,指针2出队列后各存储器状态如图17所示。
[0070]扫描:
扫描的请求放在一个寄存器中,值为I即为有请求。此请求的优先级低于出队列的优先级,高于空拽的优先级。流程如下:
步骤1、扫描模块自身产生扫描请求信号,仲裁模块响应扫描请求,并将指扫描请求信号寄存器拉低;
步骤2、响应扫描请求,扫描模块利用扫描请求所对应的指针访问指针状态RAM;
步骤3、判断从指针状态RAM中读出的信息中的aging位是否为O,如为O,则将其置I。如为I,则根据scanmocLen的状态操作:如为I,则将其push进FREE_PTR中;如为O,则不将指针放入FREE_PTR中;扫描操作不看using位,保持using位不变;
步骤4、将扫描所对应的指针信号寄存器的值加I,指向下一个要扫描的指针地址,当扫描所对应的指针到1023时,再加I时,扫描所对应的指针值跳回I。
[0071]扫描的周期:假设没有流量的情况下,保险起见,扫描的周期应为空拽周期的2倍或以上。这里定义扫描的频率为1M,空拽的频率为2M。
[0072]对指针I进行扫描后的各存储器状态如图18所示。
[0073]空拽:
空拽的请求放在一个寄存器中,为I即为有请求。此请求优先级最低。流程如下:
步骤1、空拽模块自身产生空拽请求信号,响应空拽请求之后,FPGA内寄存器信号拉低; 步骤2、PoPaFREE_PTR fifo中的空拽所请求的指针数据;
步骤3、将指针状态RAM中此指针的aging位置为O,如using位为O时,将此指针push进FREE_PTR;如 using 位为 1,则不将指针 push 进 FREE_PTR;
步骤4、Pop出FREE_PTR fifo中的空拽所请求的指针数据。
[0074]在进行空拽时,频率为2M。
[0075]由于空拽的请求和PRX共享FREE_PTR的pop接口,在具体应用时目前暂定的时序如下:空拽模块每隔固定的时间发起一个pop信号(bm_free_pop),此信号和PRX的pop信号相或,是FREE_PTR的pop信号。而空拽fifo的push信号是由bm_f ree_pop与! prx_bqm_caFif oPop产生的,这样在本模块有请求并且prx没有请求的时候,才会push进空拽f if ο。如两者同时产生pop信号,则只从FREE_PTR中pop出一个指针,并送给PRX而不存入cyclingfifo。空拽fifo的作用就是让FREE_PTR每隔一段时间就流动起来,而现在由于PRX已经让FREE_PTR流动起来了,故此时空拽fifo的pop信号就可以无效。
[0076]对指针4进行空拽后各存储器状态图如图19所示;
如此后都进行的是空拽操作,一直到对指针I进行空拽操作,则最后的结果如图20(持续空拽操作各存储器状态图)所示。
[0077]以上所述,仅是本发明的较佳实施例,并非对本发明做任何形式上的限制,凡是依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化,均落入本发明的保护范围之内。
【主权项】
1.一种报文共享储存管理的FPGA实现方法,其特征在于:包括下述步骤: 1)将存储空间分成若干个小单元,每个小单元指定一个地址指针,并将每一个地址指针作为资源池化,在初始时所有地址指针用空链表池; 2)初始化:在系统上电或者复位后,将FREE_PTR进行初始化; 3)入队列操作:响应报文入队列请求,改变指针状态RAM中using位和aging位,将所要入队列的指针及其有效信息写入PRAM里; 4)出队列操作:响应报文出队列请求,通过判断所述指针状态RAM中using位,将所要出队列的指针写入FREE_PTR中,并同时改变所述指针状态RAM。2.根据权利要求1所述的一种报文共享储存管理的FPGA实现方法,其特征在于:所述入队列操作包括以下具体步骤: 3-l)Pop出上级fifo中需要入队列的指针信息,提取出指针和src_pid; 3-2)将指针状态RAM中步骤3-1)所提取出的指针的using位无条件置为I,aging位无条件置为O; 3-3)改变PQ_LIST中的TP和PRAM,将所入队列的指针写入本sr c_p i d对应的TP中。3.根据权利要求1或2所述的一种报文共享储存管理的FPGA实现方法,其特征在于:所述出队列操作包括以下具体步骤: 4-1)Pop出PTX放入f i f ο中的请求; 4-2 )利用pop出的指针访问指针状态RAM中相应的指针状态; 4-3)判断步骤4-2)所述相应的指针状态中using位是否为I,如为I,则将using位置为O,并将aging位置为O,然后将此指针push进FREE_PTR ;如using位为O,则将aging位置为O,但不将此指针放入FREE_PTR ; 4-4)判断push进FREE_PTR的此指针是否为队列中最后一个出队列的指针,如果是最后一个,则将PQ_LIST中该src_pid对应的值写为O。4.根据权利要求3所述的一种报文共享储存管理的FPGA实现方法,其特征在于:还包括以下步骤: 5)扫描:定时扫描所述指针状态RAM中的信息,比较各指针的aging位,包括以下具体步骤: 5-1)扫描模块自身产生扫描请求信号,仲裁模块响应扫描请求,并将扫描请求信号寄存器拉低; 5-2 )扫描模块利用扫描请求所对应的指针访问指针状态RAM; 5-3)判断从指针状态RAM中读出的信息中的aging位是否为O,如为O,则将aging位置I;如aging位为I,同时scanmod_enSUf,将指针push进FREE_PTR中;如aging位为I,同时scanmod_en为O时,则不将指针放入FREE_PTR中; 5-4)将扫描所对应的指针信号寄存器的值加I,指向下一个要扫描的指针地址,当扫描所对应的指针到1023时,再加I时,扫描所对应的指针值跳回I。5.根据权利要求1或2或4所述的一种报文共享储存管理的FPGA实现方法,其特征在于:还包括以下步骤: 6 )空拽:定时将FREE_PTR中的指针拿出来,再放入FREE_PTR中;包括以下具体步骤: 6-1)空拽模块自身产生空拽请求信号,仲裁模块响应空拽请求之后,FPGA内空拽请求寄存器信号拉低; 6-2)Pop出FREE_PTR fifo中的空拽所请求的指针数据; 6-3)将指针状态RAM中此指针的aging位置为O,如using位为O时,将此指针push进FREE_PTR;如 using 位为 1,则不将指针 push 进 FREE_PTR。6.根据权利要求1或2所述的一种报文共享储存管理的FPGA实现方法,其特征在于:还包括以下步骤: 5)扫描:定时扫描所述指针状态RAM中的信息,比较各指针的aging位,包括以下具体步骤: 5-1)扫描模块自身产生扫描请求信号,仲裁模块响应扫描请求,并将扫描请求信号寄存器拉低; 5-2 )扫描模块利用扫描请求所对应的指针访问指针状态RAM; 5-3)判断从指针状态RAM中读出的信息中的aging位是否为O,如为O,则将aging位置I;如aging位为I,同时scanmod_enSUf,将指针push进FREE_PTR中;如aging位为I,同时scanmod_en为O时,则不将指针放入FREE_PTR中; 5-4)将扫描所对应的指针信号寄存器的值加I,指向下一个要扫描的指针地址,当扫描所对应的指针到1023时,再加I时,扫描所对应的指针值跳回I。7.根据权利要求6所述的一种报文共享储存管理的FPGA实现方法,其特征在于:还包括以下步骤: 6 )空拽:定时将FREE_PTR中的指针拿出来,再放入FREE_PTR中;包括以下具体步骤: 6-1)空拽模块自身产生空拽请求信号,仲裁模块响应空拽请求之后,FPGA内空拽请求寄存器信号拉低; 6-2)Pop出FREE_PTR fifo中的空拽所请求的指针数据; 6-3)将指针状态RAM中此指针的aging位置为O,如using位为O时,将此指针push进FREE_PTR;如 using 位为 1,则不将指针 push 进 FREE_PTR。8.根据权利要求1或2或4或7所述的一种报文共享储存管理的FPGA实现方法,其特征在于:所述将FREE_PTR进行初始化具体为将FREE_PTR初始化为I,2,3……1022,1023。9.根据权利要求8所述的一种报文共享储存管理的FPGA实现方法,其特征在于:将FREE_PTR进行初始化后,指针O始终不使用。10.根据权利要求1或2或4或7或9所述的一种报文共享储存管理的FPGA实现方法,其特征在于:所述报文共享储存管理的FPGA实现方法还包括如何解决链表异常发现和纠正的方法: 用一位来表示是否已经出队,如果第二次出队则终结链表,进行链表清空;或者采用每个队列用地址指针所在链表的顺序号SQ,一旦顺序SQ错序则表示链表出错,则终结链表,进行链表清空; 采用老化机制将长期没用游离在外的空指针回收到空指针链表中。
【文档编号】G06F3/06GK105912273SQ201610233347
【公开日】2016年8月31日
【申请日】2016年4月15日
【发明人】张聪
【申请人】成都欧飞凌通讯技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1