项目需求PCIe,坚持每天写一点,或多或少,或简单,或困难,逼自己写一写,当个学习记录了。有些来自spec,掺杂个人理解,如果有幸被业内人士过目,欢迎指正。
(主要参考PCIe 5.0以及6.0 spec)
PCIe概述
首先,GT/s用于指一秒钟内在Lane方向上传输的编码比特数。
下图为各版本PCIe数据速率、调制方式、编码方式、有效传输速率的对比。
Lane:一条链路必须至少支持一个Lane, 每个Lane代表一组差分信号对(一对用于发送,一对用于接收)。为了扩展带宽,一条链路可以聚合用xN表示的多个lane,其中N可以是任何支持的链路宽度。以2.5 GT/s数据速率运行的x8链路在每个方向上的原始带宽总计为20gb /s。(通常x1、x2、x4、x8、x16 Lane宽度)
该图为整体结构示例图。
RC
RC表示连接CPU/内存子系统到I/O的I/O层次结构的根。一个RC可以支持一个或多个PCI Express Ports。每个接口定义一个单独的层次结构域。每个层次结构域可以由单个端点或包含一个或多个Switch组件和端点的子层次结构组成。
与SW的规则不同,当在层次域之间点对点路由事务时,RC通常允许将数据包拆分为更小的数据包(下面提到的情况除外),例如,将具有256字节有效载荷的单个数据包拆分为每个128字节有效载荷的两个数据包。拆分可以实现不同设备之间的数据传输,先统一数据长度格式再进行交互。但可能会影响性能。
RC必须支持作为请求者生成配置请求。
允许RC作为请求者支持生成I/O请求。
EP
EP可以是PCI Express事务的请求者或完成者,既可以代表自己,也可以代表不同的非PCI Express设备(PCI设备或主机CPU除外)。端点分为遗留、PCI Express或根复杂集成端点(RCiEPs)
SW
SW被定义为多个虚拟PCI-to-PCI Bridge设备的逻辑组装。如下图。
交换机不允许将数据包分成更小的数据包,例如,具有256字节有效载荷的单个数据包不得分成每个128字节有效载荷的两个数据包。
该图为PCIe层次结构示意图。
事务层(待补充)