内容来源:V3学院和 【PCIE】PCIE TLP包解析
前言:开始pcie项目之前需要知道,本次项目我们是使用现有的框架RIFFA框架去完成设计的,因此比起具体代码的含义,更注重框架的使用。在开始项目之前需要了解PCIE的组建包过程。
文章目录
先解释两个重要的概念:MPS(Maximum Payload Size)、RCB(Read Completion Boundary)
在PCI Express (PCIe) 中,数据包的分割主要参考的是最大负载大小(MPS),而不是读完成边界(RCB)。
MPS
MPS(Maximum Payload Size)是指 PCIe 传输中单个数据包的最大有效负载大小。有效负载是指不包括协议开销的实际数据部分。在 PCIe 链路的配置过程中,MPS 的值可以是 128 字节、256 字节、512 字节、1024 字节、2048 字节或 4096 字节。选择合适的 MPS 值是优化 PCIe 性能的关键因素之一。
MPS实例:
- GPU到CPU的数据量:假设GPU需要传输一个包含2048字节的图像数据块给CPU。
- 设定MPS:在这个例子中,我们比较两种MPS设置:128字节和512字节。
MPS设置为128字节:
- 数据包分割:由于MPS设置为128字节,2048字节的数据需要被分割成16个单独的数据包(每个包128字节)。
- 传输次数:GPU需要发送16个独立的数据包到CPU。
- 处理开销:每个数据包都需要独立的处理和确认,这可能增加处理开销和延迟。
MPS设置为512字节:
- 数据包分割:同样的2048字节数据现在只需要被分割成4个数据包(每个包512字节)。
- 传输次数:GPU只需发送4个数据包。
- 处理开销:减少的数据包数量意味着减少了处理和确认的次数,从而可能降低总体延迟和提高数据传输效率。
RCB
RCB(Read Completion Boundary)是指 PCIe 设备在处理读请求时,返回数据的对齐边界。RCB 的值通常是 64 字节或 128 字节,表示设备在处理完成读操作时,数据包的边界需要对齐到该值。
RCB实例:
场景:在PCIe系统中,一块设备正在请求从另一块设备读取一段数据。假设读取的数据长度为150字节,而PCIe设备的读完成边界(RCB)设置为64字节。这个设置将如何影响数据传输?
以下是详细步骤:
-
数据请求:设备A发送一个读请求给设备B,请求从某个特定地址开始读取150字节的数据。
-
根据RCB分割数据:由于RCB设置为64字节,设备B必须按照这个边界对返回的数据进行分割和对齐。这意味着,尽管请求是150字节,数据将被分割为多个部分:
- 第一部分包含64字节。
- 第二部分包含64字节。
- 第三部分包含剩余的22字节。
-
数据传输:设备B将这三部分数据分别作为独立的事务层包(TLP)发送回设备A。每个包都精确地对齐到64字节边界(除了最后一个包,因为数据不足64字节)。
-
接收与重组:设备A接收到这三个数据包后,需要根据包的顺序将数据重新组合,以构建出原始请求的150字节数据。
总结: 通过这个例子可以看出,RCB的设置对数据传输的效率有直接影响。如果RCB较大,可能减少传输的总包数,但增加了在某些情况下传输不必要数据的风险。相反,较小的RCB虽然使数据包更精确地对应于请求的数据量,但可能增加需要传输的总包数,从而影响总体性能。因此,适当设置RCB是优化PCIe性能的关键考虑之一。
一、TLP包的基本格式:
1.1整体包结构概述
1、TLP 包是由 PCIE 的 Endpoint 或者 Root Complex 组建发送。
2、TLP 包只包含两种包头长度 3DW 和 4DW(double word is 32bit),数据
内可以选择包含和不包含 ECRC 1DW(循环校验字 32bit)
由红色圈圈出的是用户的 TLP 包,也就是接下来我们要重点讲解的部分。(此部分如果选择使用框架那么由框架创建例如 Riffa 和 XDMA,如果完全自定义那么就是需要自己的写这些 TLP)
1.2包结构的通用字段含义
1.3 Memory write TLP 包结构
- 3DW的头,32bit 地址可以请求 2^32 也就是 4GB 的字节地址空间
- 4DW 头,64bit 地址可以请求 2^64 也就是 16GB 的字节地址空间
其中:
1.4 Memory read TLP 的包结构
- 3DW的头,32bit 地址可以请求 2^32 也就是 4GB 的字节地址空间
- 4DW 头,64bit 地址可以请求 2^64 也就是 16GB 的字节地址空间
结构上发现其实和Memory write TLP 包没什么区别。
不同之处在于:
Mrd 是一个 Non-posted 事物:需要一个独立的反馈事务来反馈读取的数据。(一般一个mrd可能会有多个完成响应包来完成一次数据读取请求)
Mwr是一个posted事物:不需要一个独立反馈事务(因为写事务中本省就带有数据了,写成功与否的状态信息是可选的反馈信息,并不是必须的。)
1.5 Completion/Completion with Data TLPs 完成相应包
注:MPS(Max Payload Size) 这个参数非常重要,每一个 EP 和 RC 都可以设置此值,
那么系统的 MPS 会取所有 MPS 的最小值,如下图:
系统中最小的 MPS 是 128byte,那么系统的 MPS 是 128,此值会通过 IP 核接口呈现出来。
二、Mrd 和 Cpld 包组包和完成包过程分析
现在模拟一个 Mrd 和一个 CplD,已知信息:
MPS=512 字节 RCB=128 字节
读起始地址:0x0010_00f8
读请求长度:272 字节
Requester ID:0x0001
Completer ID:0x1000
Tag:0x00
2.1 Mrd 包格式:
2.2 Cpld包格式:
例一:
例二:
注:图中WD的地方应改为:DW