(开发软件:Vivado 开发板:Zynq AX7015)利用PCIe进行数据传输,使用官方PCIe测试程序进行PC与Zynq间的数据读写。读通道传输数据量受限,可能需要进一步修改驱动程序。

我用了XDMA这个IP进行PCIe数据的处理,用xdma_rw.exe进行PC与Zynq间的数据读写。xdma_rw.exe的原始驱动程序允许传输的数据量是有限的。安装原始驱动程序后,写入超过8 MB数据会报错。经论坛上老师的指点,我将驱动程序源工程中dma_engine.h里的XDMA_MAX_TRANSFER_SIZE参数由8UL * 1024UL * 1024UL改为800UL * 1024UL * 1024UL,h2c最大传输量成功提升,现在已经可以通过h2c_0通道写入700 MB的数据。

img

图1 修改XDMA_MAX_TRANSFER_SIZE后成功写入700 MB

然而,在通过c2h_0通道进行数据读取时,数据量仍然极大地受限,目前只能读取约190000字节(0.18 MB)的数据,读取200000字节(0.19 MB)以上时就会报错,而且报错内容(图3)与修改原始驱动程序前写入大数据量时的报错(图2)完全一致。

img

图2 修改驱动程序前写入超过8 MB时的报错

img

图3 修改XDMA_MAX_TRANSFER_SIZE后读取0.19 MB报错
值得注意的是,虽然最大可写入数据量能通过XDMA_MAX_TRANSFER_SIZE修改,但是最大可读取数据量却无法这样。我将XDMA_MAX_TRANSFER_SIZE分别改小和改大,依然是读取0.18 MB成功、读取超过0.19 MB失败。
到论坛上寻找相关回答,找到一个可能有用的方法是继续修改驱动程序,即修改源工程中的dma_engine.c文件,如图4:

img

图4 论坛上提供的一种方法
我在遵照这种方法修改驱动程序后,问题依然存在。我到论坛、网络中查找相关内容,并未继续找到有用的答案;在官方文档中没有找到详细的相关说明。恳请指导一下,我现在的问题仍然是通过修改驱动程序解决吗?如果是的话,该修改哪里呢?十分感激!

这个好像在32位系统的电脑上使用