任何适用于 AXI 突发类型设备的内置 Linux 方法?

Sta*_*k07 5 linux arm fpga dma amba

我需要与基于 AXI-burst 接口的 FPGA 设备进行通信。在不涉及 DMA 的情况下,通过 Linux 访问此类设备的方法有哪些?突发是 AXI 标准的固有属性,通常应在传输大量数据时自动触发。更大的问题是 FPGA 被设计为仅响应 AXI 总线上的突发类型请求。因此,当应用程序尝试顺序复制时,这会导致 Linux 上出现严重问题。我已经尝试过了memcpy,但它不起作用。

Chi*_*ggs 1

您需要设置 MMU 以向硬件通知组件的功能。您还需要确保整个互连支持突发并且不进行任何转换(如果在生成互连时组件的功能存在任何模糊性,则可能会发生这种情况)。

要设置 MMU,您可以执行如下调用:

/* shareable device: S=b0 TEX=b000 AP=b11, C=b0, B=b1 = 0xC06*/
Xil_SetTlbAttributes(COMPONENT_BASE_ADDRESS, 0xC06);
Run Code Online (Sandbox Code Playgroud)

属性定义如下(来自Zynq 技术参考手册):

Encoding Bits   Cache Attribute
  C   B
  0   0         Non-cacheable
  0   1         Write-back, write-allocate
  1   0         Write-through, no write-allocate
  1   1         Write-back, no write-allocate
Run Code Online (Sandbox Code Playgroud)

因此,上面的行会将区域设置为回写、写入分配,这可能会为您提供写入时的突发访问。

另请参阅Xilinx AR#47406此论坛帖子