我有一个关于在PCIe上使用突发进行读写的问题。我有一个通过PCIe连接到CPU的fpga。我有一个简单的驱动程序,仅用于测试。驱动程序向fpga写入数据和从fpga读取数据。 fpga包括一个sram内核,用于写入和读取数据。读取和写入工作正常,但如果我从设备读取,则没有突发。如果我将数据写入fpga,如果我使用ioremap_wc()映射BAR,则突发工作正常。但是,如果我从fpga读取,cpu只是进行单一访问而没有突发。我发现我必须将内存标记为回写以便能够在读取写入传输时缓存数据,但如果我使用/ proc / mtrr标记我的地址回写,则读取和写入时不会出现突发。 PCI标头中的BAR标记为可预取。你们中的任何人都知道如何在pci总线上实现读写突发吗?我希望任何人都可以帮助我。
答案 0 :(得分:0)
在PICe总线上进行突发传输的最佳方法是使用DMA控制器而不是处理器I / O.如果您的FPGA是PCIe总线主机,您可以对其进行编程以传输数据。否则,大多数平台都内置了DMA控制器。
我希望写入组合能够执行与未缓存相同的读取操作。但即使您使用ioremap_cache(),您的平台也可能无法突发PIO读取。它取决于您的处理器,执行读取的指令和系统逻辑。