PCIe总线中Root Complex(RC)

        在不同的处理器系统中,RC的实现有较大差异。PCIe总线规范并没有规定RC的实现细则。在有些处理器系统中,RC相当于PCIe主桥,也有的处理器系统也将PCIe主桥称为PCIe总线控制器。而在x86处理器系统中,RC除了包含PCIe总线控制器之外,还包含一些其他组成部件,因此RC并不等同于PCIe总线控制器。

        如果一个RC中可以提供多个PCIe端口,这种RC也被称为多端口RC。如MPC8572处理器的RC可以直接提供3条PCIe链路,因此可以直接连接3个EP。如果MPC8572处理器需要连接更多EP时,需要使用Switch进行链路扩展。

        而在x86处理器系统中,RC并不是存在于一个芯片中,如在Montevina平台中,RC由MCH和ICH两个芯片组成。本节并不对x86和PowerPC处理器使用的PCIe总线结构做进一步讨论,而只介绍这两种结构的相同之处。一个通用的,基于PCIe总线的处理器系统如图4 9所示。

图片

        上图所示的结构将PCIe总线端口、存储器控制器等一系列与外部设备有关的接口都集成在一起,并统称为RC。RC具有一个或者多个PCIe端口,可以连接各类PCIe设备。PCIe设备包括EP(如网卡、显卡等设备)、Switch和PCIe桥。PCIe总线采用端到端的连接方式,每一个PCIe端口只能连接一个EP,当然PCIe端口也可以连接Switch进行链路扩展。通过Switch扩展出的PCIe链路可以继续挂接EP或者其他Switch。

RC (Root Comlex)

        RC是PCIe体系结构的一个重要组成部件,也是一个较为混乱的概念。RC的提出与x86处理器系统密切相关。事实上,只有x86处理器才存在PCIe总线规范定义的“标准RC”,而在多数处理器系统,并不含有在PCIe总线规范中涉及的,与RC相关的全部概念。

        不同处理器系统的RC设计并不相同,在图4 7中的处理器系统中,RC包括存储器控制器、两个FSB-to-PCIe桥。而在图4 8中的PowerPC处理器系统中,RC的概念并不明晰。在 PowerPC处理器中并不存在真正意义上的RC,而仅包含PCIe总线控制器。

        在x86处理器系统中,RC内部集成了一些PCI设备、RCRB(RC Register Block)和Event Collector等组成部件。其中RCRB由一系列“管理存储器系统”的寄存器组成,而仅存在于x86处理器中;而Event Collector用来处理来自PCIe设备的错误消息报文和PME消息报文。RCRB寄存器组属于PCI总线域地址空间,x86处理器访问RCRB的方法与访问PCI设备的配置寄存器相同。在有些x86处理器系统中,RCRB在PCI总线0的设备0中。

        RCRB是x86处理器所独有的,PowerPC处理器也含有一组“管理存储器系统”的寄存器,这组寄存器与RCRB所实现的功能类似。但是在PowerPC处理器中,该组寄存器以CCSRBAR寄存器为基地址,处理器采用存储器映像方式访问这组寄存器。

        如果将RC中的RCRB、内置的PCI设备和Event Collector去除,该RC的主要功能与PCI总线中的HOST主桥类似,其主要作用是完成存储器域到PCI总线域的地址转换。但是随着虚拟化技术的引入,尤其是引入MR-IOV技术之后,RC的实现变得异常复杂。

        但是RC与HOST主桥并不相同,RC除了完成地址空间的转换之外,还需要完成物理信号的转换。在PowerPC处理器的RC中,来自OCeaN或者FSB的信号协议与PCIe总线信号使用的电气特性并不兼容,使用的总线事务也并不相同,因此必须进行信号协议和总线事务的转换。

        在P4080处理器中,RC的下游端口可以挂接Switch扩展更多的PCIe端口,也可以只挂接一个EP。在P4080处理器的RC中,设置了一组Inbound和Outbound寄存器组,用于存储器域与PCI总线域之间地址空间的转换;而P4080处理器的RC还可以使用Outbound寄存器组将PCI设备的配置空间直接映射到存储器域中。PowerPC处理器在处理PCI/PCIe接口时,都使用这组Inbound和Outbound寄存器组。

        在P4080处理器中,RC可以使用PEX_CONFIG_ADDR与PEX_CONFIG_DATA寄存器对 EP进行配置读写,这两个寄存器与MPC8548处理器HOST主桥的PCI_CONFIG_ADDR和PCI_CONFIG_DATA寄存器类似,本章不再详细介绍这组寄存器。而x86处理器的RC设计与PowerPC处理器有较大的不同,实际上和大多数处理器系统都不相同。x86处理器赋予了RC新的含义,PCIe总线规范中涉及的RC也以x86处理器为例进行说明,而且一些在PCIe总线规范中出现的最新功能也在Intel的x86处理器系统中率先实现。在x86处理器系统中的RC实现也比其他处理器系统复杂得多。深入理解x86处理器系统的RC对于理解PCIe体系结构非常重要。

