【Xilinx DMA SG】Xilinx DMA SG 模式

2023-11-13

DMA简介:

AXI 直接存储器访问 (AXI DMA) IP 提供高带宽直接存储器 AXI4 存储器映射和 AXI4-Stream IP 接口之间的访问。它SG模式还可以从中央处理中卸载数据移动任务 基于处理器的系统中的单元 (CPU)。初始化、状态和管理寄存器是 通过 AXI4-Lite 从接口访问。图说明了功能 核心的组成。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBATGluZXN0LTU=,size_20,color_FFFFFF,t_70,g_se,x_16

1、系统内存和stream目标之间的主要高速 DMA 数据移动是 通过 AXI4 Read Master 到 AXI MM2S Stream Master,以及 AXI S2MM Stream Slave 到 AXI4 写入主机。 AXI DMA 还支持多达 16 个多通道的数据移动 SG模式下的 MM2S 和 S2MM 路径。

2、MM2S 通道和 S2MM 通道独立运行。 AXI DMA 提供 4 KB 地址边界保护,自动突发分区,以及提供能力 使用几乎全部带宽功能将多个传输请求排队 AXI4-Stream 总线。此外,AXI DMA 提供字节级数据重新对齐 允许内存读写从字节偏移位置开始。

3、MM2S 通道支持 AXI 控制流,用于将用户应用程序数据发送到 目标 IP。对于 S2MM 通道,提供 AXI 状态流用于接收用户 来自目标 IP 的应用程序数据。

4、可选的 SG Engine 从系统中获取和更新缓冲区描述符 存储器通过 AXI4 SG 读/写主接口。可选描述符 提供排队以最大化主要数据吞吐量。

SG模式描述:

本节定义了 S2MM(接收)和 MM2S(传输)Scatter Gather 的字段 AXI DMA 何时配置为分散/聚集模式的描符。描述符 由 8 个 32 位基本字和 0 或 5 个用户应用程序字组成。描述符有 之后对 64 位地址的支持和对用户应用程序数据的支持。多种的 通过帧开始和帧结束标志支持每个数据包的描述符。 完成状态和完成时中断也包括在内。缓冲区长度可以 描述每个描述符最多 8 MB 的数据缓冲区。需要两个描述符链 两种数据传输方向,MM2S和S2MM。

AXI DMA框图

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ0ODczNjQ2,size_16,color_FFFFFF,t_70#pic_center

引脚描述:

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ0ODczNjQ2,size_16,color_FFFFFF,t_70

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ0ODczNjQ2,size_16,color_FFFFFF,t_70

补充重点描述:

  • s_axi_lite_*:上位机通过此接口配置AXI DMA的内部寄存器。
  • m_axi_mm2s_* :上位机到DMA的写通道,传输的是上位机需要写入到外设的数据。
  • m_axi_s2mm_*:上位机到DMA的读通道,传输的是外设写入上位机的数据:即上位机从外设读取的数据。
  • m_axis_mm2s_*:DMA到外设的写通道,DMA通过此通道将上位机的数据写入外设。
  • s_axis_s2mm_*:DMA到外设的读通道,DMA通过此通道读取外设需要传给上位机的数据。
  • m_axis_mm2s_cntrl_*:DMA配置外设的控制通道(未使用)
  • s_axis_s2mm_sts_*:DMA读取外设的状态通道(未使用)
  • m_axi_sg_*:SG模式下的读写内存映射的通道

AXI DMA寄存器内存地址映射

SG模式

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ0ODczNjQ2,size_16,color_FFFFFF,t_70#pic_center

Scatter Gather 描述符

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ0ODczNjQ2,size_16,color_FFFFFF,t_70#pic_center

SG模式下典型的系统连接结构

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ0ODczNjQ2,size_16,color_FFFFFF,t_70#pic_center

SG DMA使用流程

SG模式:

  • AXI DMA 操作需要一个内存驻留数据结构,其中包含 DMA 列表 要执行的操作。这个指令列表被组织成所谓的 一个描述符链。每个描述符都有一个指向下一个要处理的描述符的指针。这 链中的最后一个描述符然后指向链中的第一个描述符。
  • Scatter Gather 操作允许使用多个描述符来描述一个数据包。 此功能的典型用途是允许从以下位置存储或获取标头 来自另一个位置的内存和有效载荷数据。利用的软件应用程序 这可以提高吞吐量。为了描述缓冲区描述符链中的数据包,开始 帧位 (TXSOF) 和帧结束位 (TXEOF) 被利用。当 DMA 获取一个 TXSOF 位设置的描述符,则触发数据包的开始。包继续 获取后续描述符,直到它获取具有 TXEOF 位设置的描述符。
  • 在接收 (S2MM) 通道上,当开始接收数据包时,AXI DMA 标记 带有 RXSOF 的描述符,向软件表明与此关联的数据缓冲区 描述符包含数据包的开头。如果正在接收的数据包以字节为单位更长 计数超过描述符中指定的数量,下一个描述符缓冲区用于存储 接收数据包的剩余部分。这个获取和存储过程一直持续到 整个接收数据包已传输。结束时正在处理的描述符 接收到的数据包由 AXI DMA 标记,RXEOF=1。这表明 软件认为与此描述符相关的缓冲区包含数据包的结尾。
  • 每个描述符在状态字段中包含实际传输的字节数 那个特定的描述符。接收数据包传输的总字节数可以 由软件通过从 RXSOF 描述符到 描述符链到 RXEOF 描述符。 Scatter Gather 继续获取一个额外的 描述符和存储。这在很大程度上提高了 DMA 性能。
  • Scatter Gather 操作从设置控制寄存器和描述符指针开始。 以下按顺序列出了启动 AXI DMA 操作所需的最少步骤:

