自PC在1981年被IBM发明以来,主板上就有扩展槽用于扩充计算机功能。现在最常见的扩展槽就是PCIe插槽,PCIe(Peripheral Component Interconnect Express)是继ISA和PCI总线之后的第三代I/O总线,一般翻译为周边设备高速连接标准,由Intel公司提出并推广。PCIe有两种存在的形式,M.2接口形式和PCIe标准插槽,不论哪种形式,它所连接的设备都独享通道带宽,不共享总线带宽。PCIe可拓展性强,可以支持的设备有:显卡、固态硬盘、无线网卡、有线网卡、声卡、视频采集卡、PCIe转接M.2接口、PCIe转USB接口、PCIe转接Tpye-C接口等。
PCIe插槽有x1、x2、x4、x8、x12、x16和x32共计7种版本,对应1/2/4/8/12/16/32通道。目前主板上主流的PCIe插槽基本使用PCIe x1/x4/x8/x16四种。
科技的每一步前进都是为了解决前一代中出现的问题,扩展槽从ISA总线到PCI总线,再到现在的PCIe总线,都是为了提高数据吞吐量。作为扩展接口,它主要用于外围设备的连接和扩展,而外围设备吞吐速度的提高,往往会倒推接口速度的提升。第一代ISA插槽出现在第一代IBM PC XT机型上(1981),作为现代PC的盘古之作,8位的ISA提供了4.77MB/s的带宽(或传输率)。到了1984年,IBM就在PC AT上将带宽提高了几乎一倍,16位ISA第二代提供了8MB/s的传输率。但其对传输像图像这种数据来说还是杯水车薪。
Intel在1991年提出PCI(Peripheral Component Interconnect)总线协议,并召集其它厂商(IBM、HP、Compaq、DEC等100多家计算机)组成了名为 PCI-SIG (PCI Special Interest Group)(PCI 特殊兴趣组)的企业联盟。从那以后这个组织就负责PCI和其继承者们(PCI-X和PCIe的标准制定和推广)。不得不称赞下这种开放的行为,相对IBM当时的封闭,合作共赢的心态使得PCI标准得以广泛推广和使用。统一的标准撩拨起了外围设备制造商的创新,有似天雷勾动地火,从那以后各种各样的PCI设备应运而生,丰富了PC的整个生态环境。
PCI总线标准初试就提供了133MB/s的带宽(33MHz时钟,每时钟传送32bit)。这对当时一般的台式机已经是超高速了,但对于服务器或者视频来说还是不够。于是AGP被发明出来专门连接北桥与显卡,而为服务器则提出PCI-X来连接高速设备。
2004年,Intel再一次带领小伙伴革了PCI的命。PCI express诞生了。
在看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)
下表对其速度进行比较:
从速度上看:
一开始PCI总线支持32位和64位两种位宽,时钟频率为33MHz。
因此,32bit总线带宽32bit*33MHz=1056Mbps=132MB/s;
64bit总线带宽64bit*33MHz=2112Mbps=264MB/s。
后来PCI总线时钟频率升级到66MHz,因此PCI总线最大带宽可以达到532MB/s。
从结构上看:
PCI使用了总线形拓扑结构,一条PCI总线上挂着若干个PCI终端设备或PCI桥设备,这些设备共享PCI总线,某个设备只有获得了总线的使用权后才能进行数据传输。中间节点为PCI-PCI桥。
PCI开始支持即插即用(当板卡插入系统时,系统会自动对板卡所需资源进行分配,如基地址、中断号等,并自动寻找驱动程序;而不像旧的ISA总线需要进行复杂的手动配置。再也不用担心跳线设错中断冲突了)。
计算机的PCI总线型拓扑结构如下图所示:
从图中我们可以看出 PCI 总线主要被分成三部分:
1. PCI 设备。符合 PCI 总线标准的设备就被称为 PCI 设备,PCI 总线架构中可以包含多个 PCI 设备。图中的 Audio、LAN 都是一个 PCI 设备。PCI 设备同时也分为主设备和目标设备两种,主设备是一次访问操作的发起者,而目标设备则是被访问者。
2. PCI 总线。PCI 总线在系统中可以有多条,类似于树状结构进行扩展,每条 PCI 总线都可以连接多个 PCI 设备/桥。上图中有两条 PCI 总线。
3. PCI 桥。当一条 PCI 总线的承载量不够时,可以用新的 PCI 总线进行扩展,而 PCI 桥则是连接 PCI 总线之间的纽带。
随着PCI总线的发展,PCI总线又发展到PCI-X(Peripheral Component Interconnect eXtended)。与PCI总线相比,PCI-X总线的位宽未改变,而是将时钟频率进行了提高。
PCI-X 1.0的时钟频率有66MHz/100MHz/133MHz,总线带宽分别为:264MB/s,400MB/s和532MB/s(32位),528MB/s,800MB/s和1064MB/s (64位);
PCI-X2.0的时钟频率有266MHZ/533MHz/1066MHz,总线带宽分别为1064MB/s、2132MB/s和4264MB/s(32位),3128MB/s,4264MB/s和8512MB/s(64位)。
PCI-X与PCI在结构上完全兼容。不过PCI-X出现不久便出现了PCIe,因此在工业界,PCI-X应用远没有PCI和PCIe广泛。
90年代处理器按照摩尔定律发展,PCI碰到了和ISA一样的问题——赶不上处理器发展速度。想要提高速度,还是并行总线的PCI,要么提升频率要么提升位宽;随着频率的提高,PCI并行传输遇到了干扰的问题:高速传输的时候,并行的连线直接干扰异常严重,而且随着频率的提高,干扰(EMI)越来越不可跨越;提高位宽的话,信号线数量又大大增加。于是PCIe应运而生。
PCIe和PCI最大的改变是由并行改为串行,通过使用差分信号传输(differential transmission),如图:
通过一正一反镜像传输,干扰可以很快被发现和纠正,从而可以将传输频率大幅提升。加上PCI原来基本是半双工的(地址/数据线太多,不得不复用线路),而串行可以全双工。
综合下来,我们从频率提高下来得到的收益大于一次传输多个bit的收益,这个选择就是合理的。除了速度有明显的提高之外,还得到了另外的好处,例如布线简单,线路可以加长,多个lane还可以整合成为更高带宽的线路等等。
从结构上看:PCI-PCI桥被PCIe Switch取代,拓扑结构PCIe采用树形结构,在软件上完全兼容PCI时代的软件。
各种硬件模块大部分以PCIe设备的形式挂载到PCIe设备树上,CPU通过检测设备树的方式来索引挂接的PCIe外设。
近年来人工智能等技术的发展对计算力也提出了更高的要求,还有各种xPU的出现,对系统互联技术也提出了更高的要求,PCIe也渐感吃力。很难说PCIe的时代还有多久,会不会过几年像ISA,PCI,PCI-X一样消失在历史长河中,但可以确定的是技术发展的洪流不会就此止步。