pci和pcie的区别

article/2025/3/4 14:46:09

原文地址:https://blog.csdn.net/u013253075/article/details/80835489

最近在学习驱动开发过程中涉及到PCI相关知识,在网上看了很多文章,良莠不齐,我总结一下比较好的文章分享给大家,那就从源头开始说起。

 

PCI总线和设备树是X86硬件体系内很重要的组成部分,几乎所有的外围硬件都以这样或那样的形式连接到PCI设备树上。虽然Intel为了方便各种IP的接入而提出IOSF总线,但是其主体接口(primary interface)还依然是PCIe形式。我们下面分成两部分介绍PCI和他的继承者PCIe(PCI express):第一部分是历史沿革和硬件架构;第二部分是软件界面和UEFI中的PCI/PCe。

自PC在1981年被IBM发明以来,主板上都有扩展槽用于扩充计算机功能。现在最常见的扩展槽是PCIe插槽,实际上在你看不见的计算机主板芯片内部,各种硬件控制模块大部分也是以PCIe设备的形式挂载到了一颗或者几颗PCI/PCIe设备树上。固件和操作系统正是通过枚举设备树们才能发现绝大多数即插即用(PNP)设备的。那究竟什么是PCI呢?

PCI/PCIe的历史

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

1. ISA (Industry Standard Architecture)

2. MCA (Micro Channel Architecture)

3. EISA (Extended Industry Standard Architecture)

4. VLB (VESA Local Bus)

5. PCI (Peripheral Component Interconnect)

6. PCI-X (Peripheral Component Interconnect eXtended)

7. AGP (Accelerated Graphics Port)

8. PCI Express (Peripheral Component Interconnect Express)

科技的每一步前进都是为了解决前一代中出现的问题,这里的问题就是速度。作为扩展接口,它主要用于外围设备的连接和扩展,而外围设备吞吐速度的提高,往往会倒推接口速度的提升。第一代ISA插槽出现在第一代IBM PC XT机型上(1981),作为现代PC的盘古之作,8位的ISA提供了4.77MB/s的带宽(或传输率)。到了1984年,IBM就在PC AT上将带宽提高了几乎一倍,16位ISA第二代提供了8MB/s的传输率。但其对传输像图像这种数据来说还是杯水车薪。

IBM自作聪明在PS/2产品线上引入了MCA总线,迫使其他几家PC兼容机厂商联合起来捣鼓出来EISA。因为两者都期待兼容ISA,导致速度没有多大提升。真正的高速总线始于VLB,它绑定自己的频率到了当时486 CPU内部总线频率:33MHz。而到了奔腾时代,内部总线提高到了66MHz,给VLB带来了严重的兼容问题,造成致命一击。

