找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

2348

积分

0

好友

318

主题
发表于 2 小时前 | 查看: 1| 回复: 0

本文演示如何在 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

Vivado 2024.1 工具菜单界面

步骤 2: 下载最新版本的目录:选择 Example Designs -> PCIe -> Versal CPM QDMA EP Design,然后单击 Update

Vivado Store 中示例设计列表

刷新目录进度界面

步骤 3:Quick Start 页面中选择 Open Example Project

Vivado 快速启动页面

步骤 4: 在项目模板中选择 Versal CPM QDMA EP Design

选择项目模板界面

步骤 5: 根据所选开发板会自动选择 CPM_Config,针对 VCK190 会选中 CPM4,针对 VPK120 则选中 CPM5。此处请选择 Versal VPK120 Evaluation Platform

选择默认板卡界面

步骤 6: 对于 CPM5_Preset,请选择 CPM5 QDMA Gen4x8 ST Only Performance Design

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

选择设计预设界面

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

新建项目摘要界面

示例设计架构

在其他功能验证示例设计中,用户逻辑通常要求在专用寄存器中配置包数、包长度和队列 ID,并通过配置特定寄存器来触发包生成。如需了解更多详情,请参阅相关文档。

而本文所述的 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

设计源文件层级结构

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

Block Design 模块框图

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 : BARsSRIOV VF BARs 选项卡,才能在 VF 器件上执行 C2H 和 H2C 传输。

以下是设计中的关键配置界面截图:

CPM 基础配置界面

CPM PCIe 控制器能力配置

CPM PCIe 控制器基础配置

PCIe BARs 配置

DMA 描述符旁路配置

SRIOV 通用配置

SRIOV VF BARs 配置

MSI-X 配置

电源管理与其他 PCIe 能力配置

PS PMC 配置

PS PMC 外设配置界面

PS PMC I/O 引脚配置界面

硬件测试

  • 更新 CPM5 IP 配置(如上所述)后,保存设计,然后单击 Generate Device Image
  • 将 VPK120 评估板连接到主机 PC。
  • 使用 CED 生成的 PDI 文件对 FPGA 进行烧录。
  • 重新启动主机 PC。
  • 使用 lspci 命令检查端点器件是否被系统识别。

lspci 命令检测到 PCIe 设备

QDMA 驱动程序安装

运行以下命令安装驱动。如需了解更多详情,请参阅官方驱动程序构建文档。

sudo make clean
sudo make DEBUG=1
sudo make install-apps
sudo make install-mods
sudo modprobe qdma-pf
sudo modprobe qdma-vf

使用 dma-ctl 列出系统中可用的功能:

dma-ctl dev list

dma-ctl 列出可用设备

PF 上的数据传输

队列分配

首先为物理功能(PF)预留队列。

echo 10 > /sys/bus/pci/devices/0000:61:00.0/qdma/qmax

然后查看队列分配情况:

dma-ctl dev list

队列分配后设备列表

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

dma-ctl qdma61000 q add idx 0 mode st dir c2h
dma-ctl qdma61000 q start idx 0 mode st dir c2h

添加并启动 C2H 队列

运行不同传输大小的流模式 C2H 测试

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

dma-from-device -d /dev/qdma61000-ST-0 -s 64
dma-from-device -d /dev/qdma61000-ST-0 -s 128
dma-from-device -d /dev/qdma61000-ST-0 -s 256
dma-from-device -d /dev/qdma61000-ST-0 -s 512
dma-from-device -d /dev/qdma61000-ST-0 -s 1024
dma-from-device -d /dev/qdma61000-ST-0 -s 4096

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

dma-ctl qdma61000 q add idx 1 mode st dir h2c
dma-ctl qdma61000 q start idx 1 mode st dir h2c

添加并启动 H2C 队列

运行不同传输大小的流模式 H2C 测试

dma-to-device -d /dev/qdma61000-ST-1 -s 64
dma-to-device -d /dev/qdma61000-ST-1 -s 128
dma-to-device -d /dev/qdma61000-ST-1 -s 256
dma-to-device -d /dev/qdma61000-ST-1 -s 512
dma-to-device -d /dev/qdma61000-ST-1 -s 1024
dma-to-device -d /dev/qdma61000-ST-1 -s 4096

