介绍PCIe之前要搞清楚的问题,为什么要用PCIe总线?

首先PCI总线存在的下列缺陷:

(1)带宽问题

PCI 总线的最高工作频率为66M,最大位宽为64b,从理论上讲,PCI 总线可以提供的最大传输带宽为532MB。然而 PCI 总线作为一个共享总线,在其上的所有 PCI 设备必须要共享PCI 总线的带宽。同时由于 PCI 总线的协议开销,导致 PCI 总线可以实际利用的数据带宽远小于其峰值带宽。

(2)服务质量问题

PCI 总线在设计之初并没有考虑服务质量的问题。有些实时数据采集卡,音频或者视频的多媒体应用需要 PCI 总线提供额定带宽,而 PCI 总线上的设备只能轮流使用 PCI总线,当一个设备长期占用 PCI 总线时,将阻止其他 PCI 设备使用 PCI 总线,从而影响了PCI 总线的传送质量。

为什么要用PCIe:

(1)带宽问题

PCIe 总线可以提供更大的总线带宽,PCIe V3.0支持的最高总线频率为4GHz,远高于 PCI、PCI-X 总线提供的最高总线频率。

(2)服务质量

PCIe 总线支持虚通路 VC(Virtual Channel)技术,优先级不同的数据报文可以使用不同的虚通路,而每一路虚通路可以独立设置缓冲,从而相对合理地解决了数据传送过程中存在的服务质量问题。

(3)兼容性

PCIe 总线在系统软件级与 PCI 总线兼容,基于 PCI 总线的系统软件几乎可以不经修改直接移植到 PCIe 总线中。绝大多数 PCI/PCI-X 总线使用的总线事务都被 PCIe 总线保留,而PCI 设备使用的配置空间也被 PCIe 总线继承。基于 PCI 体系结构的系统编程模型,几乎可以在没有本质变化的前提下,直接在 PCIe 体系结构中使用。

(4)功能性增强

PCIe总线增加了相比PCI总线没有的新的特性,与 PCI 总线相比,PCIe总线使用端到端的连接方式,添加流量控制机制,并对“访问序”做出了进一步优化。在保证兼容性的情况下。使其功能得到进一步拓展。

一、基础认识

1.1 端对端的数据传递

PCIe 链路使用“端到端的数据传送方式”,发送端和接收端中都含有 TX(发送逻辑)和RX(接收逻辑),其结构如下图:

由上图所示,在 PCIe 总线的物理链路的一个数据通路(Lane)中,由两组差分信号,共4根信号线组成。其中发送端的 TX 部件与接收端的 RX 部件使用一组差分信号连接,该链路也被称为发送端的发送链路,也是接收端的接收链路;而发送端的 RX 部件与接收端的 TX 部件使用另一组差分信号连接,该链路也被称为发送端的接收链路,也是接收端的发送链路。一个 PCIe 链路可以由多个 Lane 组成。

高速差分信号电气规范要求其发送端串接一个电容,以进行 AC 耦合。该电容也被称为AC 耦合电容。PCIe 链路使用差分信号进行数据传送,一个差分信号由 D+和 D-两根信号组成,信号接收端通过比较这两个信号的差值,判断发送端发送的是逻辑“1”还是逻辑“0”。与单端信号相比,差分信号抗干扰的能力更强,因为差分信号在布线时要求“等长”、“等宽”、“贴近”,而且在同层。因此外部干扰噪声将被“同值”而且“同时”加载到D+和 D-两根信号上,其差值在理想情况下为0,对信号的逻辑值产生的影响较小。因此差分信号可以使用更高的总线频率。

此外使用差分信号能有效抑制电磁干扰 EMI(Electro Magnetic Interference)。由于差分信号 D+与 D-距离很近而且信号幅值相等、极性相反。这两根线与地线间耦合电磁场幅值相等,将相互抵消,因此差分信号对外界的电磁干扰较小。当然差分信号的缺点也是显而易见的,一是差分信号使用两根信号传送一位数据;二是差分信号的布线相对严格一些。PCIe 链路可以由多条 Lane 组成,目前 PCIe 链路可以支持1、2、4、8、12、16和32个Lane,即×1、×2、×4、×8、×12、×16和×32宽度的 PCIe 链路。每一个 Lane 上使用的总线频率与 PCIe 总线使用的版本相关。下图为个版本对应总线频率

1.2 PCIe总线使用的信号

