基于CPM的QDMA数据传输参考设计

作者:Albert Wei,文章来源:FPGA FAE技术分享选集

一、简介
AMD QDMA子系统的PCI Express (PCIe®)实现了高性能的DMA与PCI Express®3.x集成块,具有多个队列的概念,不同于PCI Express的DMA/桥接子系统,它使用多个AMD卡到主机(C2H)和主机到卡(H2C)通道。
QDMA的关键特性包括:‌
  • 支持64\128\256和512位数据路径;
  • 支持x1\x2\x4\x8或x16链路宽度;
  • 支持Gen1\Gen2和Gen3链路速度,Gen4适用于PCIe4C块;
  • 每个队列都支持AXI4内存映射和AXI4流接口;
  • 2048个H2C\C2H和CMPT队列集;
  • 支持轮询模式(状态描述符写回)和中断模式;
  • 中断支持2048个MSI-X向量,中断聚合‌。

1.png

二、Vivado例化EP工程
基于Vivado2023.2已经集成一些Example,我们手上有的硬件是VCK190,所以选择“Versal CPM QDMA EP Design”进行例化,然后生成PDI进行测试。

2.png

生成的CMP的工程,BD如下:

3.png

三、软件测试过程

从github上https://github.com/Xilinx/dma_ip_drivers下载软件程序,在Ubuntu或其他Linux的发行版如CentOS上进行编译,软件包中主要提供了几个关键程序和驱动,软件架构图如下图:

dma-ctl:提供了一组命令来配置和控制系统中的队列,可以创建\删除\启动\停止队列:

4.png

dma-to-device:主机到卡(H2C)的数据传输:

5.png

dma-from-device:卡到主机(C2H)的数据传输:

6.png

7.png

1.编译时准备,安装依赖的库

# sudo apt-get install libaio libaio-devel

2.执行make和make install 安装驱动和程序到系统目录

# sudo make && make install
3.加载驱动
modprobe qdma-pf
4.扫描QDMA设备
 # dma-ctl dev list
#dma-ctl qdma01000 cap

#dma-ctl qdma01000 stat

8.png

5.驱动进行配置

9.png

6.队列的创建和传输

10.png

四、总结与拓展
1. QDMA更多参数和配置可以参考PG302;
2. 在Linux上的测试环境尽量选择版本比较低,如Ubuntu在20.04以下,因为目前驱动对内核版本要求比较低,目前测试过的在5.15.0以下。

 感谢Hank Fu同学对此文章的提供的帮助!

如果您在QDMA方面有疑问,欢迎联系:

simonyang@comtech.cn

charlesxu@comtech.cn

最新文章

最新文章