XDMA 多通道传输实战

作者:Alan Zhang,来源:FPGA FAE技术分享选集

一、概述

XDMA 是 Xilinx Direct Memory Access 的缩写,是AMD-Xilinx为其FPGA (Field-Programmable Gate Array)产品开发的一种高性能、高带宽的直接内存访问IP核,旨在加速 FPGA 与外部存储器或处理器之间的数据传输。XDMA IP通过减少 CPU 干预来提高数据传输效率,广泛应用于高速数据传输领域。

在需要提高XDMA IP传输效率的应用中,可以采用多通道传输提高传输效率。在实际开发测试中,会出现单通传输正常的情况下多通道传输异常的情况。本文以实际调试时遇到的问题进行总结。
二、测试条件

FPGA 型号:XC7K325T-2FFG900I

Vivado软件版本:2019.2

电脑操作系统:WINDOWS 10

XDMA IP驱动:

Xilinx_Answer_65444_Windows_Files_07022024

驱动下载链接:
https://adaptivesupport.amd.com/s/article/65444?language=en_US
三、XDMA双通道读操作异常

7K325T例化XDMA IP,使用PCIe G2*8,双通道传输,XDMA IP中的各项参数说明,请参考参考Xilinx的文档PG195。

XDMA IP Basic界面设置如下,PCIe lane width选择 *8,使用AXI Memory Mapped接口。
1.png
XDMA IP ID界面设置如下, 保持默认即可。
2.png
XDMA IP BARs界面设置如下,勾选PCIe to AXI Lite Master Interface选项。
3.png
XDMA IP MISC界面设置如下,根据实际应用,选择3个用户中断,勾选Enable MSI Capability Structure。
4.png
XDMA IP DMA界面设置如下,7系列的XDMA最高支持2个通道传输。
5.png
将工程设计完成后,生成bit,下载到7K325T板卡中,在电脑侧使用Xilinx_Answer_65444_Windows_Files_07022024驱动中自带的读写测试程序xdma_rw.exe  进行测试,出现读取C2H1通道没有反应,读取C2H0通道正常的现象,测试结果如下图所示:
6.png
四、问题分析解决

保持电脑侧XDMA驱动不变,使用Vivado做XDMA IP的测试工程,使用同样的测试方法测试C2H0和C2H1通道读操作,读取数据均正常,根据这个测试结果,推测电脑端的XDMA驱动没有问题。

测试工程如下:

7.png

C2H0和C2H1通道读操作结果如下:

8.png

在出问题的Vivado工程中加ila核,抓取进行C2H1通道读操作时AXI总线的信息。

9.png

使用ila核抓取C2H0通道和C2H1通道的读时序图,分析C2H0通道的读时序图,在arvalid 为高时,ARID=0,在rvalid 为高时,RID=0,分析C2H1通道的读时序图,在arvalid 为高时,ARID=1,在rvalid 为高时,RID=0,推测ARID与RID的值不一致导致C2H1通道读操作失败。修改与XDMA IP连接的AXI interconnect IP的AXI Slave接口设置,C2H1通道读操作正常。

C2H0通道的读时序图:

10.png

C2H1通道的读时序图:

11.png

五、总结

XDMA IP已经被大量客户在设计中使用,工作稳定可靠。在使用XDMA IP遇到问题时,从使用测试例程排查电脑端驱动和添加ila核抓取XDMA IP的信号入手,可以快速定位问题。

感谢AMD-Xilinx专家Huamin Gao、Antony Gu的指导。

如果您在XDMA IP使用方面有问题,欢迎联系:

simonyang@comtech.cn

charlesxu@comtech.cn