运行 dma-perf 应用

dma-perf 是一款定制工具,用于收集单向和双向流量的性能指标。它利用 libaio 库的异步功能,可以持续提交 I/O 请求并轮询完成状态,从而使驱动和硬件保持繁忙,更适合进行性能测量。

用于流模式测试的 dma-perf 配置文件包含在 Linux 参考内核驱动程序源代码中,位于 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

此配置文件设置了以下测试参数:

  • 队列模式和方向:流模式,双向
  • PCI 总线:61,设备号:00,功能号:0 (PF),每个方向单个队列 (q_range: 0:0)
  • 包数:64,每个包大小:4096 字节

测试用例1配置文件内容

使用以下命令执行测试:

dma-perf -c bi_st_1_1_pfetch-cmptsz1_4096.txt

qdma-perf 工具将自动完成以下操作:

  1. 添加并启动 H2C 方向 idx 0 的 1 个队列。
  2. 添加并启动 C2H 方向 idx 0 的 1 个队列。
  3. 执行 C2H 和 H2C 双向数据传输。
  4. 停止并删除已添加的队列。
  5. 收集并显示写入 (H2C) 和读取 (C2H) 的性能结果。

测试用例 2:bi_st_1_4_pfetch-cmptsz1_4096.txt

此配置文件设置了以下测试参数:

  • 队列模式和方向:流模式,双向
  • PCI 总线:61,设备号:00,功能号:0 (PF),每个方向 4 个队列 (q_range: 0:3)
  • 包数:64,每个包大小:4096 字节

测试用例2配置文件内容

使用以下命令执行测试:

dma-perf -c bi_st_1_4_pfetch-cmptsz1_4096.txt

qdma-perf 工具将自动完成以下操作:

  1. 添加并启动 H2C 方向 idx 0-3 的 4 个队列。
  2. 添加并启动 C2H 方向 idx 0-3 的 4 个队列。
  3. 执行 C2H 和 H2C 双向数据传输。
  4. 停止并删除已添加的队列。
  5. 收集并显示性能结果。

VF 上的数据传输

启用 VF 设备

以下命令为 1 个 PF 设备 (BDF: 61:00.0) 启用 2 个 VF:

echo 2 > /sys/bus/pci/devices/0000:61:00.0/sriov_numvfs

列出 PF 和 VF 设备:

dma-ctl dev list

启用 VF 后的设备列表

lspci 命令也会列出已启用的 PF 和 VF 设备。

为 VF 预留队列

为虚拟功能预留队列。

echo 8 > /sys/bus/pci/devices/0000:61:02.0/qdma/qmax

dma-ctl dev list 命令会显示预留的队列数量。
为 VF 预留队列后的设备列表

在 VF 上添加和启动双向队列

dma-ctl qdmavf61020 q add idx 0 mode st dir bi
dma-ctl qdmavf61020 q start idx 0 mode st dir bi

在 VF 上添加并启动双向队列

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

C2H: dma-from-device -d /dev/qdma61000-ST-0 -s 64
H2C: dma-to-device -d /dev/qdma61000-ST-0 -s 64

在 VF 设备上运行 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 字节

VF 性能测试配置文件内容

使用以下命令执行测试:

dma-perf -c vf_bi_st_1_1_pfetch-cmptsz1_4096.txt

工具将自动完成队列管理、双向数据传输、结果收集与显示。

总结

通过以上步骤,我们完成了从 Vivado 2024.1 中生成 CPM5 QDMA 高性能示例设计,到在硬件上进行驱动安装、队列配置以及 PF/VF 模式下的性能测试的全过程。这种集成 AXI4-Stream接口 的性能设计简化了测试流程,方便开发者评估 Versal 器件的 DMA 数据传输能力。

希望这篇详细的实战指南能帮助你快速上手。如果你在配置或测试过程中遇到其他问题,欢迎到 云栈社区 与更多开发者交流探讨。




上一篇:实测MiniMax M2.7 Cowork Agent:自进化的AI同事是如何炼成的
下一篇:LeetCode 原子数量题解析:栈在处理括号字符串计数中的应用
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-3-20 16:06 , Processed in 0.483997 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表