Xilinx XDMA说明和测试-MM

Xilinx XDMA说明和测试-MM

  • 1 测试工程
  • 2 驱动安装
    • 2.1 源文件说明
    • 2.2 驱动编译安装
  • 3 测试说明
    • 3.1 设备管理
    • 3.2 数据读写
    • 3.3 测试结果

1 测试工程

使用Vivado创建的XDMA测试工程如下图所示,XDMA IP的设置如下,其它保持默认。XDMA的AXI、AXI Lite和AXI Bypass都接BRAM,每个BRAM的地址设置如下图。该工程可从Github下载,使用的FPGA板卡为浪潮的F37X加速器,运行工程目录下的run.sh执行run.tcl即可完成工程的创建和编译。注意AXI Lite接口需要连接,如果不连接重启失败,可能是系统重启时XDMA的驱动需要通过AXI Lite接口读取配置信息。

  • PCIe Block Location: PCIE4C X1Y0
  • Lane Width: X16
  • Maximum Link Speed: 8.0GT/s
  • Reference Clock Frequency: 100MHz
  • AXI Data Width: 512bit
  • AXI Clock Frequency: 250
  • Vendor ID: 10EE
  • Device ID: 903F
  • 勾选PCIe to AXI Lite Master Interface和64bit Enable
  • 勾选PCIe to DMA Interface和64bit Enable
  • 勾选PCIe to DMA Bypass Interface和64bit Enable

Xilinx XDMA说明和测试-MM_第1张图片
Xilinx XDMA说明和测试-MM_第2张图片

2 驱动安装

本节主要介绍XDMA驱动的源文件、编译和安装过程。

2.1 源文件说明

1.下载地址:DMA驱动下载
2.文件说明

文件 说明
include 编译依赖文件
tests 测试文件
load_driver:加载驱动
run_test.sh:执行DMA测试
dma_memory_mapped_test:MM测试调用的脚本
dma_streaming_test.sh:Stream测试调用的脚本
data:测试数据
tools 工具文件
reg_rw.c:AXI Lite和AXI Bypass通道读写寄存器工具
dma_to_device.c:AXI通道写寄存器工具
dma_from_device.c:AXI通道读寄存器工具
xdma 驱动源文件
xdma_mod.c:添加新设备的Vendor ID和Device ID
readme.txt 说明文件
RELEASE 版本说明
COPYING 权限
LICENSE 证书

2.2 驱动编译安装

1.驱动编译:在xdma中执行sudo make install命令编译驱动,生成xmda.ko文件。
2.编译工具:在tools中执行make命令编译工程,生成reg_rw、dma_to_device、dma_from_device可执行文件。
3.驱动加载:在tests中执行sudo ./load_driver.sh加载驱动
4.如果需要增加设备ID,需要修改xdma/xdma_mod.c文件,在”pci_device_id“结构体下增加PCI_DEVICE的Vendor ID和Device ID。

3 测试说明

本节介绍XDMA的测试结果。

3.1 设备管理

1.下载FPGA程序,重新启动系统,执行sudo ./load_driver.sh加载驱动,显示如下说明驱动加载和设备识别成功。执行rmmod xdma可卸载驱动。
Xilinx XDMA说明和测试-MM_第3张图片
2.执行lsmod | grep xdma查看xdma驱动是否成功加载。
在这里插入图片描述
3.执行ls /dev/xdma*查看xdma设备是否存在。xdma0_h2c_0是AXI主机到卡的通道,xdma0_c2h_0是AXI卡到主机的通道,因为XDMA IP中只启用了一个H2C和C2H通道,所以这儿只有一个。xdma0_user是AXI Lite通道,xdma0_bypass是AXI Bypass通道,xdma0_contorl是PCIe 配置空间的读写通道,xdma0_event_*是16个用户中断,在IP核配置时使能了才有用。
Xilinx XDMA说明和测试-MM_第4张图片
4.当主机系统中有两块加速卡,都下载了XDMA工程,执行ls /dev/xdma*会列出如下两个设备,直接使用脚本run_test.sh进行测试会失败。
Xilinx XDMA说明和测试-MM_第5张图片
5.使用命令lspci -vd 1bd4:可查看设备的信息,其中1bd4是XDMA IP设置时设置的Vendor ID。“Memory at e0000000…”指示BAR0上AXI Lite通道的存储空间,可以在IP设置时进行修改。“Memory at f0000000…”指示BAR2上AXI通道的存储空间。不同设置下各通道占据的BAR空间位置如下图所示。
Xilinx XDMA说明和测试-MM_第6张图片
Xilinx XDMA说明和测试-MM_第7张图片

3.2 数据读写

1.reg_rw工具,执行reg_rw -h可查看使用说明

reg_rw  
--: ls /dev/xdma*中的设备 --
: 寄存器地址 --: 数据类型:b(byte)-8字节;h(halfword)-16字节;w(word)-32字节 --: 写入数据,如果没有这一项,则表示读取数据

1.1 写入数据
Xilinx XDMA说明和测试-MM_第8张图片
在这里插入图片描述
1.2读出数据
Xilinx XDMA说明和测试-MM_第9张图片
在这里插入图片描述

2.dma_to_device,执行./dma_to_device -h可查看使用说明

dma-to-device [OPTIONS]
-d:ls /dev/xdma*中的设备
-f:发送给卡的数据文件
-w:从卡中读数据写入的文件
-s:发送数据的字节数
-a:寄存器地址
-c:传输次数
-o:offset
-k:aperture

在这里插入图片描述
在这里插入图片描述
3.dma_from_device,执行./dma_from_device -h可查看使用说明

dma-from-device [OPTIONS]
-d:ls /dev/xdma*中的设备
-f:发送给卡的数据文件
-w:从卡中读数据写入的文件
-s:发送数据的字节数
-a:寄存器地址
-c:传输次数
-o:offset
-k:aperture

在这里插入图片描述
在这里插入图片描述

3.3 测试结果

执行tests文件夹下的脚本run_test.sh完成对XDMA的测试,整个测试流程包括查询使能通道、确定接口方式(MM or ST),根据接口方式调用脚本dma_memory_mapped_test.sh或者dma_streaming_test。dma_memory_mapped_test.sh和dma_streaming_test脚本首先使用dma_to_device命令发送测试数据到BRAM,然后使用dma_from_device命令从BRAM中取出数据,最后对比两个文件的数据是否一致。测试记过如下图所示。
Xilinx XDMA说明和测试-MM_第10张图片

你可能感兴趣的:(#,XIlinx,DMA说明和测试,fpga开发)