博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

PCIE背景知识学习(6)

Posted on 2022-09-27 14:09  沉默改良者  阅读(597)  评论(0编辑  收藏  举报

PCIE背景知识学习(6)

物理层

物理层的 LTSSM(Link Training and Status State Machine,链路训练状态机)负责进行链路初始化以及训练。

 为了更容易看出这个数据包是怎么构成的,我们将 TLP 的不同部分用不同的颜色进行标识,以此来表示对应的部分是由哪一层添加的:红色代表事务层,蓝色代表数据链路层,绿色代表物理层。

 

 

 事务层还可以选择添加 ECRC(End-to-End CRC, 端到端 CRC)字段,这个 ECRC 由事务层进行计算并附加在数据包的后面。

对于 TLP 的传输,TLP 的核心部分由事务层转发至数据链路层,数据链路层负责在 TLP 中添加一个序列号和另外一个被称为 LCRC(Link CRC, 链路CRC) CRC 字段区域。

LCRC 被对端接收方用来进行错误检查,并将链路上传输的每个数据包的检查结果都汇报给发送方。

 

 

 

 

 

 

 

 

总线号、设备号、功能号组合起来的信息(有时被缩写为 BDF,Bus、Device、Function)就是完成包用来返回到发起方的路由信息。

流量控制(Flow Control)

 

 

接收方内的 VC 缓冲区内缓存了接收到的 TLP。接收方将自己的缓冲区大小通过流量控制 DLLP 来告知发送方。发送方将会跟踪接收方的可用缓冲区空间的值,并且不允许发出大于这个可用空间的数据包。当接收方对缓冲区中的 TLP 进行了处理,并将这个 TLP 移出了缓冲区,此时缓冲区中就空闲出了新的可用空间,那么接收方将会定期的发送流量控制更新 DLLP ,保持发送方能够获取到最新的可用空间的值。

数据链路层(Data Link Layer)

数据链路层这一层的逻辑是用来负责链路管理的,它主要表现为3个功能:TLP 错误纠正、流量控制以及一些链路电源管理。

 

 

 

 

 

 如果接收方检测到了一个 TLP 错误,它将会把这个 TLP 丢弃,并向发送方返回一个 Nak DLLP,以期望发送方能对未确认成功接收的 TLP 进行重传,并通过重传获得一个完好的 TLP。由于错误检测通常是十分迅速的操作,因此从错误检测开始到发起重传的时间也比较短,这样就可以在较短的时间内纠正发生的错误。这一操作过程被称为 Ack/Nak(Acknowledge/NotAcknowledge) 协议。

 

 

 

 

 

 

 

每个字节都进行了扰码,以此来减少在传输线上传输连续重复的“0”或“1”,这有助于减少链路上的 EMI(electro-magnetic interference,电磁干扰)。

链路训练和初始化(Link Training and Initialization)

在这个过程中,为了确保执行正确以及最优的操作,我们需要检查或者建立一些东西,例如:

链路宽度(Link width)

链路数据率(Link data rate)

通道调转(Lane reversal)—— 通道收发连接相反了,本应 TX 连对端 RX ,若相反则变成 TX 连了对端 TX。

极性反转(Polarity inversion)—— 通道极性连接相反,TX_P 应当连接对端的 RX_P,若相反则变成了 TX_P 连接了对端的 RX_N。

每个通道的位锁定(bit lock)—— 恢复出发送方的时钟。

每个通道的符号锁定(symbol lock)—— 在比特流中找到一个可辨认的位置。

多通道链路中的 Lane-to-Lane 歪斜去除。