从零开始讲PCIe(8)——PCIe拓扑与组件

news2024/10/6 15:47:29

一、拓扑结构

        和PCI-X一样,PCIe链路是点对点的连接,而不是像传统PCI那样使用共享总线。这是由于其使用了非常高的传输速度。因此,链路只能连接两个接口,为了构建一个复杂的系统,必须采用某种方式来扩展连接。在PCIe中,这通过使用交换机(Switches)和桥接器(Bridges)来实现,它们允许系统拓扑结构的灵活构建,定义系统中各元素之间的连接方式。

二、系统组件 

2.1 CPU

        在PCIe拓扑结构中,CPU位于层级结构的顶部。与PCI类似,PCIe只允许使用简单的树状结构,意味着不允许出现环路或其他复杂的拓扑结构。这是为了保持与PCI软件的向后兼容性,PCI软件使用了简单的配置方案来跟踪拓扑,不支持复杂的网络环境。为了维持这种兼容性,软件必须能够以与之前相同的方式生成配置周期,并且总线拓扑必须与以前一样。因此,所有软件期望找到的配置寄存器仍然存在,并且它们的行为与以前一样。

2.2 RC

        根复合体(Root Complex, RC)是PCIe架构中的一个关键组件,它是CPU与PCIe设备之间的接口,位于整个PCIe拓扑的“根部”。根复合体负责管理CPU与系统中其他PCIe设备之间的通信。它不仅是CPU访问PCIe设备的桥梁,还负责处理设备间的事务,并将各种总线和设备的连接整合在一起。

        根复合体通常会包含多个子组件,例如处理器接口、内存控制器(如DRAM接口)等,并可能会支持多个PCIe端口(Root Ports),通过这些端口连接外部PCIe设备。从软件角度来看,根复合体内部的总线结构会被认为是一个标准的PCI总线,尽管实际上可能并不是物理的PCI总线,但它被设计为对软件呈现为PCI拓扑的一部分,以保持与旧版PCI软件的兼容性。

        总体而言,根复合体不仅在物理上位于PCIe拓扑的顶部,而且在逻辑上也是整个PCIe系统的控制中心,它与系统中的所有PCIe设备建立连接,协调它们之间的通信。

2.3 交换机(Switches)和桥接器(Bridges)

        交换机(Switches)和桥接器(Bridges)为系统提供了分支或聚合的能力,使更多的设备可以连接到单个PCIe端口。交换机的作用类似于数据包路由器,能够根据地址或其他路由信息识别数据包需要经过的路径。而桥接器则提供与其他总线(如PCI或PCI-X,甚至是另一条PCIe总线)的接口。在PCIe拓扑结构示例中,桥接器有时被称为“前向桥接器”,允许较旧的PCI或PCI-X卡插入新的系统中。相反的类型是“反向桥接器”,允许新的PCIe卡插入旧的PCI系统中使用。

2.4 Endpoints

        在PCIe拓扑中,Endpoints是指非交换机或桥接器的设备,它们负责在总线上发起和完成事务。Endpoints位于树形拓扑的底部分支,并且只实现一个朝向根复合体的上行端口(Upstream Port)。相比之下,交换机可能有多个下行端口(Downstream Ports),但只能有一个上行端口。

