一、概述
1)PCIe(Peripheral Component Interconnect Express)是继ISA和PCI总线之后的第三代I/O总线。一般翻译为周边设备高速连接标准。
2)PCIe协议是一种端对端的互连协议,提供了高速传输带宽的解决方案。目前PCIe已经发展到第四代PCIe4.0, 每一代的发展,最明显的特征就是速率翻倍。
3)是Intel公司1991年推出的。批准组织:PCI SIG (PCI兴趣小组)。
4)一个x16插槽可以运行x1、x2、x4、x8、x16的卡。
二、PCIe 分类、速度
按lane( 车道 –> 通道 )的个数分有 x1 x2 x4 x8 x16 (最大可支持32个通道)。
按代来分 有 gen1 gen2 gen3 gen4 gen5。
速度:PCIe传输速率和可用带宽(吞吐量)计算
传输方式上:PCIe是串行数据(serial data)传输,全双工(数据可以双向同时传播,对于源头来说可同时接收和发送数据)。
硬件上:传输PCIe信号的是差分电平(differential transmission)。每lane一对差分输入输出口,四根线(Rx+,Rx-,Tx+,Tx-),速率为标准的PCIE速率。
链路上:PCIe是点对点的连接方式。
PCIe Gen2的速率为5.0GT/s,由于PCIe Gen2为NRZ码,一个电平代表一个bit的信息,也可以说是5.0Gbps。PCIe Gen2使用8B/10B 编码,有效比特率只有4.0Gbps。
不归零码NRZ = Non-Return-to-Zero。
PCIe都是向下兼容,5可以兼容4/3/2/1,每个serdes macro可以包含4个lane,4个serdes macro可以组成一个x16 phy。3可以兼容2/1,每个serdes macro可以包含1个lane,组成一个x1 phy。
三、pipe 接口
PIPE接口用于连接PCIE controller和PCIE PHY, controller用PIPE接口发送并行数给PHY用于并串转换等操作, PHY把串并转换得到的并行数通过PIPE接口送给controller。
四、Lane 通道
PCIe是串行总线,通过使用差分信号传输(differential transmission),如图。
相同内容通过一正一反镜像传输,干扰可以很快被发现和纠正,从而可以将传输频率大幅提升。加上PCI原来基本是半双工的(地址/数据线太多,不得不复用线路),而串行可以全双工。
这样一对差分信号组成一个PCIe Lane,也叫做x1通道。把n组绑定在一起,可以让PCIe设备大幅提高传输带宽。如M.2接口的NVMe SSD一般用四组,四个Lane,也就是x4;而最耗带宽的显卡一般要用16组,就是x16。注意这个n应该是2的幂,所以不存在奇数组或者x10等组合。
五、bifurcation 分叉
计算机用户多种多样,有的用户需要插两组显卡,有的则需要很多x1的插槽。为了给主板厂商提供灵活的空间,芯片厂商通过一种叫做bifurcation(分叉)的方式让主板厂商可以灵活配置,组合或者拆分PCIe通道,来做出满足细分市场的产品来。
PCIe初始化一般分为:
1.bifurcation。
2.Root Port Training。根据信号完整性的不同,尽管Root port支持PCIe Gen3/4,但主板走线有问题,有干扰,可能只能Training出Gen2,甚至Gen1的速度来。
3. PCI枚举。
4. PCI/PCIe的各种特性(Feature)设置,如CTO等等。
作为初始化的第一步,bifurcation的重要性自不待言。它决定了各个设备和PCIe插槽的通道宽度。它一般有三种方式:Hard Strap,Soft Strap或者Wait for BIOS。
Hard Strap
所谓Hard,是指这种方式是硬件连线,不能后期修改。在酷睿桌面CPU后面的PCIe通道通常采用这些方式。
我们可以看到这种bifurcation,CPU后面的PCIe是一个x16,还是两个x8,亦或1个x8家两个x4,取决于CFG信号。
主板厂商根据自己主板样式,如提供了一个显卡插槽,则把CFG[6:5]信号都连高电平,就是一个x16;如果提供两个显卡插槽,则把CFG[6:5]信号连接一高一低,就是两个x8,即两个PCIe显卡就降成x8使用;还有些厂商喜欢把NVMe的m.2连接到CPU后面,来提高存储速度,则可以把CFG[6:5]信号都连低电平,则是1个x8连接显卡,两个x4来连接M.2 SSD。
这种bifurcation一旦确定,就不能更改,除非重新布线。
Soft Strap
所谓Soft,就是软件可以修改。PCH下PCIe root port一般是这种方式。这种配置一般储存在BIOS Image前面的discription中,可以通过工具修改:
这种修改一般和BIOS程序无关,修改后直接烧录BIOS即可。当然BIOS在Image没有被锁定的情况下,可以重新修改这个区域,但修改后需要重新启动才可以生效。
主板厂商一般根据自己的主板设计情况,在烧录BIOS的时候就用软件改好了相应的值,BIOS一般没有界面去修改这个值。
Wait For BIOS
这种方式是纯BIOS设置,也就是在PCIe Training之前,通过BIOS对相关PCIe root complex的寄存器进行设置来确定通道宽度。
这种方式一般用于至强系列CPU,它们在CPU后面提供高达40个Lanes的支持:
如图中,我们数一下,一共是44个Lane,不是说40个Lane吗?其实P0的lane是给DMI用的,如果在多路情况下,除了第一个Socket,其他CPU才可以把它用起来。
这么多Lane,因为最高一个设备只支持x16,所以分为几组。一般一组是一个PCIe device,分为4个function,在bifurcation之后,如果该Function轮空,需要我们禁掉该function来省电。
这种方式是最灵活的方式,它赋予至强CPU的用户极大的灵活性,一般会有配置界面来配置:
参考如下:
PCIe 是什么 ? – 基本知识
PCIe的通道是怎么分分合合的?详解PCIe bifurcation