PCI Express 基础
随着时钟速度的提高,时钟与信号线之间的偏移在时钟周期中占据的百分比日益增大,并行总线越来越难于实现。因此,PCI 总线仅在 266 MHz 时钟速率下就变得衰弱无力,而处理器时钟速率已高达 1 GHz。为缩小这种差距和造成的系统瓶颈,PCI-SIG(PCI 特殊兴趣小组)开发了 PCIe(PCI Express)。该小组的目标是越过并行总线的带宽限制,同时保持与 PCI 的应用软件兼容性。
PCIe 总线包括一组并行的“通道”,实现两个节点之间的点对点连接,例如 CPU 与外设控制器之间的连接。星型拓扑的中心是一个多端口交换结构,它使点对点的 PCIe 连接能够复制出传统并行总线的多种可能路径(图 A)。在适宜的设计下,交换结构还可以允许两个或两个以上路径并行运行,只要它们不共用相同的端口。

PCIe 中的通道都是以 2.5 GHz 时钟速率、8b/10b 编码运行的串行链接。每个通道有一个正向信道和一个返回信道,在每个通道的全部四线上使用差分信号传输。为了实现带宽升级功能,PCIe 允许节点间的连接包含 1、2、4、8、12、16
或 32 个通道。这样,一个 PCIe 连接可以提供的原始数据速率从 250 MB/s到 8 GB/s。未来 PCIe 升级规范将把允许的串行时钟速率增加到 5 GHz,从而使一个给定通道结构的带宽容量翻一倍。
设计时不需要使用与通道数相匹配的设备。在上电初始化或当一个即插即用电路板插入时,各个节点会协商它们将使用连接的通道带宽。这样,一个有 16 通道接口的设备可以与 16 和 32 通道的设备作全带宽通信,也可以与较少通道的设备之间进行降低带宽的通信。
如要保持与并行 PCI 总线的应用软件兼容,同时还能运行于各种宽度的串行总线,需要在通信模型较低层作一些修改。例如,在物理层,一个 PCIe 链接包括跨越可用通道将数据字节打碎传输以及在接收端对打碎的字节重新组合的硬件。串行数据包内含有标题信息,即使各个部分到达时间不同,也能按照正确次序重新组合数据包,从而消除了通道间的偏移效应。
链路层负责处理串行链接中传输错误的检测和响应。每个发送到物理层的数据包都有一个数据包序号和一个用于错误检测的 CRC(循环冗余校验)字符。如果发生传输错误,链路层硬件会自动重发损坏的数据包。
事务层与系统软件交互,将软件代理针对 PCI 总线的内存映射读、写事务转换为送给 PCIe 链路层的命令与数据包。每个包都带有一个唯一的识别符,它与一个给定的事务联系在一起。这个识别符可以将外发的传送路由给恰当的节点,并将响应路由给适宜的软件代理。
事务层支持系统中的内存、I/O 和配置空间,并处理 32位及扩展的 64位寻址。这些能力使 PCIe 能够完全模仿负载存储结构以及 PCI 总线的平面内存空间,因此系统中较高层的软件都无需作改动。为 PCI 开发的应用程序、操作系统和硬件驱动器等不需修改就可以用于 PCIe 硬件。
除了通过并行总线的内存映射事务以外,PCI 总线还包含有边带信号,如中断、电源管理和复位。PCIe 将这些功能组合到一个消息空间中进行处理。PCIe 接口硬件将这些边带信号转换为数据包,通过命令与数据事务的串行链接进行传送。边带信号在节点处再次作为控制线实现中断。这样,PCIe 就用“虚拟线路”代替了中断和 PCI 的其它控制线。
然而,PCIe 的结构要比单纯将 PCI 总线模拟成既有软件复杂得多。它还提供了新软件可以使用的新功能。一种功能是为数据包分配属性的能力,如“无拘束的次序”或优先权。系统可以在管理交换机时使用这些属性,从而解决不同节点对 I/O 资源的竞争问题。因此,PCIe 可以支持通信应用中需要的 QoS(服务质量)功能,例如 VoIP(互联网协议传输语音)中就需要这种功能。