axi ps读写pl_PL读写DDR:Datamover能干什么

最近发现工程项目中一直在用AXI-DMA。这玩意儿搬数据倒是没问题,就是用axi-lite配置起来非常反人类。。。简单的办法其实是用datamover ip核。

这个ip核能干嘛呢。准备写个文章解析一下。由于好多feature没用过,所以仅仅看文档可能理解有误,欢迎指出错误。

首先扫个盲:MM2S指的是Memory map to stream. 读DDR. S2MM指的是steam to memory map. 写DDR.

Datamover能干嘛

  • 能把数据以axi_stream的格式从DDR里搬入搬出
  • 支持4KB的边界保护以及自动拆解太长的burst
  • 可以排队处理多次读写请求
  • 支持字节为单位的非对齐传输
  • 支持store-and-forward模式。也就是MM2S的时候先把数据缓存下来,再分发出去
  • 支持indeterminate BTT mode。也就是说。。S2MM的时候你甚至不需要知道你要写多少数。

简单的使用方法

6570050bfdd238a64a755d8fa4195033.png

上图是一个读操作的。写的类似。接口只有4个。

  • 把你要搬数据的信息例如起始地址,数据长度等以axi-stream的形式捅到command端口。
  • AXI4 Master接到DDR上(实际是接到MIG上)。
  • AXI4 Stream Master就是读出来的数。
  • AXI-Stream status是状态。拿出来容易debug.

你应该往AXI4-STREAM SLAVE(command)端口里捅什么

这个东西的重中之重显然就是command指令。

c87ad8a00bd960d0b51ab78aa12d53a6.png

指令格式如上面的样子。读写都是一样的。一个一个来讲。

xCACHE: 这个一共4bit. 用于配置axi总线一些cache性质的。感兴趣参考AXI的文档。不关心全给成0. 主要是一个cache相关的东西。

xUSER: 4bit.这个是你自己定义的信号。。也就是说你想用axi总线穿点儿私货。。那就要把数据写到这个地方。到时候axi传输的时候会出现在user端口。

RSVD: Reserved... 干什么的显然。。。

TAG: 这个是给该条指令个一个标签。有这个TAG在出了错debug的时候可以报是哪条指令出错了。当然你要是头铁觉得不用DEBUG. TAG全给0.

SADDR: 读写DDR里的初始地址。要注意的是如果你想非对齐传输,配置Datamover的时候要把非对齐传输点开。(例如ddr指定的是32bit, 对齐传输是指你从0,4,8这些地址开始读,非对齐传输是指你想从1开始读)

DRR: 这个数据就比较绕了。。。这个数据是后面DSA的开关。主要是为了调整Stream端(而不是memory端,memory端直接由SADDR地址就能确定)非对齐操作的位置,也就是说,这个值表示该条指令对应的传输需要对stream端数据做调整。具体怎么调整看后面的DSA. 用在MM2S.

EOF: 这个数据一样比较绕。先说简单的。

在S2MM的过程中,如果INDETERMINATE BTT模式关闭,你想用tlast信号表示你写完了,那么EOF要置高。

在MM2S的过程中,同时存在多条指令。你想让最后一条读出来后再来tlast. 那就只在最后一条置高这个EOF. 如果你开启来非对齐传输。。。最好每条都置高。否则你得注意两条指令之间不会不有废数据。

DSA: 这个是为了调节stream侧的数据非对齐的。。。举个栗子。假如DDR是32bit的。那么它应该有4个byte. (从高到低 m3 m2 m1 m0)。这个DSA如果等于1。表明你会把数据m1放到stream的第一个数据。m0被丢掉了。。。所以如果需要这种操作,就打开DRR, 配置DSA. 否则DRR也不需要打开。

Type: 这个表示你的地址要不要累加。。如果不累加你就是在起始地址疯狂写。所以一般传输要是一整块的话这个要置1.

BTT: 这个简单。你要传输多少个数。。。注意单位是byte. 不是你axi_stream的宽度。

