找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 191|回复: 0

PCIe从入门到精通之三:PCIe设备的内部组件

[复制链接]

27

主题

0

回帖

248

积分

管理员

积分
248
发表于 2026-1-17 14:30:05 | 显示全部楼层 |阅读模式 来自 LAN

PCIe从入门到精通之三:PCIe设备的内部组件

0. 引言

PCIe是硬件工程师跨不过去的坎。我刚开始工作就接触PCIe,工作中遇到的所有产品都有PCIe总线。在此想把自己学习PCIe的一些经历和感悟,以及踩过的坑分享在这里,与大家一起进步。所有PCIe主题的文章都会收录在《深入浅出聊PCIe》合集里,每篇文章涵盖一个PCIe的主题,预计会有几十篇文章。

在上一篇文章《PCIe从入门到精通之二:计算机王国中的PCIe设备》中,我们介绍了三类PCIe device:PCIe Root Complex,PCIe Endpoint和PCIe Switch,并着重详细介绍了Root Complex内的三个组件:Host Bridge, RCiEP和Root Port的基本功能。在这一篇文章中我们继续介绍PCIe device的更多内部组件。

需要下载PCIe学习资料的朋友(pdf格式),请关注本微信公众号"硬件工程师宝典",在对话框内回复"PCIe",将获取标准下载链接。

1. PCIe设备内的组件:Upstream port,Downstream Port和Virtual PCI-PCI bridge

在PCIe(Peripheral Component Interconnect Express)设备中,"上游端口"(Upstream Port)和"下游端口"(Downstream Port)是根据它们相对于"根联合体"(Root Complex, RC)的方向来定义的,就像总公司向子公司传达命令的方向。如下图所示。

PCIe拓扑结构

上图是一个Root Complex和PCIe device直接互联图。Root Complex包含有Virtual PCI-PCI bridge和Downstream Root port(因为总公司总是向下传达命令的);PCIe device包含有一个upstream port(因为子公司总是向上递交报告的)。图中蓝色的箭头代表一个PCIe Bus。

在图中一个PCIe的root complex通过自身的Virtual PCI-PCI bridge连到了他自己的root port上。Root port具有向下的downstream port。Endpoint device上有一个upstream port和Root Complex的downstream port相连接。

上游端口(Upstream Port)

定义:上游端口是指指向根联合体(Root Complex)方向的端口。

作用:它负责将数据和控制信号从设备或PCIe交换机发送到更靠近根联合体的方向。

Upstream Port示例

  • 对于一个终端设备(Endpoint Device),例如显卡或SSD,它连接到CPU(即根联合体)的端口就是上游端口。
  • 对于一个PCIe交换机,连接到根联合体或另一个更靠近根联合体的交换机的端口,是该交换机的上游端口。

下游端口(Downstream Port)

定义:下游端口是指远离根联合体(Root Complex)方向的端口。

作用:它负责将数据和控制信号从根联合体或PCIe交换机发送到更远离根联合体的设备。

Downstream Port示例

  • 对于根联合体本身,其根端口(Root Port)就是下游端口,因为它连接着拓扑结构中更下层的设备。
  • 对于一个PCIe交换机,连接到终端设备或另一个更远离根联合体的交换机的端口,是该交换机的下游端口。

Virtual PCI-PCI bridge

"虚拟PCI-PCI桥"并不是一个像传统PCI架构中那样独立的物理桥接芯片,而是一个逻辑概念或软件抽象。它的存在是为了让操作系统(OS)能够沿用PCI时代已有的设备枚举和配置机制来管理PCIe设备。可以将"虚拟PCI-PCI桥"比拟成一个公司内的项目小组,它是虚拟,下面team members也是可以按照项目拆分的,每个"项目小组"有个项目名字,我们用PCIe Bus Number来命名它。因此每个"虚拟PCI-PCI桥"下面有个独立的PCIe Bus Number。Host Bridge的PCIe Bus Number从0开始,其它的PCIe Bus Number根据系统开机时枚举来确定。(关PCIe Bus枚举,我们后面在专门章节讲解。)

每个根端口在软件角度来看都像一个PCI-PCI桥。这意味着它拥有一个配置空间,操作系统可以通过这个配置空间来。

简而言之,理解上游和下游的关键在于方向性:数据流向根联合体为"上游",数据流离根联合体为"下游"。

2. PCIe Switch的内部组件

PCIe交换机(PCIe Switch)是扩展PCIe总线拓扑的关键组件。它通过其上游端口(down stream port)和下游端口(downstream port)来管理和路由数据流量。

它欺上瞒下(承上启下),与Root complex联系时,它俯耳倾听,拥有upstream port(可以向上递交报告)的权利;与Endpoint联系时,它趾高气扬,拥有down stream port(可以向下传达命令)的权利。PCIe Switch角色转换非常丝滑。

