PCIe还在很多方面和PCI有很大不同:
1. PCI是总线结构,而PCIe是点对点结构。一个典型的PCIe系统框图如下:
一个典型的结构是一个rootport和一个endpoint直接组成一个点对点连接对,而Switch可以连接几个endpoint。一个rootport和一个endpoint对就需要一个单独的PCI bus。而PCI是在同一个总线上的设备共享同一个busnumber。过去主板上的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提供了很多特殊功能,如CompleteTimeout(CTO),MaxPayload等等几十个特性,还在随着PCIe版本的进化不断增加中,对电源管理也提出了单独的State(L0/L0s/L1等等)。这些请参见PCIe3.0 spec,本文不再详述。
5. 其他VC的内容,和固件理解无关,本文不再提及。INT到MSI的部分会在将来介绍PC中断系统时详细讲解。
PCIe1.0和2.0采用了8b/10b编码方式,这意味着每个字节(8b)都用10bit传输,这就是为什么2.5GHz和5GHz时钟,每时钟1b数据,结果不是312.5MB/s和625MB/s而是250MB/s和500MB/s。PCIe3.0和4.0采用128b/130b编码,减小了浪费(overhead),才能在8GHz时钟下带宽达到1000MB/s(而不是800MB/s)。即将于今年发布的PCIe4.0还会将频率提高一倍,达到16GHz,带宽达到2GB/s每Lane。
后记
对于一般用户来说,PCIe对用户可见的部分就是主板上大大小小的PCIe插槽了,有时还和PCI插槽混在一起,造成了一定的混乱,其实也很好区分: