自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)
下面这个大表列出所有的速度比较。其中一些x8,x16的概念后面细节部分有介绍。
表1‑1 PCI到PCIe各历程对比
标准 | 时钟 | 传输带宽 | 每时种数据 | 带宽 /MB/s |
---|---|---|---|---|
ISA | 4.77 MHz | 8 | 1 | 4.77 |
ISA | 8 MHz | 160.5 | 0.5 | 8 |
MCA | 5 MHz | 16 | 1 | 10 |
MCA | 5 MHz | 32 | 1 | 20 |
EISA | 8.33 MHz | 32 | 1 | 33.3(16.7 typically) |
VLB | 33 MHz | 32 | 1 | 133 |
PCI | 33 MHz | 32 | 1 | 133 |
PCI-X 66 | 66 MHz | 64 | 1 | 533 |
PCI-X 133 | 133 MHz | 64 | 1 | 1066 |
PCI-X 266 | 133 MHz | 64 | 2 | 2132 |
PCI-X 533 | 133 MHz | 64 | 4 | 4266 |
AGP x1 | 66 MHz | 32 | 1 | 266 |
AGP x2 | 66 MHz | 32 | 2 | 533 |
AGP x4 | 66 MHz | 32 | 4 | 1066 |
AGP x8 | 66 MHz | 32 | 8 | 2133 |
PCIe 1.0 x1 | 2.5 GHz | 1 | 1 | 250 |
PCIe 1.0 x4 | 2.5 GHz | 4 | 1 | 1000 |
PCIe 1.0 x8 | 2.5 GHz | 8 | 1 | 2000 |
PCIe 1.0 x16 | 2.5 GHz | 16 | 1 | 4000 |
PCIe 2.0 x1 | 5 GHz | 1 | 1 | 500 |
PCIe 2.0 x4 | 5 GHz | 4 | 1 | 2000 |
PCIe 2.0 x8 | 5 GHz | 8 | 1 | 4000 |
PCIe 2.0 x16 | 5 GHz | 16 | 1 | 8000 |
PCIe 3.0 x1 | 8 GHz | 1 | 1 | 1000 |
PCIe 3.0 x4 | 8 GHz | 4 | 1 | 4000 |
PCIe 3.0 x8 | 8 GHz | 8 | 1 | 8000 |
PCIe 3.0 x16 | 8 GHz | 16 | 1 | 16000 |
科技的每一步前进都是为了解决前一代中出现的问题,这里的问题就是速度。作为扩展接口,它主要用于外围设备的连接和扩展,而外围设备吞吐速度的提高,往往会倒推接口速度的提升。第一代ISA插槽出现在第一代IBM PC XT机型上(1981),作为现代PC的盘古之作,8位的ISA提供了4.77MB/s的带宽(或传输率)。到了1984年,IBM就在PC AT上将带宽提高了几乎一倍,16位ISA第二代提供了8MB/s的传输率。
之后各个厂家开始针对ISA进行升级,不过后来由于兼容性及速度瓶颈,虽然短暂的出现了EISA和VLB总线,但是最后也被Intel组建的PCI-SIG (PCI Special Interest Group)(PCI 特殊兴趣组J)的企业联盟,提出的PCI(Peripheral Component Interconnect)总线协议(1992)年所取代。
正是由于当时Intel并没有采封闭这一总线,使得PCI得到广泛推广和使用。并且统一之后的PCI总线刺激外围设备制造商进行不断地创新,丰富了整个PC行业的发展。
PCI总线标准第一次提出就提供了133MB/s的带宽(33MHz时钟,每时钟传送32bit)。
2004年,Intel觉得PCI总线还是不够,于是又搞起了小团体革了PCI的命。PCI express(PCIe,注意官方写法是这样,而不是PCIE或者PCI-E)诞生了,以上就是简单的PCIe诞生过程,看似简单,其实是一代代“革命者”不断追求完美才形成今天的PCIe。
从下面的主频变化图中,大家可能注意到更新速度越来越快。
图1‑1 主频变化图
下面简单总结一下PCI标准的特点
1. 它是个并行总线。在一个时钟周期内32个bit(后扩展到64)同时被传输。引脚定义如下:
图1‑4 PCI引脚定义
地址和数据在一个时钟周期内按照协议,分别一次被传输。
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桥进行数据转发。
PCI后期越来越不能适应高速发展的数据传输需求,PCI-X和AGP走了两条略有不同的路径,PCI-x不断提高时钟频率,而AGP通过在一个时钟周期内传输多次数据来提速。随着频率的提高,PCI并行传输遇到了干扰的问题:高速传输的时候,并行的连线直接干扰异常严重,而且随着频率的提高,干扰(EMI)越来越不可跨越。
所以PCIe“拍了拍”PCI,就把PCI“拍在沙滩上”了。