PCIe 体系结构简介

Peter 于 2020-11-08 发布

PCIe的历史

PCIe是在PCI(Peripheral Component Interconnect)的基础上发展而来的。而PCI则是Intel在1992年提出的一套总线协议,并召集其它的小伙伴组成了名为 PCI-SIG (PCI Special Interest Group)(PCI 特殊兴趣组)的企业联盟。 这个组织就负责PCI和其继承者们(PCI-X和PCIe的标准制定和推广)。 PCIeIOTransferRate PCI的提出是为了解决当时的ISA/EISA,MCA,VLB等总线速度太慢,接口混乱不统一而提出的,因为它的统一和开放,PCI获得了厂商的欢迎和支持,各种PCI设备应运而生丰富了PC的生态。虽然PCI总线获得了巨大的成功,但是随着CPU主频的不断提高,PCI总线的带宽越来越难以满足要求。PCI总线不断的升级从32位/33MHz扩展到64位/64MHz,PCI-X甚至提升到了533MHz,最大理论带宽为4263MB。但是仍然无法解决其体系结构中存在的一些先天不足:

  1. PCI是共享总线,总线上的所有设备必须共享带宽,另外总线协议还有一些开销,虽然64位/64MHz理论上可以提供最大带宽为532MB,但是实际可以利用的数据带宽远低于峰值。

  2. PCI总线是并行的,它通过提高总线频率和位宽的方式增加传输带宽,但是这种方式的性价比比较低,因为位宽的增加需要更多的芯片管脚,从而导致64位的芯片价格远高于32位,另外在主板设计的时候也需要更多层的PCB实现64位芯片接口,增加成本和布线 难度;而且因为频率和位宽的增加带来了信号完整性的问题,也影响了总线的负载能力。比如33MHz的总线可以驱动10个负载,66MHz的总线最多只能渡情4个负载。

  3. PCI总线并没有考虑服务质量QoS,因为PCI总线是并行的主从式的总线,总线上的设备只能轮流使用PCI总线,当一个设备长期占用总线时将阻止其他设备对总线的使用但是有些实时的设备如数据采集卡,音频或者视频的应用需要额定的带宽,因此就没法得0以 满足。

PCIe如何解决PCI体系结构存在的问题的呢?

  1. PCIe使用了高速差分总线端到端的连接方式替代并行总线,与并行总线相比高速差分信号可以使用更高的时钟频率,而且更少的信号线实现之前需要更多的芯片管脚才能实现的总线带宽,而且与单端信号相比差分信号的抗干扰能力更强。

  2. PCIe使用了网络通信中使用的技术如基于多种数据路由方式,报文数据传送,以及Traffic class和virtual channel结束数据传输过程中的QoS问题。

  3. PCIe的链路可以由多条Lane组成,换句话来说它的性能可扩展。可以像搭积木一样增加Lane或者减少Lane的组合来提高性能。

  4. PCIe总线在系统软件编程上和PCI总线兼容,绝大多数的PCI总线事务都被PCIe总线保留,PCI设备的配置空间也被PCIe继承。

PCIe总线基础

PCIe 从2003年的1.0版本开始到现在的6.0经历了数次更新,速度从2.5GT/s提升到了65GT/s。 PCIeHistory PCIe采用了端到端的全双工的传输设计,基于数据包的传输,设备之间通过link相连,link支持1到32个通道(lane)。 PCIeLink PCIeLane 每个链路可以包含多达32个通道。 PCIeLinkBig PCIe 采用了差分信号对数据进行收发,以提高总线的性能 。 除了差分总线,PCIe还引入了嵌入式时钟的技术(Embedded Clock),即发送端不再向接收端发送时钟,但是接收端可以通过8b/10b,128b/130b的编码从数据Lane中恢复出时钟。 PCIeEmClock

PCIe总线的层次结构

PCIe使用串行的基于数据包的传输方式,这种方式有效的去除了PCI总线中存在的一些sideband信号如INT#,PME#。 PCIe总线是分层实现的,它包含多个层次,从上到下分别是应用层(也就是下图中的Device Core,PCIe Core HW/SW Interface),事务层(Transaction Layer),数据链路层(Data Link Layer),物理层(Physical Layer),其中,应用层并不是PCIe Spec所规定的内容,完全由用户根据自己的需求进行设计,另外三层都是PCIe Spec明确规范的,并要求设计者严格遵循的。PCIe的层次结构有点类似TCP/IP的协议实现,不过PCIe的各个层次都是通过硬件逻辑实现的。发送时数据报文先由应用层产生,然后经过事务层,数据链路层和物理层最终发送出去。接收端则是相反的一个步骤,数据先经过物理层,然后向上送给数据链路层,事务层,最后到达应用层。 PCIeLayer PCIeLayerR

PCIe体系的拓扑结构

PCIe作为局部总线主要是用来处理器系统中的外部设备,当然它也可以用来连接其他的处理器系统。在大多数处理器系统中都使用了RC,Switch和PCIe-PCI桥等模块用来连接PCIe和PCI设备。 PCIeSysOV

PCIe的软件编程接口

Refer:

1. PCI Express Technology 3.0

2. PCI-SIG – PCI Special Interest Group

3. PCIe扫盲系列博文