基于链表的FWFTFIFO系统、实现方法及设备与流程

文档序号:30918685发布日期:2022-07-29 22:33阅读:919来源:国知局
技术简介:
本发明针对传统FIFO存储效率低、多队列调度灵活度不足的问题,提出基于链表结构的FWFTFIFO系统。通过集成tag管理、链表维护、RAM读写控制及输出调度模块,实现多子FIFO的动态资源分配与RR/SP调度,降低存储占用(N-1/N),提升系统集成度,适用于通信领域多队列场景需求。
关键词:链表FWFTFIFO,多队列调度
基于链表的fwft fifo系统、实现方法及设备
技术领域
1.本发明涉及集成电路控制领域,尤其涉及基于链表的fwft fifo实现方法及设备,可应用于fpga或者asic设计中需要使用fifo的具体方面,也可以适用于通信传输领域相关设计中需要使用队列的设备中。


背景技术:

2.在fpga或者asic设计中常用的fifo有standard fifo和first-word-fall-through两种读模式,fwft(first-word-fall-through)可以不需要读命令,自动的将最新数据放在输出端口上。
3.对于fwft fifo的实现,通常是通过标准fifo进行改造,实现框图如图1所示。图中,fwft fifo有一个标准fifo和fifo读使能生成和fifo空指示生成三个模块构成,其中rd_en和empty为所构建的fwft fifo的读使能和空指示,fifo_rd_en和fifo_empty为standard fifo的读使能和空指示。
4.fifo_rd_en的生成逻辑为!fifo_empty && (!empty || rd_en),其含义为当standard fifo非空时,若fwft fifo为空(条件1)或者发生读操作(条件2),则从standard fifo中读出一个数据,条件1对应standard fifo从空到非空的转化时,要自动读出数据,条件2对应在standard fifo非空时进行的读取操作。
5.通用的领域fwft fifo可以胜任,但是涉及到队列的场景fifo的适用性不足:例如基于8个优先级的队列,通常需要例化8个fwft fifo实现不同的优先级队列,然后再外部再进行sp调度选择级别最高的fifo输出。首先,对于具有n个元素的队列来讲,由于该n个元素可能会放入到任何一个fifo中,所以任何一个队列fifo的深度都要保证能够容纳n个元素,对于8个优先级的fifo队列,就是要容纳8*n个元素,然而对于任意时刻来讲,这8个优先级队列中同时存在的元素最多为n个,也就是有7*n个元素的缓存空间是空闲的,这就造成了极大的浪费。


技术实现要素:

