PCIe总线-存储器域和PCIe总线域访问流程(二)

news2024/11/25 0:54:49

1.概述

PCIe总线的最大特点是像CPU访问DDR一样,可以直接使用地址访问PCIe设备(桥),但不同的是DDR和CPU同属于存储器域,而CPU和PCIe设备属于两个不同的域,PCIe设备(桥)的地址空间属于PCIe总线域。存储器域访问PCIe总线域或者PCIe总线域访问存储器域,需要经过一系列的转换才可以完成。

2.跨域访问

下图是存储器域访问PCIe域和PCIe域访问存储器域的示意图。通常情况下,存储器域指的是CPU能直接访问的地址空间,包括了CPU寄存器、DRAM、PCIe控制器和PCIe窗口地址空间。PCIe总线域指由PCIe设备所能直接访问的地址空间组成,包括PCIe桥设备和PCIe Swtich,若由多条PCIe总线,则对应多个PCIe总线域,若RC不支持Peer-to-Peer传送方式,则PCIe总线域之间不能相互访问。

图中出现的名词解释如下:

  • Outbound: 存储器域访问PCIe总线域称为Outbound传输,从RC或EP的角度看,也可以称为发送。
  • Inbound: PCIe总线域访问存储器域称为Inbound传输,从RC或EP的角度看,也可以称为接收。
  • Outbound ATU(address translation unit): Outbound地址转换单元,负责将存储器域地址转换成PCIe总线域地址。
  • Inbound ATU(address translation unit): Inbound地址转换单元,负责将PCIe总线域地址转换成存储器域地址。
  • OB windows: Outbound窗口地址段(存储域地址),将该窗口地址段设置到Outbound ATU中,将实现存储域地址到PCIe总线域地址的转换。
  • IN windows: Inbound窗口地址段(存储域地址),将该窗口地址段设置到Inbound ATU中,将实现PCIe总线域地址到存储域地址的转换。

存储器域和PCIe总线域相互访问

注:

  1. PCIe总线诞生在x86体系结构中,而在x86处理器中,并没有地址转换单元ATU,但存储域和PCIe总线域地址空间的概念仍然存在。
  2. 存储域和PCIe总线域地址的转换规则PCIe规范中并没有规定,因此不同的处理器架构实现各不相同,因此图中统一使用ATU表示地址转换功能。
  3. 在多数处理器架构中,RC存储域窗口地址和PCIe总线域地址相同,虽然地址相同,但还是两个不同的域。在x86架构中RC存储域窗口地址为总线地址,arm等架构中,RC存储域窗口地址为物理地址。
  4. RC存储域访问EP存储域使用PCIe总线域0xA0000000-0xA00FFFFF地址段,EP存储域访问RC存储域使用PCIe总线域0xB0000000-0xB00FFFFF地址段,这两段地址可以重合、可以部分覆盖、也可以不同,没有明确规定,可以由RC分配或者RC和EP约定,图中为了便于区分,分为两段不同的地址。

2.1. RC存储域访问EP存储域

RC存储域访问EP存储域会经历Outbound和Inbound传输。在访问之间RC配置Outbound映射,EP配置Inbound映射。具体过程如下:

  1. RC存储域发出访问地址,若命中Outbound窗口地址段0xA0000000-0xA00FFFFF,则RC会响应这个访问请求。
  2. RC存储域Outbound ATU将访问地址转换成PCIe域总线地址,转换后的地址必须在PCIe总线地址段0xA0000000-0xB00FFFFF内,然后将请求发送到PCIe总线上(该请求会被封装成一个TLP事务包,具体会在PCIe总线事物层介绍)。
  3. 该请求经过基于地址的PCIe总线路由,发送到了访问目标EP存储域。
  4. EP存储域Inbound ATU将该请求的PCIe总线域地址转换成EP存储器域地址,转换后的地址必须在EP存储域地址段0xC0000000-0xC00FFFFF内,即在IB windows地址段内。
  5. EP开始响应该请求,执行读或者写任务。

2.2. EP存储域访问RC存储域

