在我们看PCIe是什么之前,我们应该要了解一下PCIe的祖先们,这样我们才能对PCIe的一些设计有了更深刻的理解,并感叹计算机技术的飞速发展和工程师们的不懈努力。
PCI (Peripheral Component Interconnect)
PCI Express (Peripheral Component Interconnect Express)

以上可以看到主频越来越高,从最初的ISA一直发展到后来的pcie3.0

**

1、PCI接口

**

1、一个典型的桌面系统PCI架构如下图:

如图,桌面系统一般只有一个Host Bridge用于隔离处理器系统的存储器域与PCI总线域,并完成处理器与PCI设备间的数据交换。每个Host Bridge单独管理独立的总线空间,包括PCI Bus, PCI I/O, PCI Memory, and PCI
Prefetchable Memory Space。桌面系统也一般只有一个Root Bridge,每个Root Bridge管理一个Local Bus空间,它下面挂载了一颗PCI总线树,在同一颗PCI总线树上的所有PCI设备属于同一个PCI总线域。一颗典型的PCI总线树如图:

从图中我们可以看出 PCI 总线主要被分成三部分:

  1. PCI 设备。符合 PCI 总线标准的设备就被称为 PCI 设备,PCI 总线架构中可以包含多个 PCI 设备。图中的 Audio、LAN 都是一个 PCI 设备。PCI 设备同时也分为主设备和目标设备两种,主设备是一次访问操作的发起者,而目标设备则是被访问者。

  2. PCI 总线。PCI 总线在系统中可以有多条,类似于树状结构进行扩展,每条 PCI 总线都可以连接多个 PCI 设备/桥。上图中有两条 PCI 总线。

  3. PCI 桥。当一条 PCI 总线的承载量不够时,可以用新的 PCI 总线进行扩展,而 PCI 桥则是连接 PCI 总线之间的纽带。

服务器的情况要复杂一点,举个例子,如Intel志强第三代四路服务器,共四颗CPU,每个CPU都被划分了共享但区隔的Bus, PCI I/O, PCI Memory范围,其构成可以表示成如下图:

可以看出,只有一个Host Bridge,但有四个Root Bridge,管理了四颗单独的PCI树,树之间共享Bus等等PCI空间。

2、PCI标准有什么特点吗?

  1. 它是个并行总线。在一个时钟周期内32个bit(后扩展到64)同时被传输。引脚定义如下:

    地址和数据在一个时钟周期内按照协议,分别一次被传输。

  2. PCI空间与处理器空间隔离。PCI设备具有独立的地址空间,即PCI总线地址空间,该空间与存储器地址空间通过Host bridge隔离。处理器需要通过Host bridge才能访问PCI设备,而PCI设备需要通过Host bridge才能主存储器。在Host bridge中含有许多缓冲,这些缓冲使得处理器总线与PCI总线工作在各自的时钟频率中,彼此互不干扰。Host bridge的存在也使得PCI设备和处理器可以方便地共享主存储器资源。处理器访问PCI设备时,必须通过Host bridge进行地址转换;而PCI设备访问主存储器时,也需要通过Host bridge进行地址转换。

深入理解PCI空间与处理器空间的不同是理解和使用PCI的基础。

3.扩展性强。PCI总线具有很强的扩展性。在PCI总线中,Root Bridge可以直接连出一条PCI总线,这条总线也是该Root bridge所管理的第一条PCI总线,该总线还可以通过PCI桥扩展出一系列PCI总线,并以Root bridge为根节点,形成1颗PCI总线树。在同一条PCI总线上的设备间可以直接通信,并不会影响其他PCI总线上设备间的数据通信。隶属于同一颗PCI总线树上的PCI设备,也可以直接通信,但是需要通过PCI桥进行数据转发。

**

2、PCIe架构

**
PCI后期越来越不能适应高速发展的数据传输需求,随着频率的提高,PCI并行传输遇到了干扰的问题:高速传输的时候,并行的连线直接干扰异常严重,而且随着频率的提高,干扰(EMI)越来越不可跨越。

PCIe和PCI最大的改变是由并行改为串行,通过使用差分信号传输(differential transmission),如图

相同内容通过一正一反镜像传输,干扰可以很快被发现和纠正,从而可以将传输频率大幅提升。加上PCI原来基本是半双工的(地址/数据线太多,不得不复用线路),而串行可以全双工。与单端并行信号相比,高速差分信号可以使用更高的时钟频率,从而使用更少的信号线,完成之前需要许多单端并行数据信号才能达到的总线带宽。

