最近发现工程项目中一直在用AXI-DMA。这玩意儿搬数据倒是没问题,就是用axi-lite配置起来非常反人类。。。简单的办法其实是用datamover ip核。
这个ip核能干嘛呢。准备写个文章解析一下。由于好多feature没用过,所以仅仅看文档可能理解有误,欢迎指出错误。
首先扫个盲:MM2S指的是Memory map to stream. 读DDR. S2MM指的是steam to memory map. 写DDR.
Datamover能干嘛
- 能把数据以axi_stream的格式从DDR里搬入搬出
- 支持4KB的边界保护以及自动拆解太长的burst
- 可以排队处理多次读写请求
- 支持字节为单位的非对齐传输
- 支持store-and-forward模式。也就是MM2S的时候先把数据缓存下来,再分发出去
- 支持indeterminate BTT mode。也就是说。。S2MM的时候你甚至不需要知道你要写多少数。
简单的使用方法
![6570050bfdd238a64a755d8fa4195033.png](https://i-blog.csdnimg.cn/blog_migrate/b27ac208254951b536355cfe6aeae76d.jpeg)
上图是一个读操作的。写的类似。接口只有4个。
- 把你要搬数据的信息例如起始地址,数据长度等以axi-stream的形式捅到command端口。
- AXI4 Master接到DDR上(实际是接到MIG上)。
- AXI4 Stream Master就是读出来的数。
- AXI-Stream status是状态。拿出来容易debug.