如下图所示,这个PCIe Switch拥有一个upstream port和三个downstream port,每个PCIe port都和一个Virtual PCI-PCI bridge相连。

PCIe Switch内部结构

PCIe Switch是唯一一个既有upstream port又有downstream port的PCI device。和Root Complex一样,每个"虚拟PCI-PCI桥"下面有个独立的PCIe Bus,图中每一个蓝色的箭头代表一个PCIe Bus,拥有唯一的PCIe Bus number。

PCIe交换机的上游端口是其连接到PCIe层次结构中更高级别(即更靠近根联合体Root Complex)的那个端口。一个PCIe交换机通常只有一个上游端口,Multi-Host mode可以有两个upstream port。

PCIe交换机的下游端口是其连接到PCIe层次结构中更低级别(即更远离根联合体)的那些端口。一个PCIe交换机通常有多个下游端口,这使得它能够连接多个设备或进一步扩展PCIe总线数量。

3. CPU Root Complex的内部组件

我们再回过头来看看CPU root complex的内部组件。它作为总公司CEO的秘书办是最复杂的,通常它里面含有(一个Host Bridge,若干个Virtual PCI-PCI bridge,若干个RCiEP,至少一个Root Ports,若干个Root Complex Integrated Endpoint,若干个Root Complex Event Collector(RCEC))。

Host Bridge、Virtual PCI-PCI bridge、RCiEP和Root Ports在上一篇文章中介绍过,Root Complex Event Collector和非透明桥(Non-Transparent Bridge)没有介绍过,我们将它们补上。

CPU Root Complex内部结构

上图中Host CPU直接与Host Bridge相连,Host Bridge向下分别和两个Root Complex Integrated Endpoint(RCiEP)、一个Root Complex Event Collector(RCEC)、N个Virtual PCI-PCI bridge相连。每个"虚拟PCI-PCI桥"下面有个独立的PCIe Bus,图中每一个蓝色的箭头代表一个PCIe Bus,拥有唯一的PCIe Bus number。

Root Complex Event Collector:RCEC

Root Complex Event Collector:RCEC相当于Root Complex情报机构,也是一个Root Complex的内部PCIe device。它的主要作用是收集和处理来自PCIe层次结构中特定设备(特别是根联合体集成终端设备,Root Complex Integrated Endpoints, RCiEPs)的各种事件消息,并将其报告给系统软件(如操作系统或固件)。

RCEC是专门为支持RCiEPs而设计的。RCiEPs是直接集成在根联合体内部的PCIe终端设备(例如某些CPU内部的集成显卡或存储控制器)

RCEC在PCIe规范中是一个可选组件。在某些平台中,可能存在硬件执行类似功能但对操作系统不可见的情况,或者通过ACPI平台错误接口(APEI)等其他机制来报告错误。但在支持RCEC的系统中,它提供了一个标准化的接口来处理这些重要的系统事件。

Intel将RCEC集成在IEH(Integrated Error Handler)里。

4. 透明桥(Transparent Bridge)与非透明桥(Non-Transparent Bridge)

透明桥(Transparent Bridge)

在一个集团公司内部(一个PCIe体系Hierarchy内),总公司(root complex)、区域总公司(switch)和子公司(end point)大家都在一个局域网内,内部的信息和资源是完全公开共享的。因此root complex,switch和end point他们之间的memory space和configuration space等信息都相互可以访问。也就是Endpoint今天穿的内裤的颜色,root complex是一清二楚,大家都是透明的,上班时是没法摸鱼的。

因此。处于同一个PCIe体系Hierarchy内,前面提到的Root Complex和PCIe Switch内部的Virtual PCI-PCI bridge都是工作在透明模式(白盒模式),其工作方式和所有信息对系统是可见的,我们称之为透明桥(Transparent Bridge,TB)。

透明桥将两个连接的总线域合并到一个统一的地址空间中,并将它们视为一个统一的地址域。

非透明桥(Non-Transparent Bridge)

两个集团公司(两个不同的PCIe体系Hierarchy)之间有可能建立长期的战略合作伙伴关系,它们之间需要经常的大规模的业务往来(数据交换),两个集团公司可以各自指派一个代表,我们称之为Contact Windows(即PCIe Bridge)。如果有任何的业务往来(数据交换),由这两名Contact Windows(即PCIe Bridge)直接联系处理。

例如下图中一个CPU系统和另一个CPU系统通过Root port的PCIe Bridge互联。

非透明桥连接示例1

例如下图中一个CPU系统和另一个CPU系统通过PCIe Switch的Non-transparent Bridge互联。

非透明桥连接示例2

这两名Contact Windows(PCIe Bridge)只负责交换信息,关于公司内部的运营情况和数据那是机密,大家相互之间都守口如瓶。两个PCIe体系memory space和configuration space等信息都相互屏蔽,它们都工作在非透明模式(黑盒模式)。我们称之为非透明桥(Non-Transparent Bridge, NTB)。

