多通道先进先出数据缓冲存储装置
技术领域
本发明涉及一种在数据通信业务的ASIC(Application SpecificIntegrated Circuit特定用途集成电路)或FPGA(Field Programable GateArray现场可编程门阵列)设计中使用先进先出(FIFO,First In FirstOut)机制的存储体实现多通道数据缓冲的装置。
背景技术
目前,在数据通信业务的ASIC或FPGA设计中,经常需要处理多个通道数据的缓冲,通常的实现方法都是用叠加的方式,即对每个通道单独使用一个FIFO来缓冲。FIFO在ASIC/FPGA设计中也可理解为一种用于对数据缓冲的存储体的简称。通常要实现FIFO存储功能需要三个部分:数据存储单元、读写指针控制单元和状态标示单元。其中数据存储单元使用双端口RAM存放数据;读写指针控制单元用于指示下一个读/写操作的位置,通常使用计数器实现;状态标示单元通过对数据计数来产生当前FIFO的空满状态。在通道数不多的情况下,采用叠加FIFO实现多通道缓冲的设计方法思路清晰、实现简单,但随着通道数的增加,用以构造FIFO使用的ASIC或FPGA资源是巨大的,不仅需要为每个通道的FIFO重复构造相同的内部控制单元,耗费大量的计数器资源,而且在接口占用大量的数据连线资源。
举例来说,如图1所示,数据流S经过状态机St1后,被分配到64个叠加的FIFO中缓冲F1-F64,在这种情况下如果每个FIFO的数据宽度为8bit,FIFO深度为64,所耗费的资源除了64个64×8的双端口RAM外,还需耗费构成读写地址指针的64×2个6bit的计数器和64×6bit的数据计数器。更为重要的是,64个FIFO的8位数据的输出还需要一个64×8bit宽的多路复用(MUX)逻辑,该MUX将会耗费大量的组合逻辑资源,同时此处的逻辑布线也将十分困难。因此整个系统的主频会因此受到严重影响 可见,随着通道数的增加实现FIFO的叠加会越来越困难
发明内容
针对上述基于叠加的现有技术所存在的缺陷和不足,本发明的目的在于提供一种结构简单、节省资源、访问速度快的多通道FIFO数据缓冲存储装置。
为实现该目的,本发明以存储器分区为核心思想,设计了一种多通道先进先出(FIFO)数据缓冲存储装置,用于对来自多个通道的缓冲数据进行各自的FIFO数据缓冲,该装置包括:数据存储单元、读写指针控制单元和状态标示单元;
所述数据存储单元由至少一个双端口随机存储器(RAM)(R1),对该RAM的地址资源重新分配,将其按物理地址划分为多个区块,各区块与各个通道形成一定的映射关系,对于来自某个通道的读/写
所述读写指针控制单元由读指针控制单元和写指针控制单元组成,所述读指针控制单元可以分别为每个通道指示与该通道相对应的区块中下一个读操作的位置,所述写指针控制单元可以分别为每个通道指示与该通道相对应的区块中下一个写操作的位置;
所述状态标示单元(F)用于记录上述RAM中当前各个FIFO区块的空/满状态。
更具体来说,所述双端口RAM(R1)可以采用高低地址结合的方式进行访问,高位地址与通道的端口号相对应,低位地址也即各区块下一个读/写操作的位置则由读/写指针控制单元产生;所述双端口RAM(R1)的各个FIFO区块依据高位地址划分。
由于本发明中多个通道共用双端口RAM(R1),各个通道的读/写指针控制也分别集成于读/写指针控制单元中,因此减少了现有技术中多个独立FIFO构造所使用的大量读写指针计数器的资源,并简化了接口逻辑的复杂程度,同时随着结构的简化和资源的节省在ASIC或FPGA设计中系统的主频能够得到提高。
附图说明
通过下面的详细描述和相应的本发明实施例的附图,将更加全面充分地理解本发明。当然,附图不应该被用来将本发明限定在特定的实例中,它只是起到解释和帮助理解的作用。
图1示出了采用多个FIFO支持多通道缓冲的系统框图
图2示出了采用本发明的多通道FIFO数据缓冲装置的具体实例的内部框图
具体实施方式
图2是采用本发明的多通道FIFO数据缓冲装置的具体实例的内部框图。如图2所示,数据存储单元包括一个双端口RAM R1用于对多个通道进行数据缓冲,对该RAM R1的地址资源进行了重新分配,按通道划为区块访问,各区块内部可以看作是相应通道的FIFO。
读/写指针控制单元由至少一个加法器A1/A2和一个单端口RAMR2/R3构成。所述读/写指针控制单元的单端口RAM R2/R3的地址也按通道划分,与某通道相对应的R2/R3地址中存放有与该通道相对应的R1区块中下一个读/写操作位置的偏移量。在每次读/写操作结束后都使用读/写加法器A1/A2对当前的偏移量加一并存放在与通道端口对应的R2/R3单元中,作为该通道对应区块的下一次读/写操作的偏移量。
对数据存储单元的访问最好采用高低地址组合产生的方式,高位地址使用通道的端口号实现,低位地址则由读/写指针控制单元提供,在本实施例中R1的各区块地址即为通道端口号,R2/R3中各通道相应区块偏移量的存放地址也为通道的端口号。
当某个通道产生了写缓冲数据的请求时,待写入的缓冲数据将作为R1的输入,该通道的端口号将作为R1的高位地址输入,用于指示缓冲数据写入的区块,同时该端口号也将作为R2的地址输入,用于指示该区块偏移量的存放地址,R2将依据该地址取出偏移量并传用于指示该区块偏移量的存放地址,R2将依据该地址取出偏移量并传送给R1作为R1的低位地址输入,R1将组合高位地址和低位地址来定位缓冲数据写入的位置,并将该数据写入。同时加法器A1将取出的偏移量加一并回存到R2中的相应地址中,作为该通道相应区块下一次写操作的偏移量。
当某个通道产生了读缓冲数据的请求时,该通道的端口号将作为R1的高位地址输入,用于指示读出缓冲数据的区块,同时该端口号也将作为R3的地址输入,用于指示该区块偏移量的存放地址,R3将依据该地址取出的偏移量传送给R1作为R1的低位地址输入,R1将组合高位地址和低位地址来定位待读出的缓冲数据,并将该数据输出。同时加法器A2将取出的偏移量加一并回存到R3中的相应地址中,作为该通道相应区块下一次读操作的偏移量。
这样实现了对多个端口的访问只需要一组数据线和一组地址线,避免使用多组数据线的互连线,节省了大量逻辑连线资源,并简化了接口设计。
如图2所示,R1的地址空间按通道数均分,R1的读写地址由通道端口号和R2/R3的输出数据组合而成,同时端口号也是R2/R3的地址。这样可以实现通道和RAM地址空间的一一映射。因此各个通道的数据可直接在映射的RAM空间访问。
仍以图1的应用为例,与图1中的FIFO相比,这个多端口FIFO的资源多了两个64×6的RAM,但是节省了构成读写地址计数器的63×2×6bit计数器资源,也节省了8到64的编解码逻辑和大量的连线资源。
在本发明中的任何参考符号并不限制本发明的保护范围。“包括”一词不排除本发明所列之外的其它组件的出现。在组件或单元之前的“一个”不排除多个这种组件或单元的存在。