AMD Versal CPM5 QDMA Gen4x8 ST Only Performance Design CED示例

晟盈英才 2026-03-23 45人围观

本文作者:AMD 工程师 Padmini Boreddy

一文看懂AMD Vivado2024.1 中 “AMD VersalCPM5 QDMA Gen4x8 ST Only Performance Design” CED 示例。

本篇博文演示了在AMD Vivado Design Suite 2024.1 中生成 CPM5_QDMA_Gen4x8_ST_Only_Performance_Design 并使用为 QDMA 提供的驱动程序来运行性能测试的步骤。这是 AMD Versal 自适应 SoC CPM QDMA 端点 (EP) 设计中可用的预设之一。

对于 PL PCIe IP,用户可以使用“Open Example Design”选项来生成示例设计。

此示例设计对于 CPM5 PCIe 不适用;因此改为通过 AMD CED Store GitHub 仓库提供示例设计。如需了解有关 AMD CED Store 的更多详细信息,请访问以下链接:

https://github.com/Xilinx/XilinxCEDStore

注释:性能数据取决于硬件和软件(系统调谐、使用的队列数量等)。如果所得到的性能数据与您的预期不符,请联系您的销售代表或 AMD 技术支持。

生成 Versal 自适应 SoC CPM5 Gen4x8 QDMA 端点设计

步骤 1:启动 Vivado,然后转至“Tools -> Vivado Store”。

7c40a900-2383-11f1-90a1-92fbcf53809c.png

步骤 2:下载最新版本的目录:

选择“Example Designs-> PCIe -> Versal CPM QDMA EP Design”,然后单击“Update”。

7cf80df2-2383-11f1-90a1-92fbcf53809c.png

步骤 3:从“Quick Start”页面中选择“Open Example Project”。

步骤 4:如下截屏所示,访问 Versal CPM QDMA 端点设计:

7dad4ec4-2383-11f1-90a1-92fbcf53809c.png

步骤 5:根据所选开发板会自动选择“CPM_Config”,针对 VCK190 会选中 CPM4,针对 VPK120 则选中 CPM5。选择 Versal VPK120 评估平台。

7e0dd79e-2383-11f1-90a1-92fbcf53809c.png

步骤 6:对于 CPM5_Preset,请选择

CPM5_QDMA_Gen4x8_ST_Only_Performance_Design。

这是含“Streaming”选项的 Versal CPM5 Gen4x8 QDMA 端点设计。其中已启用 4PF、240VF 和 SRIOV。

7e65f83e-2383-11f1-90a1-92fbcf53809c.png

步骤 7:复查“Project Summary”,确认所选部件和产品家族正确。

7ec3e6e2-2383-11f1-90a1-92fbcf53809c.png

示例设计架构

在其他正常工作的示例设计中,用户逻辑功能要求在用户逻辑专用寄存器中配置包数、包长度和队列 ID,并且需要通过配置特定寄存器来触发包生成。

如需了解更多详情,请参阅本文:运行 Versal 自适应 SoC CPM5 PCIE Gen4x8 QDMA CED 示例设计 :

https://adaptivesupport.amd.com/s/article/000034687?language=zh_CN

ST 性能参考设计包含仅限 AXI4-Stream 的包生成器(适用于 C2H 方向),以及同时适用于 C2H 方向和 H2C 方向的性能测量工具。当存在可用描述符时,该参考设计会生成已知的数据模式(时间戳),并在 C2H 方向上发送用户指定的包长度。此数据模式可由 dma-perf 应用环回到 H2C 方向,并进行性能测量。

以下截屏显示了 CED 的“Sources”层级。cpm_pcie_qdma_ep_wrapper 模块框图包括 cpm_pcie_bridge_ep 块、用于 AXI4-Stream 模式生成器和检查器逻辑的用户控制逻辑,以及实现 C2H 和 H2C 性能计数器逻辑的 axi_st_module。

7f1ecbc0-2383-11f1-90a1-92fbcf53809c.png

以下是“cpm_pcie_qdma_ep.bd”的模块框图:

7f7f4d4c-2383-11f1-90a1-92fbcf53809c.png

CPM5 配置

生成的 Versal CPM5 QDMA Gen4x8 ST Only Performance Design 配置如下:

Gen4x8 DMA 模式

PCIE 控制器 1 配置为含 AXI4-Stream 接口的 QDMA

启用 4PF、240VF 和 SRIOV

内部模式

注释:在此 CED 的 2023.2 及更低版本中,VF 的地址映射存在已知问题。

这在 2024.1 版中已得到修复。如果使用 2023.2 或更低版本,需要使用下图所示的数值更新“PCIe : BARs”选项卡和“SRIOV VF BARs”选项卡,以便在 VF 器件上执行 C2H 和 H2C 传输事务。

7fd70514-2383-11f1-90a1-92fbcf53809c.png

8033d960-2383-11f1-90a1-92fbcf53809c.png

808bc8b4-2383-11f1-90a1-92fbcf53809c.png

