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:保留当前页面,跳转应用内的某个页面,…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

排序算法总结(C++)
目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指:同样大小的样本 **(同样大小的数据)**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...
CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝
目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为:一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...

【网络安全】开源系统getshell漏洞挖掘
审计过程: 在入口文件admin/index.php中: 用户可以通过m,c,a等参数控制加载的文件和方法,在app/system/entrance.php中存在重点代码: 当M_TYPE system并且M_MODULE include时,会设置常量PATH_OWN_FILE为PATH_APP.M_T…...
苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会
在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...
安卓基础(Java 和 Gradle 版本)
1. 设置项目的 JDK 版本 方法1:通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分,设置 Gradle JDK 方法2:通过 Settings File → Settings... (或 CtrlAltS)…...

Vue ③-生命周期 || 脚手架
生命周期 思考:什么时候可以发送初始化渲染请求?(越早越好) 什么时候可以开始操作dom?(至少dom得渲染出来) Vue生命周期: 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...