基于AXI PCIE IP的FPGA PCIE卡示意图

创作不易,转载请注明出处:https://blog.csdn.net/csdn_gddf102384398/article/details/143926217

上图中,在FPGA PCIE卡示意图内,有2个AXI Master设备,即:PCIE到AXI4-Full-Master桥、AXI CDMA IP;有3个AXI Slave设备,即:AXIPCIE寄存器块、AXI4-Full-Slave到PCIE桥、CDMA寄存器块;每个AXI Master可以访问3个AXI Slave,所以3个AXI Slave设备构成了一个AXI总线地址空间。AXIPCIE寄存器块包含了PCI设备配置空间(其中包含PCIE:BARs寄存器)和PCIE扩展配置空间的所有寄存器,还包括了AXI:BARs寄存器。DMA是指外设直接读写Host PC的系统主存,而不经过CPU的干预。上图中,PCIE到AXI4-Full-Master桥用于Host PC主动访问FPGA PCIE设备,而AXI4-Full-Slave到PCIE桥用于FPGA PCIE设备主动访问Host PC的系统主存。从AXI的角度看,PCIE到AXI4-Full-Master桥可以访问AXI4-Full-Slave到PCIE桥,即AXI Master访问AXI Slave,但这在上图看来本质上相当于Host PC通过PCIE设备访问自身主存了,没有意义。AXI CDMA IP可以通过自己的AXI4-Full-Master接口和AXI互联IP来主动访问AXI4-Full-Slave到PCIE桥,即进行DMA。如果将3个AXI Slave构成的AXI总线地址空间用一个PCIE:BAR来映射,比如PCIE:BAR0,则Host PC可以通过PCIE:BAR0访问AXI总线上的所有AXI Slave设备(包括AXI4-Full-Slave到PCIE桥,但这相当于Host PC通过PCIE设备访问自身主存,没有意义)。Host PC可以在系统主存中分配一段物理内存,将这段内存的起始地址转换为PCIE总线地址,然后在PCIE配置空间中的PCIEBAR_n寄存器(0<=n<=2,因为AXI PCIE IP有3个PCIE:BARs)中的基地址内容的帮助下将这个PCIE总线地址写到AXIPCIE寄存器块中的AXIBAR2PCIEBAR_n寄存器中(0<=n<=5,因为AXI PCIE IP有6个这样的寄存器),PCIE地址到AXI地址的转换公式为:

AXI地址=PCIE地址-PCIEBAR_n+PCIEBAR2AXIBAR_n,其中0<=n<=2,PCIEBAR_n为AXIPCIE寄存器块中的寄存器,而PCIEBAR2AXIBAR_n为Verilog语言中的参数。

这样做后,当AXI CDMA IP向AXI4-Full-Slave到PCIE桥发了一个AXI地址后,AXI4-Full-Slave到PCIE桥会将这个AXI地址转换为PCIE总线地址,转换公式为:

PCIE地址=AXI地址-AXIBAR_n+AXIBAR2PCIEBAR_n,其中0<=n<=5,AXIBAR_n为Verilog语言中的参数。

由于AXI4-Full-Slave到PCIE桥和AXIPCIE寄存器块位于同一个IP中,所以AXI4-Full-Slave到PCIE桥可以很轻松访问AXIPCIE寄存器块中的寄存器而不用任何通信协议。

如果在上图中的AXI互联IP上再连接一个带AXI Slave接口的BRAM控制器,这个BRAM控制器连接一个BRAM,Host PC在系统主存中分配了一些不连续的内存,Host PC可以将这些内存段的起始地址(当然要先转为PCIE总线地址)写到AXI总线上的BRAM中,这样AXI CDMA读取BRAM,将读取到的PCIE总线基地址写到AXIPCIE寄存器块中的AXIBAR2PCIEBAR_n寄存器中,这样就实现了SG DMA。实际上AXI CDMA自带独立的M_AXI_SG接口,AXI CDMA就是通过该接口访问SG列表,从而实现SG DMA。

