在 ZCU102 上使用 PS AXI性能监视器(APM)测量 PS内部的DDR 带宽

作者:Wang Yushan,AMD工程师;来源:AMD开发者社区

引言

在 Zynq UltraScale+ MPSoC 平台上,DDR 是多个主设备(A53、R5、PL)共享的关键资源。在复杂的实际系统中,DDR 通常同时承载操作系统、应用程序以及高速数据通道的访问需求,传统的软件分析往往无法精确评估 DDR 带宽占用情况。因此,本文提出了一种基于 PS的AXI 性能监视器(APM)在 ZCU102 开发板上实现的硬件级 PS内部DDR 带宽监控解决方案。

核心思路如下:

• A53 / AXI Traffic Gen 产生可控的 DDR 访问流量

• R5_1 核心通过 APM 监控 DDR 带宽

• 每秒通过 UART1 打印端口 S1~S5 的读写带宽

系统架构

1.Block design设计

1.png

AXI Traffic Gen: 生成连续、可控的AXI读写数据流

APM: 监测AXI总线行为并统计性能指标

VIO: 控制AXI Traffic Gen流量的生成和停止

ILA: 观察AXI Traffic Gen流量的生成情况

2.APM配置说明

AXI Performance Monitor 通过 Slot 的方式监测不同的 AXI 通道。每一个 Slot 对应一条 AXI 接口,本实验中 Slot 与 DDR 高速端口(HP Port)的映射关系如下:

  • Slot1 - M_AXI_HPM0_FPD

  • Slot2 - M_AXI_HPM0_FPD

  • Slot3 - S_AXI_HP0_FPD

  • Slot4 - S_AXI_HP1_FPD

  • Slot5 - S_AXI_HP3_FPD

2.png

有关AXI Performance Monitor(APM)的更多信息,可以参考以下文档:

Introduction • AXI Traffic Generator LogiCORE IP Product Guide (PG125) • Reader • AMD Technical Information Portal

Zynq UltraScale+ Device Technical Reference Manual (UG1085) • Viewer • AMD Technical Information Portal

软件实现

1. A53侧

A53 侧主要用于生成 DDR 访问负载,其功能可以非常简单,例如:

  • 向 DDR 指定地址范围持续写入数据

  • 再从同一地址区间回读数据形成读写负载

在实际应用中,该程序可以替换为真实业务负载,以更贴近真实系统场景。

2. R5侧: APM带宽监测

R5_1 核心运行裸机(standalone)程序,主要完成以下任务:

  • 初始化 APM

  • 配置 Slot 和 Metric(Read / Write Byte),每 1 秒采样一次

若要改变采样频率,可通过调整sleep(MONITOR_INTERVAL_S)函数中的MONITOR_INTERVAL_S参数实现。

  •  计算并打印带宽

3.png

3. 串口输出示例

串口终端将周期性输出类似如下的信息:

4.png

运行和调试

1. Vivado工程:

  • 在2024.2 Vivado中创建一个新工程。

  • 运行附件的tcl脚本APM_PS_test.tcl创建Block Design(BD)工程。

  • 右键点击BD,选择“Create HDL Wrapper”。

  • 点击“Generate Bitstream”生成bit文件。

  • 选择菜单File->Export->Export Hardware导出xsa文件。

2. Vitis工程:

  • 打开2024.2 Vitis,使用导出的xsa文件创建platform project,选择R5-1的standalone OS。

  • 创建一个空的application project,导入附件的xaxipmon_ocm_example.c,然后编译。

  • 在platform->settings->vitis-comp.json->左上角add domain/BSP,添加一个新的A53的standalone OS。

  • 创建一个空的application project,导入附件的helloworld.c(也可以是自己需要监测的任务程序),然后编译。

  • 创建System Project,将A53与R5两个application一并加入,方便统一编译与调试。

3. 下载与调试:

  • 在Vitis中选择Flow下的Create Boot Image,生成BOOT.bin文件

  • 将BOOT.bin文件拷贝进SD卡,并将板子以SD卡模式启动。

  • 如下图,打开hw_vio_1,通过控制design_1_i/vio_0_probe_out0[2:0]的值来控制AXI Traffic Gen流量的生成和停止,并通过hw_ila_1来观察AXI Traffic Gen流量的生成情况。

5.png

6.png

  • 回到Vitis串口终端,查看 APM 输出的 DDR 带宽统计结果。