PCIe 设备使用两种电源信号供电,分别是 V cc 与 V aux ,其额定电压为3.3V。其中 V cc 为主电源,PCIe 设备使用的主要逻辑模块均使用 V cc 供电,而一些与电源管理相关的逻辑使用 V aux供电。

在 PCIe 设备中,一些特殊的寄存器通常使用 V aux 供电,如 Sticky Register,此时即使 PCIe 设备的 V cc 被移除,这些与电源管理相关的逻辑状态和这些特殊寄存器的内容也不会发生改变。在 PCIe 总线中,使用 V aux 的主要原因是为了降低功耗和缩短系统恢复时间。除链路上的差分收发信号外,还包括下列辅助信号:

(1)PERST#信号 --- 复位PCId插槽和PCIe设备信号

(2)REFCLK+和 REFCLK-信号 --- 同步时钟信号

(3)WAKE#信号 --- 当 PCIe 设备进入休眠状态,主电源已经停止供电时,PCIe 设备使用该信号向处理器系统提交唤醒请求,使处理器系统重新为该 PCIe 设备提供主电源 V cc 。

(4)PRSNT1#和 PRSNT2#信号 --- PRSNT1#和 PRSNT2#信号与 PCIe 设备的热插拔相关。

1.3 PCIe总线层次结构

在 PCIe 总线中,数据报文在接收和发送过程中,需要通过多个层次,包括事务层、数据链路层和物理层。PCIe总线的层次结构如下图所示:

  1. 事务层

事务层接收来自 PCIe 设备核心层的数据,并将其封装为 TLP(Transaction Layer Packet)后,发向数据链路层。此外事务层还可以从数据链路层中接收数据报文,然后转发至 PCIe设备的核心层。事务层的一个重要工作是处理 PCIe 总线的“序”。

  1. 数据链路层

数据链路层保证来自发送端事务层的报文可以可靠、完整地发送到接收端的数据链路层。来自事务层的报文在通过数据链路层时,将被添加 Sequence Number 前缀和 CRC 后缀。数据链路层使用 ACK/NAK 协议保证报文的可靠传递。

PCIe 总线的数据链路层还定义了多种 DLLP(Data Link Layer Packet),DLLP 产生于数据链路层,终止于数据链路层。值得注意的是,TLP 与 DLLP 并不相同,DLLP 并不是由 TLP加上 Sequence Number 前缀和 CRC 后缀组成的。

(3)物理层

物理层是 PCIe 总线的最底层,将 PCIe 设备连接在一起。PCIe 总线的物理层定义了 LTSSM(Link Training and Status State Machine)状态机,PCIe 链路使用该状态机管理链路状态,并进行链路训练、链路恢复和电源管理。

1.4 PCIe链路的扩展

PCIe 链路使用端到端的数据传送方式。在一条 PCIe 链路中,这两个端口是完全对等的,分别连接发送与接收设备,而且一个 PCIe 链路的一端只能连接一个发送设备或者接收设备。因此 PCIe 链路必须使用 Switch 扩展 PCIe 链路后,才能连接多个设备。使用 Switch 进行链路扩展的实例如下图。

在 Switch 中,还有两个与端口相关的概念,分别是 Egress 端口和 Ingress 端口。这两个端口与通过 Switch 的数据流向有关。其中 Egress 端口指发送端口,即数据离开 Switch使用的端口;Ingress 端口指接收端口即数据进入 Switch 使用的端口。

二、PCIe总线的组成

PCIe 总线作为处理器系统的局部总线,其作用与 PCI 总线类似,主要目的是为了连接处理器系统中的外部设备,在大多数处理器系统中,都使用了 RC、switch和 PCIe-to-PCI 桥这些基本模块连接 PCIe 和 PCI 设备。在 PCIe 总线中,基于 PCIe 总线的设备,也被称为 EP(Endpoint)。

2.1 x86结构PCIe结构

PCIe 总线使用端到端的连接方式,因此只有使用 Switch 才能对 PCIe 链路进行扩展,而每扩展一条 PCIe 链路将产生一个新的 PCI 总线号。Switch 可以将1个×8的 PCIe 端口扩展为4个×2的 PCIe 端口,其中每一个 PCIe 端口都可以挂接 EP。除此之外 PCIe总线还可以使用 PCIe 桥,

将 PCIe 总线转换为 PCI 总线或者 PCI-X 总线,之后挂接 PCI/PCI-X设备。多数 x86处理器系统使用这种结构连接 PCIe 或者 PCI 设备。在 PCIe 总线规范中并没有明确提及 PCIe 主桥,而使用 RC 概括除了处理器之外的所有与 PCIe 总线相关的内容。

