Xilinx ZYNQ Ultrascale+ 性能测试之 AXI DMA S2MM

本文详述了使用AXI DMA进行数据传输的测试,分析了不同参数配置如MemoryMapDataWidth、StreamDataWidth、MaxBurstSize以及时钟频率对传输速度和CPU占用率的影响。在Linux环境下,当发送32'h400长度数据,速度可达160MByte/s,CPU占用约15%。通过添加延迟,速度降至3MByte/s,CPU占用减至0.5%。调整时钟频率至1M和100M,速度降低但CPU占用提高。测试表明,AXI DMA的性能受软件接收同步及硬件配置显著影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

续上一篇文章,
PS 使用官方的 dma-proxy-test.c,注释掉 tx 部分,只保留rx 部分
PL 自己模拟发数据

AXI DMA 设置如下
Memory Map Data Width: 32
Stream Data Width: 32
Max Burst Size: 128

AXIS CLK 为 250M,
一次发 32’h400 长度的数据,因为是位宽是 32bit,那么每次发送 4096Byte

在Linux 下,CPU占用大概 15%,速度160MByte/s 左右

#./dma-proxy-test 1000000 4096
DMA proxy test
speed: 162 MByte/s
DMA proxy test complete

注:如果测试官方的tx+rx的例子,在4096的包大小下,速度要低一点点,CPU要高一点点,毕竟他是tx+rx同时的

在每次传输之后如果加 usleep(1000); // 1ms
CPU占用大概 0.5%

#./dma-proxy-test 1000000 4096
DMA proxy test
speed: 3 MByte/s
DMA proxy test complete

如果不加 usleep,把
AXI DMA 的 CLK 改为1M
AXI Interconnect 的 CLK 改为 100M
传输速度会降低到 2MByte/s,但CPU会高到 5% 左右

这里有个要注意的,如果linux 这边不开始收数据,PL端是发不出去的
按上面的设置,发送4个时钟周期之后 AXIS_TREADY 就被拉低了
正好是 Burst_Size / Data_Width = 4

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值