本期文章《基于AMD Versal器件实现PCle5 DMA功能》,诚邀您率先了解如何利用Versal强大性能实现高速数据传输!
序言
Versal是AMD 7nm的SoC高端器件,不仅拥有比16nm性能更强的逻辑性能,并且其PS系统中的CPM PCIe也较上一代MPSoC PS硬核PCIe单元强大得多。本节将基于AMD官方开发板展示如何快速部署PCIe5x8及DMA功能。
1. 测试环境
Vivado版本:2023.2/2024.2,在windows10或者ubuntu22.04
实验板卡:VPK120
上位机主板:EPYC9124超微主板
上位机系统:Ubuntu20.04/24.04
2. Vivado工程生成
选择Versal CPM QDMA EP Design
选择名称以后,选择器件,注意选择MHP
打开CPM5 QDMA Gen5x8 MM Performance Design,然后finish即可
3. BD工程介绍与配置
可以看到从CIPS IP中出现两个CPM_PCIE_NOC口去访问两边的DDR:
1)数据访问架构:
在VPK120上有两个CPM控制器0与1,控制器1访问数据的路径有以下三种:ST_CPM2PL、MM_CPM2NoC、MM_CPM2PL,本次示例用两个MM_CPM2NoC,通过NoC直接从DDR中搬运数据。
2)相关端口
为什么开两个?
下图是MM_CPM2NoC接口,看CPM2NoC接口的位宽与带宽,由于走的是NoC,所以其单个接口的理论带宽是128bit x 1000M(NoC运行频率)=16GB,而PCIe5x8的理论带宽是32GB/s,为此至少需要两个MM端口,又由于担心DDR访问影响,所以demo中两个端口同时去访问两组DDR,保证带宽尽量不受DDR的影响。
为什么选用MM接口,而不是ST接口?
根据ds959手册以及PG347手册,ST模式下由于只会有一组ST_CPM2PL接口,而且位宽是512bit,所以理论上要到达PCIe5x8的带宽,是需要时钟跑到500M,但由于器件限制,其时钟最高是433M,实际综合下来时序收敛挑战很大。
3)细节配置
注意:CPM控制器0的数据路径不如控制器1多,少了MM_CPM2PL,为此这里选择控制器1。
如果要实现两路PCIe5x8,则需要将棕色框两个接口勾选上。
选择QDMA模式下的AXI MM,根据硬件结构选择Lane翻转。
选择bar空间
1:是主要的数据路径接口;
2:类似于之前XDMA挂载寄存器的方式。
转向器选择:这里默认只选择CPM2NoC0,这个后续通过Host profile来指定使用两个CPM2NoC接口
4. 实际运行配置
在配置完后,直接编译后,进入实操环节
安装驱动
参考《pg347》的Using the Provided Software and Drivers章节
#下载驱动源码,注意最好跟vivado版本对应上,master是最新的,对应vivado2024.1/2
git clone https://github.com/Xilinx/dma_ip_drivers.git
#如果之前已经加载过驱动,则先删除驱动
rmmod qdma_pf
rm -rf dma_ip_drivers
#清理+编译
make clean & make
make install
modprobe qdma-pf #安装驱动
lspci -vvv -d 10ee: #查看设备节点是否存在
配置host profile
参考《pg347》的Host profile章节以及下面的链接
https://adaptivesupport.amd.com/s/article/000035811?language=en_US
是通过相关设备节点配置寄存器
执行CFG启动测试
CFG相关参考:
https://adaptivesupport.amd.com/s/article/Understanding-the-Versal-CPM5-...
可以看到能够到25GB/s左右
5. 总结
AMD Versal器件CPM单元集成了硬核QDMA功能,只需使用少量逻辑便能实现PCIe Gen5高带宽数据传输。同时官方也集成好了dma-perf等测试程序以及相关驱动,可以快速地进行验证与产品化,但需要注意的是MM模式的优劣以及性能影响因素,比如DDR、NoC带宽等,不是所有应用都适用,适当在ST与MM模式下做选择,可以帮助实现更高的性能。如果想在一个VP1202上实现两个PCIe5x8 MM,如果想在一个VP1202上实现两个PCIe5x8 MM,您可发送邮件至此邮箱寻求技术支持:AMD-xilinxchina@avnet.com。
文章来源:安富利