Vhdl 如何从AXI4总线读取大量数据

Vhdl 如何从AXI4总线读取大量数据,vhdl,fpga,xilinx,vivado,zynq,Vhdl,Fpga,Xilinx,Vivado,Zynq,我正在zybo板上构建一些东西,所以使用Zynq设备 我想从CPU写入主内存,然后用FPGA读取,以便将CPU结果写入另一个设备 我很确定我需要使用AXI总线来实现这一点,但我无法找到解决这个问题的最佳方法。我是否: 我自己做一个完整的AXI外围设备?大概是一个主机,它向主存发出读取请求,然后让它们完成。我发现很难找到关于如何实际制作AXI外围设备的资源,我从哪里开始寻找直接的解释 我使用一个Xilinx IP核来处理AXI总线,但是有很多,我不确定使用哪一个最好 不管它是什么,它需要速度快

我正在zybo板上构建一些东西,所以使用Zynq设备

我想从CPU写入主内存,然后用FPGA读取,以便将CPU结果写入另一个设备

我很确定我需要使用AXI总线来实现这一点,但我无法找到解决这个问题的最佳方法。我是否:

  • 我自己做一个完整的AXI外围设备?大概是一个主机,它向主存发出读取请求,然后让它们完成。我发现很难找到关于如何实际制作AXI外围设备的资源,我从哪里开始寻找直接的解释
  • 我使用一个Xilinx IP核来处理AXI总线,但是有很多,我不确定使用哪一个最好
不管它是什么,它需要速度快,并且它需要能够从我板上的DDR内存中进行大量读取。该内存也需要可由CPU写入


谢谢

如果您有权访问vivado hls工具。 然后,在突发方案下将数据从主存储器传输到FPGA存储器(例如,BRAM)将是一种解决方案。
只需在代码中使用memcpy,然后合成工具就会自动生成主IP,这非常快速可靠。

如果您可以访问vivado hls工具。 然后,在突发方案下将数据从主存储器传输到FPGA存储器(例如,BRAM)将是一种解决方案。
您只需要在代码中使用memcpy,然后合成工具就会自动生成主IP,这非常快速可靠。

一个简单的选择是在方框图中使用AXI流FIFO组件。然后,您可以编写一个AXI流从机来接收数据。因此,ARM将通过AXI写入FIFO,而您的组件将从FIFO中流出数据流。不需要做任何AXI工作


查看Xilinx的详细信息。

一个简单的选择是在方框图中使用AXI流FIFO组件。然后,您可以编写一个AXI流从机来接收数据。因此,ARM将通过AXI写入FIFO,而您的组件将从FIFO中流出数据流。不需要做任何AXI工作


查看Xilinx的详细信息。

选项1:创建自己的AXI主机。出于配置目的,您可能还需要创建一个AXI从机。 我发现这篇文章对开始使用AXI很有帮助: 当然,完整的AXI参考规范如下:

选项2:使用Xilinx AXI DMA组件设置DDR内存和AXI流之间的DMA传输。您需要将逻辑连接到Xilinx DMA组件的“AXI流”。AXI流通常比创建新的高性能AXI主机更容易实现。 这种方法支持非常高的带宽,并且可以进行连续流和基于分组的传输。它还支持每个数据包的元数据。 Xilinx AXI DMA组件如下所示:
Xilinx还为此提供了软件驱动程序。

选项1:创建自己的AXI主机。出于配置目的,您可能还需要创建一个AXI从机。 我发现这篇文章对开始使用AXI很有帮助: 当然,完整的AXI参考规范如下:

选项2:使用Xilinx AXI DMA组件设置DDR内存和AXI流之间的DMA传输。您需要将逻辑连接到Xilinx DMA组件的“AXI流”。AXI流通常比创建新的高性能AXI主机更容易实现。 这种方法支持非常高的带宽,并且可以进行连续流和基于分组的传输。它还支持每个数据包的元数据。 Xilinx AXI DMA组件如下所示:
Xilinx还为此提供了软件驱动程序。

考虑使用AXI stave外围设备(使用Xilinx外围设备作为起点)并将内存放入其中。然后CPU直接写入外围设备中的内存。由于块内存是双端口的,因此您可以从另一个端口直接访问数据;你是对的,这是最好的方法,但是我需要实例化太多的ram。不过,我会给它一个尝试,可能有办法使CPU计划工作正常,所以没有问题,一切都有效。考虑使用AXI StaveExcel(使用Xilinx One作为起点)并把内存放在里面。然后CPU直接写入外围设备中的内存。由于块内存是双端口的,因此您可以从另一个端口直接访问数据;你是对的,这是最好的方法,但是我需要实例化太多的ram。不过,我会试一试,也许有办法让CPU调度正常工作,这样就不会出现问题,一切都正常。这是我的总体计划,但我想知道是使用vivado IP与AXI总线通信,我与IP通信,还是应该实现AXI外围设备。我的问题基本上是“我是花时间学习与AXI总线接口,还是花时间学习如何与特定的IP核心接口”。这是我的总体计划,但我想知道是使用vivado IP与AXI总线通信,还是与IP通信,还是应该实现AXI外围设备。我的问题基本上是“我是花时间学习如何与AXI总线接口,还是花时间学习如何与特定的IP核接口”。你知道有什么组件可以让FPGA以同样的方式从内存中读取数据吗?所以我可以把从FPGA读取的内存发送到主内存,然后使用它的结果?否则,我将基本上在ARM上将该代码作为memcpy实现到FIFO组件中。可能是AXI流到内存映射(PG102)。它将AXI流转换为AXI事务或从AXI事务转换为AXI流。非常简单的接口,但确实需要一些数据打包。你知道有什么组件可以让FPGA从mem读取数据吗