DP读书:鲲鹏处理器 架构与编程(六)PCI Express 总线

简介: DP读书:鲲鹏处理器 架构与编程(六)PCI Express 总线


PCI Express 总线

PCI Express(Peripheral Component Interconnect Express)是一种高速串行计算机扩展总线标准,原来的名称为“3GIO”,是由英特尔在2001年提出的。PCIe属于高速串行点对点双通道高带宽传输,所连接的设备分配独享通道带宽,不共享总线带宽,主要支持主动电源管理,错误报告,端对端的可靠性传输,热插拔以及服务质量(QOS)等功能。PCIe交由PCI-SIG(PCI特殊兴趣组织)认证发布后才改名为“PCI-Express”,简称“PCI-e”。PCI Express有多种规格,从PCI Express x1到PCI Express x32,能满足将来一定时间内出现的低速设备和高速设备的需求。

2023-08-172023-08-192023-08-212023-08-232023-08-252023-08-272023-08-292023-08-312023-09-012023-09-032023-09-052023-09-072023-09-09总线标准总线名称高速串行传输发布年份点对点连接PCI Express x1PCI Express x4独享通道带宽PCI Express x8主动电源管理PCI Express x16PCI Express x32错误报告端对端可靠性传输热插拔服务质量(QOS)基本信息特点和功能规格PCI Express总线物理结构

1. PCI Express 总线的特点

a. 高速差分传输

PCI Express总线的特点之一是高速差分传输。这种传输方式使用LVDS(Low Voltage Differential Signaling,低电压差分信号) 技术,允许多个设备通过一条高速数据线进行连接,从而实现更高的数据传输速率。PCI Express x16接口支持的最大数据传输速率可达16GB/s,足以满足各种高速设备的需求。

b. 串行传输

PCI Express总线另一个特点是串行传输。与传统的并行总线不同,PCI Express总线采用串行方式传输数据。这种传输方式具有更高的数据传输速率和更低的传输延迟。串行传输还可以减少所需的信号线数量,从而降低硬件成本和系统复杂性。

c. 全双工端到端连接

PCI Express总线的一个特点是全双工端到端连接。这意味着数据可以在两个方向上同时传输,从而提高了传输效率。这种连接方式是基于数据包的传输,可以实现类似计算机网络中的交换和路由功能。

在PCI Express总线中,每个设备都有自己的专用 通道(Lane),可以直接与其他设备进行通信。这种分布式通信架构提高了系统性能和可dB扩展性。全双工传输方式还可以减少传输延迟,提高数据传输速率。

总之,PCI Express总线通过全双工端到端连接实现了高性能、高带宽的数据传输。这种连接方式提高了传输效率和系统性能,适用于各种高速设备的应用场景。

2023-08-162023-08-172023-08-182023-08-192023-08-202023-08-212023-08-222023-08-232023-08-242023-08-252023-08-26I/O映射内存映射基址寄存器配置I/O寻址内存寻址控制信号发送限制寄存器配置控制信号接收I/O地址空间内存地址空间寄存器配置总线控制总线通道物理结构

d. 基于多通道的数据传输方式

PCI Express总线采用基于多通道的数据传输方式。这种传输方式允许多个设备通过一条高速数据线连接,从而实现更高的数据传输速率。PCI Express总线支持1、2、4、8、12、16和32通道的连接,以满足不同系统设备对数据传输带宽的不同需求。

基于多通道的数据传输方式可以提高数据传输的效率和速度。通过将数据分配到不同的通道中,可以同时处理多个数据流,从而减少传输延迟并提高系统性能。

此外,PCI Express总线还支持数据分通道传输模式。在这种模式下,数据可以在不同的通道中同时传输,从而实现更高的数据传输速率。例如,PCI Express x16接口可以实现最大16GB/s的数据传输速率,足以满足高速设备的需求。

总之,PCI Express总线采用基于多通道的数据传输方式,提高了数据传输的效率和速度,适用于各种高速设备的应用场景。

e. 基于数据包的传输

PCI Express总线采用基于数据包的传输方式。这种传输方式将数据封装在数据包中,并通过PCI Express总线进行传输。每个数据包都包含发送方的信息和接收方的信息,从而实现了高效的数据传输

基于数据包的传输方式具有以下优点:

1. 高效性:基于数据包的传输方式可以避免不必要的传输,从而提高了传输效率。
2. 灵活性和扩展性:基于数据包的传输方式可以灵活地支持不同的数据类型和数据长度,并且可以随着系统的扩展而扩展。
3. 支持QoS和虚拟通道:基于数据包的传输方式支持QoS(Quality of Service)和虚拟通道,可以实现优先级控制和特定数据流的传输。
4. 支持热插拔和电源管理:基于数据包的传输方式支持热插拔和电源管理,可以提高系统的可靠性和节能性能。

总之,PCI

Express总线采用基于数据包的传输方式,具有高效性、灵活性和扩展性,支持QoS和虚拟通道,以及热插拔和电源管理等功能,适用于各种高速设备的应用场景。

2. PCI Express 总线的组成与拓扑结构

a. 根复合体

PCI Express总线由多个组件组成,其中最重要的是根复合体(Root Complex)

根复合体是PCI Express总线中的一个关键组件,它负责将主机系统连接到PCI Express总线。根复合体通常由一个或多个**根端口(Root Port)**组成,每个根端口都可以连接一个或多个PCI设备。

根复合体还可以包含其他组件,例如串行总线(Serial Bus)中断控制器(Interrupt Controller) 等。串行总线用于连接多个设备,而中断控制器则负责处理中断请求。

PCI Express总线的拓扑结构可以根据具体应用场景进行调整。常见的拓扑结构包括星型、树型和Mesh型等。在星型拓扑中,所有设备都直接连接到根复合体;在树型拓扑中,设备可以按照层次结构进行连接,形成类似树的形状;在Mesh型拓扑中,设备之间可以有多条连接路径,从而提高了系统的可靠性和可扩展性。

总之,PCI Express总线由多个组件组成,其中最重要的是根复合体。根复合体负责将主机系统连接到PCI Express总线,并可以包含其他组件。PCI Express总线的拓扑结构可以根据具体应用场景进行调整,常见的拓扑结构包括星型、树型和Mesh型等。

b. PCI Express桥

除了根复合体之外,PCI Express总线还包括PCI Express桥。

PCI Express桥是PCI Express总线中的一个重要组件,它的作用是将PCI Express总线连接到其他类型的总线或设备。通过桥接,PCI Express总线可以与其他总线或设备进行通信和数据传输。
PCI Express桥可以连接不同类型的总线或设备,例如PCI总线、AGP总线、USB总线等。通过桥接,这些设备可以与PCI Express总线进行通信和数据传输。
在PCI Express总线的拓扑结构中,桥是常见的组件之一。通过桥接,可以将多个总线或设备连接在一起,形成一个更大的网络。这种网络可以是星型、树型或Mesh型等,具体取决于应用场景和系统设计。

总之,PCI Express总线中的另一个重要组件是PCI Express桥,它的作用是将PCI Express总线连接到其他类型的总线或设备,从而形成一个更大的网络。

c. 功能单元

PCI Express总线由以下几个主要功能单元组成:

  1. 根组件(Root Complex)。 根组件是PCI Express总线的一个关键组件,它负责将主机系统连接到PCI E xpress总线。根组件通常由一个或多个**根端口(Root Port)组成,每个根端口都可以连接一个或多个PCI设备。根组件还可以包含其他组件,例如串行总线(Serial Bus)中断控制器(Interrupt Controller)**等。
  2. 交换器(Switch)。 交换器是PCI Express总线中的一个重要组件,它的功能主要是为I/O总线提供输出端,并支持在不同终端设备间进行对等数据传输。交换器通常以软件的形式提供,包括多个逻辑PCI到PCI的桥连接,以及与传统PCI设备的兼容性。
  3. 终端设备(Endpoint)。 终端设备是PCI Express总线中的另一个重要组件,它可以被视为一个单独的设备,该设备通过PCI Express端口连接到总线上。终端设备通常具有高速数据传输能力,可以支持各种不同的数据类型和数据长度。

这些功能单元在PCI Express总线的拓扑结构中也扮演着重要的角色。例如,根组件可以形成一个星型或树型的拓扑结构,而交换器则可以在这个拓扑结构中提供更复杂的连接。同时,终端设备可以被视为拓扑结构中的节点,它们可以通过交换器进行通信和数据传输。

除了这些主要的功能单元外,PCI Express总线还包括其他一些组件,例如事务层、数据链路层和物理层等,这些组件提供了更高级别的功能和特性。