Intel在1992年提出PCI(Peripheral Component Interconnect)总线协议,并召集其它的小伙伴组成了名为 PCI-SIG (PCI Special Interest Group)(PCI 特殊兴趣组J)的企业联盟。从那以后这个组织就负责PCI和其继承者们(PCI-X和PCIe的标准制定和推广。

不得不点赞下这种开放的行为,相对IBM当时的封闭,合作共赢的心态使得PCI标准得以广泛推广和使用。有似天雷勾动地火,统一的标准撩拨起了外围设备制造商的创新,从那以后各种各样的PCI设备应运而生,丰富了PC的整个生态环境。

PCI总线标准初试啼声就提供了133MB/s的带宽(33MHz时钟,每时钟传送32bit)。这对当时一般的台式机已经是超高速了,但对于服务器或者视频来说还是不够。于是AGP被发明出来专门连接北桥与显卡,而为服务器则提出PCI-X来连接高速设备。

2004年,Intel再一次带领小伙伴革了PCI的命。PCI express(PCIe,注意官方写法是这样,而不是PCIE或者PCI-E)诞生了,其后又经历了两代,现在是第三代(gen3,3.0),gen4有望在2017年公布,而gen5已经开始起草中。

下面这个大表列出所有的速度比较。其中一些x8,x16的概念后面细节部分有介绍。

从下面的主频变化图中,大家可能注意到更新速度越来越快。

PCI和PCIe架构

1。PCI架构

一个典型的桌面系统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空间。

在某些时候,当服务器连接入大量的PCI bridge或者PCIe设备后,Bus数目很快就入不敷出了,这时就需要引入Segment的概念,扩展PCI Bus的数目。如下例:

如图,我们就有了两个Segment,每个Segment有自己的bus空间,这样我们就有了512个Bus数可以分配,但其他PCI空间因为只有一个Host Bridge所以是共享的。会不会有更复杂的情况呢? 在某些大型服务器上,会有多个Host bridge的情况出现,这里我们就不展开了。

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-X和AGP走了两条略有不同的路径,PCI-x不断提高时钟频率,而AGP通过在一个时钟周期内传输多次数据来提速。随着频率的提高,PCI并行传输遇到了干扰的问题:高速传输的时候,并行的连线直接干扰异常严重,而且随着频率的提高,干扰(EMI)越来越不可跨越。

乱入一个话题,经常有朋友问我为什么现在越来越多的通讯协议改成串行了,SATA/SAS,PCIe,USB,QPI等等,经典理论不是并行快吗?一次传输多个bit不是效率更高吗?从PCI到PCIe的历程我们可以一窥原因。

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

相同内容通过一正一反镜像传输,干扰可以很快被发现和纠正,从而可以将传输频率大幅提升。加上PCI原来基本是半双工的(地址/数据线太多,不得不复用线路),而串行可以全双工。综合下来,如果如果我们从频率提高下来得到的收益大于一次传输多个bit的收益,这个选择就是合理的。我们做个简单的计算:

PCI传输: 33MHz x 4B = 133MB/s

PCIe 1.0 x1: 2.5GHz x 1b = 250MB/s (知道为什么不是2500M / 8=312.5MB吗?)

速度快了一倍!我们还得到了另外的好处,例如布线简单,线路可以加长(甚至变成线缆连出机箱!),多个lane还可以整合成为更高带宽的线路等等。

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

1. PCI是总线结构,而PCIe是点对点结构。一个典型的PCIe系统框图如下:

一个典型的结构是一个root port和一个endpoint直接组成一个点对点连接对,而Switch可以同时连接几个endpoint。一个root port和一个endpoint对就需要一个单独的PCI bus。而PCI是在同一个总线上的设备共享同一个bus number。过去主板上的PCI插槽都公用一个PCI bus,而现在的PCIe插槽却连在芯片组不同的root port上。

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

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

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

5. 其他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。

后记

对于一般用户来说,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://chatgpt.dhexx.cn/article/gtVakGul.shtml

相关文章

大带宽、高速率接口对比---USB、PCIE、SATA、HDMI和以太网等接口

一、PCIE接口 二、USB接口 三、SATA接口 SATA编码方式原始频宽传输速率有效速率排线最长长度SATA1.0 SATA2.08bit/10bit3Gb/s300MB/s275MB/s1MSATA3.08bit/10bit6Gb/s600MB/s560MB/s1MSATA4.0 四、HDMI接口 五、以太网接口 10/100 /1000Mbps 六、桥接芯片 东芝桥接芯…

USB SATA PCIE带宽的换算公式

在服务器测试中,有一个非常重要的模块是存储测试。关于storage,我们经常看到SATA协议和PCIE协议对应的带宽,那么其换算公式是怎样呢,下面来介绍一下 在一些新的技术标准中,为了防止数据在高速传输中出错而加入校验码&a…

SSD接口SATA/PCIE/mSATA/M.2分析

SATAT通道:硬盘——内存——CPU PCIE通道:硬盘——CPU 一、 硬盘传输标准协议AHCI和NVME AHCI(serial Advanced Host Controller Interface) 高级串行ATA功能接口标准 NVME标准相比AHCI有许多优点: 1. 低延迟。面向PCIe SSD产品的NVMe标…

SAS、SATA、PCIe、NVMe

一、SAS的背景 二、 什么是SAS 三、SAS协议层次结构 四、SAS特点 五、SAS的可扩展性 六、SAS连线的原则 七、SATA 八、PCIe 九、为什么用PCIe 十、PCIe协议结构 十一、NVMe 十二、NVMe协议栈 十三、NVMe的优势和应用

iTOP3A5000开发板多路PCIE、SATA、USB3.0等

iTOP3A5000开发板多路PCIE、SATA、USB3.0等 桥片:支持PCIE3.0、USB3.0、SATA3.0、显示接口2路、HDMI和1路VGA、可直接连显示器,另外内置一个网络PHY,片内集成了自研GPU、搭配32位DDR4显存接口,支持16GB显存容量。 底板引出多路PCI…

SATA接口、PCI/PCIe、NVMe的介绍

SATA接口、PCI/PCIe、NVMe的介绍 SATA接口 SATA是Serial ATA的缩写,即串行ATA。 SATA已经完全取代旧式PATA(Parallel ATA或旧称IDE)接口的旧式硬盘,因采用串行方式传输数据而得名。 在数据传输上这一方面,SATA的速度比…

香橙派OrangePi 4 LTS开发板通过Mini PCIE连接SATA硬盘的操作方法

OrangePi 4 LTS是一款瑞芯微RK3399芯片方案的开发板,4G内存16G eMMC存储的配置,板子可以通过排线连接官方的mini PCIE转接板引出mini PCIE接口,以此去接相应外设。本篇将介绍主板连接SATA硬盘的使用方法。 Android下连接使用方法 1) 准备需…