配置IP CORE需要注意的点

Stream端的数据位宽要小于或者等于AXI4端的数据位宽。配置IP核的时候就会提示。

配置界面上Maximum Burst Size这个参数比较绕。指的是AXI总线的burst size. 一般来说设个16什么的就好。你给出的BTT会自动切成这种小的传输。

其他都很简单。。。看上面操作就能实现。

总结

这篇文章解读了一下读DDR的接个IP核。如果不想直接用AXI-FULL来读写DDR,要操作AXI_STREAM数据读写DDR的话,最常用的IP核是DMA和这个datamover。其中DMA更适合用PS来操作。更复杂功能更强大,但是实际使用起来比较复杂,尤其你想从PL写个AXILITE控制DMA的时候。。。所以。

从PL调用DDR直接用datamover才是比较合理的操作。就这这样。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/365715.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在10分钟内在新Mac中设置Java开发环境(更新)

这只是一个小的更新文章,它引用了2个较旧的条目( a , b ),我将它们合并为一个步骤,就像一步操作,并确保所有功能都在最新的MacOSX 10.9 Mavericks下工作 。 我主要针对的是初次尝试设置其环境的…

linux path 与 classpath 区别

linux path 与 classpath 区别 一、OS依据path中的路径信息来寻找可执行指令; 例如: cat /etc/profile 我们就可以在任意目录执行hadoop / hdfs / yarn / java 等相关命令了 export HADOOP_HOME/opt/hadoop/hadoop-2.6.0 export JAVA_HOME/home/jdk1.8.0…

开启9008端口进入深刷模式

除了前文所述,使用深刷线,还可以用命令开启9008端口,进入深刷模式。 adb reboot edl fastboot oem edl 这个在小米4c上测试ok 下面这个可能用于其他手机。 fastboot reboot emergency http://www.znsjw.net/nd.jsp?id19 小米绕BL锁9008工程…

Vue Webpack常见问题(持续更新)