浅谈PCIe体系结构 浅谈PCIe体系结构 - 1 - 目录 - 1 - 第I篇PCI体系结构概述 - 1 - 第1章PCI总线的基本知识 - 3 - 1.1 PCI总线的组成结构 - 6 - 1.1.1 HOST主桥 - 6 - 1.1.2 PCI总线 - 7 - 1.1.3 PCI设备 - 7 - 1.1.4 HOST处理器 - 8 - 1.1.5 PCI总线的负载 - 9 - 1.2 PCI总线的信号定义 - 10 - 1.2.1 地址和数据信号 - 10 - 1.2.2 接口控制信号 - 11 - 1.2.3 仲裁信号 - 13 - 1.2.4 中断请求等其他信号 - 14 - 1.3 PCI总线的存储器读写总线事务 - 15 - 1.3.1 PCI总线事务的时序 - 15 - 1.3.2 Posted和Non-Posted传送方式 - 16 - 1.3.3 HOST处理器访问PCI设备 - 17 - 1.3.4 PCI设备读写主存储器 - 19 - 1.3.5 Delayed传送方式 - 21 - 1.4 PCI总线的中断机制 - 23 - 1.4.1 中断信号与中断控制器的连接关系 - 23 - 1.4.2 中断信号与PCI总线的连接关系 - 24 - 1.4.3 中断请求的同步 - 25 - 1.5 PCI-X总线简介 - 28 - 1.5.1 Split总线事务 - 28 - 1.5.2 总线传送协议 - 28 - 1.5.3 基于数据块的突发传送 - 29 - 1.6 小结 - 29 - 第2章PCI总线的桥与配置 - 30 - 2.1 存储器域与PCI总线域 - 30 - 2.1.1 CPU域、DRAM域与存储器域 - 31 - 2.1.2 PCI总线域 - 32 - 2.1.3 处理器域 - 32 - 2.2 HOST主桥 - 34 - 2.2.1 PCI设备配置空间的访问机制 - 35 - 2.2.2 存储器域地址空间到PCI总线域地址空间的转换 - 37 - 2.2.3 PCI总线域地址空间到存储器域地址空间的转换 - 39 - 2.2.4 x86处理器的HOST主桥 - 42 - 2.3 PCI桥与PCI设备的配置空间 - 45 - 2.3.1 PCI桥 - 45 - 2.3.2 PCI Agent设备的配置空间 - 47 - 2.3.3 PCI桥的配置空间 - 50 - 2.4 PCI总线的配置 - 54 - 2.4.1 Type 01h和Type 00h配置请求 - 54 - 2.4.2 PCI总线配置请求的转换原则 - 56 - 2.4.3 PCI总线树Bus号的初始化 - 58 - 2.4.4 PCI总线Device号的分配 - 60 - 2.5 非透明PCI桥 - 62 - 2.5.1 Intel 21555中的配置寄存器 - 63 - 2.5.2 通过非透明桥片进行数据传递 - 65 - 2.6 小结 - 67 - 第3章PCI总线的数据交换 - 68 - 3.1 PCI设备BAR空间的初始化 - 68 - 3.1.1 存储器地址与PCI总线地址的转换 - 68 - 3.1.2 PCI设备BAR寄存器和PCI桥Base、Limit寄存器的初始化 - 70 - 3.2 PCI设备的数据传递 - 72 - 3.2.1 PCI设备的正向译码与负向译码 - 72 - 3.3.2 处理器到PCI设备的数据传送 - 74 - 3.2.3 PCI设备的DMA操作 - 74 - 3.2.4 PCI桥的Combining、Merging和Collapsing - 75 - 3.3 与Cache相关的PCI总线事务 - 77 - 3.3.1 Cache一致性的基本概念 - 77 - 3.3.2 PCI设备对不可Cache的存储器空间进行DMA读写 - 82 - 3.3.3 PCI设备对可Cache的存储器空间进行DMA读写 - 83 - 3.3.4 PCI设备进行DMA写时发生Cache命中 - 85 - 3.3.5 DMA写时发生Cache命中的优化 - 87 - 3.4 预读机制 - 89 - 3.4.1 Instruction Fetch - 89 - 3.4.2 数据预读 - 92 - 3.4.3 软件预读 - 94 - 3.4.4 硬件预读 - 96 - 3.4.5 PCI总线的预读机制 - 97 - 3.5 小结 - 101 - 第II篇PCI Express体系结构概述 - 102 - 第4章PCIe总线概述 - 104 - 4.1 PCIe总线的基础知识 - 104 - 4.1.1 端到端的数据传递 - 104 - 4.1.2 PCIe总线使用的信号 - 106 - 4.1.3 PCIe总线的层次结构 - 109 - 4.1.4 PCIe链路的扩展 - 111 - 4.2 PCIe体系结构的组成部件 - 114 - 4.2.1 基于PCIe架构的处理器系统 - 114 - 4.2.2 RC的组成结构 - 117 - 4.2.3 Switch - 118 - 4.2.4 VC和端口仲裁 - 120 - 4.2.5 PCIe-to-PCI/PCI-X桥片 - 122 - 4.3 PCIe设备的扩展配置空间 - 124 - 4.4 小结 - 125 - 第5章PCIe总线的事务层 - 126 - 5.1 TLP的格式 - 126 - 5.1.1 通用TLP头的Fmt字段和Type字段 - 127 - 5.1.2 TC字段 - 129 - 5.1.3 Attr字段 - 130 - 5.1.4 通用TLP头中的其他字段 - 131 - 5.2 TLP的路由 - 133 - 5.2.1 基于地址的路由 - 133 - 5.2.2 基于ID的路由 - 135 - 5.2.3 隐式路由 - 138 - 5.3 存储器、I/O和配置读写请求TLP - 139 - 5.3.1 存储器读写请求TLP - 139 - 5.3.2 完成报文 - 144 - 5.3.3 配置读写请求TLP - 146 - 5.3.4 消息请求报文 - 147 - 5.4 TLP中与数据负载相关的参数 - 148 - 5.4.1 Max_Payload_Size参数 - 148 - 5.4.2 Max_Read_Request_Size参数 - 149 - 5.4.3 RCB参数 - 149 - 5.5 小结 - 150 - 第6章 MSI和MSI-X中断机制 - 151 - 6.1 MSI/MSI-X Capability结构 - 152 - 6.1.1 MSI Capability结构 - 152 - 6.1.2 MSI-X Capability结构 - 154 - 6.2 PowerPC处理器如何处理MSI中断请求 - 158 - 6.2.1 MSI中断机制使用的寄存器 - 159 - 6.2.2 系统软件如何初始化PCIe设备的MSI Capability结构 - 162 - 6.3 x86处理器如何处理MSI-X中断请求 - 165 - 6.3.1 Message Address字段和Message Data字段的格式 - 165 - 6.3.2 FSB Interrupt Message总线事务 - 168 - 6.4 小结 - 169 - 结束语 - 170 -
<think>好的,我现在需要帮助用户了解PCIe总线的技术细节、工作原理以及规范版本。首先,我得回顾一下用户提供的引用内容,里面提到了PCIe的基础知识,包括RC、Switch、EP组件,地址空间映射,版本差异,以及端到端连接方式等。用户现在希望深入了解这些方面的详细信息,可能还需要涉及规范版本的不同之处。 首先,我需要确保技术细节的准确性。比如,PCIe的工作模式是基于串行差分信号,这一点需要明确解释,可能还要对比之前的PCI和PCI-X并行总线的区别。然后,分层结构是PCIe的重要部分,事务层、数据链路层和物理层各自的功能需要分清楚,可能需要举例说明每个层的作用,比如事务层处理TLP包,数据链路层负责错误检测等。 工作原理方面,用户可能想知道数据是如何在设备之间传输的,端到端的连接方式具体是怎么工作的,以及Switch和RC的作用。需要解释PCIe的拓扑结构,比如树形结构,根联合体作为中枢,Switch如何扩展连接多个设备,还有数据包的路由机制,比如基于ID或地址的路由。 规范版本部分,用户可能想了解不同版本的速度提升和兼容性。需要列出主要的版本,如1.0、2.0、3.0、4.0、5.0、6.0,并说明每代的速率变化,编码方式的变化,比如从8b/10b到128b/130b,以及新增的功能如动态带宽调整等。同时要提到向后兼容,这样用户知道即使设备版本不同,也能协同工作。 另外,用户提供的引用中提到了地址空间映射,这可能涉及到内存映射I/O和DMA传输,需要解释CPU如何通过虚拟地址访问PCIe设备,以及DMA如何减少CPU负担。可能还需要提到PCIe的数据包结构,比如TLP和DLLP的区别,以及流量控制和ACK/NACK机制。 在组织信息时,要保持结构清晰,分点说明。可能需要使用示例,比如用x1到x16的通道数说明带宽差异,或者用不同版本的速度对比来突出发展。同时要确保使用正确的中文术语,避免翻译错误。 最后,生成相关问题时要覆盖用户可能感兴趣的扩展领域,比如性能优化、实际应用中的挑战、版本选择考虑因素等,帮助用户进一步探索。同时检查是否有遗漏的技术点,如NVMe与PCIe的关系,或者PCIe在GPU中的应用,这些都可能作为相关问题提出。</think>### PCIe总线技术细节与工作原理 #### 一、核心组件与架构 1. **拓扑结构** PCIe采用树形拓扑,包含以下关键组件: - **根联合体 (Root Complex, RC)**:连接CPU与PCIe层级结构,负责协议转换(如PCIe到内存/其他总线)[^1] - **Switch**:扩展连接能力,支持多设备接入,通过数据包路由实现设备间通信 - **端点设备 (Endpoint, EP)**:实际功能设备(如GPU、NVMe SSD) 2. **分层协议栈** 采用三层结构(类比OSI模型): $$ \text{事务层} \rightarrow \text{数据链路层} \rightarrow \text{物理层} $$ - **事务层**:生成/解析TLP(事务层数据包),处理读写请求和消息 - **数据链路层**:添加序列号与CRC校验,实现ACK/NACK重传机制 - **物理层**:完成8b/10b或128b/130b编码,管理差分信号传输 #### 二、关键技术特性 1. **差分信号传输** 使用双绞线传输反向信号,抗干扰能力比PCI的并行总线提升$10^3$倍以上[^1]。每条通道(Lane)包含两对差分线(发送/接收) 2. **通道聚合技术** 支持x1/x2/x4/x8/x16通道配置,带宽计算示例: $$ \text{总带宽} = \text{单通道速率} \times \text{通道数} \times \text{双向因子(2)} $$ 3. **地址空间映射** 提供三种地址空间: - 内存空间(32/64位) - I/O空间(兼容传统设备) - 配置空间(包含设备Capabilities结构) #### 三、规范版本演进 | 版本 | 发布时间 | 单通道速率 | 编码效率 | 关键改进 | |------|----------|------------|----------|----------| | 1.0 | 2003 | 2.5 GT/s | 8b/10b | 基础规范 | | 2.0 | 2007 | 5.0 GT/s | 8b/10b | 增强型QoS | | 3.0 | 2010 | 8.0 GT/s | 128b/130b| 降低编码开销 | | 4.0 | 2017 | 16.0 GT/s | 128b/130b| 动态带宽调整 | | 5.0 | 2019 | 32.0 GT/s | 128b/130b| 支持CXL协议 | | 6.0 | 2022 | 64.0 GT/s | PAM4编码 | 脉冲幅度调制 | #### 四、典型工作流程 1. **枚举阶段** 系统启动时RC通过配置事务发现设备拓扑,分配BDF(Bus/Device/Function)标识 2. **数据传输** - **内存读写**:采用Posted(无需响应)和Non-posted(需响应)事务 - **消息传递**:支持电源管理、错误报告等系统级消息 - **原子操作**:PCIe 4.0新增FetchAdd/Swap/CAS原子指令 3. **错误处理** 分层实现错误检测与恢复: ```plaintext 物理层 → 数据链路层重传 → 事务层恢复 → 系统级复位 ``` #### 五、实际应用场景 1. **GPU直连**:x16接口提供最高128GB/s双向带宽(PCIe 5.0) 2. **NVMe存储**:PCIe 4.0 x4接口可达8GB/s顺序读写 3. **高速网络**:100Gbps网卡普遍采用PCIe 4.0 x8接口
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咸鱼弟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值