对于多通道DMA,Xilinx提供了AXI MCDMA IP。通过动态改变AXIBAR2PCIEBAR_n寄存器的值,可以实现多通道DMA。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Docker1:认识docker、在Linux中安装docker

欢迎来到“雪碧聊技术”CSDN博客&#xff01; 在这里&#xff0c;您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者&#xff0c;还是具有一定经验的开发者&#xff0c;相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导&#xff0c;我将…

java-排序算法汇总

排序算法&#xff1a; 冒泡排序&#xff08;Bubble Sort&#xff09; 选择排序&#xff08;Selection Sort&#xff09; 插入排序&#xff08;Insertion Sort&#xff09; 快速排序&#xff08;Quick Sort&#xff09; 归并排序&#xff08;Merge Sort&#xff09; 堆排序&…

瑞佑液晶控制芯片RA6807系列介绍 (三)软件代码详解 Part.10(让PNG图片动起来)完结篇

RA6807是RA8876M的缩小版&#xff0c;具备RA8876M的所有功能&#xff0c;只将MCU控制接口进行缩减&#xff0c;仅保留SPI-3和I2C接口&#xff0c;其它功能基本相同。 该芯片最大可控制854x600的分辨率&#xff0c;内建64Mbits显存&#xff0c;多个图层&#xff0c;使用起来相当…

org.apache.log4j的日志记录级别和基础使用Demo

org.apache.log4j的日志记录级别和基础使用Demo&#xff0c;本次案例展示&#xff0c;使用是的maven项目&#xff0c;搭建的一个简单的爬虫案例。里面采用了大家熟悉的日志记录插件&#xff0c;log4j。来自apache公司的开源插件。 package com.qian.test;import org.apache.log…

深度学习实战人脸识别

文章目录 前言一、人脸识别一般过程二、人脸检测主流算法1. MTCNN2. RetinaFace3. CenterFace4. BlazeFace5. YOLO6. SSD7. CascadeCNN 三、人脸识别主流算法1.deepface2.FaceNet3.ArcFace4.VGGFace5.DeepID 四、人脸识别系统实现0.安装教程与资源说明1. 界面采用PyQt5框架2.人…

Qt 字符串、信号槽详解

目录 1.QT中字符串QString的使用 1.1.常见的函数 1.2.总结QT中跟字符&#xff0c;字符串有关的类 1.3.字符串列表StringList 2.信号与槽 1.作用 2.右键转到槽函数 3.关联信号与槽函数(让你的信号跟槽函数之间形成一一对应关系) 4.信号与槽的特点 3.总结 1.继承自QMainWin…

Vscode进行Java开发环境搭建

Vscode进行Java开发环境搭建 搭建Java开发环境(Windows)1.Jdk安装2.VsCode安装3.Java插件4.安装 Spring 插件5.安装 Mybatis 插件5.安装Maven环境6.Jrebel插件7.IntelliJ IDEA Keybindings8. 收尾 VS Code&#xff08;Visual Studio Code&#xff09;是由微软开发的一款免费、开…

响应式数据(v-on、v-if、v-show、v-for、v-bind、v-model、computed、watch)

目录 一、事件绑定指令v-on 二、条件渲染指令v-if 三、v-show 四、遍历指令v-for 1、遍历对象的值 2、遍历对象的值和键&#xff08;先值后键&#xff09; 3、遍历对象的值、键和索引 4、遍历数组的值和索引 五、属性动态化指令v-bind(单向) 【CSS样式的绑定&#…

设计模式之 命令模式

命令模式&#xff08;Command Pattern&#xff09;是行为型设计模式之一&#xff0c;它将请求&#xff08;或命令&#xff09;封装成一个对象&#xff0c;从而使用户能够将请求发送者与请求接收者解耦。通过命令模式&#xff0c;调用操作的对象与执行操作的对象不直接关联&…

微信小程序2-地图显示和地图标记