6.为了解决上述队列场景,存在缓存浪费且集成度不高的情况,本发明提出了基于链表的fwft fifo系统、实现方法及设备。
7.具体而言,本发明公开了以下技术方案:一方面,本发明提供了基于链表的fwft fifo系统,该系统可用于对多条独立的子fifo的有效调度,系统包括tag管理模块、链表维护模块、ram读写控制模块、输出调度模块;tag管理模块,用于为输入的写数据分配节点编号、完成链表连接操作,以及根据tag标签的使用情况生成各子fifo的空、满指示;链表维护模块,用于维护头指针、尾指针及链表节点信息;所述链表节点信息存储在外部ram中;ram读写控制模块,包括外部设置的ram,用于控制所述ram的读、写操作;所述ram
存储各子fifo的指针信息、存储数据;输出调度模块,从多条链表的头指针数据中进行择一输出。
8.进一步的,各个子fifo由链表来构成。即一个完整链表相当于一个子fifo。
9.优选的,所述tag管理模块通过bitmap实现,当子fifo有数据写入时,从tag标签中申请空闲标签;当子fifo有数据读出时,将读出数据对应的tag标签返回tag管理模块。
10.优选的,tag管理模块中,tag中维护与子fifo深度相同数量的tag_valid指示,所述tag_valid用于指示对应子fifo的空、满。
11.优选的,当子fifo发生写操作时,按照顺序搜索tag_valid指示为空的tag值,并在写入完成后将对应的tag_valid的指示更改为非空。
12.优选的,当子fifo发生读操作时,将读出数据对应的tag返回资源池,并将对应的tag_valid的指示更改为空。
13.优选的,所述链表维护模块包括头指针维护单元、尾指针维护单元、链表节点数量维护单元;所述链表维护模块为每个子fifo独立维护一套头指针和尾指针,各子fifo的中间节点相互共享;子fifo的数量由parameter进行配置;所述paramter为参数,其值表示子fifo的数量。
14.优选的,所述头指针维护单元用于维护头指针;头指针指向对应子fifo的第一节点对应的tag_0,tag_0对应的节点存储下一节点对应标签;头指针及各标签对应的节点上分别存储有效的数据。
15.进一步的,头指针存储子fifo的第一个有效的数据,第一节点存储第二有效的数据,以此类推。尾指针中不存储有效的数据。
16.优选的,所述尾指针维护单元依据以下更新规则维护尾指针:当有新数据写入时,尾指针更新为新写入数据对应的标签。
17.优选的,所述链表节点数量维护单元用于记录链表的写入与读出,以确定该链表是否参与输出调度。
18.优选的,所述链表中头指针的更新规则为:链表节点个数为1时,同时发生写入和读出操作时,头指针更新为新写入值对应的标签和数据;链表点个数为0时,发生写入操作时,头指针更新为新写入值对应的标签和数据;链表节点个数大于1时,发生读出操作时,头指针更新为下一节点对应的标签和数据。
19.优选的,所述ram读写控制模块控制所述ram的读、写操作的方式为:对于写操作,当待写入的链表非空,将新写入值对应的标签和数据写入到该链表尾指针所指向的地址中;对于读操作,当待读出的链表节点数量大于1时,从头指针所指向的地址中读出数据,读出的数据将更新到头指针中。
20.另一方面,本发明还提供了基于链表的fwft fifo实现方法,该方法应用于如上所述的基于链表的fwft fifo系统,该方法包括数据写入及数据读出;对于数据写入,步骤包括:步骤11、新写入的数据从tag管理模块中申请tag标签,更新各子fifo的空、满指示
(即更新子fifo的空、满状态);步骤12、新写入的数据更新所选择子fifo队列,更新子fifo队列的头指针、尾指针和中间节点信息;步骤13、新写入的数据更新所选子fifo队列的节点数量信息;步骤14、新写入的数据根据输出调度模块的调度情况更新fifo的数据输出;对于数据读出,步骤包括:步骤21、读出数据后更新所在子fifo队列的头指针、尾指针和中间节点信息;步骤22、读出数据后更新所在子fifo队列的节点数量信息;步骤23、读出数据返还tag标签,更新各子fifo的空、满指示(即更新子fifo的空、满状态)。
21.此外,本发明还提供了基于链表的fwft fifo设备,该设备包括处理器、存储器;所述处理器调用所述存储器中的指令以执行如上所述的基于链表的fwft fifo实现方法。
22.与现有技术相比,本发明的方案可以在一个fwft fifo中通过参数例化n条独立的“子fifo”,并对这些子fifo进行有效的读写数据管理,这些子fifo可以通过特定的调度方法,例如rr或者sp等方法,选择其中一条进行输出。该发明应用在通信领域的fpga或者asic实现中,相对于使用普通fwft fifo,降低了n-1/n的存储量,并且实现了内部集成调度,增强了系统的集成度。
附图说明
23.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
24.图1为现有技术中fwft fifo常用结构图;图2为本发明实施例的基于链表的fwft fifo实现结构示意图;图3为本发明实施例的bitmap初始状态示意图;图4为本发明实施例的写入两个数据后的bitmap状态示意图;图5为本发明实施例的读出标签1对应数据后的bitmap状态示意图;图6为本发明实施例的三节点链表示意图。
具体实施方式
25.下面结合附图对本发明实施例进行详细描述。应当明确,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
26.本领域技术人员应当知晓,下述具体实施例或具体实施方式,是本发明为进一步解释具体的发明内容而列举的一系列优化的设置方式,而该些设置方式之间均是可以相互结合或者相互关联使用的,除非在本发明明确提出了其中某些或某一具体实施例或实施方式无法与其他的实施例或实施方式进行关联设置或共同使用。同时,下述的具体实施例或
实施方式仅作为最优化的设置方式,而不作为限定本发明的保护范围的理解。
27.在一个具体的实施例中,结合图2所示,本发明提供的技术方案,其实现结构优选设置以下几个组成部分:tag管理模块、链表维护模块、ram读写控制模块、输出调度模块。链表维护模块进一步包括头指针维护单元、尾指针维护单元、链表节点数量维护单元。以下就各个模块的优选的实现方式进行阐述。
28.本发明的方案,通过多个模块及其控制的参数,例化多条独立的子fifo,这些子fifo可以通过相应的调度方法,可以选择其中一条进行输出。此处,对于子fifo的调度方法,可以采用严格优先级调度sp方法,具体实现中,可以设置子链表中子fifo 0的优先级最低,子fifo n-1的优先级最高,优先选择优先级高的子fifo进行读取;也可以采用round-robin轮询调度方式进行子fifo的调度,例如按照0-(n-1)至n-(n-1)的顺序进行调度;还可以采用wrr、drr等方式进行子fifo的调度。
29.一、tag管理模块:该模块主要用于为输入的fifo写数据分配节点编号,用户链表的链接操作,同时根据tag标签的使用情况生成各个子fifo的空、满指示;在一个优选的实施方式中,模块采用bitmap实现,工作流程为:当fifo有数据写入时,从tag标签中申请出一个空闲的标签,当fifo有数据读出时,则将该读出的数据对应的tag标签返回给tag管理模块。
30.结合图3所示,在一个优选的实施方式中,tag的bitmap实现方法可设置如下:对于深度为n的fifo,维护n位的tag_valid指示,在初始fifo为空时,所有的tag_valid的值全为1。tag_valid用来指示链表的对应节点是否已经被分配或者被占用,也即指示对应子fifo的空、满状态。
31.在一个优选的实施方式中,以实际例子进一步阐述:在初始时,fifo为空,所有链表节点都可以设置为空,此时所有的tag_valid可以全部设置为1,表示fifo为空,即链表的对应节点未被分配或者被占用;在后续的工作过程中,当一个节点被串到某个子fifo的链表中时,该节点对应的tag_valid设置为0,代表该节点被占用,不能被其他的子fifo利用,直到该节点被释放,其对应的tag_valid设置为1,此后才能被再次利用,以串接到某个子fifo的链表中。
32.当fifo发生写操作时,则对bitmap按照从0至(n-1)或者从(n-1)至0的顺序查找值为1的tag,当找到后,输出对应的tag值,并将对应的tag_valid置0。结合图4所示,当写入两个数据后,bitmap状态如图4,其中tag_valid[0]、tag_valid[1]置0,此例中,以从0至(n-1)的顺序查找值为1的tag,开始时,查找第一位tag_valid[0]值为1,此时,输出对应的tag值,将tag_valid[0]置0;此后,重新由0开始顺序查找,此时,查找到第二位tag_valid[1]的值为1,则输出其对应的tag值,并将tag_valid[1]置0。
[0033]
当fifo发生读操作时,如图5所示,需要将读出数据对应的tag返回资源池,直接将标签对应的tag_valid值置1即可,也即将对应的tag_valid的指示修改为空,以备后续重新调用使用。
[0034]
二、链表维护在一个更为优选的实施方式中,结合图6,对于链表来讲,主要是维护三类信息,分别是头指针、尾指针和链表中间的节点信息,对于本实现来讲链表节点信息存储到外部ram,以支持更多的存储容量。而常规的fifo没有链表节点这一概念,而是通过ram地址的顺
序排序进行fifo的管理,这也是本发明与现有技术的重要区别点之一。
[0035]
如图6所示,头指针和尾指针在每条队列(即每个子fifo)中各维护一套,而中间的节点是各条子fifo共享的,这个也是本发明提供的链表结构fifo相对于普通fifo能够节省资源的原因。fifo中存在的队列条数(即子fifo的数量)可通过模块例化的parameter进行配置,当parameter的值为1时,该fifo仅维护一个子fifo。
[0036]
此处,parameter即参数,在一个更为具体的实施方式中,这里parameter可以借用ic设计语言verilog语法中的概念,在进行例化的时候,需要指定该参数的具体值,也是基于verilog原因的标准化的要求。
[0037]
paramter的值代表子fifo的数量,子fifo之间是通过调度进行选择的,在一个优选的实施方式中,每个子fifo会赋予一定的权重,我们可以根据例如各个子fifo的编号进行区分,如0为最低优先级,n-1为最高优先级,基于通过设置优先级的调度算法来优先选择n-1对应的子fifo(或者队列)进行读取操作。
[0038]
1、头指针维护:图6为包含三个节点的链表示意图。头指针head_ptr指向tag_0,tag_0对应的节点存储着下一个节点tag_1,tag_1对应的节点存储着下一个节点tag_2,而由于tag_2为链表的最后一个节点,所以链表的尾指针也指向tag_2。在实现链表结构的同时,在头指针、tag_0和tag_1节点上分别存储着有效的数据,如图6中所示的data(0)、data(1)、data(2),即头指针节点中存储该子fifo中的第一个数据data(0),tag_0节点上存储该子fifo的第二个数据data(1),以此类推,从而实现fifo存储数据的功能。本实施例中,tag_0、tag_1、tag_2等表示tag标签,当标签串连到链表后称之为该链表的节点。在本实施例中,tag_0与前述的tag_valid[0]相对应,其他的对应编号也可以设置为类似的一一对应,tag_valid[0]的值代表了标签tag_0是否已经被串到某个链中成为一个子fifo的节点。
[0039]
在一个优选的实施方式中,对于上述链表的头指针的维护,其更新规则可设置如下:(1)、当链表节点数为1时,同时发生写入和读出操作时,头指针更新为新写入值对应的标签和数据;(2)、链表节点数为0时,发生写入操作时,头指针更新为新写入值对应的标签和数据;(3)、链表节点数大于1时,发生读出操作时,头指针更新为下一节点对应的标签和数据。
[0040]
2、尾指针维护:结合图6所示,尾指针tail_ptr中,存储最后一个tag标签所对应的节点tag_2,此时,优选的,尾指针中不再存储有效的数据,而只存储对应的标签。
[0041]
尾指针的更新规则如下:当有新数据写入时,更新为新写入值对应的标签。这样,保证fifo操作中,尾指针始终对应着fifo中的最后一个标签。
[0042]
3、链表节点数量维护:在进行后续的链表输出调度时,由于参与调度的是多个子fifo,即形成的多个链表,本发明中,设置一优先的判断步骤,即需要判断该链表中是否有数据,只有在有数据的
情况下对应的链表(即子fifo)才会参与调度,如果初始为空的fifo,则不参与调度。在一个优选的实施方式中,可以通过维护一个counter(即计数器)来实现,即在每个子fifo中,维护一个对应的counter(即计数器),该计数器在对应的链表发生写入时加1,发生读出时减1,同时发生时数值维持不变,从而在判断该链表是否参与调度时,直接对counter(即计数器)的值进行判断即可,例如其值大于等于1时,表示该链表(即该子fifo)中有数据,则其可以参与调度,否则,该链表不参与调度。由上述的记载可以看出,该counter记录的是对应的子fifo的深度,或者说是其对应的链表节点的数量。
[0043]
三、ram读写控制:为了实现较大的fifo深度,单纯使用寄存器来搭建存储结构是远远不够的,必须使用外部ram。在该实现方案中,ram用来存储节点的指针信息和存储数据,优选的,可以设置ram的深度与fifo的深度一致,每个ram地址对应一个tag标签,对应图6的tag_0/tag_1

