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

时间:2016-04-16 12:46:04

标签: vhdl fpga xilinx vivado zynq

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

我想从CPU写入主内存,并使用FPGA读取它,以便将CPU结果写入另一台设备。

我很确定我需要使用AXI总线来做这件事,但我无法找到解决问题的最佳方法。我:

  • 自己制作一个完整的AXI外设?大概是一个向主存储器发出读取请求然后完成它们的主控器。我发现很难找到有关如何实际制作AXI外设的资源,我将从哪里开始寻找直接的解释。
  • 使用其中一个Xilinx IP内核为我处理AXI总线,但其中有很多,我不确定最好用的是什么。

无论是什么,它都需要快速,并且需要能够从我板上的DDR内存中进行大量读取。该内存也需要由CPU写入。

谢谢!

3 个答案:

答案 0 :(得分:3)

一个简单的选择是在程序框图中使用AXI-Stream FIFO组件。然后,您可以编写AXI-Stream从站以接收数据。所以ARM会通过AXI写入FIFO,你的组件会将数据从FIFO中流出。无需做任何AXI工作。

详细了解Xilinx的PG080

答案 1 :(得分:1)

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

答案 2 :(得分:1)

选项1:创建自己的AXI母版。您可能还需要创建AXI从站以进行配置。 我发现这篇文章对AXI入门很有帮助: http://silica.com/wps/wcm/connect/88aa13e1-4ba4-4ed9-8247-65ad45c59129/SILICA_Xilinx_Designing_a_custom_axi_slave_rev1.pdf?MOD=AJPERES&CVID=kW6xDPd 当然,完整的AXI参考规范如下: http://www.gstitt.ece.ufl.edu/courses/fall15/eel4720_5721/labs/refs/AXI4_specification.pdf

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