PCIe Receiver内部恢复时钟与本地时钟

本文就PCIe Receiver内部恢复时钟与本地时钟之前的关系根据弹性缓冲的相关资料做一个浅显的学习整理,如有读者发现问题或错误,请慷慨指出,后期也会持续修正优化,谢谢! 对于PCIe总线的数据传输,我们知道其相…

PCIE,USB,SATA速度

USB3.0、PCIe、PCI等各总线速度对比与介绍 需要注意的是,在一些新的技术标准中,为了防止数据在高速传输中出错而加入了校验码,比如PCI-E 2.0、USB 3.0和SATA 3.0中采用的是8/10编码,每10位编码中只有8位是真实数据,这时…

扫盲:SATA、mSATA 、PCIe和M.2——SSD硬盘的接口

SATAT通道:硬盘——内存——CPU PCIE通道:硬盘——CPU 一、 硬盘传输标准协议AHCI和NVME AHCI(serial Advanced Host Controller Interface) 高级串行ATA功能接口标准 NVME标准相比AHCI有许多优点: 1. 低延迟。面向PCIe SSD产品的NVMe标…

HI3559av100的pcie扩展SATA内核配置

项目场景: Hi3559AV100芯片,自带PCIE接口,可以拓展pcie转SATA接口,扩大SSD电子存储设备,在视频采集过程中加大数据存储空间是必要的。 问题描述: 在配置hi3559AV100的pcie转SATA的驱动时,明明…

SSD中,SATA、m2、PCIE和NVME各有什么意义

📄个人主页:你这个小猪 ✨个人简介:Java领域新星菜鸟,随时准备跑路的大二学生 🔥精品专栏:筹划ing 🌈个人名言:技术的深度和广度缺一不可 电脑目前的存储系统主要有传统的机械硬盘和…

PCI、PCIe、Mini PCIe、SATA、mSATA、M.2

PCI && PCIe (Peripheral Component Interconnect,PCI)外设部件互联标准。它是目前个人电脑中使用最为广泛的接口,几乎所有的主板产品上都带有这种插槽。 (Peripheral Component Interconnect Express,PCIe)高速串行计算机扩展总线标…

基于开源SATA核的PCIE-SATA设计

之前写的PCIE-SATA设计论文,摘抄到博客上,供大家参考。摘抄、转载请注明出处。 1. 参考设计 1.1 开源核设计 使用FPGA实现SATA接口主机控制器,国内外在此方面已有研究成果可以借鉴和参考。美国北卡罗莱纳州大学可编程计算机系统实验室&…

[元带你学NVMe协议] PCIE 相对 SATA 的 4 大优势详解

声明 主页:元存储的博客_CSDN博客 依公开知识及经验整理,如有误请留言。 个人辛苦整理,付费内容,禁止转载。 目录 前言:1. 性能有数倍的提升及原因1.1 IO 队列个数1.2 PCI-E是全双工模式1.3 PCI-E通道数量更多1.4 PCIE 持续迭代更新2. 可大幅降低延迟3. 自动功耗状态切换和…

SATA、mSATA 、PCIe和M.2——SSD硬盘的接口详解

SATA、mSATA 、PCIe和M.2——SSD硬盘的接口详解 SATAT通道:硬盘——内存——CPU PCIE通道:硬盘——CPU 一、 硬盘传输标准协议AHCI和NVME AHCI(serial Advanced Host Controller Interface) 高级串行ATA功能接口标准 NVME标准相比AHCI有许多优点&…

[SSD科普] 固态硬盘物理接口SATA、M.2、PCIe常见疑问,如何选择?

前言 犹记得当年Windows 7系统体验指数中,那5.9分磁盘分数,在其余四项的7.9分面前,似乎已经告诉我们机械硬盘注定被时代淘汰。势如破竹的SSD固态硬盘,彻底打破了温彻斯特结构的机械硬盘多年来在电脑硬件领域的统治。SSD数倍于HDD机…

adadad

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也…

Arthas-idea

Arthas官方文档: https://arthas.aliyun.com/doc/commands.html Arthas是一款jvm调控工具,这几天尝试使用了一下,发现有些指令很好用,决定拿出来记录一下。 本地安装启动 curl -O https://arthas.aliyun.com/arthas-boot.jar jav…

Ideaidea

1.点击next. 2.选择安装路径,然后点击next. 3.勾选,然后点击next。 4.点击install. 5.然后点击finsh. 6.然后点击重启IDE,然后点击enter key. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.