PCIe还在很多方面和PCI有很大不同:

  1. PCI总线使用并行总线结构,在同一条总线上的所有外部设备共享总线带宽,而PCIe总线使用了高速差分总线,并采用端到端的连接方式,因此在每一条PCIe链路中只能连接两个设备。
    一个典型的PCIe系统框图如下:

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

    由上图所示,在PCIe总线的物理链路的一个数据通路(Lane)中,由两组差分信号,共4根信号线组成。一个PCIe链路可以由多条Lane组成,目前PCIe链路可以支持1、2、4、8、12、16和32个Lane,即×1、×2、×4、×8、×12、×16和×32宽度的PCIe链路。每一个Lane上使用的总线频率与PCIe总线使用的版本相关。

高速差分信号电气规范要求其发送端串接一个电容,以进行AC耦合。该电容也被称为AC耦合电容。PCIe链路使用差分信号进行数据传送,一个差分信号由D+和D-两根信号组成,信号接收端通过比较这两个信号的差值,判断发送端发送的是逻辑“1”还是逻辑“0”。

  1. PCIe的连线是由不同的lane来连接的,这些lane可以合在一起提供更高的带宽。譬如两个1lane可以合成2lane的连接,写作x2。两个x2可以变成x4,最大直到x16,往往给带宽需求最大的显卡使用。

  2. PCI配置空间从256B扩展为4k,同时提供了PCIe memory map访问方式,我们在软件部分会详细介绍。

4.PCIe提供了很多特殊功能,如Complete Timeout(CTO),MaxPayload等等几十个特性,而且还在随着PCIe版本的进化不断增加中,对电源管理也提出了单独的State(L0/L0s/L1等等)。这些请参见PCIe 3.0 spec,本文不再详述。

  1. 其他VC的内容,和固件理解无关,本文不再提及。INT到MSI的部分会在将来介绍PC中断系统时详细讲解。

PCIe 1.0和2.0采用了8b/10b编码方式,这意味着每个字节(8b)都用10bit传输,这就是为什么2.5GHz和5GHz时钟,每时钟1b数据,结果不是312.5MB/s和625MB/s而是250MB/s和500MB/s。PCIe 3.0和4.0采用128b/130b编码,减小了浪费(overhead),所以才能在8GHz时钟下带宽达到1000MB/s(而不是800MB/s)。即将于今年发布的PCIe 4.0还会将频率提高一倍,达到16GHz,带宽达到2GB/s每Lane。

6、PCIe总线采用了串行连接方式,并使用数据包(Packet)进行数据传输,采用这种结构有效去除了在PCI总线中存在的一些边带信号,如INTx和PME#等信号。在PCIe总线中,数据报文在接收和发送过程中,需要通过多个层次,包括事务层、数据链路层和物理层。PCIe总线的层次结构如图44所示。

PCIe总线的层次组成结构与网络中的层次结构有类似之处,但是PCIe总线的各个层次都是使用硬件逻辑实现的。在PCIe体系结构中,数据报文首先在设备的核心层(Device Core)中产生,然后再经过该设备的事务层(Transaction Layer)、数据链路层(Data Link Layer)和物理层(Physical Layer),最终发送出去。而接收端的数据也需要通过物理层、数据链路和事务层,并最终到达Device Core。

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

**

3、后记

**
对于一般用户来说,PCIe对用户可见的部分就是主板上大大小小的PCIe插槽了,有时还和PCI插槽混在一起,造成了一定的混乱,其实也很好区分:

如图,PCI插槽都是等长的,防呆口位置靠上,大部分都是纯白色。PCIe插槽大大小小,最小的x1,最大的x16,防呆口靠下。各种PCIe插槽大小如下:

常见问题:

Q:我主板上没有x1的插槽,我x1的串口卡能不能插在x4的插槽里。

A: 可以,完全没有问题。除了有点浪费外,串口卡也将已x1的方式工作。

Q:我主板上只有一个x16的插槽,被我的显卡占据了。我还有个x16的RAID卡可以插在x8的插槽内吗?

A: 你也许会惊讶,但我的答案同样是:可以!你的RAID卡将以x8的方式工作。实际上来说,你可以将任何PCIe卡插入任何PCIe插槽中! PCIe在链接training的时候会动态调整出双方都可以接受的宽度。最后还有个小问题,你根本插不进去!呵呵,有些主板厂商会把PCIe插槽尾部开口,方便这种行为,不过很多情况下没有。这时怎么办?你懂的。。。。

Q: 我的显卡是PCIe 3.0的,主板是PCIe2.0的,能工作吗?

A: 可以,会以2.0工作。反之,亦然。

Q: 我把x16的显卡插在主板上最长的x16插槽中,可是benchmark下来却说跑在x8下,怎么回事?!

A: 主板插槽x16不见得就连在支持x16的root port上,最好详细看看主板说明书,有些主板实际上是x8。有个主板原理图就更方便了。

Q: 我新买的SSD是Mini PCIe的,Mini PCIe是什么鬼?

A: Mini PCIe接口常见于笔记本中,为54pin的插槽。多用于连接wifi网卡和SSD,注意不要和mSATA弄混了,两者完全可以互插,但大多数情况下不能混用(除了少数主板做了特殊处理),主板设计中的防呆设计到哪里去了!请仔细阅读主板说明书。另外也要小心不要和m.2(NGFF)搞混了,好在卡槽大小不一样。

