在成功实现ZCU106开发板的PYNQ镜像生成后(见ZCU106的PYNQ移植),开发板的结构可抽象为下图所示:
我们可以通过在开发板的OS中架设TCP服务器,在上位机PC端进行TCP客户端访问来实现上位机到开发板的文件/数据传输。为了能够实现开发板PS侧和PL侧的高速传输,我们可以在开发板上构建DMA传输。(DMA介绍见DMA IP核学习笔记)本文分别从DMA传输的BD构建和PYNQ运行,以及传输速度测试两部分进行说明。

一:Vivado下DMA BD逻辑构建

首先附上BD图(2018.3版本)

只做DMA数据传输速度测试,将S_AXIS_S2MM直接连接M_AXIA_MM2S构成传输回环。
DMA IP具体设置如下,关闭SG mode

ZYNQ核关闭interrupt,开一个HP口

之后按流程进行比特流生成,提取文件夹中的.bit,.hwh及bd.tcl文件为PYNQ运行做准备。

二:PYNQ下DMA回环测试运行

.bit,.hwh及bd.tcl文件复制至\PYNQ\xilinx下备用

运行jupyter notebook
DMA测试代码如下:
导入bit文件

import numpy as np
from pynq import Xlnk
from pynq import Overlay
import time
ol = Overlay('/home/xilinx/zcu106_dma/dma.bit')
dma = ol.axi_dma_0

构建输入输出buffer

xlnk = Xlnk()
input_buffer = xlnk.cma_array(shape=(6553600,), dtype=np.uint32)
output_buffer = xlnk.cma_array(shape=(6553600,), dtype=np.uint32)

测试下的两个buffer均定为25MB

对输入buffer进行赋值

for i in range(6553600):input_buffer[i] = i

进行DMA传输,并打时间戳便于测速

start = time.time()
dma.sendchannel.transfer(input_buffer)
dma.recvchannel.transfer(output_buffer)
dma.sendchannel.wait()
dma.recvchannel.wait()
end = time.time()

打印传输时间

print('time cost ' + str(round(end - start, 5)) + 's')

计算传输速度

length = 26214400
cost = round(end - start, 5)
speed = round(length/(cost*1048576),5)
print('transfer speed: ' + str(speed) + 'MB/s')

三:DMA传输速度测试

笔者多次测试结果如下:

  1. 64KB数据:

  2. 1MB数据:

  3. 10MB数据:

  4. 25MB数据:

    另可将输入输出buffer中的数据保存为txt文件对比检查传输正确性

np.savetxt('input.txt',input_buffer)
np.savetxt('output.txt',output_buffer)

Fin