3. PCI Express 总线的层次结构

a. 层次结构

PCI Express总线采用分层设计,共分为四层,从下到上分别是物理层、数据链路层、处理层和软件层。

1. 物理层:物理层定义了电气和机械规范,包括线路规格、信号定义、传输速率等内容,它实现了比特流的传输。
2. 数据链路层:数据链路层负责在设备之间建立连接,并实现可靠的数据传输。数据链路层还处理错误检测和纠正,例如奇偶校验和冗余校验。
3. 处理层:处理层负责处理事务,例如数据包的封装、解封装和排序。处理层还负责处理各种请求类型,例如内存读/写请求、IO读/写请求等。
4. 软件层:软件层包括驱动程序和操作系统接口,它提供了标准的API接口,使得各种应用程序可以方便地使用PCI Express总线。

这种分层设计使得PCI Express总线具有灵活性和可扩展性,可以适应不同类型的应用需求。同时,分层设计也便于系统设计和管理,提高了系统的可靠性和稳定性。

b. 分组结构

PCI Express总线的分组结构是指数据包被分为多个组(Packet Group),每个组包含一个或多个数据包(Packet)。这种分组结构有助于提高数据传输的效率和可靠性。

在PCI Express总线的分组结构中,每个分组都包含以下信息:

1. 包头(Header):包头包含了该分组的元信息,例如分组的长度、类型、序列号等。
2. 数据段(Data):数据段包含了实际需要传输的数据,其长度由包头中的长度字段指定。
3. 帧间隔(Interframe Spacing):帧间隔是指在连续的两个帧之间插入的空闲时间,以保障总线稳定和避免数据冲突。

通过采用分组结构,PCI Express总线可以更好地处理数据传输过程中的各种问题,例如数据包的丢失、错误检测和纠正等。同时,分组结构也提高了数据传输的效率和可靠性,可以适应不同类型的应用需求。

4. PCI Express 总线的拓扑发现

PCI Express总线的拓扑发现是指通过一定的协议和机制,在系统中识别和确定PCI Express设备的连接关系和数据传输路径的过程。PCI Express总线采用了基于交换机和端点设备的拓扑结构,因此拓扑发现的结果可以反映这种结构的特点。

在PCI Express总线中,拓扑发现主要依赖于以下两个协议:

  1. PCI Express链路层协议:链路层协议定义了在PCI Express设备之间传输数据时所需的各种信号和消息,包括设备检测、配置、复位等操作。通过链路层协议,可以获取设备的链路状态和连接关系。
  2. PCI Express配置空间协议:配置空间协议定义了在设备初始化阶段,操作系统如何读取和配置设备的寄存器、接口、功能等信息。通过配置空间协议,可以获取设备的配置信息和能力。

在拓扑发现的过程中,通常需要执行以下步骤:

1. 设备检测:检测系统中是否存在PCI Express设备,以及设备的类型和数量。
2. 设备初始化:对设备进行初始化操作,包括分配设备号、设置设备参数等。
3. 设备枚举:通过读取配置空间协议中的设备寄存器和配置信息,获取设备的接口、功能、资源等信息。
4. 设备配置:根据设备的配置信息和能力,为设备分配必要的资源,并设置设备的参数。
5. 设备连接:通过链路层协议,检测设备的连接关系和链路状态,并建立设备之间的通信路径。

通过以上步骤,可以获取PCI Express总线的拓扑结构,包括设备的连接关系、设备的配置信息和数据传输路径等。这对于系统管理和应用程序开发都具有重要的意义。

5. PCI Express 总线的总线事务

PCI Express总线支持多种总线事务,包括存储器读写、IO读写、配置读写总线事务,以及Message消息总线事务等。

这些总线事务在PCIe设备之间传递数据时起到重要作用。例如,存储器读写事务用于直接操作硬件,产生总线周期实现数据传递;IO读写事务用于读写I/O端口的数据;配置读写事务用于读取或写入设备的配置信息;而Message消息事务则用于发送和接收消息类型的报文。

为了处理这些总线事务,PCI Express总线使用分层结构,其中事务层负责相应总线事务的转换。根据不同的事务类型,事务层会产生不同类型的TLP报文,并根据不同的路由方式进行数据转发。

