问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

PCIe总线详解:组成结构、工作原理与设备管理

创作时间:
作者:
@小白创作中心

PCIe总线详解:组成结构、工作原理与设备管理

引用
CSDN
1.
https://blog.csdn.net/weixin_52467549/article/details/145601162

PCIe(Peripheral Component Interconnect Express)总线是现代计算机系统中用于连接外设的关键技术。本文将详细介绍PCIe的组成结构、与传统PCI总线的区别,以及PCIe设备的类型和寻址方式。

一、组成结构

PCIe的架构主要由以下几个部分组成:Root Complex(RC)、PCIe Bus、Endpoint、Port and Bridge以及Switch。整体架构呈现树状结构。

  • Root Complex(RC):作为PCIe设备树的根节点,CPU通过它与PCIe总线相连,并最终连接到所有的PCIe设备上。RC负责管理外部IO设备,在早期的CPU上,RC是放在北桥(MCU)上,现在则集成进了CPU内部。我们可以通过lspci命令来查看所有的Root Complex。

  • PCIe Bus:PCIe Bus是连接处理器系统中的外部设备的局部总线,类似于传统的PCI总线。PCIe总线采用高速差分总线,并采用端到端的连接方式。在每一条PCIe链路中,两端只能各连接一个设备,如果需要挂载更多的PCIe设备,就需要用到Switch转接器。

  • EndPoint:Endpoint(EP)是PCIe总线上的终端设备,可以是网卡、显卡等。Endpoint是PCIe链路的末端设备,可以是PCIe组件或者是通过PCIe到PCI/PCI-X桥接的PCI组件。每个Endpoint都有自己的配置空间(Configuration Space),用于存储设备的配置信息。

  • port and bridge:在PCIe体系结构中,端口(Port)分为上行端口(Upstream Port)和下行端口(Downstream Port)。上行端口指的是拓扑结构中向上的端口,每个PCIe设备必须且仅能有1个上行端口;下行端口则可以有若干个,用于连接更多的设备。桥(Bridge)提供了一个通往其他总线的接口,例如PCI或PCI-X,或其他的PCIe总线。桥接设备允许不同总线标准之间的通信,使得系统可以兼容更多的设备。

  • switch:Switch是PCIe的转接器设备,用于扩展PCIe端口。它作为数据包的路由器,可以根据数据包提供的路由信息来识别其路由路径。Switch可以有若干个下行端口,一个Switch只有一个上游端口。Switch使得单个PCIe端口上可以连接更多的设备,扩展出更多的PCIe端口,从而构建灵活的系统拓扑。

二、PCIe与PCI的异同

总线差异:

  • PCI:采用共享总线机制,所有外部设备共享总线带宽。传统PCI总线的最高传输速率为264MB/S。
  • PCIe:采用点对点传输方式,每个外部设备都独自拥有一条总线。

传输方式:

  • PCI:使用并行数据传输,多个数据信号同时通过多条线路传输。
  • PCIe:采用串行通信方式,每个链路(Lane)通过一对差分信号传输数据,提高了数据传输效率和距离。

通道配置:

  • PCI:通常只有固定的几种总线宽度,不灵活。
  • PCIe:可以轻松扩展至x1, x2, x4, x8, x16等不同通道配置,以满足不同设备对带宽的需求。

三、PCIe Link

PCIe Link是PCI Express(PCIe)体系结构中的关键组成部分,它指的是两个PCIe设备之间的信号传输路径,具体包括以下几个方面:

  • PCIe Link是两个组件之间的双单工通信路径,由两个端口(Ports)和它们之间相互连接的通道(Lanes)组成。
  • 一个Link由一个或多个收发通道(Lanes)组成。协议规范中的x1、x2、x4、x8、x16和x32表示一个Link中包含1、2、4、8、16或32个Lane。
  • 每个Lane由一对发送差分信号对(Tx+ 和 Tx-)和一对接收差分信号对(Rx+ 和 Rx-)组成,用于数据的发送和接收。

四、PCIe Device

PCIe上连接的设备可以分为两种类型:

  • Type 0:表示一个PCIe上最终端的设备,比如常见的显卡、声卡、网卡等。
  • Type 1:表示一个PCIe Switch或者Root Port。它的主要作用是用来连接其他的PCIe设备,其中PCIe的Switch和网络中的交换机类似。

PCIe上所有的设备,无论是Type 0还是Type 1,在系统启动的时候,都会被分配一个唯一的地址,它有三个部分组成:

  • Bus Number:8 bits,最多256条总线
  • Device Number:5 bits,最多32个设备
  • Function Number:3 bits,最多8个功能

这就是我们常说的BDF(Bus-Device-Function),它类似于网络中的IP地址,一般写作BB:DD.F的格式。在Linux上,我们可以通过lspci命令来查看每个设备的BDF,比如,下面这个FCH SMBus Controller就是00:14.0

$ lspci -t -v
# [Domain:Bus]
\- [0000:00] -+- 00.0  Advanced Micro Devices, Inc. [AMD] Starship/Matisse Root Complex
             # Device.Function
             +- 14.0  Advanced Micro Devices, Inc. [AMD] FCH SMBus Controller

在我们知道了任何一个设备的BDF之后,我们就可以通过它查看到这个设备的详细信息了,如下:

$ lspci -s 00:14.0 -vv
00:14.0 SMBus: Advanced Micro Devices, Inc. [AMD] FCH SMBus Controller (rev 61)
        Subsystem: Super Micro Computer Inc H12SSL-i
        Control: I/O+ Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx+
        Status: Cap- 66MHz+ UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
        IOMMU group: 39
        Kernel driver in use: piix4_smbus
        Kernel modules: i2c_piix4, sp5100_tco
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号