三、与PCI(及PCI-X)的兼容

        设备如果是为旧总线(如PCI-X)设计的,但现在配备了PCIe接口,则会在配置寄存器中将自己标识为“Legacy PCIe Endpoints”。这些设备可能使用PCIe标准中不再支持的功能,例如IO空间和IO事务,或者支持锁定请求。而“Native PCIe Endpoints”则是为PCIe架构从头设计的设备,而不是简单地给旧的PCI设备添加PCIe接口。Native PCIe Endpoints是内存映射设备(MMIO设备),不涉及旧的IO事务方式。

        为了保持与旧版软件的兼容性,PCIe中的Endpoints和桥接器的配置头(Configuration Headers)与PCI中的保持一致。现在的区别在于桥接器通常会聚合到交换机和根复合体中,但旧版软件对此并不知晓,它们仍然会将这些设备视为桥接器。

        如图所示,对比前面介绍的PCI的Header可以发现:PCIe的Header基本上与PCI的Header是一致的,只有少许差别。但是这些差别并不影响PCIe对PCI的兼容性(还有PCIe到PCI桥对其进行处理)。

        在PCIe系统中,尽管实际的硬件拓扑可能非常复杂,但从软件的角度来看,系统的呈现方式依然较为简单。例如,在图2-8中展示的拓扑结构中,根复合体(Root)仍然位于层级结构的顶部。虽然根复合体内部可能非常复杂,通常会实现一个内部总线结构和多个桥接器来扩展多个端口的拓扑结构,但对配置软件来说,这个内部总线会表现为PCI总线编号为0,而PCIe端口则会显示为PCI到PCI桥接器。

        虽然这个内部结构实际上不一定是物理的PCI总线,但为了保持与旧版软件的兼容性,它会以这种方式呈现给软件。这种内部设计不必符合任何通用标准,它可以根据不同供应商的具体需求来设计。因此,虽然内部的逻辑设计可以是供应商特定的,但在软件层面上,它依然会被认为是PCI总线结构的一部分。

        类似地,图2-9中的交换机的内部组织在软件中也会显示为多个共享同一总线的桥接器集合。这种设计的一个主要优势是,它允许事务路由的工作方式与PCI中的相同。枚举(即配置软件发现系统拓扑并分配总线编号和系统资源的过程)也遵循相同的机制。一旦枚举过程完成,系统中的总线编号就会按照图2-9中的方式进行分配。

        通过这种方式,软件可以轻松处理复杂的PCIe拓扑,而无需理解每个内部组件的具体设计。无论是根复合体内部的总线,还是交换机的多个端口,系统会通过与PCI相似的方式将其呈现给软件,使得传统的PCI枚举和配置流程能够继续使用。

四、PCIe 系统实例

        图2-10展示了一个面向低成本应用(如PC)的PCIe系统示例。该系统实现了几个PCIe端口和一些扩展插槽,整体架构与旧式PCI系统并没有太大差别。相比之下,图2-11中展示的高端服务器系统包含了其他内置的网络接口。在PCIe早期发展阶段,有人曾设想让PCIe作为网络协议,替代那些传统的网络模型。毕竟,PCIe可以被视为一种简化版的网络协议,但由于多种原因,这一概念并未获得广泛应用,PCIe系统通常依旧通过其他传输方式连接外部网络。

        此外,图2-11中的示例也为我们提供了重新审视根复合体(Root Complex)的机会。在这个示例中,标记为“Intel Processor”的部分包含了许多组件,这是大多数现代CPU架构的常见情况。该处理器包括一个用于连接图形设备的x16 PCIe端口和两个DRAM通道,这意味着内存控制器和一些路由逻辑已经集成到CPU封装中。通常,这些资源被称为“Uncore”逻辑,以区分它们和封装中的多个CPU核心及其相关逻辑。

        既然我们之前提到根复合体是CPU与PCIe拓扑结构之间的接口,这意味着根复合体的一部分必须位于CPU封装内部。图2-11中虚线所示的区域表明,根复合体跨越了多个组件封装。这种设计在未来的系统中可能会更加普遍,表明根复合体将是一个分布在多个模块中的逻辑单元。

        每个层原则上与链路另一端设备的对应层进行通信。上面的两层通过将一串比特组织成数据包来实现通信,形成一个可以被接收端相应层识别的模式。这些数据包通过其他层传递,最终到达链路的发送端或接收端。物理层也直接与另一设备的物理层通信,但方式有所不同。为了更好地理解这一点,我们可以先简单了解一下各层如何交互。

        总体来说,设备发出的请求或完成数据包的内容首先在**事务层(Transaction Layer)中组装,这个过程基于设备核心逻辑提供的信息,这些信息有时也被称为软件层(虽然规范中没有使用这个术语)。这些信息通常包括所需命令的类型、目标设备的地址、请求的属性等。新创建的数据包会被存储在一个称为虚拟通道(Virtual Channel)**的缓冲区中,直到它准备好传递给下一层。

        当数据包传递到数据链路层(Data Link Layer)时,会在数据包中添加额外的信息,以便在相邻的接收端进行错误检查,并且数据包的副本会在本地存储,以便在发生传输错误时能够重新发送。随后,数据包到达物理层(Physical Layer),在该层中,数据包会被编码并通过链路上所有可用的通道进行差分传输。

        这种分层的通信机制确保每个层能够有效处理数据并确保数据在设备之间安全且可靠地传输。

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

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

