PCIe to AXI Translation——PCIe 内存空间到AXI内存空间的转换
PCIe to AXI Translation——PCIe 内存空间到AXI内存空间的转换
UltraScale系列芯片包含PCIe的Gen3 Integrated Block IP核在内的多种不同功能的IP核都会有一页设置为PCIe:BARs,设置IP核的Base address register 的相关参数,如图1所示:
图1 PCIe:BARs 配置图
一般来说在FPGA中使用PCIe核都是Endpoint mode,我们的PC主机端是Rootpoint mode,一般会有一个Root Complex的混合管理器,来管理接入PCIe总线的端点设备。对于PC机来说,当PC机识别该PCIe设备后便会识别到BAR n相对应的基地址和地址空间(不过该基地址是PC机的Root Complex主动分配的,还是PCIe设备内部固定的还有疑问)。设别基本配置信息后,PC机便可以对PCIe的内存空间进行读写操作了。
而PCIe IP核本身能够引出AXI总线接口,该AXI接口是memory map 型的,所以就肯定存在自己的地址空间,本文所提的PCIe to AXI Translation便是PCIe的地址空间到AXI的地址空间的转换。
这里就图1中的BAR0来说明下PCIe to AXI Translation的转换过程。BAR0的配置为:64bit数据位宽、32kilobytes地址范围、PCIe to AXI Translation为0x0000000012340000。此时的PCIe IP核的BAR0是拓展连接到外部的AXI总线的,该总线连接到另外一个DDR4 MIG IP核,如图2所示。图中重点标注的AXI总线便是PCIe核引出的AXI总线。
图2 PCIe核拓展AXI接口
假设PC机设别到的PCIe BAR0的基地址为0x0000000000000000,在FPGA内部DDR4的AXI基地址为0x0000000012340000。现在PC机想要往FPGA内部的DDR4地址空间的0x000000001234000F地址写入数据,那么PC机应该对PICe内存空间的0x000000000000000F写入数据,然后由PCIe to AXI Translation的关系,便会把0x000000000000000F转换到0x000000001234000F上实现对AXI总线的操作,进而实现对DDR4的写入操作。图3可以看出具体的转换操作。
图3 PCIe to AXI Translation 转换图
既然有PCIe to AXI Translation,那相应的也有AXI to PCIe Translation了,图4是AXI to PCIe Translation的转换图,不过这种操作应用不多,原理也跟PCIe to AXI Translation差不多,这就不再赘述了。
图4 AXI to PCIe Translation 转换图
转载:http://blog.csdn.net/qq_20748649/article/details/53468724
PCIe to AXI Translation——PCIe 内存空间到AXI内存空间的转换的更多相关文章
- 5. MIZ7035 PCIe测试 RIFFA【PCIE视频传输】
1.前言 MIZ7035官方提供了两种pcie的demo,一个就是普通的PIO测试,一个是BMD测试.我只是试验了PIO功能,可以对板卡直接进行IO寄存器读写.而另外一个BMD功能使用了DMA来加速数 ...
- Linux内存点滴 用户进程内存空间
Linux内存点滴 用户进程内存空间 经常使用top命令了解进程信息,其中包括内存方面的信息.命令top帮助文档是这么解释各个字段的. VIRT, Virtual Image (kb) RES, Re ...
- linux 用户空间与内核空间——高端内存详解
摘要:Linux 操作系统和驱动程序运行在内核空间,应用程序运行在用户空间,两者不能简单地使用指针传递数据,因为Linux使用的虚拟内存机制,用户空间的数据可能被换出,当内核空间使用用户空间指针时,对 ...
- Metaspace 之一:Metaspace整体介绍(永久代被替换原因、元空间特点、元空间内存查看分析方法)
回顾 根据JVM内存区域的划分,简单的画了下方的这个示意图.区域主要分为两大块,一块是堆区(Heap),我们所New出的对象都会在堆区进行分配,在C语言中的malloc所分配的方法就是从Heap区获取 ...
- 监控JVM内存使用情况,剩余空间小于2M时报警
一个简单的类,用来监控JVM内存使用情况,剩余空间小于2M时报警. import java.lang.management.ManagementFactory; import java.lang.ma ...
- 受检查异常要求try catch,new对象时,就会在堆中创建内存空间,创建的空间包括各个成员变量类型所占用的内存空间
,new对象时,就会在堆中创建内存空间,创建的空间包括各个成员变量类型所占用的内存空间
- Java堆空间Vs栈内存
之前我写了几篇有关Java垃圾收集的文章之后,我收到了很多电子邮件,请求解释Java堆空间,Java栈内存,Java中的内存分配以及它们之间的区别. 您可能在Java,Java EE书籍和教程中看到很 ...
- linux 用户空间与内核空间——高端内存了解
Linux 操作系统和驱动程序运行在内核空间,应用程序运行在用户空间,两者不能简单地使用指针传递数据,因为Linux使用的虚拟内存机制,用户空间的数据可能被换出,当内核空间使用用户空间指针时,对应的数 ...
- linux硬件资源问题排查:cpu负载、内存使用情况、磁盘空间、磁盘IO
在使用过程中之前正常的功能,突然无法使用,性能变慢,通常都是资源消耗问题,资源消耗可以从以下几个方面去排查.对于已经安装硬件资源监控软件(zabbix)的环境,直接使用硬件资源监控软件(zabbix) ...
随机推荐
- 【spring data jpa】根据一个时间字段 查询 时间段的处理方法
处理方法 包含结束时间00.00.00 Date createDate = boxCodeLog.getCreateDate(); if (createDate != null){ LocalDat ...
- (获取选中的光标起始位置)EditText常用属性【三】:EditText选取操作
转自:http://blog.csdn.net/wirelessqa/article/details/8567702 话不多说,直接上码: activity_main.xml <ScrollVi ...
- JavaScript -- 清除缓存
在客户端有一个HTML文件,用来提交输入信息,问题在于:每次按刷新时,发觉并不是整个页面重新被装载,好似是缓存中. 因为文本框中仍出现上次输入的值,只有在地址栏中按回车整个页面才重新装载,应当怎样避免 ...
- 第七章Openwrt安装服务器环境php+uhttpd+mysql
在前面的文章中刷openwrt.配置网络环境.挂载u盘都配置成功了之后,下面的操作就变得简单起来!!!! 1. putty连接到路由器 2. 安装php opkg install php5-fastc ...
- 深入浅出RxJava就这一篇就够了
前言: 第一次接触RxJava是在前不久,一个新Android项目的启动,在评估时选择了RxJava.RxJava是一个基于事件订阅的异步执行的一个类库.听起来有点复杂,其实是要你使用过一次,就会大概 ...
- intellij idea 热部署、热加载设置方法
https://blog.csdn.net/wangjun5159/article/details/55223630 https://blog.csdn.net/wangjun5159/article ...
- jQuery中,选择器既匹配开头又匹配结尾
jQuery中,选择器既匹配开头又匹配结尾的方法: [attr^=val]attr$=val [attr^=val][attr$=val]
- 理解Flow静态类型检查
一.为什么在JavaScript中使用静态类型 了解静态类型的最快方法是将其与动态类型进行对比. 有静态类型参数的语言被称为静态类型语言. 另一方面,有动态类型参数的语言被称为动态类型语言.核心区别是 ...
- tensorflow c++ API加载.pb模型文件并预测图片
tensorflow python创建模型,训练模型,得到.pb模型文件后,用c++ api进行预测 #include <iostream> #include <map> # ...
- Microsoft.Office.Workflow.Actions Namespace
Microsoft.Office.Workflow.Actions Namespace SharePoint 2010 Contains the workflow activities that ...