MM2S 通道:

  1. 在内存中开辟缓存空间,制作链表
  1. 通过 AXI4_LITE 总线将第一个 Descriptor 的地址写入 MM2S_CURDESC 寄存器
  1. 写寄存器 MM2S_DMACR.RS=1 启动 DMA,如果需要,打开 MM2S_DMACR.IOC_IrqEn 中断,结束后会发出中断
  1. 将最后一个 Descriptor 地址写入 MM2S_TAILDESC 寄存器,触发 DMA 开始通过 M_AXI_SG 总线抓取链表的 Descritptor,等 package 传输结束,读取下一个 Descriptor 信息,直到结束。

S2MM 通道:

  1. 在内存中开辟缓存空间,制作链表
  1. 通过 AXI4_LITE 总线将第一个 Descriptor 的地址写入 S2MM_CURDESC 寄存器
  1. 写寄存器 S2MM_DMACR.RS=1 启动 DMA,如果需要,打开 S2MM_DMACR.IOC_IrqEn 中断,结束后会发出中断
  1. 将最后一个 Descriptor 地址写入 S2MM_TAILDESC 寄存器,触发 DMA 开始通过 M_AXI_SG 总线抓取链表的 Descritptor,等 package 传输结束,读取下一个 Descriptor 信息,直到结束。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Xilinx DMA SG】Xilinx DMA SG 模式 的相关文章

  • MySql 笔记

    数据结构 B TREE 二叉树 顺序增长依次查询效率低 红黑树 数据多了深度越深 效率自然低了 HASH 查询条件限制 B TREE 度 degree 节段的数据存储个数 叶节点具有 相同的深度 叶节点的指针为空 节点的数据key从左到右递
  • vue3 多种方法的锚点定位

    在 Vue 3 中 可以通过多种方式实现锚点定位 包括使用原生的 JavaScript 方法和利用 Vue Router 提供的导航守卫等 下面我会分别介绍这些方法 1 使用原生 JavaScript 方法 在 Vue 3 中 你可以使用
  • 【Hadoop生态圈】7.离线OLAP引擎Hive入门教程

    文章目录 1 简介 2 架构分析 3 环境准备 4 使用客户端工具操作hive 4 1 数据库操作 4 2 DDL操作 4 2 1 创建表 4 2 2 导入数据到hive表中 4 2 3 指定列和行分隔符创建表 4 2 4 数据类型 4 3
  • [已解决]jeesite生成页面的弹窗问题

    jeesite生成的页面如需弹窗layer写法会有问题 actions push a href class btnList title i class fa fa check i a nbsp data confirm text 提示信息
  • ansible安装nginx

    ansible安装nginx 定义一个ansible组 把nginx tar包传到ansible主机 ansible 组名 m shell a yum y install pcre devel open devel gcc gcc c ng