无线专题 PCI接口与PCIe接口相关推荐

  1. AHCI协议、NVME协议、SATA总线、PCIe总线、SATA接口、PCIe接口、M.2接口

    内容来自 硬件茶谈 硬盘的SATA M.2 NGFF NVME是什么意思,详解硬盘的总线协议与接口 侵删. 一.协议 AHCI和NVME协议民用很多,而SCSI协议大多用在服务器上. 二.总线   总 ...

  2. AGP与PCI-E的区别 PCI-E接口与PCI接口的区别

    AGP(Accelerate Graphical Port)加速图形接口 PCI-E是PCI Express的简称,是用来代替PCI.AGP接口规范的一种新标准,由PCI或AGP的并行数据传输变为串行 ...

  3. ISA、PCI、AGP、PCI-E接口

    <1>.ISA总线 最早的PC总线是IBM公司1981年在PC/XT 电脑采用的系统总线,它基于8bit的8088 处理器,被称为PC总线或者PC/XT总线.在1984年的时候,IBM 推 ...

  4. 利用Xilinx FPGA实现PCI Express 2.0接口

    利用Xilinx FPGA实现PCI Express 2.0接口 在现代电子系统中,高速数据传输是非常关键的.PCI Express(Peripheral Component Interconnect ...

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

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

  6. 计算机常见的内部接口,计算机内部接口大全!

    主板是计算机的核心电路平台,作为计算机的骨干和中枢神经,担负着计算机各个硬件的调配及控制功能,其接口数量和复杂程度让很多不熟悉计算机的小伙伴表示看了就头疼. 接下来就为大家盘点主板上的各个内部接口和安 ...

  7. AGP与PCI-E的区别和PCI-E接口与PCI接口的区别

    1. 主要区别是带宽不同,理论上PCI-E比AGP快4倍,因此在其他配置相同的情况下,同核心的PCI-E接口显卡要比AGP接口显卡明显要快.至于快多少就要看厂商了. PCI E的带宽是agp 8x的2 ...

  8. 硬盘接口 PCI-E接口 PCI-E总线 MiniPCIe接口

    固态硬盘的出现,彻底打破了机械硬盘多年来在电脑硬件领域的统治地位.相比于机械硬盘,固态硬盘更高的传输性能,让普通用户和发烧玩家的使用体验均得到了成倍的提升. 在这场存储的革命中,为了实现更快的速度.更 ...

  9. 关于PCI-E接口你要知道这些点

    PCI-E接口作为主板上可能是最大尺寸的接口,其应用范围非常广泛,不仅仅局限于我们经常用到的独立显卡,其他诸如网卡.声卡.图像采集卡等设备也是通过PCI-E标准来使用的. PCI-E接口是主板上比较通 ...

  10. 基于FPGA的PCIe接口实现(具体讲解了数据流向)

    转载自:https://www.cnblogs.com/chengqi521/p/7094544.html 时间:2014-12-09 来源:西安电子科技大学电子工程学院 作者:姜 宁,陈建春,王 沛 ...

最新文章

  1. npm install 报错 npm ERR! code Z_BUF_ERROR 问题解决
  2. 2021年春季学期-信号与系统-第六次作业参考答案-第六小题
  3. matelab的安装
  4. 关于思科三层交换机设置中继链路(trunk)报错!
  5. Paxos、Raft分布式一致性算法应用场景
  6. FL的萌新之路,开始了!
  7. AssertJ的SoftAssertions –我们需要它们吗?
  8. 安卓学习笔记40:基于套接字网络编程
  9. mysql数据库主从不同步_mysql数据库主从不同步的解决方法
  10. Linux安装Gitlab
  11. 基于gdal的格网插值
  12. 文献基础知识、ISI、SCI、JCR
  13. 9.1 Servlet容器实例
  14. 大话存储系列19——数据容灾
  15. 产品经理的常见分类和术语
  16. 学计算机科学与技术的考研方向,计算机科学与技术考研方向?
  17. 关于APP界面布局设计的八种优缺点
  18. 2018年11月25日ICPC焦作站参赛总结
  19. matlab存取面shp
  20. matlab去除红眼代码及详细介绍

热门文章

  1. Github上传代码到main分支
  2. 如何引用维基百科Wikipedia
  3. 正态性检验中的统计量D值和统计量W值如何计算?
  4. 互联网大厂裁掉你的奇葩理由
  5. 十二生肖的相合、相冲、相刑、相害
  6. HCNP——静态路由
  7. Codeforces Round #507 (Div. 2) B - Shashlik Cooking(模拟)
  8. Python学习第五弹【正则表达式】-kidult
  9. 免费客户旅程(Customer Journey Mapping) 示例总汇
  10. 《华为你学不会》读书笔记