我正在寻找一种方法,可以将用C语言编写的软件应用程序中的某些数据发送到Zynq的AXI-Stream接口(interface)。就像是

open(/dev/axistream);
send_data(data);

我在Arm部件上运行Linux,现在我想将其连接到可编程逻辑部件。

最佳答案

在zynq设备上,Cortex-A9处理器和FPGA之间的通信是使用AXI协议(protocol)完成的。可以使用三种类型的端口在FPGA和CPU(Zynq TRM)之间进行通信:

  • 通用AXI端口:2个主端口(从CPU到FPGA)和2个从端口(从FPGA到CPU)。这些端口连接到处理系统的中央互连,可用于向DDR存储器或片上存储器(OCM)传输数据。
  • 高性能AXI端口:4个从端口(从FPGA到CPU)提供对DDR或OCM的高带宽访问
  • ACP(加速器一致性端口):从端口(从FPGA到CPU)高吞吐量端口直接连接到探听控制单元(SCU)。 SCU保持高速缓存一致性(不需要高速缓存刷新/无效)。

  • 从您的问题中,我会理解,在您的情况下,CPU是通信的主控器。您将需要使用通用axi主端口。您不能将AXI4流接口(interface)连接到AXI互连。您将需要将AXI4 Streaming转换为AXI。根据您的性能需求,AXI DMA ip内核(AXI DMA IP core)可能是一个很好的解决方案。

    如果要使用“open(/dev/)”从软件角度进行通信,则需要Linux设备驱动程序。如果使用的是DMA内核,则通信通常如下所示:
  • 您将配置DMA内核以从某个内存地址
  • 中获取数据
  • 启动DMA核心
  • ,DMA核心将获取数据并将其馈送到您的IP块的AXI4流接口(interface)
  • 您的IP块将对数据做一些操作,然后发送回内存(使用DMA)或做其他事情(发送到外部接口(interface),...)

  • DMA内核的寄存器集将进行内存映射,并可以通过您自己的linux设备驱动程序进行访问。出于调试目的,我建议使用mmap访问寄存器并快速验证硬件的操作。一旦找到Linux内核设备驱动程序,我建议您阅读本书:Linux Device Drivers 3the edition

    关于linux - 如何从软件工具向Zynq中的AXI-Stream发送数据?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30597476/

    10-11 10:21