这篇文章将详细介绍如何通过 NOC 使用 CPM 访问片上内存(OCM)。该设计的主要重点是确保 PCI 接口的地址映射配置正确,使得其可以正确访问 OCM 地址范围。通过实现这一点,我们可以促进 PCIe 主接口和 OCM 之间的高效数据传输和通信。本文将提供建立此连接所需的配置和步骤指南。
理解片上内存(OCM)
片上内存(OCM)通过其128位 AXI 接口端口访问256 KB 内存。可以通过 LPD OCM 交换机访问 OCM。从 RPU 的内存访问优先级高于其他内存事务请求。具体的信息请参考 AM011-On-Chip Memory • Versal Adaptive SoC Technical Reference Manual (AM011) • Reader • AMD Technical Information Portal:
https://docs.amd.com/r/en-US/am011-versal-acap-trm/On-Chip-Memory
用 CPM 生成访问 OCM 的设计
要生成一个通过CPM(PCIe)访问片上内存(OCM)的设计,需要使用带 PCIe 连接 AMD Versal™ 自适应 SoC CIPS IP,并确保正确的 PCIe 到 AXI 地址转换和配置,请按照以下步骤操作:
1. 准备 AMD Versal 器件:
首先选择带 CPM 的 Versal 的开发板 (vck190/vpk120 等),并使用 AMD Vivado™ Design Suite 或相关工具设置设计环境。
2. CIPS IP 配置:
将 CIPS 加入到设计中。
配置 PCIe 控制器选择 DMA 模式运行。
根据项目要求选择 PCIe 接口的所需速度和链路宽度。
3. CPM 配置:
使用 CPM 接口通过 NOC 访问 OCM,选择 QDMA ,桥接 Bridge 或 XDMA 模式的应用模式也类似。
4. PCIe 地址转换:
在 CPM GUI 中,配置 PCIe 到 AXI 的地址转换:
启用 BAR1(AXI master bridge)进行 PCIe 地址转换。
将 PCIe 到 AXI 的地址转换设置为 FFFC0000(与OCM地址范围一致)。将大小设置为256KB,并将方向设置为 NOC1。
5. 地址编辑器配置 (Address Editor):
确保在地址编辑器中为 PCIe 访问设置了正确的 OCM 地址(FFFC0000)。这个地址与下方所示的 AM011 中的表 147 一致。
以下截图来自 OCM Address Locations • Versal Adaptive SoC Technical Reference Manual (AM011) • Reader • AMD Technical Information Portal 表147:
https://docs.amd.com/r/en-US/am011-versal-acap-trm/OCM-Address-Locations
测试设计
配置 AMD Versal™ 自适应 SoC FPGA,重新启动并运行 lspci,然后执行 devmem2 写命令以测试 OCM 访问,请按照以下步骤进行操作:
1. 配置 Versal FPGA:
确保 Versal FPGA 配置了所需的设计,包括 PCIe 接口和 CPM 配置,符合您的要求。
2. 重新启动系统。
3. 检查 PCIe 设备:
重新启动后,使用 lspci 命令列出 PCIe 设备:
查找与您的 Versal FPGA PCIe 接口对应的 PCIe 设备。设备的 Device ID 应该和符合 IP 配置的内容,这个例子用了默认的 b03f。
注意:在此测试中,不需要 QDMA 驱动程序。
4. 使用 devmem2 访问 BAR1:
写入 BAR1:
使用 devmem2 向 BAR1 内的目标地址写入数据。将<target_address>和<data>替换为适当的值:
devmem2w<target_address>w<data>
读取 BAR1:
使用 devmem2 从 BAR1 内的目标地址读取数据。将<target_address>替换为适当的地址:
devmem2<target_address>
结论:
通过遵循上述步骤和配置,应该可以通过 CPM 使用 CIPS IP 在具有 PCIe 连接的 AMD Versal™ 自适应 SoC 设备上访问 OCM。用户需要确保地址转换和配置设置是正确的。
AMD 自适应 SOC 及 FPGA 中文技术支持社区