我正在寻找一种方法,将我用C编写的软件应用程序中的一些数据发送到Zynq的AXI-Stream接口。像
这样的东西open(/dev/axistream);
send_data(data);
我在Arm部分运行Linux,现在我想将它连接到可编程逻辑部分。
答案 0 :(得分:6)
在zynq设备上,Cortex-A9处理器和FPGA之间的通信使用AXI协议完成。有三种类型的端口可用于FPGA和CPU之间的通信(Zynq TRM):
从您的问题中,我会理解,在您的情况下,CPU是通信的主人。您将需要使用通用axi主端口。您无法将AXI4流接口连接到AXI互连。您需要将AXI4 Streaming转换为AXI。根据您的性能需求,AXI DMA ip核心(AXI DMA IP core)可能是一个很好的解决方案。
如果您想使用"从软件的角度进行通信,请打开(/ dev /)"你需要一个Linux设备驱动程序。如果您使用DMA核心,您的通信通常如下所示:
您的DMA内核的寄存器集将被内存映射,并可通过您自己的Linux设备驱动程序访问。出于调试目的,我建议使用mmap来访问寄存器并快速验证硬件的操作。一旦你去了linux内核设备驱动程序,我建议你阅读这本书:Linux Device Drivers 3the edition
答案 1 :(得分:1)
高效数据传输的最佳选择是使用支持DMA的PS-PL通信。在PL内部实现DMA控制器(例如AXI CDMA)后,您可以将其连接到AXI4-Stream IP,然后连接到所需的IP内核。 如果您不打算设置通用框架,则可以使用mmap()系统调用访问支持DMA的DDR内存部分。 这是一个将数据从用户空间传输到IP核的模板,其中实现了环回。 https://github.com/h-nasiri/Zynq-Linux-DMA Zynq AXI CDMA
AXI CDMA使用处理系统HP从端口来获得DDR系统内存的读/写访问权限。还有一个基于Linux OS的应用软件,它使用mmap()初始化DMA内核,然后进行数据传输。 您可以轻松地将AXI4-Stream互连添加到AXI CDMA并连接
答案 2 :(得分:0)
如果我理解正确,您希望使用DMA引擎将数据从PS传输到PL。在这种情况下,您需要在Linux中编写一个驱动程序,它将使用AXI DMA引擎驱动程序,或者从用户空间配置DMA引擎。
这就是你要找的东西吗?