我正在寻找一种方法,可以将用C语言编写的软件应用程序中的某些数据发送到Zynq的AXI-Stream接口(interface)。就像是
open(/dev/axistream);
send_data(data);
我在Arm部件上运行Linux,现在我想将其连接到可编程逻辑部件。
最佳答案
在zynq设备上,Cortex-A9处理器和FPGA之间的通信是使用AXI协议(protocol)完成的。可以使用三种类型的端口在FPGA和CPU(Zynq TRM)之间进行通信:
从您的问题中,我会理解,在您的情况下,CPU是通信的主控器。您将需要使用通用axi主端口。您不能将AXI4流接口(interface)连接到AXI互连。您将需要将AXI4 Streaming转换为AXI。根据您的性能需求,AXI DMA ip内核(AXI DMA IP core)可能是一个很好的解决方案。
如果要使用“open(/dev/)”从软件角度进行通信,则需要Linux设备驱动程序。如果使用的是DMA内核,则通信通常如下所示:
DMA内核的寄存器集将进行内存映射,并可以通过您自己的linux设备驱动程序进行访问。出于调试目的,我建议使用mmap访问寄存器并快速验证硬件的操作。一旦找到Linux内核设备驱动程序,我建议您阅读本书:Linux Device Drivers 3the edition
关于linux - 如何从软件工具向Zynq中的AXI-Stream发送数据?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30597476/