EP存储域访问RC存储域会经历Inbound和Outbound传输(EP访问RC通常使用DMA)。在访问之间RC配置Inbound映射,EP配置Outbound映射。具体过程如下:

  1. EP存储域发出访问地址,若命中Outbound窗口地址段0xD0000000-0xD00FFFFF,则EP会响应这个访问请求。
  2. EP存储域Outbound ATU将访问地址转换成PCIe域总线地址,然后将请求发送到PCIe总线上。
  3. 该请求经过基于地址的PCIe总线路由,发送到了访问目标RC存储域。
  4. RC存储域Inbound ATU将该请求的PCIe总线域地址转换成RC存储器域地址,转换后的地址必须在RC存储域地址段0xB0000000-0xB00FFFFF内,即在IB windows地址段内。
  5. RC开始响应该请求,执行读或者写任务。

参考资料

  1. PCIEXPRESS体系结构导读
  2. PCI Express technology 3.0
  3. PCI_Express_Base_r3.0_10Nov10

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

李彦宏放话:百度AI大模型绝不抢开发者饭碗

关注卢松松,会经常给你分享一些我的经验和观点。 昨晚,李彦宏内部讲话称:AI大模型开源意义不大,百度绝不抢开发者饭碗。 但你一定要说话算话哦,可千万别说:“我永远不做手机,谁再敢提做手机就给…

最新PDD商家端Anti-Content参数逆向分析与纯算法还原

文章目录 1. 写在前面2. 接口分析3. 断点分析4. 扣JS代码 【🏠作者主页】:吴秋霖 【💼作者介绍】:擅长爬虫与JS加密逆向分析!Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致…

jeecg-boot安装

我看大家都挺关注,所以集中上传了下代码和相关工具,方便大家快速完成 链接:https://pan.baidu.com/s/1-Y9yHVZ-4DQFDjPBWUk4-A 提取码:op1r 1. 下载代码 下载地址 : JEECG官方网站 - 基于BPM的低代码开发平台(低代码平台_零代…

Qt | 对象树与生命期(对象的创建、销毁、擦查找)

一、组合模式与对象树 1、组合模式指的是把类的对象组织成树形结构,这种树形结构也称为对象树,Qt 使用对象树来管理 QObject 及其子类的对象。注意:这里是指的类的对象而不是类。把类组织成树形结构只需使用简单的继承机制便可实现。 2、使用组合模式的主要作用是可以通过…

【Git教程】(十二)工作流之项目设置 — 何时使用工作流,工作流的结构,项目设置概述、执行过程及其实现 ~

Git教程 工作流之项目设置 1️⃣ 何时使用工作流2️⃣ 工作流的结构3️⃣ 概述4️⃣ 使用要求5️⃣ 执行过程及其实现5.1 基于项目目录创建一个新的版本库5.2 以文件访问的方式共享版本库5.3 用 Git daemon 来共享版本库5.4 用 HTTP 协议来共享版本库5.5 用 SSH 协议来共享版…

springboot的logback.xml默认配置文件

logback.xml <?xml version"1.0" encoding"UTF-8"?> <configuration><!-- 控制台输出 --><appender name"STDOUT" class"ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{HH:mm:s…

商城系统个性化功能——可视化编辑

商城系统的普及化&#xff0c;让很多中小企业和商家也开始接触商城系统管理&#xff0c;之前在使用第三方平台时&#xff0c;大多数商城系统的样式都是固定的&#xff0c;商城页面也不能按照自己的想法去调整。 现在&#xff0c;随着商城系统越来越普遍&#xff0c;商城系统功…

C语言--结构体大小

