gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 11:04:36 26 4
gpt4 key购买 nike

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

最佳答案

我假设您的“FPGA 设备”是一个自定义 block ,内存通过 AXI 接口(interface)映射到 Cortex-A9。我认为有 2 或 3 种方法可以使这项工作成功。

1) 可缓存映射。缓存硬件接口(interface)一次完成整个缓存行的突发传输。您需要手动清理(写入后)和失效(读取前)。

2) 不可缓存的映射,并使用 ARM 汇编语言例程处理低级传输。我认为“加载和存储多个寄存器”说明可以提供您正在寻找的内容。

我有一个类似的问题,需要从 Cortex-A9 处理器通过 8 字节传输访问 AXI 外设(自定义内存 Controller )。当然,通常的 ARM 指令会传输 1、2 或 4 个字节(字节、半字、字)。那些通过可缓存映射工作,而不是通过不可缓存映射工作。 LDM/STM ,一次 2 个单词,适用于两种映射。

当然,AHB/AXI 传输模式依赖于实现。根据您的描述,您需要 INCR 或 WRAP 模式而不是 SINGLE。但它不应该是那样的。这就提出了您可以使这项工作可行的第三种方法:

3) 与您的数字硬件设计师交谈,让他了解他的实现对软件的影响。

在我看来,您不必执行不寻常的/自定义的低级 MMU 操作。 Linux 有高级方法,您可以在设备驱动程序和/或 board.c 中放置标准 Hook ,主要选项是是否不缓存(即 COHERENT)。引用LDD3 .

关于linux - 任何用于 AXI 突发类型设备的内置 Linux 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22373717/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com