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:保留当前页面,跳转应用内的某个页面,…...
Android Wi-Fi 连接失败日志分析
1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...
图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...
基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...
LRU 缓存机制详解与实现(Java版) + 力扣解决
📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...
STM32---外部32.768K晶振(LSE)无法起振问题
晶振是否起振主要就检查两个1、晶振与MCU是否兼容;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容(CL)与匹配电容(CL1、CL2)的关系 2. 如何选择 CL1 和 CL…...
macOS 终端智能代理检测
🧠 终端智能代理检测:自动判断是否需要设置代理访问 GitHub 在开发中,使用 GitHub 是非常常见的需求。但有时候我们会发现某些命令失败、插件无法更新,例如: fatal: unable to access https://github.com/ohmyzsh/oh…...
