一种基于FPGA的虚拟FIFO数据缓存方法、系统及介质与流程

摘要: 本发明涉及信号处理领域,具体涉及一种基于fpga的虚拟fifo数据缓存方法、系统及介质。背景技术:1、fpga具备并行计算速度快、数据吞吐率高等优点,目前常用f...
一种基于FPGA的虚拟FIFO数据缓存方法、系统及介质与流程

本发明涉及信号处理领域,具体涉及一种基于fpga的虚拟fifo数据缓存方法、系统及介质。

背景技术:

1、fpga具备并行计算速度快、数据吞吐率高等优点,目前常用fpga实现复杂的信号处理算法。在计算复杂度高时无法实现数据的流水处理,在处理过程中需要将数据缓存到ddr中,在需要时将数据从ddr中读取出来进行相关计算。ddr的读写操作复杂,需要事前知道需要缓存的数据的长度,并将写突发长度和数据包长度严格对应,否则会出现读写死机的问题。为了简化基于axis协议的ddr读写操作,xilinx提供了一种名为virtual fifo(简称vfifo)的ip核。该ip核可直接与用户的axis接口数据对接,输出axis接口的数据,无需用户端口进行读写的地址操作。但是即便fpga外围的ddr存储器空间能够达到吉字节或数十吉字节,xilinx vfifo的最大缓存容量仅为256mb,而复杂的信号处理算法处理的数据大小可达到吉字节量级,vfifo较小的容量限制了其在信号处理系统设计中的应用。

技术实现思路

1、为了解决现有技术问题,达到灵活配置虚拟fifo缓存空间的目的,本申请提供一种基于fpga的虚拟fifo数据缓存方法、系统及介质。

2、第一方面,提供一种基于fpga的虚拟fifo数据缓存方法,采用如下技术方案:

3、配置虚拟fifo的运行参数,所述参数包括ddr读写空间起始地址、ddr读写空间结束地址、每次读写突发长度以及输入/输出数据位宽;

4、ddr写模块将axis协议数据按照预设的突发长度通过ddr控制器写入ddr存储器,并将写突发包总数和最后一包有效长度传递至ddr读模块;

5、ddr读模块接收ddr写模块传递的写突发包总数和最后一包有效长度,将ddr读地址传递给ddr控制器,ddr控制器将数据从ddr存储器中读取出来,再由ddr读模块将数据打包成axis协议输出。

6、进一步地,ddr写模块将axis协议数据按照预设的突发长度通过ddr控制器写入ddr存储器时,包括如下步骤:

7、2-1)ddr写模块接收上游设备通过axis接口发送的数据流,并对突发数据包逐包计数;

8、2-2)ddr写模块每接收到上游设备发送来的突发长度个数据时,生成该突发数据包的ddr写地址,并将ddr写地址传递至ddr控制器;当接收到上游设备发送数据的s_axis_tlast信号时,表示接收完需要缓存的数据,ddr写模块判断最后一包的有效长度是否等于突发长度:若最后一包的有效长度等于突发长度,以一次突发写的方式写入ddr存储器;若最后一包的有效长度不等于突发长度,对最后一包数据进行补整操作,将其长度向上补整到单次突发长度,然后再以一次突发写的方式写入ddr存储器;

9、2-3)ddr控制器根据ddr写地址、突发长度和数据,将数据存储到ddr存储器;

10、2-4)当所有数据写完,ddr写模块将本次写操作的写突发包总数和最后一包有效长度传递给ddr读模块。

11、进一步地,ddr控制器根据ddr写地址、突发长度和数据,将数据存储到ddr存储器时,具体如下:

12、ddr控制器从ddr读写空间的起始地址开始,在产生每一次突发数据包的地址有效信号时判断当前写地址是否超过结束地址,当未超过结束地址时,后续每一次突发传输的地址,按单次突发总字节数依次递增;当超过结束地址时,ddr写地址需要从起始地址重新开始。

13、进一步地,ddr读模块依据写突发包总数和最后一包有效长度,计算ddr读地址传递至ddr控制器,ddr控制器将数据从ddr存储器中读取出来,再由ddr读模块将数据打包成axis协议输出时,包括如下步骤:

