*故事前传 *物理层数据流 一、故事前传 前面的文章针对PCIe的一部分内容已经做了解析。
二、物理层数据流 上一篇文章中,我们有提到"DLLP和TLP从数据链路层到达物理层后,物理层会在其两端分别加上Start和End标识,主要是方便接收端找到DLLP和TLP的边界"。 上面说到的Start和End标识,是物理层定义的控制字符中的两种。由于Gen1&Gen2 (8b/10b编码)与Gen3 (128b/130b编码)在物理层中的数据编码原理不同,物理层对Gen1&Gen2 与Gen3定义的控制字符也不同。同样,不同数据编码也造就了不同的数据流格式。所以,接下来我们对Gen1&Gen2和Gen3的数据流分开解析。
1. Gen1&Gen2数据流 物理层针对Gen1&Gen2定义的控制字符主要有以下几类:
除了上述的控制字符之外,还需要特别介绍一下Ordered Sets。Ordered Sets不是TLP/DLLP,可以把Ordered Sets当做是Lane管家,比如Link Tranining,Link电源管理等。在Gen1&Gen2中,以COM控制字符开头,所有的Lane必须同时发送Ordered Sets。具体类型如下表:
无规矩不成方圆!说了控制字符和Ordered Set,该说一下物理层中Gen1和Gen2数据流的一些规则了。
我们来看一下PCIe Gen2 x8的数据流,数据流里面包含了两个TLP,一个DLLP: 对照前面提到的数据流规则,上面这个例子就完全符合; 大家来找茬1: 看看下面PCIe Gen2 x8的数据流有何错误,可以在文章底部简要作答哈~ 2. Gen3数据流 在Gen3中,数据编码舍弃了原来8b/10b编码,而采用更加有效的128b/130b编码。这也改变了Gen3数据流的模式。 当Gen1&Gen2采用了8b/10b编码时,数据包前后会加上控制符STP/SDP和END,格式如下: 而在Gen3采用128b/130b编码时,引入了一个新的概念: "块"(Block); 一个Block(130bits)= 2-bit Sync字段 + 16Bytes(128bits)
物理层对Gen3 数据块定义了5个字符(Token), 类似于Gen1&Gen2中的控制字符:
上述Tokens结构图如下: 此外,Gen3 Orderder Set的定义与Gen1/2基本一致。 我们接下来看几个PCIe Gen3 x8数据流的例子: (1) 数据可以跨数据块(Block)传输 下面这幅图中的信息需要注意几点:
(2) 无效数据块传输 在上一个数据流的基础上,我们假设第二个TLP传输的过程中LCRC错误。那么TLP末端就会被加上EDB字段,表明此TLP已无效。 (3) 序列块(Order Set Block) SOS传输
大家来找茬2: 看看下面PCIe Gen3 x8的数据流有何错误,可以在文章底部简要作答哈~ |
|