一、index修改页面&#xff0c;让页面能够显示地图和一个添加标记的按钮。 index.wxml <scroll-view class"scrollarea" scroll-y type"list"><view class"index_container"><map id"map" style"width: 100%; h…

使用eclipse构建SpringBoot项目

我这里用eclipse2018版本做演示&#xff0c;大家有需要的可以下载Eclipse Downloads | The Eclipse Foundation 1.打开eclipse&#xff0c;选择存放代码的位置 2.选择 file >> new >> project >> 选择springboot文件下的 spring starter project 2.这里选择N…

uniapp接入BMapGL百度地图

下面代码兼容安卓APP和H5 百度地图官网&#xff1a;控制台 | 百度地图开放平台 应用类别选择《浏览器端》 /utils/map.js 需要设置你自己的key export function myBMapGL1() {return new Promise(function(resolve, reject) {if (typeof window.initMyBMapGL1 function) {r…

绕过CDN寻找真实IP

在新型涉网案件中&#xff0c;我们在搜集到目标主站之后常常需要获取对方网站的真实IP去进一步的信息搜集&#xff0c;但是现在网站大多都部署了CDN&#xff0c;将资源部署分发到边缘服务器&#xff0c;实现均衡负载&#xff0c;降低网络堵塞&#xff0c;让用户能够更快地访问自…

【计算机网络】网段划分

一、为什么有网段划分 IP地址 网络号(目标网络) 主机号(目标主机) 网络号: 保证相互连接的两个网段具有不同的标识 主机号: 同一网段内&#xff0c;主机之间具有相同的网络号&#xff0c;但是必须有不同的主机号 互联网中的每一台主机&#xff0c;都要隶属于某一个子网 -&…

HarmonyOS笔记5:ArkUI框架的Navigation导航组件

ArkUI框架的Navigation导航组件 在移动应用中需要在不同的页面进行切换跳转。这种切换和跳转有两种方式&#xff1a;页面路由和Navigation组件实现导航。HarmonyOS推荐使用Navigation实现页面跳转。在本文中在HarmonyOS 5.0.0 Release SDK (API Version 12 Release)版本下&…

基于阿里云服务器部署静态的website

目录 一&#xff1a;创建服务器实例并connect 二&#xff1a;本地文件和服务器share 三&#xff1a;关于IIS服务器的安装预配置 四&#xff1a;设置安全组 五&#xff1a;建站流程 六&#xff1a;关于备案 一&#xff1a;创建服务器实例并connect 创建好的服务器实例在云…

mysql根据日期查询没有的日期也要显示数据

先查询出日期数据(当前日期往前推12个月) select bb.datefrom (select num : num 1,date_format(adddate(date_sub(date_sub(curdate(),interval 12 month),interval 1 month),interval num month), %Y-%m) as datefrom mysql.help_topic,(select num : 0) as twhere addd…

Go语言链接Redis数据库

1.使用go get命令安装go-redis/v8库&#xff1a; 我这里使用的vscode工具安装&#xff1a; go get github.com/go-redis/redis/v82.创建Redis客户端实例 使用以下Go代码连接到Redis服务器并执行命令&#xff1a; package mainimport ("context""fmt"&q…

1-测试go-redis缓存数据

1-测试go-redis缓存数据 1.go-redis缓存数据测试效果 a.测试页面 测试页面&#xff1a;--这里使用 Postman 来做测试 http://127.0.0.1:8000/article/getone/3 http://127.0.0.1:8000/article/getone/4 http://127.0.0.1:8000/article/getone/5b.测试效果 查看终端&#xf…

查看浏览器的请求头

爬虫时用到了请求头&#xff0c;虽然可以用网上公开的&#xff0c;但是还是想了解一下本机浏览器的。以 Edge 为例&#xff0c;其余浏览器通用。 打开浏览器任一网页&#xff0c;按F12打开DevTools&#xff1b;或鼠标右键&#xff0c;选择“检查”。首次打开界面应该显示在网页…