2.2 基于 PCIe 总线的通用处理器结构

一个 RC 中可以提供多个 PCIe 端口,这种 RC 也被称为多端口 RC。

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

2.3 RC的组成

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

不同处理器系统的 RC 设计并不相同,有些处理器中并不存在真正意义上的 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中。

2.4 Switch

一个 PCIe 链路需要挂接多个 EP 时,需要使用 Switch 进行链路扩展。一个标准 Switch具有一个上游端口和多个下游端口。上游端口与 RC 或者其他 Switch 的下游端口相连,而下游端口可以与 EP、PCIe-to-PCI-X/PCI 桥或者下游 Switch 的上游端口相连。

从系统软件的角度上看,Switch 内部由多个 PCI-to-PCI 桥组成,其中每一个上游和下游端口都对应一个虚拟 PCI 桥。在一个 Switch 中有多个端口,在其内部就有多少个虚拟 PCI 桥,就有多少个 PCI 桥配置空间。

Switch需要处理 PCIe 总线传输过程中的 QoS 问题。PCIe 总线的 QoS 要求 PCIe 总线区别对待优先权不同的数据报文,而且无论 PCIe 总线的某一个链路多么拥塞,优先级高的报文, 且 PCIe 总线需要保证优先级较高的报文优先到达。PCIe 总线采用虚拟多通路 VC 技术,并在这些数据报文设定一个 TC(Traffic Class)标签,该标签由3位组成,将数据报文根据优先权分为8类,这8类数据报文可以根据需要选择不同的 VC 进行传递。

2.5 VC 和端口仲裁

在 Switch 中存在多个端口,其中来自不同 Ingress 端口的报文可以发向同一个 Egress端口,因此 Switch 必须要解决端口仲裁和路由选径的问题。所谓端口仲裁指来自不同Ingress 端口的报文到达同一个 Egress 端口的报文通过顺序。

在一个 Switch 中设有仲裁器,该仲裁器规定了数据报文通过 Switch 的规则。在 PCIe总线中存在两种仲裁机制,分别是基于 VC 和基于端口的仲裁机制。端口仲裁机制主要针对RC 和 Switch,当多个 Ingress 端口需要向同一个 Egress 端口发送数据报文时需要进行端口仲裁。具体地讲,在 PCIe 体系结构中有三个端口,需要进行端口仲裁。

  1. Switch 的 Egress 端口
  2. 多端口 RC 的 Egress 端口
  3. RC 通往主存储器的端口

2.6 PCIe-to-PCI/PCI-X 桥片

本篇将 PCIe-to-PCI/PCI-X 桥片简称为 PCIe 桥片。该桥片有两个作用。

  1. 将 PCIe 总线转换为 PCI 总线,以连接 PCI 设备。
  2. 将 PCI 总线转换为 PCIe 总线(这也被称为 Reverse Bridge),连接 PCIe 设备。

三、PCIe 设备的扩展配置空间

前面讲述了 PCI 设备使用的基本配置空间。这个基本配置空间共由64个字节组成,其地址范围为0x00~0x3F,这64个字节是所有 PCI 设备必须支持的。事实上,许多PCI 设备也仅支持这64个配置寄存器。

此外 PCI/PCI-X 和 PCIe 设备还扩展了0x40~0xFF 这段配置空间,在这段空间主要存放一些与 MSI 或者 MSI-X 中断机制和电源管理相关的 Capability 结构。其中所有能够提交中断请求的 PCIe 设备,必须支持 MSI 或者 MSI-X Capability 结构

PCIe 设备还支持0x100~0xFFF 这段扩展配置空间。PCIe 设备使用的扩展配置空间最大为4KB,在 PCIe 总线的扩展配置空间中,存放 PCIe 设备所独有的一些 Capability 结构,而PCI 设备不能使用这段空间

其中每一个 Capability 结构都有唯一的 ID 号,每一个 Capability 寄存器都有一个指针,这个指针指向下一个 Capability 结构,从而组成一个单向链表结构,这个链表的最后一个 Capability 结构的指针为0。

