本文主要介绍Xilinx XDMA Stream接口的使用方法和下载测试方法。
1 测试工程
XDMA在AXI Stream接口模式下的基本使用方法与AXI Memory Mapped模式基本相同,区别在于在设置XDMA时,在Basic标签页中,DMA Interface option选择为AXI Stream。使用Vivado创建下图所示的Block Design,AXI-Lite接口接到BRAM上,AXIS的H2C接口直接连接到AXIS的C2H接口。该工程可从Github下载,使用的FPGA板卡为浪潮的F37X加速器,运行工程目录下的run.sh执行run.tcl即可完成工程的创建和编译。
2 驱动安装
驱动的安装与AXI Memory Mapped模式一致,驱动可从Github下载,根文件夹下的xdma.sh文件为测试命令脚本,使用方式为./xdma <参数>
。需要注意的时,如果把编译好的驱动复制到新机器上,直接加载驱动会提示"insmod: ERROR: could not insert module xdma/xdma.ko: Invalid module format",需要重新执行sudo make install
编译驱动后再加载。
- 下载Bit文件,重启主机
- 编译驱动:进入xdma文件夹,执行
sudo make install
- 编译工具:进行tools文件夹,执行
make
- 加载驱动:进入tests文件夹,执行
sudo ./load_driver.sh
3 传输测试
- AXI-Lite写通道:
./reg_rw <设备> <地址> <数据长度> <写入数据>
- AXI-Lite读通道:
./reg_rw <设备> <地址> <数据长度>
- AXI-Stream通道:直接调用XDMA的测试脚本run_test.sh,整个测试流程包括查询使能通道、确定接口方式(MM or ST),根据接口方式调用脚本dma_memory_mapped_test.sh或者dma_streaming_test。本工程是ST接口,所以调用dma_streaming_test.sh脚本,该脚本首先使用dma_form_device命令准备接收数据,然后使用dma_to_device命令将数据写入XDMA,最后对比读出的数据和写入的数据是否一致,验证传输过程是否出现错误。测试结果如下图所示。
4 错误解决
- 错误
- 错误现象:如下图
- 错误原因:
- 接收指令dma_from_device定义的size不对
- 自己定义的接口没给tlast信号