相关文章

《Linux从小白到高手》理论篇:一文概览常用Linux重要配置文件

List item 今天继续宅家,闲来无事接着写。本篇是《Linux从小白到高手》理论篇的最后一篇了。本篇集中介绍所有常用的Linux重要配置文件。 用这个命令可以查看配置文件所在的位置:如上图 locate "*.conf" "*.ini" "*.cfg&quo…

论文 | Model-tuning Via Prompts Makes NLP Models Adversarially Robust

这篇论文研究了使用提示 (Prompting) 方法微调预训练语言模型,以提高其在对抗样本攻击下的鲁棒性。论文的主要贡献如下: 1.MVP 比 MLP-FT 更鲁棒: 论文比较了 MVP (Model-tuning Via Prompts) 和传统的 MLP-FT (Fine-tuning with an MLP head…

热门:AI变现,看看谁在默默赚大钱?

在这个愈发依赖AI的时代,找到属于自己的盈利方式愈发重要。 更多实操教程和AI绘画工具,可以扫描下方,免费获取 总的来说,利用AI进行盈利的方式主要有三种:技术型、流量型和内容型。 每种方式都根植于AI的特性,但同时也需要特定…

【英语】2. 英语的表达习惯

文章目录 前言less v. more n.解释e.g. less v. more prep.被动与中文的歧义总结参考文献 前言 进行英语前后缀的复习 less v. more n. 解释 外国的表达方式:更多地偏向静态,因此更多地使用名词 e.g. (rather Chinglish expression) She could not c…

Linux Cent7 已安装MySQL5.7.X,再安装MYSQL8.4.2

一、 下载安装 检查Linux系统的glibc版本rpm -qa | grep glibc结果:glibc-common-2.17-260.el7_6.6.x86_64 glibc-2.17-260.el7_6.6.x86_64 glibc-headers-2.17-260.el7_6.6.x86_64 glibc-devel-2.17-260.el7_6.6.x86_64访问MySQL官网,下载对应版本数据…

【智能算法应用】侏儒猫鼬优化算法求解二维路径规划问题

摘要 在复杂环境下的移动机器人路径规划问题中,最优路径的求解具有重要的应用价值。本文基于一种新型智能优化算法——侏儒猫鼬优化算法(DMOA),提出了一种二维路径规划的有效求解方法。该算法通过模拟侏儒猫鼬的觅食、社会合作与…

一行 Python 代码能实现什么丧心病狂的功能?圣诞树源代码

手头有 109 张头部 CT 的断层扫描图片,我打算用这些图片尝试头部的三维重建。基础工作之一,就是要把这些图片数据读出来,组织成一个三维的数据结构(实际上是四维的,因为每个像素有 RGBA 四个通道)。 这个…

Github优质项目推荐-第四期

文章目录 Github优质项目推荐 - 第四期一、【Umi-OCR】,26.1k stars - 文字识别工具二、【AFFiNE】,41k stars - 知识库平台三、【NocoBase】,12k stars - 无代码/低代码平台四、【neovim】,82.3k stars - 改良版VIM五、【generat…

LLM大模型:开源RAG框架汇总

前言 本文搜集了一些开源的基于LLM的RAG(Retrieval-Augmented Generation)框架,旨在吸纳业界最新的RAG应用方法与思路。如有错误或者意见可以提出,同时也欢迎大家把自己常用而这里未列出的框架贡献出来,感谢~ RAG应用…

【AI副业项目】AI猫咪带娃新风尚:探索副业新机遇

随着互联网技术的飞速发展,内容创作已成为许多人追求自我表达、实现职业转型或发展副业的重要途径。然而,在信息爆炸的时代,如何创作出既新颖又吸引眼球的内容,成为了摆在每位创作者面前的难题。 在当今这个数字化与智能化并行的…

TM1618控制共阳极数码管的数据传送问题

数据传送中的问题 首先每个字节是按照一个地址写入的,而共阳极数码管的公共端是SEG引脚连接的。这使得数码管显示的编码是按照竖向的字节。如下图所示中,横向是公共端,竖向是实际编码字符字节。 数据转换方式 这样可以一次写入所有需要显示…

GoogleNet网络介绍及代码撰写详解(总结2)

可以从本人以前的文章中可以看出作者以前从事的是嵌入式控制方面相关的工作,是一个机器视觉小白,之所以开始入门机器视觉的学习只要是一个idea,想把机器视觉与控制相融合未来做一点小东西。废话不多说开始正题。(如有侵权立即删稿…

思维导图工具,轻松搞定复杂问题!

一提到思维导图,想必大家都不会陌生;它能帮助我们更好地梳理思路,让复杂的想法变得清晰可见;而随着互联网的普及,在线思维导图工具更是成为了我们日常工作和学习的得力助手;今天,我就来给大家推…

深入解析DPU:AI时代的芯片分工与超级网卡

引言 在当今AI时代,计算需求的爆炸性增长使得传统数据中心的架构面临着巨大的挑战。数据处理任务越来越复杂,尤其是在大型AI模型如GPT和BERT的应用中,如何提高数据中心的计算和传输效率成为关键问题。传统的CPU(中央处理器&#…

从零开始讲PCIe(10)——事务层介绍

一、事务层概述 事务层在响应软件层的请求时,会生成出站数据包。同时,它也会检查入站数据包,并将其中包含的信息传递到软件层。事务层支持非发布事务的分割事务协议,能够将入站的完成数据包与之前传输的非发布请求相关联。该层处理…

开发人员智能助手

据说AI可以代替开发人员,目前看暂时不用担心,不仅不担心,还要主动使用它。 过去有了问题需要自己各网站搜索,真真假假的东西太多,很难找到正确答案,现在可以问智能体了: 1、JAVA开发大师 htt…

【C++】输入输出缺省参数

大家好,我是苏貝,本篇博客带大家了解C的缺省参数,如果你觉得我写的还不错的话,可以给我一个赞👍吗,感谢❤️ 目录 一. 输入&输出二. 缺省参数1 缺省参数概念2 缺省参数分类a. 全缺省参数b. 半缺省参数…

Top4免费音频剪辑软件大比拼,2024年你选哪一款?

现在我们生活在一个数字化的时代,音频内容对我们来说很重要。不管是给自己拍的视频配背景音乐、整理开会时的录音,还是自己写歌,有个好用的音频剪辑软件都特别重要。今天,我要给大家介绍几款特别好用的音频剪辑软件免费的&#xf…

Vue82 路由器的两种工作模式 以及 node express 部署前端

笔记 对于一个url来说,什么是hash值?—— #及其后面的内容就是hash值。hash值不会包含在 HTTP 请求中,即:hash值不会带给服务器。hash模式: 地址中永远带着#号,不美观 。若以后将地址通过第三方手机app分享…

教育技术革新:SpringBoot在线教育系统开发

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理微服务在线教育系统的相关信息成为必然。开…