无线专题 PCI接口与PCIe接口

news/2024/12/2 15:56:46/

在我们看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)搞混了,好在卡槽大小不一样。


http://www.ppmy.cn/news/695342.html

相关文章

【kotlin笔记05】kotlin之Lambda表达式、lambda作为函数参数、lambda作为函数返回值、lambda表达式调用的几种方式

这篇文章,主要介绍kotlin之Lambda表达式、lambda作为函数参数、lambda作为函数返回值、lambda表达式调用的几种方式。 目录 一、kotlin笔记 1.1、lambda表达式 (1)无参数有返回值 (2)有参数有返回值

围绕LEADS理念以开发者为中心,华为HDG伴你梦飞扬!(转载)

围绕LEADS理念以开发者为中心,华为HDG伴你梦飞扬! 武汉是我国重要的科研教育基地,普通高校和本科院校数仅次于北京。10月29日,清晨的武汉下着淅沥沥的小雨,为已入冬的城市平添了几分寒意,但是在光谷万科中心…

Java实现微信运动步数(已自测)

点赞再看,养成习惯,全网无BUG的Java实现微信运动步数!!! 目录 开场白 一、下载App 二、导入依赖 三、运行main方法 四、查看步数 总结 开场白 我的室友金莲是一个貌美如花的大美女,在某月黑风高的夜晚…

安卓百度地图之步行路径规划

使用的是百度地图的API,地址是:androidsdk | 百度地图API SDK 步骤一:配置build.gradle dependencies {implementation com.baidu.lbsyun:BaiduMapSDK_Location:9.1.8compile com.baidu.lbsyun:BaiduMapSDK_Map:7.4.0compile com.baidu.lbsy…

执子之手,与子长安:探秘华为运动健康实验室

长安,是一个让中国人流连忘返的词。 它不仅是一座都城和若干王朝的历史记忆,也是中国人最美好的祝愿。长安,长久安康,岁月绵长。 无论在哪个时代,能够与健康紧密相连的东西,都是万千大众最需要的。当一种商…

华为GT Runner 您身边的运动智能管家,周期训练更科学

现代社会快节奏的生活越来越挤压人们运动、休闲的时间,特别是对于上班久坐族而言,健康是在日复一日润物细无声的疲劳和懒惰中消耗的。 也许是意识到这个问题,现在不少消费者逐渐开始重视自身的健康管理,所以购买一款智能手表来辅助…

鸿蒙浏览器是华为,鸿蒙javascript项目开发----华为轻量级运动手表

鸿蒙javascript项目开发----华为轻量级运动手表 鸿蒙javascript项目开发----华为轻量级运动手表 没有人能够熄灭满天星光 每一位开发者,都是华为要汇聚的星星之火 第一个javascript开发鸿蒙app----华为轻量级运动手表 b站学习视频 运行图如下: 我的代码仓库 个人手敲代码,视…

华为穿戴数据同步到微信运动

本人手机华为荣耀畅玩3 ,上星期买的华为手环zero,因为手机本身不支持计步功能,所以数据都来自手环zero。看了说明和手环连接的应用华为穿戴是可以同步数据到微信运动。按说明关联了微信账号,发现数据没同步。于是找解决方法&#…