graph TB
A[PCI Express总线]
B[南桥/北桥控制器]
C[设备]
D[I/O地址空间 (0x0000-0x3FFF)]
E[内存地址空间 (0xC0000000-0xF8000000)]
F[PCI总线编号 (Bus, Device, Function, Register)]
G[基址寄存器]
H[限制寄存器]
A -->|连接| B
B -->|映射到系统的I/O地址空间| D
B -->|映射到系统的内存地址空间| E
C -->|通过PCI总线编号进行寻址| F
C -->|提供基址寄存器和限制寄存器| G
C -->|提供基址寄存器和限制寄存器| H

6. PCI Express 总线的地址空间

PCI Express总线的地址空间分为两个部分:I/O地址空间和内存地址空间

I/O地址空间用于访问设备的I/O端口,其地址范围是0x0000-0x3FFF。这些地址通过南桥或北桥控制器映射到系统的I/O地址空间,并通过PCI总线编号(Bus, Device, Function和Register) 进行寻址。

内存地址空间用于访问设备的内存,其地址范围是0xC0000000-0xF8000000。这些地址通过南桥或北桥控制器映射到系统的内存地址空间,并通过PCI总线编号(Bus, Device, Function) 进行寻址。在映射过程中,设备需要向北桥或南桥控制器提供基址寄存器(Base Register)限制寄存器(Limit Register),以确定该设备所使用的内存范围。

需要注意的是,不同的操作系统和硬件平台可能对I/O地址空间和内存地址空间的映射方式有所不同,因此在进行系统设计时需要仔细考虑。

7. PCI Express 总线的中断机制

PCI Express总线中断机制与PCI总线类似,它支持传统的基于IRQ(Interrupt Request) 的中断方式,也引入了新的消息中断方式。

在传统的基于IRQ的中断方式中,每个设备有一个单独的IRQ线路,通过IRQ共享来减少中断的开销。这种方式在较老的PCI设备中比较常见。

在新的消息中断方式中,设备使用MSI(Message Signaled Interrupt)或 MSI-X(Message Signaled Interrupt eXtension) 发送中断请求到根设备。MSI使用32位消息地址和32位消息数据,而MSI-X使用更复杂的消息格式。这种方式可以提高中断处理的效率,适用于高性能、高吞吐量的设备。

在PCI Express总线中,中断控制器不再是必需的,根设备可以直接接收和处理中断请求。对于传统的基于IRQ的中断方式,中断控制器仍然需要,但可以通过PCI Express端点驱动程序进行配置和管理。

总之,PCI Express总线的中断机制支持传统基于IRQ的方式和新的消息中断方式,以满足不同设备的需要。

8. PCI Express 总线的差错处理和差错报告

PCI Express总线定义了三种错误报告方式:Completions、Poisoned Packet(又称为错误传递)和Error Message。这些错误类型可以通过设备控制寄存器中的相关位进行使能或者禁止,也可以通过设备状态寄存器相关位查询错误状态。

对于Completions错误,当Request在Completion阶段返回错误状态时,会通过Completion中的状态位向Request返回错误信息。

对于Poisoned Packet错误,当接收端收到一个已经被破坏的TLP数据包时,接收端会返回一个Poisoned

Packet错误,告知发送端该数据包已经被破坏。

对于Error Message错误,当出现致命错误或者某些特定类型的非致命错误时,可以通过Error Message报告错误信息。

对于链路错误,一般发生在物理层与数据链路层通信的过程中。对于Downstream的设备,如果链路上发生了Fatal错误,此时该设备并不能够向Root报告错误。这种情况下,需要Upstream设备向Root来报告错误。

