当前位置: 首页 > article >正文

Quartus DMA IP示例使用说明--MM接口

Quartus DMA IP示例使用说明--MM接口

  • 1 文件说明
  • 2 下载测试

本文主要介绍Quartus DMA IP示例的使用方法。

1 文件说明

信号方向说明
refclk0inputPCIe参考时钟0
refclk1inputPCIe参考时钟1
pin_perst_ninputPCIe复位
rx_xxxinputPCIe数据接收引脚
tx_xxxoutputPCIe数据发送引脚
ninit_doneinputFPGA就绪信号,0表示就绪
app_clkoutput用户时钟,Gen3: 250MHz;Gen4: 400 MHz;500MHz
app_rst_noutput用户复位
rx_pio_xxxxinoutBypass接口相关信号
p1_bam_xxxinoutMM接口相关信号
信号方向说明
p1_bam_waitrequest_iinputH2D等待信号
p1_bam_write_ooutputH2D写信号
p1_bam_address_ooutputH2D写地址
p1_bam_burstcount_ooutputH2D写突发计数
p1_bam_writedata_ooutputH2D写数据
p1_bam_byteenable_ooutputH2D写位使能
p1_bam_read_ooutputD2H读信号
p1_bam_readdatavalid_iinputD2H读数据有效
p1_bam_readdata_iinputD2H读数据

在这里插入图片描述

在这里插入图片描述

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

virt-host-validate | grep IOMMU #检测系统是否使能IOMMU
sudo apt-get install libvirt-clients #如果提示virt-host-validate: command not found时执行
#Ubuntu系统下修改/etc/default/grub文件
GRUB_CMDLINE_LINUX="default_hugepagesz=1G hugepagesz=1G hugepages=20 \
	intel_iommu=on iommu=pt panic=1 quiet splash vt.handoff=7"
#Centos系统下在GRUB_CMDLINE_LINUX下添加下述语句
default_hugepagesz=1G hugepagesz=1G hugepages=40 panic=1 intel_iommu=on iommu=pt
ls -al /sys/firmware/efi #检测系统是否为efi,如果该目录存在,则是
grub-mkconfig -o /boot/efi/EFI/ubuntu/grub.cfg #Ubuntu生成grub配置文件
grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg #Centos生成grub配置文件

在这里插入图片描述

2 下载测试

下载程序,重启系统,检测PCIe设备,1172为Intel的Verdor ID,可以在DMA IP的设置界面进行设置,0000:a6:00.0为PCIe的BDF号,示例工程里有两个BAR,映射之后的物理地址分别为38017f800000和38017fc00000,设备分配给了node1。
在这里插入图片描述

cat /proc/cmdline #验证上述修改是否生效
echo 40 > /proc/sys/vm/nr_hugepages #设置hugepages
virt-host-validate | grep IOMMU #再次检测系统是否使能IOMMU

在这里插入图片描述

lscpu | grep NUMA #检测CUP数,如果是一个,则跳过下述设置
cat /sys/class/pci_bus/0000:a6/device/numa_node #检测设备分配给了哪个CPU
echo 40> /sys/devices/system/node/node1/hugepages/hugepages-1048576kB/nr_hugepages #使能设备对应node的hugepages
#define THREAD_SEQ "0-15" #根据设备分配修改software/user/cli/perfq_app/perfq_app.h文件中的宏定义

在这里插入图片描述
在这里插入图片描述
执行下述步骤进行相关驱动和应用的编译和安装,安装完成后可以在系统中检测到uio和ifc_uio驱动,PCIe设备正在使用的内核驱动为ifc_uio,/dev下有uio的设备

modprobe uio #安装uio驱动
cd software/kernel #编译安装mcdma内核驱动
make clean all -C driver/kmod/mcdma-custom-driver
insmod driver/kmod/mcdma-custom-driver/ifc_uio.ko
lspci -d 1172:000 -v | grep ifc_uio #验证驱动是否加载(Kernel driver in use: ifc_uio)
cd software/user #编译安装用户空间库
make clean all -C libmqdma/
cp libmqdma/libmqdmasoc.so /usr/local/lib
ldconfig -v | grep libmqdmasoc.so #验证是否已包含库函数
cd software/user/cli/perfq_app/ #编译应用
make clean && make all
./perfq_app -h #查看说明,或者直接查看readme文件

在这里插入图片描述
使用devmem2对设备进行读写测试,需要uio和ifc_uio驱动都加载成功后才能完成读写操作,首先对0x38017f800000的存储空间进行读写操作,写到第二个512bit处,地址增加0x40,测试结果如下。监测mm_interconnect_0的输入输出信号,slave端首先接收到主机的写请求和写数据,master端将数据写入bam_mm_1。然后slave端接受到一个读请求,master端发起一个读请求,从bam_mm_1中读出数据,slave端将数据返回主机
在这里插入图片描述
在这里插入图片描述
然后对0x38017fc00000的存储空间进行读写操作,执行过程一致,测试结果如下图所示。
在这里插入图片描述
在这里插入图片描述
仅执行读操作的测试结果如下。
在这里插入图片描述
在这里插入图片描述
执行./perfq_app -b 0000:a6:00.0 -o进行PIO测试,输出下图所示信息表明测试通过
在这里插入图片描述
执行下述语句进行AVMM DMA接口的环回测试

cd software/user/cli/devmem #进行IP复位,可以在每次测试前执行复位
make clean all
./devmem 0000:a6:00.0 0 0x00200120 0x1
#define PCIe_SLOT 0 /* 0 - x16, 1 - x8 */ #根据实际配置修改user/common/include/ifc_libmqdma.h文件下的宏定义
./perfq_app -b 0000:a6:00.0 -p 32768 -l 5 -u -c 2 -d 2 -a 4 #进行DMA测试,-u为双向测试,-t为发送测试,-r为接收测试

在这里插入图片描述


http://www.kler.cn/a/463115.html

相关文章:

  • tcpdump指南(1)
  • 17爬虫:关于DrissionPage相关内容的学习01
  • PostgreSQL对称between比较运算
  • 迟来的前端面试经验
  • 逻辑推理算法
  • OpenNJet v3.2.0正式发布!
  • Spring实现输出带动态标签的日志
  • 【非关系型数据库Redis 】 入门
  • 32单片机从入门到精通之开发环境——库文件(六)
  • 三层交换机的原理详解
  • Keil中的gcc
  • 用PicGo向Github图床上传图片,然后通过markdown语言显示图片
  • Qt天气预报系统设计界面布局第四部分左边
  • 基于单片机中药存放环境监测系统的实现
  • 第三讲 比特币的早期发展
  • overscroll-behavior-解决H5在ios上过度滚动的默认行为
  • 茶叶连锁店管理系统(源码+文档+部署+讲解)
  • MySQL三大日志(binlog、redo log和undo log)详解
  • 职场常用Excel基础01-数据验证
  • LVGL部件篇: 开关部件(lv_switch)
  • 电商数据API接口的稳定性保障与性能优化策略
  • AI as a Platform (AIaaP) for Enterprises — 发展与转型
  • Go信号处理:如何优雅地关闭你的应用
  • 论文略读: Scaling laws with vocabulary: larger model deserve larger vocabularies
  • 科伦川宁生物:绿色科技引领,双翼齐飞筑梦未来
  • 深入聊聊typescript、ES6和JavaScript的关系与前瞻技术发展