PYNQ下的DMA传输实现及速度测试相关推荐

  1. ZYNQ DMA Modelsim仿真与速度测试

    1.DMA配置与寄存器说明 DMA配置为Direct Register Mode (Simple DMA ),DMA分为两个方向:一是S2MM,即PL to PS:二上MM2S,即PS to PL.D ...

  2. 驱动程序(9) 利用Windriver修改代码实现DMA传输定制功能的驱动程序

    前言 前一篇文章讲到了利用windriver来生成一个对应使用的板卡的驱动程序,并且有相对应的INF文件给板卡安装上.这个生成的驱动程序代码包含了基本的访问板卡的功能,甚至可以实现DMA传输等功能(需 ...

  3. linux io使用dma传输,linux驱动之DMA

    一.前言 在 嵌入式Linux 的内核及驱动中,DMA 常常被人提起.我们也许清楚它的原理且很明白它非常重要,但在某种程度上,对于 DMA 的使用者来说,我们一般使用其接口,而很少去了解整个 DMA ...

  4. STM32使用DMA在Normal模式下二次传输

    当STM32的DMA配置为Normal(即单次)模式时,在DMA第一次传输完成后,要启动第二次DMA传输,需先关闭该DMA通道,重新设置DMA传输数据个数,再开启DMA通道. 原理和定时器关闭自动重载 ...

  5. usb3.0传输速度测试软件,USB3.0与USB2.0的传输速度对比测试

    USB 3.0对多数电脑爱好者都已经不陌生,发布也有段时间了,多数朋友大概都还只知道USB 3.0接口传送数据能力比USB 2.0接口快很多,但到底有多快,可能就很少人知道了.下面小编就为大家介绍一下 ...

  6. 微机原理与接口技术:DMA传输 详细笔记

    文章目录 1.DMA传输原理 1.1.DMA控制器 1.2.DMA传输过程 1.3.8086系统中的DMA信号 2.8237A的内部结构和外部信号 2.1.8237A芯片的主要特点 2.2.8237A ...

  7. [STM32F4]STM32F407 ADC采集+DMA传输

    前言        有的项目中需要对多个通道的电压进行一定频率的AD采样. 第一种:是使用定时器去读取,通过检查转换完成标志位来读取,但这样就会加重整个系统的负担,占用CPU资源. 第二种:是采用定时 ...

  8. STM32CubeMX关于ADC采集DMA传输

    什么是ADC,ADC也叫做模数转换,既将外面的模拟信号转换为数字信号. 模拟信号:连续变化的物理量表示的信息,其信号的幅度,或频率,或相位随时间作连续变化,或在一段连续的时间间隔内,其代表信息的特征量 ...

  9. 全志V3S裸机串口驱动(中断方式接收,DMA接收有问题,小于32字节数据无法触发DMA传输)

    调试DMA接收遇到了个很奇怪的问题,就是DMA发送没问题,DMA接收的时候,如果数据小于32字节,数据被DMA从串口接收FIFO中取走了,但是并不会传输到指定的buff中,这个就没法用于接收未知长度的 ...

最新文章

  1. 现在的Java面试已经和2年前完全不一样了!
  2. Cocos Creator快速开通联网服务教程
  3. integer加1_AP双语数学常用的术语(1)
  4. 速看,三分钟带你了解IP协议!
  5. CRM呼叫中心采用轮询和SNS服务器两种方式的架构
  6. python数字转字符串_python如何将字符转换为数字
  7. c++读取excel_Python读取并提取xlsx数据+去趋势和高通滤波与低通滤波
  8. 北大毕业 15 年经验架构师,重磅解读 5G 时代的计算平台
  9. PAT甲级1019 回文数
  10. JavaScript中sort方法的使用及原理详解
  11. TASKCTL连接不到服务端的几种情况和解决办法
  12. python opencv 摄像头亮度_python 基于opencv操作摄像头
  13. 海豚湾在哪_前任3再见前任里的海豚湾在哪 电影拍摄取景地点介绍
  14. php工具箱怎么换php版本,最新php程序员工具箱 v1.0版本介绍
  15. 使用iTunes制作iPhone6s plus铃声
  16. 小米4 第三方re奇兔_小米推送测试
  17. 致丰巢:品牌管理,才是长久之计
  18. 【逗老师的无线电】Motorola DMR设备如何经由BM中心网络上报APRS位置信息
  19. linux添加五笔输入法,RedHat Linux 9中vim升级方法及如何安装五笔输入法
  20. smaba(跨平台文件共享)

热门文章

  1. 小米手环 android手机,小米手环2如何连接手机小米手环2连接手机方法【图文教程】...
  2. H5页面点击调起腾讯/百度/高德地图APP
  3. Docker单节点部署OceanBase集群创建租户、用户、业务表
  4. 指数增强(股票)——Python量化
  5. 搭建Nginx+nginx-rtmp-module的hls流媒体服务器并用OBS进行推流
  6. 亚硝酸还原酶(NiR)试剂盒市场深度研究分析报告
  7. 第一次运行JADE平台
  8. 【宾夕法尼亚大学机器人课程学习】Motion Planning
  9. 【Java编程学习】案例8-4 模拟12306售票
  10. 关于Git小乌龟克隆clon代码要求输入密码,但密码无效的问题