PCI相关(3)- PCIe概述相关推荐

  1. PCI相关(5)- PCIe总线事务-TLP报文

    4.3 存储器.I/O 和配置读写请求 TLP 在 PCIe 总线中,存储器读写,I/O读写和配置读写请求TLP 由以下几类报文组成. 存储器读请求 TLP 和读完成 TLP 当 PCIe 主设备,R ...

  2. PCI相关(6)- PCIe中断-MSI/MSIX

    在 PCI 总线中,通过INTx 引脚提交中断请求,而 MSI 机制是一个可选机制.而在 PCIe 总线中,PCIe 设备必须支持 MSI 或者 MSI-X 中断请求机制,而可以不支持 INTx 中断 ...

  3. PCI相关(4)- PCIe总线事务-TLP格式及路由

    事务层是 PCIe 总线层次结构的最高层,该层次将接收 PCIe 设备核心层的数据请求,并将其转换为 PCIe 总线事务,PCIe 总线使用的这些总线事务在 TLP 头中定义.PCIe 总线继承了 P ...

  4. 【硬件相关】PCIe组件配置说明

    一.PCIe介绍 1.前言 1.1.PCIe概述 PCI Express(peripheral component interconnect express)是INTEL提出的新一代的总线接口,PCI ...

  5. 【ceph相关】pcie ssd相关问题处理

    一.前言 1.背景 基于高性能计算场景,我们常常需要用到一些高性能的SSD作为缓存加速,譬如pcie ssd等,本文主要记录在使用pcie ssd作为ceph osd时遇到的一些问题及对应处理方法 2 ...

  6. Linux设备驱动程序——PCI相关知识的学习

    PCI相关的知识的学习 一.首先了解一下PCI相关的一些基础知识: PCI总线的结构: PCI总线结构是一种层次型的体系结构,在这个结构体中PCI桥设备占据重要的地位.将父总线和子总线连接在一起,使得 ...

  7. 采用pci的插槽计算机,从VGA视频采集卡看PCI插槽与PCI-E插槽

    带宽和数据传输速率.压缩等一直视频采集卡的性能标准,而视频采集卡是连接视频源和计算机的桥梁,这些都与计算机数据传输协议和数据传输总线.信号控制器等有着密切关系,在采集卡的板卡中都有两个连接设备,一个是 ...

  8. PCI相关(2)- PCI桥与配置

    一.存储域和总线域 在PCI 体系结构中,含有两类桥片,一个是 HOST 主桥,另一个是 PCI 桥.在每一个 PCI设备中(包括 PCI 桥)都含有一个配置空间.这个配置空间由 HOST 主桥管理, ...

  9. PCI相关(1)- 基础认识

    一.简介 在处理器体系结构中,PCI 总线属于局部总线(Local Bus).主要功能是为了连接外部设备.PCI 总线推出之后,迅速统一了当时并存的各类局部总线.EISA.VESA 等其他32位总线很 ...

最新文章

  1. tensorflow1.14.0  包含了1.x和2.x内容,此后版本要求兼容该版本
  2. Unity3d中角色模型和角色名字保持相对位置
  3. 细节无处不在!东莞网络推广分享哪些操作会影响网站优化效果?
  4. 开发日记-20190504 关键词 汇编语言(三)
  5. 对象并不一定都是在堆上分配内存的
  6. GPIO8种方式小总结
  7. java中map如何实现遍历_Java中如何遍历Map对象的4种方法
  8. java冒泡测试代码,冒泡排序(java可直接跑,算法思想等小儿科不多说直接上代码)...
  9. 迁移mysql数据目录
  10. docker搭建私有registry
  11. sort 升序还是降序?priority_queue 大根堆还是小根堆?
  12. EEGLAB如何进行ERPs数据处理你都会了吗?看这里保证你一劳永逸的get ERPs数据处理技能
  13. 好用的各种文件在线转换工具,文件加密解密等Speedpdf
  14. 操作系统---处理器调度
  15. photoshop抠图
  16. PyQt之QSS美化
  17. cmd.exe显示窗口大小和字体大小调整
  18. WSTMart 视频教程,WSTMart 开发文档
  19. 使用nvm管理node
  20. Nexus搭建Maven私服全攻略一:认识Nexus与索引

热门文章

  1. Android 从6.0,7.0,8.0,9.0,10.0的特性整理和适配方案(不好含全部新特性,总结了一些可能应用中会遇到的)
  2. AD域是什么意思?有什么用?
  3. 软件工程国考总结——选择题
  4. uniapp扫码功能兼容h5
  5. Java当中的循环语句
  6. 找不到中文语音预训练模型?中文版 Wav2vec 2.0和HuBERT来了,腾讯游戏和西工大联合出品...
  7. oraclel 存储过程优化方法概论
  8. RANSAC 激光雷达地面检测 (1)
  9. natapp九折邀请码
  10. 8年经验分享:想要成为一名合格的软件测试工程师,你得会些啥?