xilinx xapp1171学习笔记
在xapp1171示例中,假设Host PC将PCIE:BAR0赋值为:0x00000000_def00000
PCIEBAR2AXIBAR_0=0x81000000,即Host PC读写0x00000000_def00000就是在读写AXI地址0x81000000(BRAM在AXI总线上的基地址)
在AXI总线上,
MIG基地址=0x00000000
AXI_PCIE_DM=AXI:BAR1=0x80000000,注意不是AXIBAR2PCIEBAR_1寄存器的地址,8 MB
AXI_PCIE_SG=AXI:BAR0=0x80800000,注意不是AXIBAR2PCIEBAR_0寄存器的地址,8 MB
BRAM基地址=0x81000000,32 KB
AXI_PCIE_CTL基地址=0x81008000,16 KB
AXI_CDMA_LITE基地址=0x8100C000,16 KB
1、Host PC向地址0x00000000_def0C000写入0x0A000100,即写AXI_CDMA_LITE基地址,
即写AXI CDMA的控制寄存器,以使能AXI CDMA的SG DMA模式;
这是一个Host PC发起的32位的PCIE内存写事务。
3、Host PC向地址0x00000000_def08208写入0x00000001_00000000,这是一个Host PC发起的64位的PCIE内存写事务。即向AXI地址0x81008208写64位数;AXI地址0x81008208就是AXIBAR2PCIEBAR_0寄存器在AXI总线上的地址;即Host PC向AXIBAR2PCIEBAR_0寄存器写入0x00000001_00000000;0x00000001_00000000是Host PC系统主存的一个地址,Host PC在系统主存中分配了一段内存用于存放传输描述符链表,这段内存的起始地址就是0x00000001_00000000,即Host PC将系统主存中的SG列表的起始地址写到了AXIBAR2PCIEBAR_0寄存器中;
4、a.Host PC在地址0x00000000_def00000处写入0x0000ccc0_c0000000,这是Host PC发起的64位的PCIE内存写事务。0x00000000_def00000对应AXI地址为0x81000000,即BRAM基地址,即Host PC向BRAM的首地址写入64位数0x0000ccc0_c0000000;0x0000ccc0_c0000000是Host PC系统主存中的一个地址,DMA引擎就是从0x0000ccc0_c0000000地址处进行DMA数据传输;
b.Host PC在地址0x00000000_def00008处写入0x0000ddd0_d0000000;
在本步骤中,Host PC向BRAM写入了2个Host PC系统主存地址,这两个地址为
Host PC系统主存中的两个内存段的起始地址,DMA引擎就是读写这些位于Host PC系统主存中的内存段进行DMA数据传输;
5、Host PC在地址0x00000000_def0c008处写入0x80800000,0x00000000_def0c008对应的AXI地址为0x8100C008,即AXI CDMA中的CURDESC_PNTR寄存器在AXI总线上的地址;即Host PC向AXI CDMA中的CURDESC_PNTR寄存器写入0x80800000,此值为AXI_PCIE_SG的基地址;
对于AXI CDMA,当前描述符的地址位于AXI地址0x80800000处,于是AXI CDMA发出AXI地址0x80800000以获取传输描述符。这个AXI地址位于AXI:BAR0所描述的AXI地址区间,而AXI:BAR0对应的AXIBAR2PCIEBAR_0寄存器中的值为Host PC系统主存中的SG列表的起始地址,所以当AXI CDMA从AXI地址0x80800000处读数据时,就是读Host PC系统主存中的SG列表中的第一个传输描述符;
6、和步骤5类似,Host PC在地址0x00000000_def0c010处写入0x808000c0,0x00000000_def0c010对应的AXI地址为0x8100c010,即AXI CDMA中的TAILDESC_PNTR寄存器在AXI总线上的地址;即Host PC向AXI CDMA的TAILDESC_PNTR寄存器写入0x808000c0,以告诉AXI CDMA最后一个描述符在AXI总线上的地址,因为AXI CDMA访问Host PC系统主存中的SG列表是通过AXI总线访问的。
当AILDESC_PNTR寄存器被写后,AXI CDMA就开始读取并处理描述符,即执行DMA操作了。
7、AXI CDMA将持续进行SG DMA操作,直到尾描述符被处理后结束;
下面解释这4个位于Host PC系统主存的描述符(这4个描述符在系统主存中可以不连续):
描述符中含有SA和DA,AXI CDMA执行DMA时,将地址SA中的数据拷贝至地址DA中;
描述符1:
Desc1在系统主存中的地址为0x00000001_00000000;
Desc1描述的DMA行为为:从BRAM首地址处拷贝64位数据到AXIBAR2PCIEBAR_1中;
BRAM首地址存放了步骤4中由Host PC写入的用作DMA数据传输的系统主存地址;
所以描述符1描述的DMA行为不涉及PCIE设备与Host PC系统主存的数据传输;
描述符2:
Desc2在系统主存中的地址为0x00000001_00000040;
Desc2描述的DMA行为为:从AXI地址0x8000_0000处拷贝64KB数据到AXI地址0x0010_0000;
AXI地址0x8000_0000位于AXI:BAR1所描述的AXI地址区间,而AXI:BAR1对应的AXI to PCIE寄存器为AXIBAR2PCIEBAR_1,AXIBAR2PCIEBAR_1寄存器中的内容刚由Desc1描述的行为被赋值,所以,描述符2描述的行为实际是DMA引擎从Host PC系统主存中拷贝64KB数据到FPGA PCIE卡中的DDR中,拷贝数据的源地址为Host PC系统主存地址0x0000ccc0_c0000000,目的地址为AXI地址0x0010_0000(对应FPGA PCIE卡上的DDR);
描述符3:
描述符3的描述的行为和描述符1类似;
描述符4:
描述符4的描述的行为与描述符2相反,即从FPGA PCIE卡上的DDR中拷贝数据到Host PC系统主存;
总结:上述过程中,Host PC在系统主存中分配了用于数据传输的内存,也分配了SG列表;Host PC需要将用于DMA数据传输的内存段起始地址告诉PCIE设备(本例是BRAM),Host PC还需要告诉DMA引擎第一个描述符在主存中的地址和最后一个描述符在主存中的地址。SG DMA引擎在得知描述符在主存中的地址后,将逐个读取描述符,执行描述符所描述符的数据拷贝行为,直到处理完所有的描述符;AXI CDMA不要求SG列表(即传输描述符链)在Host PC系统主存中连续;
相关文章:
xilinx xapp1171学习笔记
在xapp1171示例中,假设Host PC将PCIE:BAR0赋值为:0x00000000_def00000 PCIEBAR2AXIBAR_00x81000000,即Host PC读写0x00000000_def00000就是在读写AXI地址0x81000000(BRAM在AXI总线上的基地址) 在AXI总线上࿰…...
一次需升级系统的wxpython安装(macOS M1)
WARNING: The scripts libdoc, rebot and robot are installed in /Users/用户名/Library/Python/3.8/bin which is not on PATH. 背景:想在macos安装Robot Framework ,显示pip3不是最新,更新pip3后显示不在PATH上 参看博主文章末尾 MAC系统…...
el-table 数据去重后合并表尾合计行,金额千分位分割并保留两位小数,表尾合计行表格合并
问题背景 最近在做后台管理项目el-table 时候需要进行表尾合计,修改合计后文字的样式,合并单元格。 想实现的效果 合并表尾单元格前三列为1格;对某些指定的单元格进行表尾合计;合计后的文本样式加粗;涉及到金额需要千…...
Springboot整合mybatis-plus使用pageHelper进行分页
PageHelper 使用步骤全解析 在进行 Web 应用开发时,经常会涉及到数据库数据的分页展示。PageHelper 是一个非常实用的 MyBatis 分页插件,它能够方便地实现数据库查询结果的分页功能,极大地提高了开发效率。以下将简单介绍 PageHelper 的使用…...
【Xbim+C#】创建拉伸的墙
基础 基础回顾 效果图 简单的工具类 using System.Collections.Generic; using System.Linq; using Xbim.Common.Step21; using Xbim.Ifc; using Xbim.Ifc4.GeometricConstraintResource; using Xbim.Ifc4.GeometricModelResource; using Xbim.Ifc4.GeometryResource; using…...
【阅读记录-章节3】Build a Large Language Model (From Scratch)
目录 3 Coding attention mechanisms3.1 The problem with modeling long sequences背景:注意力机制的动机 3.2 Capturing data dependencies with attention mechanismsRNN的局限性与改进Transformer架构的革命 3.3 Attending to different parts of the input wit…...
three.js 对 模型使用 视频进行贴图修改材质
three.js 对 模型使用 视频进行贴图修改材质 https://threehub.cn/#/codeMirror?navigationThreeJS&classifyapplication&idvideoModel import * as THREE from three import { OrbitControls } from three/examples/jsm/controls/OrbitControls.js import { GLTFLoad…...
MySQL - 数据库基础 | 数据库操作 | 表操作
文章目录 1、数据库基础1.1为什么要有数据库1.2主流的数据库1.3连接MySQL1.4服务器、数据库、表的关系1.5 MySQL框架1.6 SQL分类1.7储存引擎 2.数据库操作2.1创建数据库2.2字符集和校验规则2.3删除数据库2.4修改数据库2.5备份与恢复2.6查看连接情况 3.表的操作3.1创建表3.2查看…...
maven父子项目
目录 一、创建Maven父子项目 二、父子项目的关联 三、父子项目的继承关系 四、构建父子项目 五、Maven父子项目的优势 Maven父子项目是一种项目结构,它允许一个父项目(也称为根项目)管理多个子项目(也称为模块)。…...
NLP论文速读(多伦多大学)|利用人类偏好校准来调整机器翻译的元指标
论文速读|MetaMetrics-MT: Tuning Meta-Metrics for Machine Translation via Human Preference Calibration 论文信息: 简介: 本文的背景是机器翻译(MT)任务的评估。在机器翻译领域,由于不同场景和语言对的需求差异&a…...
MyBatis——#{} 和 ${} 的区别和动态 SQL
1. #{} 和 ${} 的区别 为了方便,接下来使用注解方式来演示: #{} 的 SQL 语句中的参数是用过 ? 来起到类似于占位符的作用,而 ${} 是直接进行参数替换,这种直接替换的即时 SQL 就可能会出现一个问题 当传入一个字符串时ÿ…...
解决sql字符串
根据你描述的情况以及调试截图中的内容,我可以确认你的 sql 字符串在 Python 中由于转义字符的问题,可能导致在 Oracle 中运行时出错。 以下是一些排查和修改建议: 问题分析 转义字符问题: 在调试界面中可以看到,DEC…...
深度解析:Android APP集成与拉起微信小程序开发全攻略
目录 一、背景以及功能介绍 二、Android开发示例 2.1 下载 SDK 2.2 调用接口 2.3 获取小程序原始Id 2.4 报错提示:bad_param 2.4.1 错误日志 2.4.2 解决方案 相关推荐 一、背景以及功能介绍 需求:产品经理需要APP跳转到公司的小程序(最好指定页…...
Leetcode 被围绕的区域
算法思想(解题思路): 这道题的核心是 将所有被边界包围的 O 保留下来,而将其他被围绕的 O 转换为 X。为了实现这一目标,我们可以分三步完成: 第一步:标记边界及其相连的 O 为特殊标记ÿ…...
ssm框架-spring-spring声明式事务
声明式事务概念 声明式事务是指使用注解或 XML 配置的方式来控制事务的提交和回滚。 开发者只需要添加配置即可, 具体事务的实现由第三方框架实现,避免我们直接进行事务操作! 使用声明式事务可以将事务的控制和业务逻辑分离开来,提…...
React第五节 组件三大属性之 props 用法详解
特性 a、props最好是仅限于父子上下级之间的数据传递,如果是祖孙多级之间传递属性,可以考虑使用props是否合适,或者使用替代方案 useContext() 或者使用 redux状态管理; b、props 中的属性是只读属性,如果想修改其中的…...
测评部署和管理 WordPress 最方便的面板
新版宝塔面板快速搭建WordPress新手教程 - 倚栏听风-Morii - 博客园 初学者使用1Panel面板快速搭建WordPress网站 - 倚栏听风-Morii - 博客园 可以看到,无论是宝塔还是1Panel,部署和管理WordPress都有些繁琐,而且还需要额外去配置Nginx和M…...
【系统分析师】-2024年11月论文-论DevOps开发
1、题目要求 论Devops及其应用。Devops是一组过程、方法与系统的统称,用于促进开发、技术运营和质量保障部门之间的沟通,协作与整合。它是一种重视软体开发人员和工厂运维技术人员之间沟通合作的模式。透过自动化“软件交付”和“架构变更”的流程&…...
算法【子数组最大累加和问题与扩展】
子数组最大累加和问题是一个非常经典的问题,也比较简单。但是扩展出的问题很多,在笔试、面试中特别常见,扩展出的问题很多非常有趣,解法也比较巧妙。 下面通过一些题目来加深理解。 题目一 测试链接:https://leetcode…...
小程序23-页面的跳转:navigation 组件详解
小程序中,如果需要进行跳转,需要使用 navigation 组件,常用属性: 1.url :当前小程序内的跳转链接 2.open-type:跳转方式 navigate:保留当前页面,跳转应用内的某个页面,…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...
[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...
【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...
MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)
macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 🍺 最新版brew安装慢到怀疑人生?别怕,教你轻松起飞! 最近Homebrew更新至最新版,每次执行 brew 命令时都会自动从官方地址 https://formulae.…...
Golang——7、包与接口详解
包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...
MySQL的pymysql操作
本章是MySQL的最后一章,MySQL到此完结,下一站Hadoop!!! 这章很简单,完整代码在最后,详细讲解之前python课程里面也有,感兴趣的可以往前找一下 一、查询操作 我们需要打开pycharm …...
【无标题】湖北理元理律师事务所:债务优化中的生活保障与法律平衡之道
文/法律实务观察组 在债务重组领域,专业机构的核心价值不仅在于减轻债务数字,更在于帮助债务人在履行义务的同时维持基本生活尊严。湖北理元理律师事务所的服务实践表明,合法债务优化需同步实现三重平衡: 法律刚性(债…...
