目录
链路宽度和速率确认(Link Width and Rate Confirmation)是 PCIe 链路训练过程中的一个重要阶段,用于确保发送端和接收端之间的链路宽度和速率设置正确。这一阶段的目标是验证链路配置的准确性,并确保链路能够在最佳条件下运行。
链路宽度和速率确认的步骤
1. 初始化链路宽度和速率寄存器
在链路训练开始之前,发送端和接收端都需要初始化链路宽度和速率寄存器。这些寄存器存储了设备支持的最大链路宽度和速率。
寄存器位置:
- Link Control Register:包含链路宽度和速率设置。
- Link Status Register:报告当前链路宽度和速率。
2. 发送和接收 TS2 序列
发送端和接收端通过交换 Configuration Training Sequences (TS2) 来确认链路宽度和速率。TS2 序列包含链路宽度和速率信息。
TS2 序列格式:
- 前导码:用于同步。
- 训练集:包含链路宽度和速率信息。
- 后缀:用于错误检测。
3. 检测链路对端的存在
发送端定期发送 TS2 序列,并监听对端的响应。如果接收到对端的 TS2 序列,说明链路对端存在。
4. 交换链路宽度和速率信息
一旦检测到链路对端的存在,发送端和接收端通过交换 TS2 序列中的链路宽度和速率信息来确认支持的最大链路宽度和速率。
链路宽度和速率信息:
- 发送端:在 TS2 序列中发送自己支持的最大链路宽度和速率。
- 接收端:在 TS2 序列中发送自己支持的最大链路宽度和速率。
5. 确定最大链路宽度和速率
发送端和接收端比较各自支持的最大链路宽度和速率,选择最小值作为最终的链路宽度和速率。
确定链路宽度和速率的逻辑:
-
发送端支持的最大链路宽度: WsendWsend
-
接收端支持的最大链路宽度: WrecvWrecv
-
最终链路宽度: Wfinal=min(Wsend,Wrecv)Wfinal=min(Wsend,Wrecv)
-
发送端支持的最大链路速率: RsendRsend
-
接收端支持的最大链路速率: RrecvRrecv
-
最终链路速率: Rfinal=min(Rsend,Rrecv)Rfinal=min(Rsend,Rrecv)
6. 配置链路宽度和速率
确定最终链路宽度和速率后,发送端和接收端分别配置自己的链路宽度和速率寄存器,以反映新的链路宽度和速率设置。
配置步骤:
- 发送端:更新 Link Control Register 中的链路宽度和速率设置。
- 接收端:更新 Link Status Register 中的链路宽度和速率设置。
7. 验证链路配置
在配置完成后,发送端和接收端通过发送和接收 TLPs(Transaction Layer Packets)来验证链路配置的准确性。如果 TLPs 传输成功,说明链路配置正确。
示例
假设我们有两个 PCIe 设备 A 和 B,它们需要确认链路宽度和速率。以下是链路宽度和速率确认的示例流程:
-
初始化链路宽度和速率寄存器:
- 设备 A 支持的最大链路宽度为 x8,最大链路速率为 Gen3 (8.0 GT/s)。
- 设备 B 支持的最大链路宽度为 x16,最大链路速率为 Gen4 (16.0 GT/s)。
-
发送和接收 TS2 序列:
- 设备 A 发送 TS2 序列,包含链路宽度 x8 和速率 Gen3 (8.0 GT/s)。
- 设备 B 发送 TS2 序列,包含链路宽度 x16 和速率 Gen4 (16.0 GT/s)。
-
检测链路对端的存在:
- 设备 A 收到设备 B 的 TS2 序列,确认设备 B 存在。
- 设备 B 收到设备 A 的 TS2 序列,确认设备 A 存在。
-
交换链路宽度和速率信息:
- 设备 A 和设备 B 分别发送各自的链路宽度和速率信息。
-
确定最大链路宽度和速率:
-
设备 A 支持的最大链路宽度:x8
-
设备 B 支持的最大链路宽度:x16
-
最终链路宽度: Wfinal=min(8,16)=8Wfinal=min(8,16)=8
-
设备 A 支持的最大链路速率:Gen3 (8.0 GT/s)
-
设备 B 支持的最大链路速率:Gen4 (16.0 GT/s)
-
最终链路速率: Rfinal=min(8.0,16.0)=8.0Rfinal=min(8.0,16.0)=8.0 GT/s
-
-
配置链路宽度和速率:
- 设备 A 更新 Link Control Register,设置链路宽度为 x8 和速率 Gen3 (8.0 GT/s)。
- 设备 B 更新 Link Status Register,设置链路宽度为 x8 和速率 Gen3 (8.0 GT/s)。
-
验证链路配置:
- 设备 A 和设备 B 通过发送和接收 TLPs 来验证链路配置的准确性。
- 如果 TLPs 传输成功,说明链路配置正确。
总结
链路宽度和速率确认是一个多步骤的过程,确保发送端和接收端之间的链路宽度和速率设置正确。通过初始化链路宽度和速率寄存器、发送和接收 TS2 序列、检测链路对端的存在、交换链路宽度和速率信息、确定最大链路宽度和速率、配置链路宽度和速率以及验证链路配置,可以确保 PCIe 设备之间的数据传输在最佳条件下进行。以下是链路宽度和速率确认的简化流程:
- 初始化链路宽度和速率寄存器:设置支持的最大链路宽度和速率。
- 发送和接收 TS2 序列:检测链路对端的存在。
- 交换链路宽度和速率信息:发送和支持的最大链路宽度和速率。
- 确定最大链路宽度和速率:选择最小值作为最终链路宽度和速率。
- 配置链路宽度和速率:更新链路宽度和速率寄存器。
- 验证链路配置:通过发送和接收 TLPs 验证链路配置的准确性。
通过这些步骤,PCIe 设备可以成功建立并配置最优的链路宽度和速率,确保高效和可靠的数据传输。