/tag_(n-1)存储体。
[0044]
ram写操作规则是,当待写入的链表非空,即链表所维护的节点数量非0时,将新写入值对应的标签和数据写入到该链表尾指针所指向的地址中。
[0045]
ram读操作规则是,当待读出的链表节点数量大于1时,从头指针所指向的地址中读出数据。结合头指针的更新规则,读出的数据将更新到头指针中。
[0046]
四、输出调度:输出调度模块的目的是从多条链表的头指针数据进行择一输出,所采用的调度模式可以是rr(轮询调度)或者sp(严格优先级)等。
[0047]
综上,通过上述四个主要模块的处理,实现基于链表的多队列fwft fifo,相对于普通的fwft fifo,可以实现将多条队列(或者称之为子fifo)融入到一个fifo结构中,并且可以通过集成的调度,进行择一输出。这种fifo结构特别适用于通讯相关设计中需要多条队列的场景。
[0048]
在另一个实施例中,本发明方案中,fifo的工作原理如下:在数据的写入过程中:1、新写入的数据从tag管理模块中申请tag标签,更新fifo的空满信息,即空、满指示;2、新写入的数据更新所选择队列(例如根据数据中指定的字段等),并一并更新队列队形的头指针、尾指针和中间节点等信息;3、新写入的数据更新所选队列的节点数量信息,以便于对所选队列的状态进行监控;4、新写入的数据根据调度的情况更新fifo的数据输出;在数据的读出过程中:5、读出数据后更新所在队列头指针、尾指针和中间节点等信息;6、读出数据后更新所在队列的节点数量信息;7、读出数据返还tag标签,更新fifo的空满指示。
[0049]
需要说明的是,上述的数据写入过程和读出过程之间,不存在必然的前后步骤上的严格先后关系,其步骤的符号仅为便于阐述发明的执行原理而使用。即其数据的写入过程与数据的读出过程是相对独立的。
[0050]
此外,在更为优选的实施方式中,本方案还可以通过电子设备的方式来实现,该设备可以包括执行上述基于链表的fwft fifo系统的相应模块。因此,可以由相应模块执行上述各个实施方式的每个步骤或几个步骤,并且该设备可以包括这些模块中的一个或多个模块。模块可以是专门被配置为执行相应步骤的一个或多个硬件模块、或者由被配置为执行相应步骤的处理器来实现、或者存储在计算机可读介质内用于由处理器来实现、或者通过某种组合来实现。
[0051]
在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本方案的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本方案的实施方式所属技术领域的技术人员所理解。处理器执行上文所描述的各个方法和处理。例如,本方案中的方法实施方式可以被实现为软件程序,其被有形地包含于机器可读介质,例如存储器。在一些实施方式中,软件程序的部分或者全部可以经由存储器和/或通信接口而被载入和/或安装。当软件程序加载到存储器并由处理器执行时,可以执行上文描述的方法中的一个或多个步骤。备选地,在其他实施方式中,处理器可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行上述方法之一。
[0052]
在此以其他方式描述的逻辑和/或步骤,可以具体实现在任何可读存储介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。
[0053]
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明 的保护范围应以权利要求的保护范围为准。
当前第1页1 2 
网友询问留言 留言:0条
  • 还没有人留言评论。精彩留言会获得点赞!