专利名称:采用静态存储实现的虚拟fifo的装置的制作方法
技术领域:
本发明涉及PCI总线技术和FPGA的开发设计领域,特别涉及利用SRAM为FPGA芯片构建外部缓存的方法和系统。
背景技术:
在传输数据的时候,经常要用到FIFO,这是一种先入先出的数据缓存方式。它的特点是顺序写入数据,然后顺序读出数据,数据地址由内部读写地址指针自动加I完成。这种数据缓存方式经常用于两种时钟域或者两种硬件系统之间的数据传输,比如一端是AD数据采集,另一端是PCI总线的情况。片外FIFO是早期出现的一种FIFO形式,这种FIFO能够较好地完成先入先出的缓存的功能,但是价格昂贵,另一方面,两个芯片之间进行数据传输会使得系统复杂性提高,从而也降低了可靠性。在电子技术进入SOC时代以后,片内FIFO也就应运而生了,比如FPGA内部的块状存储器。这种FIFO能克服片外FIFO的上述缺点,但是也有它的缺点,就是容量较小,FIFO深度一般只能达到几K到几十K,不能满足数据量较大时的需求。所以就要寻求一种新的FIFO方式,既能保证高速大容量的数据缓存,又不至于成本过高,并且能保证可靠性。一般情况下,设备和计算机之间通过PCI总线进行数据传输。上位机(主机)通过PCI总线将数据发送到子卡上,或者通过PCI总线从子卡上读取数据。一般采用DMA方式传输块状数据。对于DMA传输方式而言,每次传输的数据块大小较大时,数据传输率较高。并且,对于要求很高数据传输率的总线传输模式,如果每次传输的数据量较小,则需要频繁启动DMA控制器。这样增加了 CPU的负担,在实时性上较难保证。例如要求总线传输速率为60MB/S,每次传输较大的数据块大小为2MB,则每秒需要启动30次DMA控制器。如果每次传输较大的数据块,就需要在子卡上有较大的缓存。一般PCI总线子卡上使用FPGA来实现与PCI总线的接口。FPGA内部的块状存储器容量较小,不适宜构建较大的缓存。因此需要在FPGA外部构建缓存,从而提出了虚拟FIFO的概念。现有的方案或采用片外FIFO或采用FPGA内部构建的FIF0,面临的缺点众多,主要缺点如下:(I)大容量片外FIFO器件价格昂贵,在实际应用中较少出现(2)片外FIFO可靠性较差(3) FPGA内部构建的FIFO容量较小,无法满足PCI总线传输的要求(4)套路老旧,易于模仿。方案的实现方法简单易懂,极易被人模仿造成市场的
无序竞争。(5)本发明就是为了克服旧方案的这些局限性,创新性地在FPGA外利用SRAM构建虚拟FIFO ;这样既满足了大容量高速率FIFO的要求,又提高了系统的可靠性,同时降低了开发的成本。
发明内容
本发明就是为了克服老旧方案的这些局限性,创新性地在FPGA外利用SRAM构建虚拟FIFO ;这样既满足了大容量高速率FIFO的要求,又提高了系统的可靠性,同时降低了开发的成本。具体而言,本发明提出了一种采用静态存储来实现虚拟FIFO的装置,主要包括:数据上/下行二级FIFO模块、状态机模块和外部一级FIFO模块,其中所述数据上/下行二级FIFO模块,数据上行二级FIFO模块和数据下行二级FIFO模块,其均由由FPGA内部的存储器块构成,用于将数据进行初级的传输;所述状态机模块,用于利用FPGA控制数据流的传输状态;所述外部一级FIFO模块,由静态存储实现,用于实现大容量的FIFO数据缓存。根据本发明另一个方面,其中数据上行二级FIFO模块和数据下行二级FIFO模块为两个32位IK深度的FIF0,由FPGA内部的存储器块构成。根据本发明另一个方面,其中利用FPGA控制数据流的传输状态进一步包括接收外部传送进来的数据,传给外部一级FIF0,再接收外部一级FIFO传进来的数据,然后将数据传送出去。根据本发明另一个方面,其中整个虚拟FIFO过程中数据流在数据上/下行二级FIFO模块和外部一级FIFO模块之间的传输是由所述状态机模块控制的。根据本发明另一个方面,其中所述状态机模块的工作模式包括以下三种:空闲状态,写入状态,读出状态。根据本发明另一个方面,其中所述状态机模块中设置两个地址寄存器:写地址寄存器和读地址寄存器,初始值均为0,用于描述当前虚拟FIFO的读写地址。本发明采用SRAM实现了虚拟FIF0,相比于专门的片外FIFO器件和FPGA内部FIF0,在保证高速大容量数据缓存的同时,极大地降低了硬件成本,并且提高了系统的可靠性。
下面结合附图及具体实施例对本发明再作进一步详细的说明:附图1所示为本发明所提出的采用SRAM (静态存储)实现的虚拟FIFO的装置示意图;附图2所示为本发明所提出的数据上/下行二级FIFO模块结构示意图;附图3所示为本发明所提出的虚拟FIFO的状态机示意图。
具体实施例方式为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。本发明使用大容量的高速异步SRAM,异步SRAM的时序简单,容量一般能够达到IMB或更多,总线频率也可达到100MHz,价格相对同步SRAM和大容量FIFO器件也比较便宜。本设计就采用了 2片大容量的高速异步SRAM芯片。每片芯片容量为2MB,合计为4MB。
对于数据传输的缓存而言,构建为FIFO (先进先出)结构,使用起来较为简单。本设计利用FPGA实现了 SRAM的控制器,从而构建了一个位宽32位,深度最大为IM的虚拟FIFO。虚拟FIFO的工作频率为50MHz,带宽为200MB/s。考虑到虚拟FIFO的SRAM要处理输入和输出,因此虚拟FIFO的有效传输带宽为lOOMB/s(即输入和输出带宽均为100MB/S)。这样的传输带宽能够满足PCI总线的传输需求。(I)虚拟FIFO装置的构成虚拟FIFO的构成系统框图如图1所示,主要组成部分为数据上/下行二级FIFO模块101、状态机模块102和外部一级FIFO模块103,其中:数据上/下行二级FIFO模块101,包括两个32位IK深度的FIF0,我们命名为数据上行二级FIFO模块和数据下行二级FIFO模块(在后面的说明中分别简称为FIF0_A和FIF0_B)他们都由FPGA内部的存储器块构成。如图2所示。它们的作用是将数据进行初级的传输,即接收外部传送进来的数据,传给外部一级FIF0,再接收外部一级FIFO传进来的数据,然后将数据传送出去。状态机模块102,在FPGA内部实现,用于利用FPGA控制数据流的传输状态,整个虚拟FIFO过程中数据流在数据上/下行二级FIFO模块101和外部一级FIFO模块103之间的传输由这个状态机控制。外部一级FIFO模块103,由SRAM实现,用于实现大容量的FIFO数据缓存,是在硬件上对FPGA内部FIFO的拓展,也是整个虚拟FIFO的在硬件上的主要部分,利用它,我们把FIFO深度从几K拓展到了 1M。其中,所述状态机模块102的工作模式有3种:空闲状态301,写入状态302,读出状态303,如图3所示。(2)虚拟FIFO的实现过程和状态机描述状态机模块102的空闲状态301,写入状态302,读出状态303的三种工作模式由总线仲裁模块自动控制。每次读取突发数据块的长度记为burst_length=10 (16进制)。如果写入SRAM中的数据数目VFIF0_C0UNT_REG为512K时候,就认为满了。在状态机模块102中设置两个地址寄存器:写地址寄存器writeAddrReg,读地址寄存器readAddrReg,初始值均为O。这两个地址寄存器用于描述当前虚拟FIFO的读写地址。为了进一步说明本发明提出的虚拟FIFO的装置,所述虚拟FIFO装置的工作流程如下:I)上电和服务后,状态机模块进入空闲状态。VFIF0_C0UNT_REG为O。2)在空闲状态,状态机模块监测FIF0_A和FIF0_B的状态。如果FIF0_A中的数据数目不小于burstjength,且VFIFO未满,就进入VFIFO数据写状态;否则判断数据输出使能,且FIF0_B中的数据小于半满,就进入VFIFO读状态。3) VFIFO数据写状态:连续从FIF0_A中读取burst_length个数据,写入到SRAM中。然后判断FIF0_B是否需要补充数据(判断依据:数据输出使能0UTPUT_EN,且FIF0_B中的数据小于半满)。如果需要,就进入VFIFO读状态。写入数据后,VFIF0_C0UNT_REG的数据增加burst_length个。4)VFIF0读状态:连续从SRAM中读取8个数据,写入到FIF0_B中。然后回到空闲状态。
5)读出数据后,VFIF0_C0UNT_REG 的数据减少 burst_length 个。5.4虚拟FIFO的装置工作模式:先写入IM字节的数据;I)使能数据输出;2)查询VFIFO中的数据长度VFIF0_C0UNT_REG。如果小于1M,就再次写入IM数据。重复3的过程。本发明采用SRAM实现了虚拟FIFO,相比于专门的片外FIFO器件和FPGA内部FIFO,在保证高速大容量数据缓存的同时,极大地降低了硬件成本,并且提高了系统的可靠性。本发明创造性地采用了数据由FPGA内构的数据上行二级FIFO经过由SRAM构成的虚拟FIFO再进入FPGA内构数据下行二级FIFO的结构,这种结构是对片内FIFO —种成功的扩展。通过FPGA对数据流的控制采用了突发数据块的方式,保证了数据能够完整地不丢失地进行高速传输。经过实际验证,采用这种方式实现的虚拟FIFO的确能在PCI总线和硬件的数据通信上高速准确无丢失地完成任务。这种采用SRAM实现虚拟FIFO的技术含量高、保密性强,不容易被模仿和套用;对于现今高密度、大数据量的通信数据采集和处理比第三条中的技术实现方案具有更大的优势。综上所述,虽然本发明已以优选实施例披露如上,然而其并非用以限定本发明。本发明所属技术领域的普通技术人员,在不脱离本发明的精神和范围内,可作各种变动与修饰。因此,本发明的保护范围当视所附的权利要求所界定的范围为准。
权利要求
1.一种采用静态存储来实现虚拟FIFO的装置,主要包括:数据上/下行二级FIFO模块、状态机模块和外部一级FIFO模块,其中 所述数据上/下行二级FIFO模块,数据上行二级FIFO模块和数据下行二级FIFO模块,其均由由FPGA内部的存储器块构成,用于将数据进行初级的传输; 所述状态机模块,用于利用FPGA控制数据流的传输状态; 所述外部一级FIFO模块,由静态存储实现,用于实现大容量的FIFO数据缓存。
2.如权利要求1所述的系统,其中数据上行二级FIFO模块和数据下行二级FIFO模块为两个32位IK深度的FIFO,由FPGA内部的存储器块构成。
3.如权利要求1所述的系统,其中利用FPGA控制数据流的传输状态进一步包括接收外部传送进来的数据,传给外部一级FIFO,再接收外部一级FIFO传进来的数据,然后将数据传送出去。
4.如权利要求1所述的系统,其中整个虚拟FIFO过程中数据流在数据上/下行二级FIFO模块和外部一级FIFO模块之间的传输是由所述状态机模块控制的。
5.如权利要求1所述的系统,其中所述状态机模块的工作模式包括以下三种:空闲状态,写入状态,读出状态。
6.如权利要求1所述的系统,其中所述状态机模块中设置两个地址寄存器:写地址寄存器和读地址寄存器,初始值均为0,用于描述当前虚拟FIFO的读写地址。
全文摘要
本发明公开了一种采用静态存储来实现虚拟FIFO的装置,主要包括数据上/下行二级FIFO模块、状态机模块和外部一级FIFO模块,所述数据上/下行二级FIFO模块,数据上行二级FIFO模块和数据下行二级FIFO模块,其均由由FPGA内部的存储器块构成,用于将数据进行初级的传输;所述状态机模块,用于利用FPGA控制数据流的传输状态;所述外部一级FIFO模块,由静态存储实现,用于实现大容量的FIFO数据缓存。本发明采用SRAM实现了虚拟FIFO,相比于专门的片外FIFO器件和FPGA内部FIFO,在保证高速大容量数据缓存的同时,极大地降低了硬件成本,并且提高了系统的可靠性。
文档编号G06F13/20GK103218311SQ201310087059
公开日2013年7月24日 申请日期2013年3月19日 优先权日2013年3月19日
发明者马晓川, 鄢社锋, 林格平, 杨力, 林津丞, 李宾 申请人:中国科学院声学研究所