80ee9a48-2383-11f1-90a1-92fbcf53809c.png

81466250-2383-11f1-90a1-92fbcf53809c.png

81a3127a-2383-11f1-90a1-92fbcf53809c.png

81fbc672-2383-11f1-90a1-92fbcf53809c.png

8258e190-2383-11f1-90a1-92fbcf53809c.png

82ac97cc-2383-11f1-90a1-92fbcf53809c.png

PS PMC 配置

830ccd7c-2383-11f1-90a1-92fbcf53809c.png

8367102a-2383-11f1-90a1-92fbcf53809c.png

硬件测试

更新 CPM5 IP 配置(如上所述)后,保存设计,然后单击“Generate Device Image”。

将 VPK120 评估板连接到主机 PC。

使用 CED 生成的 PDI 文件对 FPGA 进行烧录。

重新启动主机 PC。

使用“lspci”命令检查端点器件检测情况。

83c5c07a-2383-11f1-90a1-92fbcf53809c.png

QDMA 驱动程序安装

运行以下命令。如需了解更多详情,请参阅:

https://xilinx.github.io/dma_ip_drivers/master/QDMA/linux-kernel/html/build.html

841eca94-2383-11f1-90a1-92fbcf53809c.png

使用 dma-ctl 列出系统中可用的功能,请参阅:

https://xilinx.github.io/dma_ip_drivers/master/QDMA/linux-kernel/html/dmactl.html#device-management-commands

dma-ctl dev list

847e54b4-2383-11f1-90a1-92fbcf53809c.png

SOLUTIPF 上的传输事务

队列分配

84d5f048-2383-11f1-90a1-92fbcf53809c.png

如需了解更多信息,请参阅:

https://xilinx.github.io/dma_ip_drivers/master/QDMA/linux-kernel/html/userguide.html#allocate-the-queues-to-a-function

8536c3d2-2383-11f1-90a1-92fbcf53809c.png

为 C2H 串流模式测试添加和启动队列

如需了解更多信息,请参阅:

https://xilinx.github.io/dma_ip_drivers/master/QDMA/linux-kernel/html/dmactl.html#add-a-queue

https://xilinx.github.io/dma_ip_drivers/master/QDMA/linux-kernel/html/dmactl.html#start-a-queue

8590a6b8-2383-11f1-90a1-92fbcf53809c.png

85eca602-2383-11f1-90a1-92fbcf53809c.png

运行不同传输大小的串流模式 C2H(从设备发出 DMA )测试

如需了解更多信息,请参阅:

https://xilinx.github.io/dma_ip_drivers/master/QDMA/linux-kernel/html/dma_from_device.html

与 CPM QDMA 端点功能测试设计不同,用户无需配置任何寄存器即可初始化数据传输。CED 的 `user_control` 模块会在内部产生报文。

8648ecf0-2383-11f1-90a1-92fbcf53809c.png

为 H2C 串流模式测试添加和启动队列

如需了解更多信息,请参阅:

https://xilinx.github.io/dma_ip_drivers/master/QDMA/linux-kernel/html/dmactl.html#add-a-queue

https://xilinx.github.io/dma_ip_drivers/master/QDMA/linux-kernel/html/dmactl.html#start-a-queue

86a5d244-2383-11f1-90a1-92fbcf53809c.png

86fe41a4-2383-11f1-90a1-92fbcf53809c.png

运行不同传输大小的串流模式 H2C(DMA 到设备)测试

如需了解更多信息,请参阅 :

https://xilinx.github.io/dma_ip_drivers/master/QDMA/linux-kernel/html/dma_to_device.html

877cc150-2383-11f1-90a1-92fbcf53809c.png

运行 dma-perf 应用

“dma-perf”是一款定制工具,用于收集单向和双向流量的性能指标。

可使用“fio”等标准 I/O 工具,通过字符设备接口执行 I/O 操作。但是,大多数工具仅限于每次发送或接收 1 个包,并等待该包处理完成,因此无法使驱动程序或硬件保持足够繁忙以进行性能测量。尽管 fio 也支持异步接口,但它不会在并行轮询完成的同时持续提交 I/O 请求。

“dma-perf”工具会利用 libaio 库提供的异步功能。通过使用 libaio,应用程序可向驱动程序提交 I/O 请求,驱动程序会立即将控制权返回给调用方(即,非阻塞)。完成通知是单独发送的,因此应用程序随后即可轮询完成情况,并在收到完成通知后释放缓冲区。

如需了解有关 dma-perf 工具的更多信息,请参阅 QDMA Linux 内核参考驱动程序用户指南,本指南托管于:

https://xilinx.github.io/dma_ip_drivers/master/QDMA/linux-kernel/html/dmaperf.html

用于串流模式测试的 dma-perf 配置文件包含在 Linux 参考内核驱动程序源文件内,这些源文件托管于https://github.com/Xilinx/dma_ip_drivers的 QDMA/linux-kernel/apps/dma-perf/dmaperf_config 目录下:

