0

我有一个关于在 PCIe 上使用突发读取和写入的问题。我有一个通过 PCIe 连接到 cpu 的 fpga。我有一个简单的驱动程序,仅用于测试。驱动程序从 fpga 写入和读取数据。fpga 包括一个 sram 核心,数据被写入和读取。读取和写入运行良好,但如果我从设备读取,则不会出现突发。如果我将数据写入 fpga,如果我使用 ioremap_wc() 映射 BAR,则突发工作良好。但是,如果我从 fpga 读取,cpu 只会进行单次访问而不会突发。我发现我必须将内存标记为回写,以便能够在读取和写入传输时缓存数据,但是如果我使用 /proc/mtrr 标记我的地址回写,则读取和写入不会突发。PCI 标头中的 BAR 被标记为可预取。你们中有人知道如何在 pci 总线上实现读写突发吗?我希望任何人都可以帮助我。

4

1 回答 1

0

在 PICe 总线上获得突发传输的最佳方法是使用 DMA 控制器而不是处理器 I/O。如果您的 FPGA 是 PCIe 总线主机,您可以对其进行编程以传输数据。否则,大多数平台都内置了 DMA 控制器。

我希望写入组合执行与未缓存相同的读取。但即使您使用 ioremap_cache(),您的平台也可能不会突发 PIO 读取。它可能取决于您的处理器、执行读取的指令和系统逻辑。

于 2013-09-05T03:29:26.843 回答