PCI Express (peripheral component interconnect express) 简称 PCIe,是一种高速串行计算机扩展总线标准。是一种全双工总线,使用高速串行传送方式,能够支持更高的频率,连接的设备不再像 PCI 总线那样共享总线带宽。PCIe目前发布了4个版本——PCIe1.0、PCIe2.0、PCIe3.0、PCIe4.0
PCIe 总线在实际工程实践中得到了良好的应用,主要应用在光纤、PCIe 数据采集卡、FPGA 加速卡、存储子系统等所有需要和主机进行高速数据交互的场所。
PCIe总线结构复杂,这里只做简单介绍。
PCIe架构与以太网的OSI模型类似,是一种分层架构。分为事务层(Transaction Layer)、数据链路层(Data Link Layer)和物理层(Physical Layer)。这些层的每一部分都分为两部分:一部分处理出站(要发送的)信息,另一部分处理入站(接收的)信息。
PCIe体系中通过数据包在设备之间传递信息,数据包在事务层和链路层形成。
事务层主要责任是事务层包TLP(Transaction Layer Packet)的组装和拆卸。事务层接收来自PCIe设备核心层的数据,并将其封装为TLP。TLP负责传达事务。
负责读取和写入以及确定时间的类型。
负责管理TLP的基于信用的流控制。
每个数据包都有一个唯一标识符,该标识符使响应数据包可以定向到数据的发起者。
支持不同的寻址方式,具体取决于事务类型(内存、IO、配置和消息)。
数据包可能还具有诸如 No Snoop、Relaxed Ordering 和基于 ID 的排序(IDO)之类的属性。
支持四个地址空间:包括三个PCI地址空间内存、IO、配置)并添加消息空间。该规范使用消息空间来支持所有先前 PCI 的边带信号,例如中断、电源管理请求等,作为带内消息事务。
数据链路层充当事务层和物理层之间的中间阶段。主要负责链路管理和数据完整性。包括错误检测和数据纠正。
数据链路层的发送方接收事务层组装的TLP,计算并应用数据保护代码和TLP序列号,以及将他们提交给物理层以在链路上传输。
数据链路层的接收方负责检测接收到TLP的完整性,并将他们提交给事务层进一步处理。
检测到错误时,此层负责请求重发TLP,直到接收到正确信息或者确定链路失败为止。
为了和数据层数据包区分开,当指链路层数据包时,将称为“链路层数据包(DLLP)”
PCIe总线的物理层为PCIe设备之间的数据通讯提供介质,为数据传送提供可靠的物理环境。包括用于接口操作的所有电路、驱动器和输入缓冲器、串并转换、PLL和阻抗匹配。还包括接口初始化和维护有关的逻辑功能。
物理层以实现特定的格式与数据链路层交换信息。将链路层接收的信息转化为适当的序列化格式,并以与连接到链路另一端的设备兼容的频率和通道宽度在PCIe链路上传输该信息。
物理层是PCIe体系中最重要也是最难实现的部分。PCIe总线的物理层定义了LTSSM (Link Training and Status State Machine)状态机。PCIe链路使用该状态机管理链路状态,并进行链路训练、链路回复和电源管理。
PCIe总线使用端到端的连接方式,在PCIe链路的两端只能各连接一个设备。这两个设备互为数据发送端和数据接收端。
在PCIe总线的物理链路的一个通路中(Lane),有两组差分信号。其中发送端的TX和接收端的RX使用一组差分信号连接,该链路被称为发送端的发送链路,也是接收端的接收链路;发送端的RX和接收端的TX使用另一组差分信号连接,该链路被称为发送端的接收链路。一个PCIe可以由多个Lane组成。
目前PCIe链路支持1、2、4、8、16、32个Lane。即x1、x2、x4等宽度的PCIe链路。每个lane上使用的总线频率与PCIe总线使用的版本有关。
带宽计算:吞吐量 = 传输数率 * 线路编码方案。