PYNQ下的DMA传输实现及速度测试
在成功实现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传输速度测试
笔者多次测试结果如下:
64KB数据:
1MB数据:
10MB数据:
25MB数据:
另可将输入输出buffer中的数据保存为txt文件对比检查传输正确性
np.savetxt('input.txt',input_buffer)
np.savetxt('output.txt',output_buffer)
Fin
PYNQ下的DMA传输实现及速度测试相关推荐
- ZYNQ DMA Modelsim仿真与速度测试
1.DMA配置与寄存器说明 DMA配置为Direct Register Mode (Simple DMA ),DMA分为两个方向:一是S2MM,即PL to PS:二上MM2S,即PS to PL.D ...
- 驱动程序(9) 利用Windriver修改代码实现DMA传输定制功能的驱动程序
前言 前一篇文章讲到了利用windriver来生成一个对应使用的板卡的驱动程序,并且有相对应的INF文件给板卡安装上.这个生成的驱动程序代码包含了基本的访问板卡的功能,甚至可以实现DMA传输等功能(需 ...
- linux io使用dma传输,linux驱动之DMA
一.前言 在 嵌入式Linux 的内核及驱动中,DMA 常常被人提起.我们也许清楚它的原理且很明白它非常重要,但在某种程度上,对于 DMA 的使用者来说,我们一般使用其接口,而很少去了解整个 DMA ...
- STM32使用DMA在Normal模式下二次传输
当STM32的DMA配置为Normal(即单次)模式时,在DMA第一次传输完成后,要启动第二次DMA传输,需先关闭该DMA通道,重新设置DMA传输数据个数,再开启DMA通道. 原理和定时器关闭自动重载 ...
- usb3.0传输速度测试软件,USB3.0与USB2.0的传输速度对比测试
USB 3.0对多数电脑爱好者都已经不陌生,发布也有段时间了,多数朋友大概都还只知道USB 3.0接口传送数据能力比USB 2.0接口快很多,但到底有多快,可能就很少人知道了.下面小编就为大家介绍一下 ...
- 微机原理与接口技术:DMA传输 详细笔记
文章目录 1.DMA传输原理 1.1.DMA控制器 1.2.DMA传输过程 1.3.8086系统中的DMA信号 2.8237A的内部结构和外部信号 2.1.8237A芯片的主要特点 2.2.8237A ...
- [STM32F4]STM32F407 ADC采集+DMA传输
前言 有的项目中需要对多个通道的电压进行一定频率的AD采样. 第一种:是使用定时器去读取,通过检查转换完成标志位来读取,但这样就会加重整个系统的负担,占用CPU资源. 第二种:是采用定时 ...
- STM32CubeMX关于ADC采集DMA传输
什么是ADC,ADC也叫做模数转换,既将外面的模拟信号转换为数字信号. 模拟信号:连续变化的物理量表示的信息,其信号的幅度,或频率,或相位随时间作连续变化,或在一段连续的时间间隔内,其代表信息的特征量 ...
- 全志V3S裸机串口驱动(中断方式接收,DMA接收有问题,小于32字节数据无法触发DMA传输)
调试DMA接收遇到了个很奇怪的问题,就是DMA发送没问题,DMA接收的时候,如果数据小于32字节,数据被DMA从串口接收FIFO中取走了,但是并不会传输到指定的buff中,这个就没法用于接收未知长度的 ...
最新文章
- 现在的Java面试已经和2年前完全不一样了!
- Cocos Creator快速开通联网服务教程
- integer加1_AP双语数学常用的术语(1)
- 速看,三分钟带你了解IP协议!
- CRM呼叫中心采用轮询和SNS服务器两种方式的架构
- python数字转字符串_python如何将字符转换为数字
- c++读取excel_Python读取并提取xlsx数据+去趋势和高通滤波与低通滤波
- 北大毕业 15 年经验架构师,重磅解读 5G 时代的计算平台
- PAT甲级1019 回文数
- JavaScript中sort方法的使用及原理详解
- TASKCTL连接不到服务端的几种情况和解决办法
- python opencv 摄像头亮度_python 基于opencv操作摄像头
- 海豚湾在哪_前任3再见前任里的海豚湾在哪 电影拍摄取景地点介绍
- php工具箱怎么换php版本,最新php程序员工具箱 v1.0版本介绍
- 使用iTunes制作iPhone6s plus铃声
- 小米4 第三方re奇兔_小米推送测试
- 致丰巢:品牌管理,才是长久之计
- 【逗老师的无线电】Motorola DMR设备如何经由BM中心网络上报APRS位置信息
- linux添加五笔输入法,RedHat Linux 9中vim升级方法及如何安装五笔输入法
- smaba(跨平台文件共享)
热门文章
- 小米手环 android手机,小米手环2如何连接手机小米手环2连接手机方法【图文教程】...
- H5页面点击调起腾讯/百度/高德地图APP
- Docker单节点部署OceanBase集群创建租户、用户、业务表
- 指数增强(股票)——Python量化
- 搭建Nginx+nginx-rtmp-module的hls流媒体服务器并用OBS进行推流
- 亚硝酸还原酶(NiR)试剂盒市场深度研究分析报告
- 第一次运行JADE平台
- 【宾夕法尼亚大学机器人课程学习】Motion Planning
- 【Java编程学习】案例8-4 模拟12306售票
- 关于Git小乌龟克隆clon代码要求输入密码,但密码无效的问题