在计算机系统中,总线的作用就好比是人体中的神经系统,它承担的是所有数据传输的职责,而各个子系统间都必须藉由总线才能通讯,例如,CPU和北桥间有前端总线、北桥与显卡间为AGP总线、芯片组间有南北桥总线,各类扩展设备通过PCI、PCI-X总线与系统连接;主机与外部设备的连接也是通过总线进行,如流行的USB 2.0、IEEE1394总线等等,一句话,在一部计算机系统内,所有数据交换的需求都必须通过总线来实现!
按照工作模式不同,总线可分为两种类型,一种是并行总线,它在同一时刻可以传输多位数据,好比是一条允许多辆车并排开的宽敞道路,而且它还有双向单向之分;另一种为串行总线,它在同一时刻只能传输一个数据,好比只容许一辆车行走的狭窄道路,数据必须一个接一个传输、看起来仿佛一个长长的数据串,故称为“串行”。
并行总线和串行总线的描述参数存在一定差别。对并行总线来说,描述的性能参数有以下三个:总线宽度、时钟频率、数据传输频率。其中,总线宽度就是该总线可同时传输数据的位数,好比是车道容许并排行走的车辆的数量;例如,16位总线在同一时刻传输的数据为16位,也就是2个字节;而32位总线可同时传输4个字节,64位总线可以同时传输8个字节......显然,总线的宽度越大,它在同一时刻就能够传输更多的数据。不过总线的位宽无法无限制增加。
总线的带宽指的是这条总线在单位时间内可以传输的数据总量,它等于总线位宽与工作频率的乘积。例如,对于64位、800MHz的前端总线,它的数据传输率就等于64bit×800MHz÷8(Byte)=6.4GB/s;32位、33MHz PCI总线的数据传输率就是32bit×33MHz÷8=132MB/s,等等,这项法则可以用于所有并行总线上面——看到这里,读者应该明白我们所说的总线带宽指的就是它的数据传输率。
对串行总线来说,带宽和工作频率的概念与并行总线完全相同,只是它改变了传统意义上的总线位宽的概念。在频率相同的情况下,并行总线比串行总线快得多,那么,为什么各类并行总线反而要被串行总线接替呢?原因在于并行总线虽然一次可以传输多位数据,但它存在并行传输信号间的干扰现象,频率越高、位宽越大,干扰就越严重,因此要大幅提高现有并行总线的带宽是非常困难的;而串行总线不存在这个问题,总线频率可以大幅向上提升,这样串行总线就可以凭借高频率的优势获得高带宽。
而为了弥补一次只能传送一位数据的不足,串行总线常常采用多条管线(或通道)的做法实现更高的速度——管线之间各自独立,多条管线组成一条总线系统,从表面看来它和并行总线很类似,但在内部它是以串行原理运作的。对这类总线,带宽的计算公式就等于“总线频率×管线数”,这方面的例子有PCI Express和HyperTransport,前者有×1、×2、×4、×8、×16和×32多个版本,在第一代PCI Express技术当中,单通道的单向信号频率可达2.5GHz,我们以×16举例,这里的16就代表16对双向总线,一共64条线路,每4条线路组成一个通道,二条接收,二条发送。这样可以换算出其总线的带宽为2.5GHz×16/10=4GB/s(单向)。除10是因为每字节采用10位编码。
GT/s —— Giga Transmissionper second (千兆传输/秒),即每一秒内传输的次数。重点在于描述物理层通信协议的速率。
Gbps —— Giga Bits Per Second (千兆位/秒)。
GT/s 与Gbps 之间不存在成比例的换算关系。GT/s着重描述端口的速率属性,可以不和链路宽度等关联,这样来描述“可以进行链路宽度扩展”的高速串行接口更为合适一些。 需要结合具体的物理层通信协议来分析。
举例
例如:PCI-e2.0 协议支持 5.0 GT/s, 即每一条Lane 上支持每秒钟内传输 5G个bit;但这并不意味着 PCIe 2.0协议的每一条Lane支持 5Gbps 的速率。为什么这么说呢? 因为PCIe 2.0 的物理层协议中使用的是 8b/10b的编码机制。 即每传输8个bit,需要发送10个bit;这多出的2个bit并不是对上层有意义的信息。 那么, PCIe 2.0协议的每一条Lane支持 5 * 8 / 10 = 4Gbps 的速率。 以一个PCIe 2.0 x8的通道为例,x8的可用带宽为 4 * 8 = 32 Gbps。
例如:第二代PCI Express接口(简称 PCIe Gen2)的速率属性为5.0GTs,这样的描述主要说明的是每条PCIe Gen2的Lane(Serdes)每秒可以完成5.0G bit的数据传输这一属性,无论对于宽度为x1、x2、x4、x8的PCIe Gen2接口都是适用的。而如果笼统的说“PCIe Gen2的速率为5.0GT/s,则显得不太合适,因为对于一个x8的PCIe Gen2链路来说,它的8个Lane加在一起真正的数据传输能力实际可以达到40GT/s!同理,说PCIe Gen3接口的速率为8.0GT/S也是类似的意思。
PCIe链路可以由多条Lane组成,目前PCIe链路可以支持1、2、4、8、12、16和32个Lane,即×1、×2、×4、×8、×12、×16和×32宽度的PCIe链路。每一个Lane上使用的总线频率与PCIe总线使用的版本相关。
第1个PCIe总线规范为V1.0,之后依次为V1.0a,V1.1,V2.0和V2.1。目前PCIe总线的最新规范为V2.1,而V3.0正在开发过程中,预计在2010年发布。不同的PCIe总线规范所定义的总线频率和链路编码方式并不相同,如表4‑1所示。
表4‑1PCIe总线规范与总线频率和编码的关系
PCIe总线规范 |
总线频率[1] |
单Lane的峰值带宽 |
编码方式 |
1.x |
1.25GHz |
2.5GT/s |
8/10b编码 |
2.x |
2.5GHz |
5GT/s |
8/10b编码 |
3.0 |
4GHz |
8GT/s |
128/130b编码 |
如上表所示,不同的PCIe总线规范使用的总线频率并不相同,其使用的数据编码方式也不相同。PCIe总线V1.x和V2.0规范在物理层中使用8/10b编码,即在PCIe链路上的10 bit中含有8 bit的有效数据;而V3.0规范使用128/130b编码方式,即在PCIe链路上的130 bit中含有128 bit的有效数据。
由上表所示,V3.0规范使用的总线频率虽然只有4GHz,但是其有效带宽是V2.x的两倍。下文将以V2.x规范为例,说明不同宽度PCIe链路所能提供的峰值带宽,如表4‑2所示。
表4‑2PCIe总线的峰值带宽
PCIe总线的数据位宽 |
×1 |
×2 |
×4 |
×8 |
×12 |
×16 |
×32 |
峰值带宽(GT/s) |
5 |
10 |
20 |
40 |
60 |
80 |
160 |
由上表所示,×32的PCIe链路可以提供160GT/s的链路带宽,远高于PCI/PCI-X总线所能提供的峰值带宽。而即将推出的PCIe V3.0规范使用4GHz的总线频率,将进一步提高PCIe链路的峰值带宽。
在PCIe总线中,使用GT(Gigatransfer)计算PCIe链路的峰值带宽。GT是在PCIe链路上传递的峰值带宽,其计算公式为总线频率×数据位宽×2。