PCIe体系结构三层模型
1 事务层TL、数据链路层DLL、物理层PHY的职责
1.1 发送部分
事务层:使用从设备核心和应用程序获取的信息生成数据包,并将数据包存储在缓冲区,准备传输到数据链路层。
数据链路层:将接收设备进行错误检查所需的附加信息拼接到数据包上,传输给物理层。
物理层:对数据包进行编码,然后在该层的模拟链路上进行差分传输,最终发送给接收设备。
1.2 接收部分
物理层:对入站数据包内容解码,并将结果转发到数据链路层。
数据链路层:检查入站数据包中的错误,如果没有错误则将数据包转发到事务层。
事务层:缓存入站 TLP,并将数据包中的信息转换为设备核心和应用程序可处理的表示形式。
。数据链路层的主要功能是确保数据包在每条链路上传输和接收期间的数据完整性。
2 三层模型在PCIe数据传输扮演的角色
图1 PCIe数据收发流程图
图2 PCIe组包流程
图3 PCIe拆包流程(组包逆过程)
图4 PCIe包结构大小量化
第一步:发送端——事务层组包TLP
**主要工作:**软件层/设备核心向事务层发送组装 TLP 核心部分(即数据包的Header头部和Data数据部分)所需的信
息,在事务层计算ECRC,组成TLP完成数据包,发送给数据链路层。
附:传输大小或长度字段指示以双字(DW)为单位计算的传输数据量。数据传输长度可在1到1024DW之间,一个DW等于4个Byte。
第二步:发送端——数据链路层组包DLLP及其其他工作
**主要工作:**接收到TLP包后,会在重传缓冲区保存一个TLP包副本。在原始TLP包附加一个序列 ID,计算序列ID与TLP包的16位LCRC。序列ID,TLP包与LCRC组成DLLP包,发送给物理层。
**其他工作:**当接收端DLL检测到LCRC与计算的LCRC不一致时,说明传输错误,会给发送端DLL发送一个NACK DLLP包。发送端DLL接收到NACK DLLP后,会重新再发送一次。如果发送设备收到 4 次 NAK 并且因此重传了 3 次,则数据链路层记录错误、报告可纠正错误并重新训练链路。如果没有错误,接收端会给发送端DLL发送一个ACK DLLP包,发送端DLL接收到ACK DLLP后,会丢弃掉当前缓冲区中的TLP包。
第三步:发送端——物理层组包PLP
**主要工作:**物理层在数据包前后各拼接一个 1 字节的起始(Start)和结束帧字(End)符。数据包被编码并使用可用数量的通道在链路上差分传输。
附:PLP 是一个非常简单的数据包,以一个 1 字节的COM 字符开头,后跟 3 个或更多定义 PLP 类型并包含其他信息的字符。PLP 大小为 4 字节的倍数。物理层用起始和结束字符为 TLP 或 DLLP 帧化。该符号是一个帧代码字节,接收设备用来检测数据包的开始和结束。数据包在链路的可用通道上进行字节条带化,把数据划分为单个字节。通过加扰字节,消除了链路上的重复比特模式,从而减少了产生的平均 EMI 噪声。生成的字节由 8b/10b 编码逻辑编码为 10b 码。将 8b 字符编码为 10b 符号的主要目的是在比特流中创建足够的 1 到 0 和 0 到 1 的转换密度,以便在远程接收设备处借助 PLL 重建接收时钟。并串转换器在每个通道上生成数据包的串行比特流。
第四步:接收端——物理层拆包PLP
**主要工作:**接收到的PLP由物理层解码,起始和结束帧字段被剥离,生成的DLLP被发送到数据链路层。
第五步:接收端——数据链路层拆包DLLP
**主要工作:**接收端DLL接收 TLP 并检查 LCRC 错误。如果没有错误,返回一个包含序列 ID 的 ACK DLLP 给发送端DLL。发送端DLL确认 TLP 已成功到达接收端DLL(不一定是最终目的地)。发送端DLL 清除其重传缓冲区中与该序列 ID 关联的 TLP。另一方面,如果在接收的 TLP 中检测到 CRC 错误,则返回一个包含序列 ID 的NAK DLLP 给发送端DLL,TLP 传输过程中发生了错误。发送端DLL从重传缓冲区重传相关 TLP,同时DLL为错误报告和记录机制生成错误指示。对于重传缓冲区中的给定 TLP,如果发送设备收到 4 次 NAK 并且因此重传了 3 次,则数据
链路层记录错误、报告可纠正错误并重新训练链路。
第六步:接收端——事务层拆包TLP
**主要工作:**事务层的接收端将入站 TLP 存储在接收虚拟通道缓冲区(VC)中。接收方根据 TLP 中的 ECRC 字段检查 CRC 错误。如果没有错误,ECRC 字段被剥离,TLP 头部及数据载荷中的结果信息被发送到设备核心。接收端还负责检查接收 TLP 的序列 ID,以检查是否有丢失或乱序的 TLP。
附:数据包的串行比特流使用串并转换器转换为 10b 并行流,10b 符号流由 8b/10b 解码器解码回每个符号的 8b 表示。8b 字符被解扰,字节去条带化逻辑重建发送端发送的原始数据包流。起始和结束符号被检测和移除。生成的 TLP 发送到数据链路层。
参考文献
- 《PCI.Express.System.Architecture》第二章。