14、3-1)ddr读模块接收来自ddr写模块的写突发包总数及最后一包有效长度信息,并对写突发包总数计数;

15、3-2)接收到的地址包计数大于1时,启动ddr读操作,并生成对应读地址,并将ddr读地址传送至ddr控制器;

16、3-3)输出到最后一包数据时,根据ddr写模块传递的最后一包有效长度,将最后一包的数据截取到有效长度,保证输入数据和输出数据一致。

17、进一步地,接收到的地址包计数大于1时,启动ddr读操作,并生成对应读地址,并将ddr读地址传送至ddr控制器时,具体如下:

18、ddr读地址从ddr读写空间起始地址开始,在产生每一次突发数据包的地址有效信号时判断当前读地址是否超过结束地址:若未超过结束地址,后续每一次突发传输的地址按单次突发总字节数依次递增;若超过结束地址,读地址从ddr读写空间起始地址重新开始。

19、第二方面,提供一种基于fpga的虚拟fifo数据缓存系统,包括如下模块:

20、参数配置模块,用于配置虚拟fifo的运行参数,所述参数包括ddr读写空间起始地址、ddr读写空间结束地址、每次读写突发长度以及输入/输出数据位宽;

21、ddr写模块,集成于fpga内部,用于将axis协议数据按照预设的突发长度通过ddr控制器写入ddr存储器,并将写突发包总数和最后一包有效长度传递至ddr读模块;

22、ddr读模块,集成于fpga内部,用于接收ddr写模块传递的写突发包总数和最后一包有效长度,将ddr读地址传递给ddr控制器,ddr控制器将数据从ddr存储器中读取出来,再由ddr读模块将打包成axis协议输出;

23、ddr控制器,与ddr读模块和ddr写模块通过内部总线连接,用于接收读写请求、执行地址映射;

24、ddr存储器,用于存储ddr写模块接收的axis协议数据。

25、第三方面,提供一种计算机可读存储介质,其上存储有计算机程序,所述的计算机程序被处理器执行时,实现如权利要求第一方面中任一所述基于fpga的虚拟fifo数据缓存方法的步骤。

26、本发明的有益效果如下:

27、本申请通过配置ddr读写空间的起始地址和结束地址,实现虚拟fifo的ddr缓存空闲的配置,调整缓存空间大小,优于现有技术xilinx的vfifo缓存方案的256m缓存空间。支持输入和输出数据的位宽配置,具备向下兼容和扩展功能。

28、本申请基于axis协议的大量数据能够直接接到ddr缓存空间进行缓存和读取,充分利用ddr的缓存空间,简化对数据的缓存操作,无需事前知道数据长度,无需在模块外围进行地址计算、地址申请等操作,并且比现有xilinx virtual fifo缓存方案消耗的fpga资源少,提升了信号处理系统设计的灵活性。

1.一种基于fpga的虚拟fifo数据缓存方法,其特征在于,包括如下步骤:

2.根据权利要求1所述的基于fpga的虚拟fifo数据缓存方法,其特征在于,ddr写模块将axis协议数据按照预设的突发长度通过ddr控制器写入ddr存储器时,包括如下步骤:

3.根据权利要求2所述的基于fpga的虚拟fifo数据缓存方法,其特征在于,ddr控制器根据ddr写地址、突发长度和数据,将数据存储到ddr存储器时,具体如下:

4.根据权利要求1所述的基于fpga的虚拟fifo数据缓存方法,其特征在于,ddr读模块依据写突发包总数和最后一包有效长度,计算ddr读地址传递至ddr控制器,ddr控制器将数据从ddr存储器中读取出来,再由ddr读模块将数据打包成axis协议输出时,包括如下步骤:

5.根据权利要求4所述的基于fpga的虚拟fifo数据缓存方法,其特征在于,接收到的地址包计数大于1时,启动ddr读操作,并生成对应读地址,并将ddr读地址传送至ddr控制器时,具体如下:

6.一种基于fpga的虚拟fifo数据缓存系统,用于实现如权利要求1所示的基于fpga的虚拟fifo数据缓存方法,其特征在于,包括如下模块:

7.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述的计算机程序被处理器执行时,实现如权利要求1-5中任一所述基于fpga的虚拟fifo数据缓存方法的步骤。