使用 DMA 与 PCIe 通信

Using DMA to communicatte PCIe

赛灵思公司。发布了一些程序以使用其可用的 DMA PCIe IPcore here。在这些程序中,有一些程序执行 C2H 或反之亦然的高速操作。

它基本上是在主机端使用DMA还是必须在这些代码中编写一些冗余的东西?比如在AXI-ST模式下做writing/reading的代码片段如下:

void do_transfers_in_parallel(unsigned index, device_file& h2c, device_file& c2h, 
                       std::array<uint32_t, array_size>& h2c_data, 
                       std::array<uint32_t, array_size>& c2h_data) {

std::cout << "    Initiating H2C_" << index << " transfer of " << h2c_data.size() * sizeof(uint32_t) << " bytes...\n";
std::thread read_thread(&device_file::write, &h2c, (void*)h2c_data.data(), 
                        h2c_data.size() * sizeof(uint32_t));
std::cout << "    Initiating C2H_" << index << " transfer of " << c2h_data.size() * sizeof(uint32_t) << " bytes...\n";
std::thread write_thread(&device_file::read, &c2h, (void*)c2h_data.data(), 
                         c2h_data.size() * sizeof(uint32_t));

write_thread.join();
read_thread.join();

}

我认为这完全取决于 PCIe 规范的性质以及 PG195 中完整描述的 Xilinx PCIe 驱动程序。