基本数据类型占用的字节数分别为:char(1),short(2),int(4),long(4),long long(8),float(4),double(8)。 分析一下下面结构体占用的字节数。 struct A { int a; }; struct B { char a; int b; }; int main() { printf("sizeof(struct A)%d\n", sizeof(struct A));//测…

在Windows 10中打开PowerShell的几种方法,总有一种适合你

PowerShell是一种比命令提示符更强大的命令行shell和脚本语言。自Windows10发布以来,它已成为默认选择,并且有许多方法可以打开它。 PowerShell和命令提示符之间的区别是什么 PowerShell的使用更复杂,但它比命令提示符强大得多。这就是为什么它成为超级用户和it专业人员的…

深度学习入门(2)

一。Matplotlib模块添加 Matplotlib是用于绘制图形的库&#xff0c;使用 Matplotlib 可以轻松地绘制图形和实现数据的可视化。 pip install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple 二、绘制简单图形 import numpy as np import matplotlib.pyplot as plt #…

CVPR 2024 | Open-Vocabulary Video Anomaly Detection

CVPR 2024 - Open-Vocabulary Video Anomaly Detection 论文&#xff1a;https://arxiv.org/abs/2311.07042原始文档&#xff1a;https://github.com/lartpang/blog/issues/14 这篇文章主要研究了开放词汇视频异常检测&#xff08;openvocabulary video anomaly detection&…

网络广播系统是什么?网络广播的作用及应用

网络广播系统是什么?网络广播的作用及应用 商场广播的目的&#xff1a;提醒人员有序、监控配合点对点呼叫、物品遗失广播、背景音乐防噪、紧急情况呼叫等等&#xff0c;各个场景有各个场景的需求模式&#xff0c;广播系统的建设重点在于突发情况的应对&#xff0c;国家已经把广…

【NPS】内网穿透工具之 NPS

一、linux 安装 nps nps-releases&#xff1a;https://github.com/ehang-io/nps/releases 1.1、在 ubuntu下安装对应版本&#xff08;非docker&#xff09; 可以看到如下指令 wget https://ghproxy.com/https://github.com/ehang-io/nps/releases/download/v0.26.10/linux…

麒麟系统(kylin)安装ssh后,无法上传文件

1.赋予文件夹权限 chmod 777 filename 2.修改ssh配置文件 vi /etc/ssh/sshd_config 将Subsystem sftp /xxxxx 改为Subsystem sftp internal-sftp 重启服务 sudo service sshd restart 断开ssh连接&#xff0c;重新连接&#xff0c;即可正常上传文件

c++之旅第九弹——模版

大家好啊&#xff0c;这里是c之旅第九弹&#xff0c;跟随我的步伐来开始这一篇的学习吧&#xff01; 如果有知识性错误&#xff0c;欢迎各位指正&#xff01;&#xff01;一起加油&#xff01;&#xff01; 创作不易&#xff0c;希望大家多多支持哦&#xff01; 一.模版的概念…

1分钟以上情感短视频素材去哪里找?推荐五个素材网站

在这个充斥着各种短视频的世界里&#xff0c;我就像是一名寻宝的冒险家&#xff0c;不断在素材的海洋中潜水&#xff0c;寻找那些能让我的视频金光闪闪的珍珠。让我告诉你&#xff0c;这不仅仅是一场寻宝&#xff0c;这简直是一场奇妙的冒险。九才素材网&#xff1a; 我的创作…

运用OSI模型提升排错能力

1. OSI模型有什么实际的应用价值&#xff1f; 2. 二层和三层网络的区别和应用&#xff1b; 3. 如何通过OSI模型提升组网排错能力&#xff1f; -- OSI - 开放式系统互联 - 一个互联标准 - 从软件和硬件 定义标准 - 不同厂商的设备 研发的技术 - 具备兼容性 -- O…

vim卡死了,没有反应怎么办?

解决办法&#xff1a; 很有可能是你有个在window下的好习惯&#xff0c;没事儿就ctrl s保存文件。但是在vim里&#xff0c;ctrl s默认是发送一种流控制信号&#xff0c;通常用于停止终端的输出&#xff0c;所以你的屏幕就卡死了。 解决办法也很简单&#xff0c;按下ctrl q即…

element-ui backtop 组件源码分享

今日简单分享 backtop 组件的源码实现&#xff0c;从以下三个方面&#xff1a; 1、backtop 组件页面结构 2、backtop 组件属性 3、backtop 组件事件 一、backtop 组件页面结构 二、backtop 组件属性 2.1 target 属性&#xff0c;触发滚动的对象&#xff0c;类型 string&am…

立方变自身-JavaB(6届)

public class L3 {public static void main(String[] args) {int cnt 0;//记录满足要求的个数//立方再往上&#xff0c;各位相加不会等于原数for (int i 1; i < 100; i) {//得到三次方int ans (int) Math.pow(i, 3);//得到立方的每位数相加int number get(ans);//判断是…