非透明桥是一种特殊的PCIe桥接器,它不将两个连接的总线域合并到一个统一的地址空间中,而是将它们视为两个独立的地址域。PCI Express非透明桥接器(NTB)起到了桥梁的作用,能够实现两个PCI Express体系(例如本地系统和远程系统)之间的高性能、低延迟通信。

NTB允许本地处理器独立配置和控制本地系统,并将本地主机内存域与远程主机内存域隔离开来,同时实现两个域之间的状态和数据交换。本地处理器会将NTB视为根复杂集成端点(RCiEP)来进行识别。

透明桥和非透明桥区别总结

特征 透明桥(Transparent Bridge) 非透明桥(Non-Transparent Bridge, NTB)
地址空间 合并为一个统一的地址空间,主机"看到"所有下游设备。 隔离的独立地址空间,每个主机只"看到"NTB本身作为终端设备。
主机可见性 对主机透明,主机直接枚举和访问下游设备。 对主机不透明,主机将NTB视为一个终端设备。
主要功能 扩展PCIe总线,连接更多设备。 连接独立的PCIe域/处理器,实现域间隔离和通信。
通信方式 直接路由事务。 通过地址转换、共享内存窗口、Scratchpad和Doorbell寄存器进行。
应用场景 标准PCIe拓扑扩展,如PCIe交换机、根端口。 多主机系统、高可用性/冗余系统、智能I/O、专用数据传输。

简而言之,透明桥是用于构建和扩展单一PCIe树的标准方式,而NTB则是一种高级功能,用于在需要隔离和独立管理多个PCIe域(通常是多个处理器或子系统)时实现它们之间的通信。

5. 非透明桥(Non-Transparent Bridge)在哪里?

透明桥模式和非透明模式

下面两幅图分别是CPU和Switch的内部组件图,从图中我们根本找不到非透明桥(Non-Transparent Bridge)在哪里。

CPU内部组件

Switch内部组件

其实图中的Virtual PCI-PCI bridge既可以工作在透明桥模式又可以工作在非透明桥模式。因此合二为一在一个Root Port实体上,而且一个Root Port只需要一个device充当非透明桥,毕竟两个公司之间的contact window只要一对就可以了。

嫡长子袭爵

一个Root Port一般有16个lane,可以通过bifurcation被均分为两个或四个devices,Intel给这个功能起了个时尚的新名字叫subdivision。不管是bifurcation还是subdivision,其实就是分家。"分家"时,"财富"(Lanes)可以儿子之间均等分配,一碗水端平,但是只有一个非透明桥的角色分配给哪个儿子?

其实我们老祖宗早就给出了答案,世袭罔替的爵位不都是由嫡长子承袭嘛?穿越剧不都是这么演的吗?那么问题又来了,谁是嫡长子?

下图是一个x16 lane的PCIe IO在不同的bifurcation的情况,这个PCIe IO可以工作在x16模式、x8模式或x4模式。在PCI Express x16 IIO模块中,只能将一个Root port配置为非透明桥端口。灰色的lane表示充当一般的PCIe的角色,绿色的lane表示充当非透明桥的角色(嫡长子就是从物理lane的编号最大者开始向编号小的选择)。这里可千万不要连错了,否则只能respin我们的layout了,血淋淋的教训啊!

PCIe Lane分配

PCIe Physical Lanes to Ports 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
NT Port x16
PCIe port x8
NT Port x8
PCIe port x4
NT Port x4

如上表,在非透明桥端口为x16的情况下,NT端口总是映射到从第15到第0的最高位物理通道。对于非透明桥端口为x8的情况,它从物理通道15到8映射;而对于非透明桥端口为x4的情况,则从物理通道15到12映射。

6. 大团圆

前面我们分别将Root Complex、Switch和Endpoint掰开了,揉碎了讲解了一遍。中秋马上就要到了,是时候让它们团聚了。

PCIe完整拓扑结构

上图是将它们合并到一起的样子(敲黑板:这张图在以后的很多章节中都会用到。)。黄色的组件是拥有PCIe配置空间的device。PCIe switch下面挂载着三个NVMe SSD。下一章我们将以这张图为中心介绍PCIe总线的拓扑结构(Topology)。


这篇文章就聊到这里,敬请关注下一篇:
《PCIe从入门到精通之四:PCIe总线的拓扑结构》

参考文献:

  1. PCI Express® Base Specification Revision 5.0 Version 1.0
  2. PCI Express® Base Specification Revision 6.4
  3. PCI Express® Base Specification Revision 7.0

需要PCIe学习资料的朋友,请关注本微信公众号"硬件工程师宝典",在对话框内回复"PCIe",将获取标准下载链接如下。



您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|PCIe技术圈-专注PCIe技术的中文社区 ( 皖ICP备17021150号-5 )|网站地图

GMT+8, 2026-2-16 07:08 , Processed in 0.040276 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表