之前我们讲了对PCIe的一些基础概念作了一个宏观的介绍,了解了PCIe是一种封装分层协议(packet-based layered protocol),主要包括事务层(Transaction layer), 数据链路层(Data link layer)和物理层(Physical layer)。
一:物理层结构
在PCIe体系中,物理层处于最低层,发送端数据链路层(Data Link Layer)的DLLP和TLP报文通过物理层(Physical Layer)发送至接收端的物理层,再传送至接收端的数据链路层;
DLLP和TLP从数据链路层到达物理层后,物理层会在其两端分别加上Start和End标识,主要是方便接收端找到DLLP和TLP的边界。
另外,物理层又分为两层:逻辑层(Logical)和电气层(Electrical),逻辑层主要负责与数据链路层之间的数据交互,由发送端逻辑TX和接收端逻辑RX组成,电气层是物理层的模拟接口,包括了差分信号驱动和接收器,本专题对电气层不作展开介绍,主要会针对逻辑层进行解析。
下面我们看一看逻辑层的样子:
发送端逻辑层:
接收端逻辑层:
看到上面两张逻辑层结构图,又晕了;
这里先结合上面的逻辑结构图大致表述一下逻辑层的作用:
发送端:
1. 从发送端数据链路层下发的DLLP/TLP在到达物理层后,会先放入Tx Buffer中。在Tx buffer中,DLLP/TLP被加上前缀Start和后缀End。
2. 之后,DLLP/TLP通过多路选择器Mux,到达Byte Stripping组件。由于PCIe总线可能包含多个Lane, Byte Stripping组件将DLLP/TLP数据报文按照数据依次分发到不同的Lane。
3. 数据进入每个Lane之后都会做加扰(Scramble), 8/10b编码( Only for Gen1/2), 128b/130b编码(Only for Gen3).
4. 完成加扰和编码后,数据通过并转串逻辑,最后发送到PCIe链路中。
接收端:
1. 接收端的逻辑层从PCIe链路的各个Lane中获得串行数据。
2. 各个Lane的数据经过解码与解扰(De-Scramble),最终到达Byte Un-Stripping组件。
3. Byte Un-Stripping组件将来自各个Lane的数据进行合并,检查Start和End标识后送入Rx Buffer, 最后传送至接收端数据链路层。