随机推荐

  • Golang 单元测试详尽指引

    文末有彩蛋 作者 yukkizhang 腾讯 CSIG 专项技术测试工程师 本篇文章站在测试的角度 旨在给行业平台乃至其他团队的开发同学 进行一定程度的单元测试指引 让其能够快速的明确单元测试的方式方法 本文主要从单元测试出发 对Golan
  • IntelliJ IDEA 进行js Debug调试

    idea的js调试目前看来不同给力 一是玩转它需要安装谷歌插件支持 二是貌似存在一些bug 一 新建一个jsp并打上断点 二 调试 idea出现提示 安装JetBrains IDE Support支持 问题出现了 点击其中连接却一直连不上
  • [其他]IDEA中Maven项目配置国内源

    配置国内源主要解决了 在maven项目中pom xml下载jar包失败或过慢的问题 在IDEA中的设置分成两种 设置当前项目与新创项目 我们就需要两种都进行设置 不然只有在当前项目配置了国内源 新创项目的时候还是默认的状态 由于下面两种设置
  • 有监督对比loss计算

    https blog csdn net wf19971210 article details 116715880 关于对比损失 无监督对比损失 通常视数据增强后的图像与原图像互为正例 而对于有监督对比损失来说 可以将同一batch中标签相同
  • 均值计算的R语言实现

    均值计算的R语言实现 在数据分析和统计学中 均值是一个常用的指标 用于描述数据集的集中趋势 在R语言中 我们可以使用多种方法来计算均值 下面将介绍几种常见的方法 并提供相应的R代码示例 使用mean 函数计算均值 mean 函数是R语言中用
  • Scratch的克隆体

    克隆体 克隆就是将角色本体完全复制一份 包含该角色当前的所有属性 例如造型 位置 颜色 大小等 控制积木中提供了克隆自己积木 在事件积木中 单独提供了一个当作为克隆体启动时的积木 当某个角色被克隆 则其克隆体会触发该事件 故而 对于那些克隆
  • 第十课,OpenGL光照之贴图

    光照贴图 光照贴图 及使用纹理代替物体颜色 物体的实际颜色由物体材质和光照决定 漫反射贴图 使用一张覆盖物体的图像 让我们能够逐片段索引其独立的颜色值 方式 1 将纹理传入 GLuint texture1 loadTexture conta
  • 在 CentOs7 中安装宝塔面板和 Docker(包括MySQL,Redis)

    在 CentOs7 中安装宝塔面板和Docker 包括MySQL Redis 1 使用 Xshell 连接 CentOs7 2 安装宝塔面板 2 1 安装 Tomcat 同 Java 8 2 1 安装 Docker 2 2 安装 MySQL
  • 「考研算法」

    考研算法 前言 本系列文章涉及的算法内容 针对的是哈尔滨工业大学854科目 在本文中通过具体的算法题进行讲解相应算法 今天涉及的算法主要有线性筛 十大排序中快速排序和归并排序 C语言版 一 线性筛算法 算法题目 筛质数 给定一个正整数 n
  • ctf_show_web4

    这一道题他们给的提示是 url var log nginx access log 用上面的这个来找出日志接下来就是文件包含这里我们要用到bp 抓包后我们在User Agent中插入一句话木马 之后连接你的蚁剑 测试连接连接成功 最后就会得到
  • Android项目如何上传Gitee仓库

    前言 最近Android项目比较多 我都是把Android项目上传到Gitee中去 GitHub的话我用的少 可能我还是更喜欢Gitee吧 毕竟Gitee仓库用起来更加方便 一 创建Gitee仓库 1 先创建一个Gitee账号 然后登录上去
  • 基于区块链智能合约的疫苗溯源系统

    绪论 该系统基于以太坊的Solidity进行智能合约开发 并通过hardhat进行部署在了本机 通过Mocha和Chai进行了单元测试的编写 同时提供了一个基于React的前端界面与用户进行交互 区块链的介绍 不难看出 区块链技术对现有的经
  • JS(ES5,ES6)实现栈数据结构

    栈是一种遵从后进先出原则的有序集合 新添加的或待删除的元素都保存在栈的同一端 称作栈顶 另一端叫做栈底 栈也被用在编程语言的编译器和内存中保存变量 方法调用等 ES5实现 function Stack let items 向栈添加元素 th
  • Git拉取分支代码小结以及问题解决

    更全面的版本 三分钟学会git 一 拉取代码 git clone git example com myproject 默认拉取的master 若需要切换分支 git branch a master origin HEAD origin ma
  • vlc-android源码的编译

    一 编译前须知 1 参考官方文档 https wiki videolan org AndroidCompile 2 必须要在Linux环境下 3 我使用的是ubuntu 二 编译前安装开发工具 1 Linux操作系统 我选择的是在windo
  • 七牛云存储java_api代码实现

    这是思维图 画的有点拉 看官老爷凑合看 接下来就按照这个逻辑来实现 七牛云本身是提供的Java SDK的 可以完成图片上传和删除 我们可以参考官方提供的例子 官方文档 https developer qiniu com kodo sdk 1
  • Python组合数据的输入问题

    以输入5个数据为例 以前是单个变量的处理 所以习惯单个数据输入 a eval input 输入5个数据 自然想到的就是让它循环5次 这种方式执行时 因为每次输入回车 相当于竖着输 能不能一次输入呢 在一行横着输 元组 t eval inpu
  • 网络攻防——Fiddler工具的使用

    Fiddler工具的使用 1 引言 2 什么是Fiddler 3 Fiddler的基本使用 4 基于手机模拟器的APP抓包 5 接口捕获 6 引言 7 鸣谢 1 引言 虽然之前写了退出一切关于编程的学习 其实我还想学react typesc
  • 【cdk的使用】C语言 跨平台生成伪随机数

    Github地址 https github com wujin1989 cdk C标准库中有rand 和srand 函数用来生成伪随机数 但是虽然在标准库里 确依然不能跨平台 因为C标准里没有明确rand 函数生成的随机数范围 比如 win
  • 【Xilinx DMA SG】Xilinx DMA SG 模式

    DMA简介 AXI 直接存储器访问 AXI DMA IP 提供高带宽直接存储器 AXI4 存储器映射和 AXI4 Stream IP 接口之间的访问 它SG模式还可以从中央处理中卸载数据移动任务 基于处理器的系统中的单元 CPU 初始化 状