C2H 单向:st-c2h-pfetch1.zip

H2C 单向:st-h2c.zip

C2H 和 H2C 双向:st-bi.zip

测试用例 - 1:bi_st_1_1_pfetch-cmptsz1_4096.txt

作为 dma-perf 工具输入的配置文件为测试设置了以下标志:

队列的模式和方向 - 串流,双向

PCI 总线:61,器件 - 00,功能 - 0 (PF),每个方向单个队列 (q_range) - 0 : 0

包数 - 64,每个包大小 - 4096 字节

87d72a78-2383-11f1-90a1-92fbcf53809c.png

使用以下命令搭配 bi_st_1_1_pfetch-cmptsz1_4096.txt 配置执行 dma-perf 测试:

8833bb9e-2383-11f1-90a1-92fbcf53809c.png

qdma-perf 工具负责:

以 H2C 方向的 idx 0 添加和启动 1 个队列

以 C2H 方向的 idx 0 添加和启动 1 个队列

C2H 和 H2C 数据传输

停止并删除已添加的 C2H 和 H2C 队列

收集并显示写入 (H2C) 和读取 (C2H) 性能结果

测试用例 - 2:bi_st_1_4_pfetch-cmptsz1_4096.txt

作为 dma-perf 工具输入的配置文件为测试设置了以下标志:

队列的模式和方向 - 串流,双向

PCI 总线:61,器件 - 00,功能 - 0 (PF),每个方向 4 个队列 (q_range) - 0 : 3

包数 - 64,每个包大小 - 4096 字节

888b0d7c-2383-11f1-90a1-92fbcf53809c.png

使用以下命令搭配 bi_st_1_4_pfetch-cmptsz1_4096.txt 配置执行 dma-perf 测试:

88e7fc62-2383-11f1-90a1-92fbcf53809c.png

qdma-perf 工具负责:

以 H2C 方向的 idx 0-3 添加和启动 4 个队列

以 C2H 方向的 idx 0-3 添加和启动 4 个队列

C2H 和 H2C 数据传输

停止并删除已添加的 C2H 和 H2C 队列

收集并显示写入 (H2C) 和读取 (C2H) 性能结果

VF 上的传输事务

启用 VF 器件

以下命令显示了为 1 个 PF 器件 (BDF: 61:00.0) 启用 2 个 VF 的操作:

893fcf3c-2383-11f1-90a1-92fbcf53809c.png

以下命令列出了这些 PF 器件和 VF 器件:

89a0a7da-2383-11f1-90a1-92fbcf53809c.png

如需了解更多信息,请参阅:

https://xilinx.github.io/dma_ip_drivers/master/QDMA/linux-kernel/html/userguide.html#instantiate-the-virtual-functions

89fc6034-2383-11f1-90a1-92fbcf53809c.png

lspci 命令列出了启用的 PF 器件和 VF 器件,如下所示:

8a5fbe86-2383-11f1-90a1-92fbcf53809c.png

预留 VF 的队列

8ab811a8-2383-11f1-90a1-92fbcf53809c.png

“dma-ctl dev list”给出了预留的队列的数量。

如需了解更多信息,请参阅:

https://xilinx.github.io/dma_ip_drivers/master/QDMA/linux-kernel/html/userguide.html#reserve-the-queues-for-vfs

8b14eea0-2383-11f1-90a1-92fbcf53809c.png

在 VF 上添加和启动双向队列以执行 C2H 和 H2C 串流模式测试

8b695ad0-2383-11f1-90a1-92fbcf53809c.png

8bc72bba-2383-11f1-90a1-92fbcf53809c.png

运行包大小为 64 字节的 C2H 和 H2C 测试

8c2855c0-2383-11f1-90a1-92fbcf53809c.png

在 VF 器件上运行 dma-perf 应用

作为 dma-perf 工具输入的配置文件 vf_bi_st_1_1_pfetch-cmptsz1_4096.txt 为测试设置了以下标志:

队列的模式和方向 - 串流,双向

PCI 总线:61,器件 - 02,功能 - 0 (VF),每个方向单个队列 (q_range) - 0 : 0

vf_perf = 1

包数 - 64,每个包大小 - 4096 字节

8c84cb5c-2383-11f1-90a1-92fbcf53809c.png

使用以下命令搭配 vf_bi_st_1_1_pfetch-cmptsz1_4096.txt 配置执行 dma-perf 测试:

8cd91f90-2383-11f1-90a1-92fbcf53809c.png

qdma-perf 工具负责:

以 H2C 方向的 idx 0 添加和启动 1 个队列

以 C2H 方向的 idx 0 添加和启动 1 个队列

C2H 和 H2C 数据传输

停止并删除已添加的 C2H 和 H2C 队列

收集并显示写入 (H2C) 和读取 (C2H) 性能结果

AMD 自适应 SoC 及 FPGA 中文技术支持社区

不容错过
Powered By Z-BlogPHP