常识 1.computed计算属性,使用的属性必需在data里面声明。 computed: {canLogin: function(){//注意这里的依赖的属性必需在data里面声明return this.name && this.password;} } Webpack问题 1.模块里面使用JSON.stringify和 typeof,报&#x…

hashmap为什么用红黑树_要看HashMap源码,先来看看它的设计思想

HashMap 是日常开发中,用的最多的集合类之一,也是面试中经常被问到的 Java 类之一。同时,HashMap 在实现方式上面又有十分典型的范例。不管是从哪一方面来看,学习 HashMap 都可以说是有利无害的。分析 HashMap 的源码的文章在网上…

Hibernate 4.2.8,javassist 3.18.1和ClassCastExceptions –注意您的类路径

我写这篇文章是作为提示和警告,而不是绝对的解决方案。 我将尝试针对我的案例(WebSphere 8.5.5)返回一种解决方法,但是我确信其他开发人员和应用程序也会受到影响。 我已经花了一些时间来找出问题的原因,所以暂时&…

实现CA和证书申请

文字说明 1 在CA上执行,建立CA cd /etc/pki/CA touch index.txt echo 0F > serial (umask 077;openssl genrsa -out private/cakey.pem 2048) openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650 填写多项内容:国家&#xff…

Sx05RE-S905.arm-2.2.1

Sx05re-S905-2.2.1版本安装记录 1、系统Sx05re-2.21 2、盒子型号S905m 3、使用dtb为gxbb_p200_1G_100M.dtb,更名为dtb.img以后,替换到内存卡中 4、打上Sx05re Upgrade 2&3&5&6补丁转载于:https://www.cnblogs.com/Gantz/p/10354826.html

端口如何支持非localhost访问_新特性解读 | MySQL 8.0.19 支持 DNS SRV

转载自公众号:玩转MySQL作者:洪斌MySQL Router 是 InnoDB Cluster 架构的访问入口,在架构部署上,官方给出的建议是 router 与应用端绑定部署,避免 router 单点问题。之前还有客户咨询,能否 router 不与应用…

记录奥运-当今五大Java记录框架之间的竞赛

开发人员:Takipi会告诉您何时新代码在生产中中断– Log4J vs SLF4J简单vs Logback vs Java Util日志记录vs LOG4J2 日志记录实际上是每个服务器端应用程序中古老而固有的部分。 这是应用程序以持久且可读的方式输出实时状态的主要方法。 某些应用程序每天可能仅记录…

移动端实现元素拖拽效果插件_基于自然流布局的可视化拖拽搭建平台设计方案...

LowCode 是高效、高性能的拖拽式低代码开发平台. 也是笔者最近一直在研究的方向, 对于可视化搭建平台的实现方案笔者之前写过很多文章, 这里带大家探索一个新方向——基于自然流布局的可视化搭建平台.在我们之前实现的 h5-dooring 搭建平台中, 我们采用了网格布局的方式来实现拖…

Python数据分析前提-----pandas

pandas:知识脑图 https://bigquant.com/community/t/topic/129755 1、read_csv(url):读取数据 2、help(read_csv):打印函数相关用法 3、数据名.dtypes:读取数据的类型(int、float……) 4、type(数据名&…

07-数据类型

【转】07-数据类型 介绍 存储引擎决定了表的类型,而表内存放的数据也要有不同的类型,每种数据类型都有自己的宽度,但宽度是可选的 详细参考链接:http://www.runoob.com/mysql/mysql-data-types.html mysql常用数据类型概括&#x…

小谈React、React Native、React Web

React有三个东西,React JS 前端Web框架,React Native 移动终端Hybrid框架,React Web是一个源码转换工具(React Native 转 Web,并之所以特别提出,是觉得还有些用处)。 React、React Native共同…

yii::$app-mongodb 查询纪录数_老詹总决赛有多强?12项数据领先乔丹科比,已握10项数据纪录...

勒布朗詹姆贡献了38分16个篮板和10个助攻的狂暴三双数据,并率领湖人淘汰了掘金,这使得他迈进了职业生涯第10次总决赛舞台。我们都知道,詹姆斯几乎统治着NBA季后赛大部分数据纪录,事实上,他在总决赛同样如此。根据《sta…

摆脱困境:从计划作业中调用安全方法

假设我们已经实现了一个Spring支持的应用程序,并使用Spring Security的方法安全性表达式对其进行了保护 。 我们的下一个任务是使用安全方法实施计划作业。 更具体地说,我们必须实现一个计划的作业,该作业从我们的服务类中获取一条消息&…

前端共享桌面_2020 前端学习路线总结,哎呦,不错哦!

2020 前端学习路线总结在 GitHub 看到一个很不错的前端学习路线图(roadmap),从前端基础到前端工程化,再到跨端,都有知识点的覆盖,非常推荐阅读。图下面是我翻译的一个文字版,可以先看图再看文字…

每日一题题目16:简单的python练习题(1-10)

#1.python程序中__name__的作用是什么?__name__这个系统变量用来表示程序的运行方式. 如果程序在当前膜快运行,__name__的名称就是__main__, 如果不在(被调用),则显示为导入模块的名称.扩展:常常这样写if __name__ "__main__":来表名这是整个工程开始运行的入口.效…

Confluence 6 高级性能诊断

请在你的系统服务请求中包括下面所有的信息,如果可能的话,你也可以在请求中包括你认为最有可能出现的问题。这样的话,可以避免我们进一步对你系统的问题进行询问。 系统信息 Confluence 服务器 你系统信息的屏幕截图 Confluences Administrat…

RequireJS使用注意地方

使用RequireJS做异步模块加载,有几点值得注意的地方: 1.模块定义两种写法 1. 存在依赖的函数式定义 如果模块存在依赖:则第一个参数是依赖的名称数组;第二个参数是函数,在模块的所有依赖加载完毕后,该函…