手把手教你学PCIE--PCIe基本概念:链路宽度和速率

目录

链路宽度和速率确认的步骤

1. 初始化链路宽度和速率寄存器

2. 发送和接收 TS2 序列

3. 检测链路对端的存在

4. 交换链路宽度和速率信息

5. 确定最大链路宽度和速率

6. 配置链路宽度和速率

7. 验证链路配置

示例

总结


链路宽度和速率确认(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,它们需要确认链路宽度和速率。以下是链路宽度和速率确认的示例流程:

  1. 初始化链路宽度和速率寄存器

    • 设备 A 支持的最大链路宽度为 x8,最大链路速率为 Gen3 (8.0 GT/s)。
    • 设备 B 支持的最大链路宽度为 x16,最大链路速率为 Gen4 (16.0 GT/s)。
  2. 发送和接收 TS2 序列

    • 设备 A 发送 TS2 序列,包含链路宽度 x8 和速率 Gen3 (8.0 GT/s)。
    • 设备 B 发送 TS2 序列,包含链路宽度 x16 和速率 Gen4 (16.0 GT/s)。
  3. 检测链路对端的存在

    • 设备 A 收到设备 B 的 TS2 序列,确认设备 B 存在。
    • 设备 B 收到设备 A 的 TS2 序列,确认设备 A 存在。
  4. 交换链路宽度和速率信息

    • 设备 A 和设备 B 分别发送各自的链路宽度和速率信息。
  5. 确定最大链路宽度和速率

    • 设备 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

  6. 配置链路宽度和速率

    • 设备 A 更新 Link Control Register,设置链路宽度为 x8 和速率 Gen3 (8.0 GT/s)。
    • 设备 B 更新 Link Status Register,设置链路宽度为 x8 和速率 Gen3 (8.0 GT/s)。
  7. 验证链路配置

    • 设备 A 和设备 B 通过发送和接收 TLPs 来验证链路配置的准确性。
    • 如果 TLPs 传输成功,说明链路配置正确。

总结

链路宽度和速率确认是一个多步骤的过程,确保发送端和接收端之间的链路宽度和速率设置正确。通过初始化链路宽度和速率寄存器、发送和接收 TS2 序列、检测链路对端的存在、交换链路宽度和速率信息、确定最大链路宽度和速率、配置链路宽度和速率以及验证链路配置,可以确保 PCIe 设备之间的数据传输在最佳条件下进行。以下是链路宽度和速率确认的简化流程:

  1. 初始化链路宽度和速率寄存器:设置支持的最大链路宽度和速率。
  2. 发送和接收 TS2 序列:检测链路对端的存在。
  3. 交换链路宽度和速率信息:发送和支持的最大链路宽度和速率。
  4. 确定最大链路宽度和速率:选择最小值作为最终链路宽度和速率。
  5. 配置链路宽度和速率:更新链路宽度和速率寄存器。
  6. 验证链路配置:通过发送和接收 TLPs 验证链路配置的准确性。

通过这些步骤,PCIe 设备可以成功建立并配置最优的链路宽度和速率,确保高效和可靠的数据传输。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值