class PCIExpressDevice {
   - 控制寄存器: ControlRegister
   - 状态寄存器: StatusRegister
   + 使能Completions错误()
   + 禁止Completions错误()
   + 使能PoisonedPacket错误()
   + 禁止PoisonedPacket错误()
   + 使能ErrorMessage错误()
   + 禁止ErrorMessage错误()
   + 查询错误状态(): ErrorStatus
}
class DownstreamDevice {
   + 向Root报告错误()
}
class UpstreamDevice {
   + 向Root报告错误()
}
class RootComplex {
   - 错误报告信息: ErrorReport
}
PCIExpressDevice --> ControlRegister
PCIExpressDevice --> StatusRegister
PCIExpressDevice --> ErrorStatus
PCIExpressDevice --> ErrorReport
DownstreamDevice --> UpstreamDevice
UpstreamDevice --> RootComplex
+-------------------+              +----------------+              +----------------+
|    PCI Express    |              |   Root Complex  |              |    Device      |
|                   |              |                 |              |                |
| +---------------+ |   Req to     | +-------------+ |   Req to     |                |
| |   Endpoint      |----------->  | |  Downstream | |----------->  |                |
| |    Device       |     TLP      | |   Port/Link | |     TLP      |                |
| +---------------+ |              | +-------------+ |              |                |
|                   |              |                 |              |                |
+-------------------+              +-----------------+              +----------------+
目录
相关文章
|
1月前
|
缓存 开发者
嵌入式微处理器的系统架构中微处理器的内核架构
嵌入式微处理器的系统架构中微处理器的内核架构
60 0
|
1月前
|
存储 机器学习/深度学习 人工智能
嵌入式中一文搞懂ARM处理器架构
嵌入式中一文搞懂ARM处理器架构
38 1
|
2月前
|
缓存 监控 Java
DP读书:鲲鹏处理器 架构与编程(十四)ACPI与软件架构具体调优
DP读书:鲲鹏处理器 架构与编程(十四)ACPI与软件架构具体调优
95 1
|
2月前
|
安全 前端开发 Linux
DP读书:不知道干什么就和我一起读书吧——以《鲲鹏处理器 架构与编程》中鲲鹏软件的构成为例
DP读书:不知道干什么就和我一起读书吧——以《鲲鹏处理器 架构与编程》中鲲鹏软件的构成为例
40 0
|
7天前
|
敏捷开发 监控 数据管理
构建高效微服务架构的五大关键策略
【4月更文挑战第20天】在当今软件开发领域,微服务架构已经成为一种流行的设计模式,它允许开发团队以灵活、可扩展的方式构建应用程序。本文将探讨构建高效微服务架构的五大关键策略,包括服务划分、通信机制、数据管理、安全性考虑以及监控与日志。这些策略对于确保系统的可靠性、可维护性和性能至关重要。
|
19天前
|
API 数据库 开发者
构建高效可靠的微服务架构:后端开发的新范式
【4月更文挑战第8天】 随着现代软件开发的复杂性日益增加,传统的单体应用架构面临着可扩展性、维护性和敏捷性的挑战。为了解决这些问题,微服务架构应运而生,并迅速成为后端开发领域的一股清流。本文将深入探讨微服务架构的设计原则、实施策略及其带来的优势与挑战,为后端开发者提供一种全新视角,以实现更加灵活、高效和稳定的系统构建。
23 0
|
8天前
|
消息中间件 监控 持续交付
构建高效微服务架构:后端开发的进阶之路
【4月更文挑战第20天】 随着现代软件开发的复杂性日益增加,传统的单体应用已难以满足快速迭代和灵活部署的需求。微服务架构作为一种新兴的分布式系统设计方式,以其独立部署、易于扩展和维护的特点,成为解决这一问题的关键。本文将深入探讨微服务的核心概念、设计原则以及在后端开发实践中如何构建一个高效的微服务架构。我们将从服务划分、通信机制、数据一致性、服务发现与注册等方面入手,提供一系列实用的策略和建议,帮助开发者优化后端系统的性能和可维护性。
|
2天前
|
消息中间件 负载均衡 持续交付
构建高效微服务架构:后端开发者的终极指南
【4月更文挑战第25天】在当今软件工程领域,微服务架构已经成为实现可扩展、灵活且容错的系统的首选模式。本文将探讨如何从零开始构建一个高效的微服务系统,涵盖关键组件的选择、通信机制、数据管理以及持续集成和部署策略。通过深入分析与案例研究,我们旨在为后端开发者提供一个全面的微服务实践指南,帮助他们在构建现代化应用时做出明智的架构决策。
|
3天前
|
消息中间件 持续交付 数据库
构建高效可靠的微服务架构:策略与实践
【4月更文挑战第25天】 随着现代软件开发的复杂性日益增加,传统的单体应用已难以满足快速迭代和灵活部署的需求。本文深入探讨了如何构建一个高效且可靠的微服务架构,包括关键的设计原则、技术选型以及实践中的挑战和应对策略。通过分析多个成功案例,我们总结了一系列最佳实践,并提出了一套可量化的性能优化方法。文章不仅为开发者提供了具体的技术指导,同时也强调了团队协作和持续学习在微服务转型过程中的重要性。