续上一篇文章,
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