PCIe 均衡技术介绍(逻辑物理篇)


🔥点击查看精选 PCIe 系列文章🔥
🔥点击进入【芯片设计验证】社区,查看更多精彩内容🔥


📢 声明

  • 🥭 作者主页:【MangoPapa的CSDN主页】。
  • ⚠️ 本文首发于CSDN,转载或引用请注明出处 https://mangopapa.blog.csdn.net/article/details/124539607
  • ⚠️ 本文为非盈利性质,目的为 个人学习记录知识分享。因个人能力受限,存在协议解读不正确的可能。若您参考本文进行产品设计或进行其他事项并造成了不良后果,本人不承担相关法律责任。
  • ⚠️ 若本文所采用图片或相关引用侵犯了您的合法权益,请联系我进行删除。
  • 😄 欢迎大家指出文章错误,欢迎同行与我交流 ~
  • 📧 邮箱:mangopapa@yeah.net

引言

  近期学习了 PCIe 均衡相关东西,查阅了不计其数的文档。得闲,整理一下,供个人随时查阅,亦供他人参考。PCIe 均衡系列文章分为 3 篇:

  1. PCIe 均衡技术介绍(概要) ,简单介绍均衡的概念、信号补偿技术及均衡系数协商的过程,初步了解 PCIe 均衡可阅读此篇。
  2. PCIe 均衡技术介绍(电气物理篇) ,从电气物理层面介绍均衡器相关技术细节及均衡参数测量评估方法,想要深究 PCIe 均衡底层原理可阅读此篇。
  3. PCIe 均衡技术介绍(逻辑物理篇),从逻辑物理层面介绍均衡系数协商的过程及均衡相关的各项协议标准,想要深入学习 PCIe 均衡系数协商过程可参考此篇。

  本系列已包含 PCIe 2.5 GT/s、5 GT/s、8 GT/s、16 GT/s、32 GT/s 相关均衡介绍,尚未整理 64 GT/s 相关均衡的介绍,也未整理接收端压力眼图测试部分。整理者技术水平及在本文上的精力投入有限,本文可想而知存在诸多纰漏,望读者朋友们看到后能够指出,感谢!

  点击获取完整 pdf 文档 👉 https://mp.weixin.qq.com/s/8RmTb-gsLntUllteeKE6-g



1. PCIe 均衡技术介绍(概要)


链接:PCIe 均衡技术介绍(概要)


2. PCIe 均衡技术介绍(电气物理篇)


链接: PCIe 均衡技术介绍(电气物理篇)


3. PCIe 均衡技术介绍(逻辑物理篇)


  除非特别说明了无需 EQ,在初次切速到 8 GT/s 或以上速率时,必须进行 EQ。在不降低链路可靠性的情况下,EQ 完成之后 Rx 依然可以精调其参数。


3.1 PCIe 均衡机制

3.1.1 两种均衡机制

PCIe 协议定义了两种均衡机制:自动均衡与软件均衡机制,接下来分别介绍这两种均衡机制。


3.1.1.1 自动均衡机制

  自动均衡机制是指在没有外部软件控制的情况下,PCIe 链路两端设备自主发起的均衡过程。若链路两端设备都支持 8 GT/s 或以上速率,则可以调用自动均衡机制。协议不建议自动均衡与软件均衡混合使用的方式,比如 8 GT/s 及 16 GT/s 时采用自动均衡,到 32 GT/s 时又改用软件均衡,但协议中也未禁止这种操作。

  采用自动均衡机制时,Tx & Rx 每一条 Lane 针对每一种要做 EQ 的速率都做了调整。链路训练进入 L0 状态后,如果 PCIe 设备知道 EQ 未完成、其接下来要进行 EQ,无论当前速率是多少(即便已经达到目标速率),双方都不能发送任何 DLLP。


3.1.1.1.1 自动均衡中的 DLLP Blocking

  对于采用自动均衡机制的 PCIe 设备,USP 在收到 DSP 发来的 DLLP 之前不能发送任何 DLLP;DSP 在 EQ 完成之前也不能发送任何 DLLP。

  对于采用自动+软件混合均衡机制的 PCIe 设备,若双方设备均支持 16 GT/s 或更高速率,且 DSP 仅在 8 GT/s 时采用自动均衡机制,则 DSP 仅在 8 GT/s 速率 EQ 完成前禁止发送 DLLP,16 GT/s 及更高速率时不必遵循此规则。若双方设备均支持 32 GT/s 或更高速率,且 DSP 仅在16 GT/s时采用自动均衡机制,则 DSP 在完成 16 GT/s 速率 EQ 前禁止发送 DLLP,完成 8 GT/s EQ 前同样禁止,32 GT/s 及更高速率时不必遵循此规则。

  若由于 DLLP Blocking 导致设备从 L0 延迟进入 Recovery,USP 或 DSP 端有可能会发生推测电气闲超时或 DLLP 超时,这两种超时均是不可报告的错误。当发生上述两种超时时,链路会进入 Recovery 重新对链路进行训练,不会影响正确的链接操作。


3.1.1.2 软件均衡机制

  软件均衡机制是指 PCIe 设备在外部软件控制下发起的均衡过程。

  采用软件均衡机制前,软件需确保 EQ 不会导致正在传输的数据包 Timeout。软件均衡的步骤如下:

  1. 软件将 Link Control 3 Register (图 19)的 Perform Equalization 位置一。
  2. 软件填写 Link Control 2 Register (图 20)的 Target Link Speed 字段为 8 GT/s 或以上速率。
  3. 软件将 Link Control Register (图 21)的 Retrain Link 位置一。

在这里插入图片描述

▲ 图 19: Link Control 3 Register

在这里插入图片描述

▲ 图 20: Link Control 2 Register

在这里插入图片描述

▲ 图 21: Link Control Register

  若采用软件均衡机制,在使能 DSP 的 Perform Equalization 位之前,建议通过软件将 DSP 及 USP Link Control Register 的 Hardware Autonomous Width Disable 位置一,防止均衡出现问题后链路自动切换链路宽度(减宽)。对于已经启动自动减宽的设备,LTSSM 需要在 Hardware Autonomous Width Disable 位置一后的 1ms 内进 Recovery 及 Configuration 状态,重新协商链路宽度为自动切换前的链路宽度。

  若 USP 未开启 8 GT/s、16 GT/s、32 GT/s 等速率,也未采用自动均衡机制,软件需确保 USP 进 Recovery 进行 EQ 对正在发的数据包没有影响。USP 进 Recovery 并建议了新的速率后,DSP 切换速率为 USP 建议的速率并开始 EQ。

  对于 8 GT/s 以上速率,如果不支持或未开启 Equalization bypass to highest rate 能力,必须确保 8 GT/s 到该速率间的所有速率都成功完成了 EQ,才能针对该速率进行 EQ。

  软件均衡机制不受 DLLP Blocking 机制的限制。

  无论自动均衡还是软件均衡,DSP 在切速的时候,把速度切为下次要做 EQ 的速度,并表明不支持比下次 EQ 速度更高的速率。比如最高速率为 16 GT/s,预期在 8 GT/s 及 16 GT/s 时都要做一次 EQ。第一次 EQ 的时候,DSP 应建议 2.5 GT/s 切到 8 GT/s,并表明目前不支持 16 GT/s 等更高的速率。EQ 成功达到 8 GT/s 后,DSP 再切到 16 GT/s,进 Recovery 进行第二次 EQ。


3.1.2 均衡加速与关闭

  Full equalization mode,全均衡模式, 是最传统的 PCIe 均衡模式。通常情况下,在指定目标速率的链路训练过程中,采用全均衡模式,先针对较低速率进行均衡,再进行较高速率的均衡,直到完成目标速率均衡。随着 PCIe 传输速率的上升,需要 EQ 的次数越来越多(单次约100 ms),EQ 耗时越来较久,影响了系统性能。为了节省均衡耗时,从 PCIe Gen5 开始,PCIe 支持跨过一些中间速率的均衡,对于原生传输质量极好的链路,也可以关闭均衡。


3.1.2.1 Equalization bypass to highest rate

  对于双方都支持 32 GT/s 及以上的设备,有可能根本不会工作在 8 GT/s 或 16 GT/s,此时可以跳过 8 GT/s 和 16 GT/s 的 EQ,直接进行 32 GT/s 或以上速率的 EQ。

  只有双方设备均支持且开启了 Equalization bypass to highest rate 时才能跳过中间速率的 EQ。设备是否支持该能力,取决于 32 GT/s 能力寄存器相关字段(图 22),软件可以配置 32 GT/s 控制寄存器(图 23)来关闭该能力。链路训练过程中,双方设备在 LTSSM Configuration 状态通过交换 TS 来协商是否使用 Equalization bypass to highest rate。 注意,如果是 Standard TS ,该字段位于 TS Symbol 5 的 bit[7:6];如果是 Modified TS,该字段位于 TS Symbol 5 的 bit[0]。

在这里插入图片描述

▲ 图 22: 32 GT/s Capabilities Register

在这里插入图片描述

▲ 图 23: 32 GT/s Control Register

  如果协商后决定采用 Bypass equalization to highest rate 模式进行链路训练,只进行一次切速,即链路到达 2.5 GT/s L0 后,返回 Recovery 直接切速到最高速率并针对最高速率(32 GT/s 或以上)进行 1 次 EQ。对于两端有能力最高支持 32 GT/s 及以上速率的设备,如果把目标速度设置为 8 GT/s 或 16 GT/s 速率,是不建议采用 Bypass equalization to highest rate 模式的,即便采用了,也不会针对 8 GT/s 或 16 GT/s 的目标速率进行 EQ。

  开启 Equalization bypass to highest rate 后,如果在最高速率 EQ 失败且重复 EQ 也失败,就要考虑降速了。这时要注意,DSP 此时要关掉 Equalization bypass to highest rate 及 No equalization needed,从 2.5 GT/s 或 5 GT/s 老老实实往上(8 GT/s+)切速,每次都做 EQ。


3.1.2.2 No equalization needed

  如果双方支持 32 GT/s 及以上速率且支持 No equalization needed,在链路质量极好或本地存有之前均衡预设好的值的前提下,我们是有信心 5 GT/s 以上速率不用 EQ 的。不做 EQ能够大大节省 EQ 的时间,以最快速度建立连接。

  只有双方设备均支持且开启了 No equalization needed 时才能关闭 EQ。设备是否支持该能力,取决于 32 GT/s 能力寄存器相关字段(图 22),软件可以配置 32 GT/s 控制寄存器(图 23)来关闭该能力。链路训练过程中,双方设备在 LTSSM Configuration 状态通过交换 TS 来协商是否使用 No equalization。 注意,如果是 Standard TS,该字段位于 TS Symbol 5 的 bit[7:6];如果是 Modified TS, 该字段位于 TS Symbol 5 的 bit[1]。 Modified TS 中,如果开了 No equalization,那 Equalization bypass to highest rate 也必须置一,Equalization bypass to highest rate 置零的链路操作 spec 中未定义。

  如果协商后决定采用 No equalization needed 模式进行链路训练,链路到达 2.5 GT/s L0 后,返回 Recovery 直接切速到最高速率且不做 EQ。对于两端有能力最高支持 32 GT/s 及以上速率的设备,如果把目标速度设置为 8 GT/s 或 16 GT/s 速率,是不建议采用 No equalization needed 模式的。非要采用的话,也行,同样不会针对 8 GT/s 或 16 GT/s 等任何速率进行 EQ,但是链路信号质量得不到保证。

  双方设备在沟通均衡需求的时候,如果一方要求 No equalization 而令一方要求 Equalization bypass to highest rate 该怎么办呢?要求 No equalization 的一方都可以不做 EQ 了,那也不在乎再来一次 EQ。对于要求 Equalization bypass to highest rate 的设备而言,不做 EQ 的话,链路质量可能会很糟糕。保守起见按照 Equalization bypass to highest rate 进行训练。

  如上文所述,Equalization bypass to highest rate 是 Gen5 的 Capability,仅 Gen5 设备 32 GT/s 可以使用。No equalization needed 不同于 Equalization bypass to highest rate,No equalization needed 是Gen5 的 Capability,如果设备支持 32 GT/s 的话,可以在任何速率建议 No equalization needed,任何中间速率都不会进行 EQ。


3.1.3 均衡结果判别及措施

  均衡是否成功,是针对 8 GT/s 以上传输速率而言的,本质上是要看传输误码率性能。在某一传输速率下,通过单独调整每一条 Lane 的收发端均衡器系数,使得链路上所有有效 Lane 上的传输误码率 BER≤10-12 即认为该速率均衡完成。如果在一定时间内无法达到 BER≤10-12 的通信性能,则认为当前速率均衡失败。


3.1.3.1 均衡成功的标志

  从均衡过程上讲,均衡成功意味着 LTSSM.Equalization 成功完成了 Phase 0/1 ~ Phase 3 的跳转并正常跳转到了下一状态。均衡过程中,每完成一个 Phase,PCIe Controller 中都会把当前速率的状态寄存器中相应的 Equalization Phase Successful 置一,并在完成 Phase 3 并退出均衡后将该速率的 Equalization Complete 位置一。对于 8 GT/s,寄存器名称为 Link Status 2 Reister(图 24);对于 16 GT/s,寄存器名称为 16 GT/s Status Reister(图 25);对于 32 GT/s,寄存器名称为 32 GT/s Status Reister(图 26)。

在这里插入图片描述

▲ 图 24: Link Status 2 Register

在这里插入图片描述

▲ 图 25: 16 GT/s Status Register

在这里插入图片描述

▲ 图 26: 32 GT/s Status Register

3.1.3.2 重新均衡机制
3.1.3.2.1 何时重新 EQ ?

  当发生几下几种情况时,可以重新进行 EQ:

  1. 针对某速率均衡失败;
  2. 针对某速率均衡成功,但在检查均衡系数设置时发现了问题;
  3. 改变链路宽度。

3.1.3.2.1.1 均衡失败

  针对某一速率进行 EQ 失败后,可以针对该速率重新进行 EQ,也可以降速。针对同一速率多次重复 EQ 有可能会干扰软件对链路及设备状态的判断。

  如果采用重新 EQ 的方案,针对该速率重复 EQ 的次数 Spec 中未指定,但应该是有限次数。在有限次数内仍未成功 EQ,意味着当前链路的确不适合工作在当前速率,可以降一档速度试试。有两种降速方案:① Recovery.Equalization 超时进入 Recovery.Speed 掉到之前的速率;②主动发起较低速率的变速请求。一旦针对有问题的速率启动了 EQ,需确保所有检测到有问题的速率都请求一次 EQ。为了防止降速后仍然 EQ 失败,可以从较低的中间速率开始 EQ。比如:当前速率为 2.5 GT/s 或 5 GT/s,DSP 针对 32 GT/s 均衡失败,想要降速到 16 GT/s ,DSP 先切速到 8 GT/s 再切速到 16 GT/s。

  链路针对某一速率 A 协商失败并成功降速到 B 后,从 B 进入 L0 开始算,200 ms 内不能针对速率 A 及以上速率进行协商,但对端主动启动 EQ 进行速率变化不受 200ms 的时间限制。


3.1.3.2.1.2 均衡设置问题

  按照协议,PCIe USP 需在 Recovery.RcvrLock 状态检测 EQ 参数设置问题。此外,DSP 及 USP 随时都可以按照自定义的机制检测 EQ 参数设置问题。若检测到对端发来的 TS 中相关均衡系数跟之前协商好的参数不同,即判定 EQ 系数设置出现了问题。若 DSP 检测到 EQ 问题,或 USP 请求重新 EQ(TS2 Symbol 6 bit[7]),DSP 可以在进入 EQ 预期速率之前重新针对该速率进行 EQ,也可以针对更高的速率进行 EQ。


3.1.3.2.1.3 改变链路宽度

  在满足系统带宽需求的情况下,为了降低功耗,DSP 可以降低链路宽度,USP 也可以主动请求降低链路宽度。自动均衡机制的设备在改变链路宽度之前需要重新进行 EQ。


3.1.3.2.2 重新 EQ 过程

  当某 Port 检测到 EQ 设置出现问题后,该 Port 需采取以下措施重新请求 EQ:

  • 对于 8 GT/s,Link Status 2 Regiser 的 Link Equanlization Requset 8 GT/s 位置一。
  • 对于 16 GT/s,16 GT/s Status Register 的 Link Equanlization Requset 16 GT/s 位置一。
  • 对于 32 GT/s,32 GT/s Status Register 的 Link Equanlization Requset 32 GT/s 位置一。

3.1.3.2.2.1 DSP 请求重新 EQ

  只有在确保 DSP 启动 EQ 不会对 DSP 和 USP 的其他操作产生影响的前提下,DSP 才能启动 EQ 进程。如果 DSP 不确定 EQ 会对 USP 产生何影响,其可以将其链路状态寄存器中相应速率的 Link Equanlization Requset 位置一,通过发送 Quiesce Guarantee 位为一的 TS 来告知 USP 自己准备好了,并由 USP 发起 EQ。

  USP 收到 DSP 的 EQ 请求后,可以(非必须)暂停其正在执行的操作,并按照收到 DSP 的 EQ 请求,再次向 DSP 发起相同速率的 EQ 请求(TS2 的 Quiesce Guarantee 位必须置一)。USP 响应 DSP EQ 请求的时间没有限制,但应尽快执行。DSP 收到 USP 响应后,在保证 EQ 对自身操作没有影响的前提下,需要在 1ms 内发起 EQ,否则把相应速率的 Link Equanlization Requset 位置一稍后再来一次。


3.1.3.2.2.2 USP 请求重新 EQ

  当 USP 请求重新 EQ 时,除了将相应的 Link Equanlization Requset 位置一外,USP 进 Recovery 状态,在 Recovery.RcvrCfg 状态时给 DSP 发送 TS2, Request Equalization (TS2 Symbol 6 bit[7]) 位置一,Equalization Request Data Rate (TS2 Symbol 6 bit[5:4]) 置为需要 EQ 的速率,Quiesce Guarantee (TS2 Symbol 6 bit[6]) 位可以(非必须)置一,通知 DSP 其在 1 ms 内将启动 EQ,以确保不会对 DSP 其他操作产生影响。

  DSP 收到 USP 的 EQ 请求后(处于 Recovery.RcvrCfg 且连续收到 8 个 Request Equalization 位置一的 TS2),可以(非必须)依照 USP 发来 TS2 中的 Quiesce Guarantee 位来判断是否会对 USP 产生影响。只有在确保 DSP 启动 EQ 不会对 DSP 和 USP 的其他操作产生影响的前提下,DSP 才能启动 EQ 进程。如果 DSP 确定 EQ 不会对 DSP 和 USP 的其他操作产生影响,其需要在 1ms 内按照 USP 请求的 EQ 速率发起 EQ 进程。否则,DSP 链路状态寄存器中相应速率的 Link Equanlization Requset 位置一,由 DSP 作为 EQ 请求方,查询 USP 状态(Quiesce Guarantee 位置一)。


3.1.3.2.2.3 Quiesce Guarantee 机制

  Quiesce Guarantee,静默保证,是 TS 中的一个字段(Symbol 6 bit[6]),常用于 DL_Active 之后重新进行 EQ 的情况。Quiesce Guarantee 是一种可选的手段,跟 TS 中的 Request Equalization、Equalization Request Data Rate 字段配合使用。

  链路工作在 8 GT/s 或以上速率时,如果 DSP 检测到 EQ 问题或者 USP 想要重新 EQ,则需要重新进行 EQ。此时 DL 层可能正在进行数据传输,如果贸然启动 EQ,有可能会在 Port、Device、System 层面引发错误。比如,DSP 发起了一笔 MRd,在 收到 CplD 之前进入 EQ,鉴于 EQ 耗时较久,会导致 Completion Timeout。Quiesce Guarantee 正是这样一种机制,告知对端我已准备好,你随时可以发起 EQ。


3.1.3.2.2.4 Perform Equalization 与 Link Equalization Request 有何区别?

  Perform Equalization 位于 Link Control 3 Register,软件均衡机制中,DSP 通过使能该位来启动均衡。当 Target Link Speed 为 8 GT/s 及以上且 Retrain Link 位置一时,若 Perform Equalization 为 1,则 DSP 必须启动均衡过程。当设备为 USP 且不支持 Crosslink 时,该字段为 Reserverd。若 Port 不支持 8 GT/s,该字段为 0。

  Link Equalization Request 是用来请求对具体传输速率进行均衡的,具体可分为 Link Equalization Request 8 GT/s、16 GT/s 及 32 GT/s,DSP 及 USP 都可以用。


3.1.4 不同情况下的 EQ 需求

  以下规则适用于初次 EQ、重新 EQ、自动均衡、软件均衡。


3.1.4.1 切速中的 EQ
3.1.4.1.1 2.5 GT/s -> 8 GT/s 或 5 GT/s -> 8 GT/s

  在沟通好要切速到 8 GT/s 之后、切换到 8 GT/s 之前,DSP 在 Recovery.RcvrCfg 状态采用 EQ TS2 给 USP 发送 Tx Preset 及 Rx Preset Hints(该字段仅用于 8 GT/s)。Tx Preset 及 Rx Preset Hints 是一组 Preset 的编码,并不指定具体的均衡器系数。DSP 此时发送的 8 GT/s EQ Preset 值为 USP Preset 值,存放在各条 Lane 的 EQ 控制寄存器中(图 27,图 28)。

在这里插入图片描述

▲ 图 27: Lane Equalization Control Register

在这里插入图片描述

▲ 图 28: Lane Equalization Control Register Entry

  在切换到要进行 EQ 的速率之后,USP 基于收到的 Preset 调整其均衡器系数反馈 TS1 到 DSP。若 Tx 采用 Reduced Swing,Preset 系数需要在其允许的动态范围之内。

  在切换到要进行 EQ 的速率之后,DSP 通过 TS1 发送 Preset 值。若 Tx 采用 Reduced Swing,Preset 系数需要在其允许的动态范围之内。DSP 此时发送的 8 GT/s EQ Preset 值为 DSP Preset 值,存放在各条 Lane 的 EQ 控制寄存器中。

  为了启动 8 GT/s EQ,DSP 在 2.5 GT/s 或 5 GT/s 速率的 Recovery.RcvrLock 状态通过Speed Change 位置一的 EQ TS1 请求切换速度,来通知 USP 其想要针对更高速率进行 EQ。USP 在收到 Speed Change 位置一的 EQ TS1 后,若 USP 自身也有意切到更高的速率,USP 应在 Recovery 状态响应 DSP 并提议切速到更高的速率。


3.1.4.1.2 8 GT/s -> 16 GT/s 或 16 GT/s -> 32 GT/s

  当协商更高速率时,DSP 采用 128b/130b 编码发送每条 Lane 的 Tx Preset 值到 USP(没有 Rx Preset Hints,Rx Preset Hints 仅用于 8 GT/s)。在沟通好要切速到更高速率之后、切换到更高速率并进行 EQ 之前,DSP 在 Recovery.RcvrCfg 状态采用 EQ TS2 发送 Tx Preset 值。DSP 此时发送的 16 GT/s 或 32 GT/s EQ Preset 值为 USP Tx Preset 值,存放在各条 Lane 的 16 GT/s(图 29)及 32 GT/s EQ 控制寄存器(图 30)中。

在这里插入图片描述

▲ 图 29: 16 GT/s Lane Equalization Control Register Entry

在这里插入图片描述

▲ 图 30: 32 GT/s Lane Equalization Control Register Entry

  除了 DSP 给 USP 发送 Preset 值,还有另一种可选的方案:在沟通好要切速到更高速率之后、却换到更高速率之前,USP 可以在 Recovery.RcvrCfg 状态采用 128b/130b 编码的 EQ TS2 给 DSP 发送初始 Tx Preset 设置。这些初始 Preset 值根据各设计自行设置。数据速率切到更高速率后,USP 将其收到的 Preset 值通过 TS1 反馈给 DSP。若 DSP 在 Recovery.RcvrCfg 状态未收到 Preset 值,在切换到较高的数据速率后,DSP 通过 TS1 给 USP 发送 Tx Preset 值。DSP 此时发送的 16 GT/s 或 32 GT/s EQ Preset 值为 DSP Tx Preset 值,存放在各条 Lane 的 16 GT/s 及 32 GT/s EQ 控制寄存器中。

  为了启动重新 EQ,DSP 在 Recovery.RcvrLock 状态通过 Equalization Redo 置一的 TS1 请求切换速度,来通知 USP 其想要重新进行 EQ。USP 在收到 Speed Change 位置一、 Equalization Redo 置一 的 TS1 后,若 USP 自身也有意切到更高的速率,USP 应在 Recovery 状态提议切到更高的速率。


3.1.4.1.3 2.5 GT/s -> 32 GT/s 或 5 GT/s -> 32 GT/s

  只有链路支持 Bypass Equalization to Highest Data Rate 时才能直接从 2.5 GT/s 或 5 GT/s 经 EQ 到 32 GT/s。32 GT/s Capabilities Register 的 Bypass Equalization to Highest Data Rate Supported 位为 1 且 32 GT/s Control Register 的 Bypass Equalization to Highest Data Rate Disable 位为 0 时,链路支持 Bypass Equalization to Highest Data Rate。

  在沟通好要切速到 32 GT/s 之后、切换到 32 GT/s 之前,DSP 在 Recovery.RcvrCfg 状态采用 EQ TS2 给 USP 发送 Tx Preset 及 Rx Preset Hints(此处存疑,不是仅用于 8 GT/s 么?)。Tx Preset 及 Rx Preset Hints 是一组 Preset 的编码,并不指定具体的均衡器系数。DSP 此时发送的 32 GT/s EQ Preset 值为 USP Preset 值,存放在各条 Lane 的 EQ 控制寄存器中(图 30)。

  在切换到要进行 EQ 的速率之后,USP 基于收到的 Preset 调整其均衡器系数反馈 TS1 到 DSP。若 Tx 采用 Reduced Swing,Preset 系数需要在其允许的动态范围之内。

  在切换到要进行 EQ 的速率之后,DSP 通过 TS1 发送 Preset 值。若 Tx 采用 Reduced Swing,Preset 系数需要在其允许的动态范围之内。DSP 此时发送的 8 GT/s EQ Preset 值为 DSP Preset 值,存放在各条 Lane 的 EQ 控制寄存器中。

  为了启动 32 GT/s EQ,DSP 在 2.5 GT/s 或 5 GT/s 速率的 Recovery.RcvrLock 状态通过Speed Change 位置一的 EQ TS1 请求切换速度,来通知 USP 其想要针对更高速率进行 EQ。USP 在收到 Speed Change 位置一的 EQ TS1 后,若 USP 自身也有意切到更高的速率,USP 应在 Recovery 状态响应 DSP 并提议切速到更高的速率。


3.1.4.1.4 相同速率跳转的 EQ

  适用于从某一速率向相同速率跳转的重新 EQ,比如从 8 GT/s -> 8 GT/s, 16 GT/s -> 16 GT/s,32 GT/s -> 32 Gt/s。这种情况下,EQ 期间采用的初始 Preset 值等于上次对该速率进行 EQ 时采用的初始 Preset 值。


3.1.4.2 Crosslink 中的 EQ

  对于 Crosslink 链路,在速率较低的、Crosslink 初始化早期充当 DSP 角色的组件在进行 EQ 时仍然充当 DSP 的角色。


3.1.4.3 Loopback 或 Compliance 中的 EQ

  在 Loopback 状态,Loopback Master 需要在 2.5 GT/s 或 5 GT/s 速率时将 Tx/Rx 设置通过 EQ TS1 发送给 Slave,在 8 GT/s 或更高速率时通过 TS1 将 Preset 及 系数设置发送给 Slave。同样,若在 8 GT/s 或更高速率时通过 TS1 进入了 Polling.Compliance 状态,对设备进行 Compliance 测试的实体应通过 EQ TS1 给待测设备发送相关系数。


3.2 PCIe 均衡系数协商

  PCIe 在链路训练过程中进行均衡系数的协商,进行均衡技术协商的 LTSSM 状态为 Recovery.Equalization。Recovery 子状态转移如图 31 所示。

在这里插入图片描述

▲ 图 31: Recovery 子状态转移

  需要注意的是,LTSSM 中的 Recovery.Equalization 的确是到 Gen3 (8 GT/s) 时才有的,但均衡不是到 Gen3 才有的。2.5 GT/s 及 5 GT/s 时,信号速率相对较低,在 Tx 端采用信号去加重即可实现较好质量的信号传输,这里的信号去加重即是均衡技术的一种。由于信号去加重时参数固定,收发端无需协商,不需要 Recovery.Equaliation 这一过程进行协商。

  数据速率上升到 8 GT/s 及以上后,信号传输面临的信号完整性问题更加突出,仅采用传统的去加重无法满足高质量的信号传输,需要收发端动态协商 Tx/Rx 参数来优化信号质量。均衡系数的协商分为 Phase 0 ~ Phase 3 四个阶段,其中 DSP 无需 Phase 0。


3.2.1 DSP

  DSP 进入 EQ 后,即为 Phase 1。进入 Phase 1 后,DSP 首先要做的是清理均衡相关寄存器状态及 LTSSM 中的相关变量,如表 4 所述。

▼ 表 4: Phase 1 阶段 DSP 部分寄存器及变量操作
当前速率寄存器或变量操作
8 GT/s- 寄存器 Link Status 2 Register 中的以下字段清零:
 - Equalization 8 GT/s Phase 1 Successful
 - Equalization 8 GT/s Phase 2 Successful
 - Equalization 8 GT/s Phase 3 Successful
 - Link Equalization Request 8 GT/s
 - Equalization 8 GT/s Complete
- 寄存器 Link Control 3 Register 中的 Perform Equalization 字段清零
- 变量 equalization_done_8GT_data_rate 置一
- 变量 start_equalization_w_preset 清零
16 GT/s- 寄存器 16 GT/s Status Register 中的以下字段清零:
 - Equalization 16 GT/s Phase 1 Successful
 - Equalization 16 GT/s Phase 2 Successful
 - Equalization 16 GT/s Phase 3 Successful
 - Link Equalization Request 16 GT/s
 - Equalization 16 GT/s Complete
- 寄存器 Link Control 3 Register 中的 Perform Equalization 字段清零
- 变量 equalization_done_16GT_data_rate 置一
- 变量 start_equalization_w_preset 清零
32 GT/s- 寄存器 32 GT/s Status Register 中的以下字段清零:
 - Equalization 32 GT/s Phase 1 Successful
 - Equalization 32 GT/s Phase 2 Successful
 - Equalization 32 GT/s Phase 3 Successful
 - Link Equalization Request 32 GT/s
 - Equalization 32 GT/s Complete
- 寄存器 Link Control 3 Register 中的 Perform Equalization 字段清零
- 变量 equalization_done_32GT_data_rate 置一
- 变量 start_equalization_w_preset 清零

3.2.1.1 Phase 1

  Phase 1 阶段,DSP 发送 EC=01b 的 TS1。TS1 中,各条 Lane 根据当前速率独立设置其 Transmitter Preset 字段,同时设置与 Transmitter Preset 模式相匹配的 FS、LF、Post_cursor 系数。

  • Tx Preset 选用规则

    • 若 Recovery.Equalization 上一状态为 Loopback.Entry,
      • 若 Configuration.LinkWidthStart 阶段发送 EQ TS1进入的 Loopback.Entry,则采用 EQ TS1 指定的 Preset。
      • 若 Configuration.LinkWidthStart 阶段发送标准 TS1进入的 Loopback.Entry,则采用相关机制选用合适的 Preset。
    • 否则,若最近一次 Recovery.RcvfCfg 以来 DSP 连续收到了 8 个 Tx Preset 有效的 128b/130b 编码的 EQ TS2,且当前速率为 16 GT/s 或以上,则采用收到的 EQ TS2 指定的 Preset。
    • 否则,若最近一次 Recovery.RcvfCfg 以来 DSP 连续收到了 8 个 Tx Preset 有效的 EQ TS2(不一定是 128b/130b 编码) 且当前速率为 32 GT/s 或以上,如果采用了 Equalization Bypass to 32 GT/s,则采用收到的 EQ TS2 指定的 Preset。
    • 否则,根据当前数据速率,选用 8/16/32 GT/s Lane Equalization Control Register Entry 中 Downstream port 8/16/32 GT/s Transmitter Preset 字段字段指定的值作为 TS 的 Tx Preset Value。
    • 如果相关控制寄存器中未指定 Tx Preset 值,则需要相关机制来指定。
  • DSP 进入 Phase 1 后可以等待 500 ns 再评估接收信息,以等待 Rx 逻辑稳定。

  • 若 DSP 所有有效 Lane 上连续收到了两个 EC=01b 的 TS1 且 DSP 有意执行 Phase 2/Phase 3,则进入 Phase 2

    • Rx 应在收到第一个 OS 之后 2 ms 内完成位锁定并识别出 OS
    • 若速率为 8 GT/s,Link Status 2 Register 的 Equalization 8 GT/s Phase 1 Successful 位置一
    • 若速率为 16 GT/s,16 GT/s Link Status Register 的 Equalization 16 GT/s Phase 1 Successful 位置一
    • 若速率为 32 GT/s 且 perform_equalization_for_loopback 为 0,32 GT/s Link Status Register 的 Equalization 32 GT/s Phase 1 Successful 位置一
    • 保存 TS 中的 LF、FS 备用,Phase 3 时用
  • 下一状态为 Recovery.RcvrLock 的条件:DSP 所有有效 Lane 上连续收到了两个 EC=01b 的 TS1,perform_equalization_for_loopback 为 0,且 DSP 无意执行 Phase 2/Phase 3(BER≤10-12),则进入 Recovery.RcvrLock。

    • 若当前数据速率为 8 GT/s,Link Status 2 Register 中的 Equalization 8 GT/s Phase 1 Successful,Equalization 8 GT/s Phase 2 Successful,Equalization 8 GT/s Phase 3 Successful 及 Equalization 8 GT/s Complete 置一。
    • 若当前数据速率为 16 GT/s,16 GT/s Link Status Register 中的 Equalization 16 GT/s Phase 1 Successful,Equalization 16 GT/s Phase 2 Successful,Equalization 16 GT/s Phase 3 Successful 及 Equalization 16 GT/s Complete 置一。
    • 若当前数据速率为 32 GT/s,32 GT/s Link Status Register 中的 Equalization 32 GT/s Phase 1 Successful,Equalization 32 GT/s Phase 2 Successful,Equalization 32 GT/s Phase 3 Successful 及 Equalization 32 GT/s Complete 置一。
  • 下一状态为 Loopback.Entry 的条件:perform_equalization_for_loopback 为 1,且满足下列条件之一

    • 所有测试 Lane 连续收到了两个 EC=01b 的 TS1 且 DSP 无意执行 Phase 2/Phase 3
    • 24 ms Timeout
  • 下一状态为 Recovery.Speed 的条件:perform_equalization_for_loopback 为 0 且 24 ms Timeout。然后

    • success_speed_negotiation 清零
    • 若当前数据速率为 8 GT/s,Link Status 2 Register 中的 Equalization 8 GT/s Complete 置一
    • 若当前数据速率为 16 GT/s,16 GT/s Link Status Register 中的 Equalization 16 GT/s Complete 置一
    • 若当前数据速率为 32 GT/s,32 GT/s Link Status Register 中的 Equalization 32 GT/s Complete 置一

3.2.1.2 Phase 2
  • DSP 在 Phase 2 各条 Lane 独立发送 EC=10b 的 TS1 及相关 EQ 系数。

    • 若进入 Phase 2 以来连续收到 2 个 EC=10b 的 TS1
      • 若最近收到的两个 TS1 中的 Preset 及系数合法且支持,
        • 收到第 2 个 TS1 后的 500 ns 内,将 Tx Pin 相关参数设置为 Rx 请求的 Preset 及系数。Tx 更新设置引起的非法电平及参数持续时间不能超过 1 ns。
        • 如果接受了 Rx 请求,且按照 Rx 的请求设置了发送 TS1 中的 Tx Preset、Pre-cursor、Cursor、Post-cursor 系数,那么应该把TS1 中的 Reject Coefficint Values 字段清零。
      • 若 Rx 请求的 Preset 及系数不合法或 Tx 不支持,那 Tx 不能采用其请求,且应该把TS1 中的 Reject Coefficint Values 字段置一,告知 Rx 其请求被驳回。
    • 否则 Tx 继续采用其当前的 Preset 及系数。
  • 如 DSP 在所有已配置 Lane 上连续收到了 2 个 EC=11b 的 TS1,进入 Phase 3

    • 若速率为 8 GT/s,Link Status 2 Register 的 Equalization 8 GT/s Phase 2 Successful 位置一
    • 若速率为 16 GT/s,16 GT/s Link Status Register 的 Equalization 16 GT/s Phase 2 Successful 位置一
    • 若速率为 32 GT/s 且 perform_equalization_for_loopback 为 0,32 GT/s Link Status Register 的 Equalization 32 GT/s Phase 2 Successful 位置一
  • 若 perform_equalization_for_loopback 为 1 且 32+4 ms Timeout,进入 Loopback.Entry

  • 若 perform_equalization_for_loopback 为 0 且 32+4 ms Timeout,进入 Recovery.Speed

    • success_speed_negotiation 清零
    • 若当前数据速率为 8 GT/s,Link Status 2 Register 中的 Equalization 8 GT/s Complete 清零
    • 若当前数据速率为 16 GT/s,16 GT/s Link Status Register 中的 Equalization 16 GT/s Complete 清零
    • 若当前数据速率为 32 GT/s,32 GT/s Link Status Register 中的 Equalization 32 GT/s Complete 清零

3.2.1.3 Phase 3
  • DSP 在 Phase 3 发送 EC=11b 的 TS1。
  • DSP 在 Phase 3 时,每条 Lane 独立评估 EQ 参数并达到最优参数设置。若 perform_equalization_for_loopback 为 1,只在测试 Lane 上进行评估并对 Preset 及 EQ 系数进行评估优化:
    • 若 DSP 希望采用 Preset 值,则将其发送 TS1 中的 Tx Preset 值置为其期望的值,并把 Use Preset 位置一;若 DSP 不采用 Preset 值,则将其发送 TS1 中的 Pre-cursor、Cursor、Post-cursor 值置为其期望的值,并把 Use Preset 位置清零。一旦开始发送请求,在完成评估前至少应持续 1 us。
    • DSP 的等待一段时间(500 ns + 往返时延)。在等待期间,DSP 等待 USP 完成 Tx 参数调整,DSP 可以忽略 USP 发来的数据。等待期间,若 USP 接受 DSP 的请求,USP 按照DSP 的请求其 USP 自身的 Tx 参数。等待期满,DSP 验证块对齐情况,无论是否完成块对齐,都对收到的 OS 进行评估。
    • 若 DSP 连续收到 2 个 TS1,TS1 中的 Tx Preset 或 Pre-cursor、Cursor、Post-cursor 与 DSP 请求的一致,且 Reject Coefficient Value 为 0,表明 USP 接受了 DSP 的参数设置请求。这些结果可以作为候选的最终结果。
    • 若 DSP 连续收到 2 个 TS1,TS1 中的 Tx Preset 或 Pre-cursor、Cursor、Post-cursor 与 DSP 请求的一致,且 Reject Coefficient Value 为 1,表明 USP 拒绝了 DSP 的参数设置请求。这些结果不可以作为候选的最终结果。
    • 若一定时间内 DSP 没有收到 USP 反馈的带有与请求参数相同的 TS1,则不能采用请求的参数。
    • DSP 需要根据其评估标准及需求来复位 USP 的 EIEOS Interval Counter,通过将发送 TS1 中的 Reset EIEOS Interval Counter 位置一来复位。不可以依据接收到的 TS1 中的 Use Preset 位来判断 DSP 的请求是否被接受。
      • 什么时候来复位 EIEOS Counter 呢?DSP 想要一个较长的 PRBS Pattern 时可以将 Reset EIEOS Interval Count 置一,在需要 Block Alignment 的时候将其清零。
      • Preset 及系数请求:Phase 3 时 DSP 发送的所有 TS1 均为请求。第一次发送的请求中,可以为新的 Preset 或系数集(请求调整),也可以为连续接收到的 2 个 EC=11b 的 TS1 中的 Preset 及系数(请求对端保留当前设置)。
    • 每次 Preset 或系数请求应在 2 ms 内完成。在优化的最后阶段,需要更长评估时间(时间少了无法完成评估),此时可以超过 2 ms 限制,但总体评估时间不能超过 24 ms,且最多只能 2 ms 超时两次。 如果请求者在超时期限内无法接收 Ordered Sets,则可能认为请求的设置在该 Lane 中不起作用。
    • 所有新的 Preset 或系数设置必须同时出现在所有配置的通道上。 如果当时不想更改设置,则允许任何给定通道继续传输当前预设或系数作为其新值。
  • 若当前速率为 32 GT/s 且 perform_equalization_for_loopback 为 1,满足以下条件时,下一状态为 Loopback.Entry。
    • 测试中的 Lane 工作在了最优设置,且所有 Lane 上连续收到了 2 个 Retimer Equalization Extent 位为 0 的 TS1。
    • 24+2 ms Timeout。
  • 若 perform_equalization_for_loopback 为 0,所有配置 Lane 工作在最优设置下,且满足以下两个条件之一(①当前速率为 8 GT/s;②所有 Lane 上连续收到了 2 个 Retimer Equalization Extent 位为 0 的 TS1),下一状态为 Recovery.RcvrLock。
    • 若速率为 8 GT/s,Link Status 2 Register 的 Equalization 8 GT/s Phase 3 Successful 及 Equalization 8 GT/s Complete 位置一。
    • 若速率为 16 GT/s,16 GT/s Link Status Register 的 Equalization 16 GT/s Phase 3 Successful 及 Equalization 16 GT/s Complete 位置一。
    • 若速率为 32 GT/s,32 GT/s Link Status Register 的 Equalization 32 GT/s Phase 3 Successful 及 Equalization 32 GT/s Complete 位置一。
  • 否则,24+2 ms Timeout 后,下一状态为 Recovery.Speed。
    • success_speed_negotiation 清零。
    • 若当前数据速率为 8 GT/s,Link Status 2 Register 中的 Equalization 8 GT/s Complete 位置一。
    • 若当前数据速率为 16 GT/s,16 GT/s Link Status Register 中的 Equalization 16 GT/s Complete 位置一。
    • 若当前数据速率为 32 GT/s,32 GT/s Link Status Register 中的 Equalization 32 GT/s Complete 位置一。

3.2.2 USP

  USP 进入 EQ 后,为 Phase 0。进入 Phase 0 后,USP 首先要做的是清理均衡相关寄存器状态及 LTSSM 中的相关变量,如表 5 所述。

▼ 表 5: Phase 0 阶段 USP 部分寄存器及变量操作
当前速率寄存器或变量操作
8 GT/s- 寄存器 Link Status 2 Register 中的以下字段清零:
 - Equalization 8 GT/s Phase 1 Successful
 - Equalization 8 GT/s Phase 2 Successful
 - Equalization 8 GT/s Phase 3 Successful
 - Link Equalization Request 8 GT/s
 - Equalization 8 GT/s Complete
- 变量 equalization_done_8GT_data_rate 置一
- 变量 start_equalization_w_preset 清零
16 GT/s- 寄存器 16 GT/s Status Register 中的以下字段清零:
 - Equalization 16 GT/s Phase 1 Successful
 - Equalization 16 GT/s Phase 2 Successful
 - Equalization 16 GT/s Phase 3 Successful
 - Link Equalization Request 16 GT/s
 - Equalization 16 GT/s Complete
- 变量 equalization_done_16GT_data_rate 置一
- 变量 start_equalization_w_preset 清零
32 GT/s- 寄存器 32 GT/s Status Register 中的以下字段清零:
 - Equalization 32 GT/s Phase 1 Successful
 - Equalization 32 GT/s Phase 2 Successful
 - Equalization 32 GT/s Phase 3 Successful
 - Link Equalization Request 32 GT/s
 - Equalization 32 GT/s Complete
- 变量 equalization_done_32GT_data_rate 置一
- 变量 start_equalization_w_preset 清零

注:没有寄存器 Link Control 3 Register 中的 Perform Equalization 相关操作,这是 DSP 的。


3.2.2.1 Phase 0

  Phase 0 阶段,USP 发送 EC=00b 的 TS1。TS1 中,各条 Lane 根据当前速率独立设置其 Transmitter Preset 字段,同时设置与 Transmitter Preset 模式相匹配的 FS、LF、Post_cursor 系数。

  • Recovery.Equalization 上一状态为 Loopback.Entry 时,
    • 若 Configuration.LinkWidthStart 阶段发送 EQ TS1进入的 Loopback.Entry,则采用 EQ TS1 指定的 Preset。
    • 若 Configuration.LinkWidthStart 阶段发送标准 TS1进入的 Loopback.Entry,则采用相关机制选用合适的 Preset。
  • 若当前速率为 8 GT/s,USP 采用其在最近一次 2.5 GT/s 或 5 GT/s 时收到的 EQ TS2 中的 Tx Preset 设置 USP 的 Tx 均衡器,并反馈 TS1 给 DSP。
  • 若当前速率为 16 GT/s,USP 采用其在最近一次 8 GT/s 时收到的 EQ TS2 中的 Tx Preset 设置 USP 的 Tx 均衡器,并反馈 TS1 给 DSP。
  • 若当前速率为 32 GT/s 且 perform_euqualization_for_loopback 为 0,USP 采用其在最近一次 2.5 GT/s、5 GT/s 或 16 GT/s 时收到的 EQ TS2 中的 Tx Preset 设置 USP 的 Tx 均衡器,并反馈 TS1 给 DSP。
  • 若 USP 某条 Lane 收到了 Reserved 或不支持的 Tx Preset,该 Lane 可以根据具体情况采用任一支持的 Tx Preset 设置,但反馈给 DSP 的 TS1 中仍然采用其收到的无效的 Preset,并把 Reject Coefficient 置一通知 DSP 发送的 Preset 被拒绝。
  • 若 USP 某条 Lane 此前未收到 EQ TS2,该 Lane 可以根据具体情况采用任一支持的 Tx Preset 设置,把其采用的 Preset 及均衡器系数通过 TS1 反馈给 DSP,并把 Reject Coefficient 不置一。
  • USP 进入 Phase 0 后可以等待 500 ns 再评估接收信息,以等待 Rx 逻辑稳定。
  • 若 USP 所有有效 Lane 上连续收到了两个 EC=01b 的 TS1,USP 进入 Phase 1。
    • Rx 应在收到第一个 OS 之后 2 ms 内完成位锁定并识别出 OS。
    • 保存 TS 中的 LF、FS 备用,Phase 2 时用
  • 若 perform_equalization_for_loopback 为 1 且 12 ms Timeout,则跳转到 Loopback.Entry
  • 若 perform_equalization_for_loopback 为 0 且 12 ms Timeout,则跳转到 Recovery.Speed,然后
    • success_speed_negotiation 清零
    • 若当前数据速率为 8 GT/s,Link Status 2 Register 中的 Equalization 8 GT/s Complete 置一
    • 若当前数据速率为 16 GT/s,16 GT/s Link Status Register 中的 Equalization 16 GT/s Complete 置一
    • 若当前数据速率为 32 GT/s,32 GT/s Link Status Register 中的 Equalization 32 GT/s Complete 置一

3.2.2.2 Phase 1
  • Phase 1 阶段,USP 基于 Phase 0 的 Preset 设置其 Tx 均衡器并发送 EC=01b 的 TS1。TS1 中,各条 Lane 根据当前速率独立设置其 Transmitter Preset 字段,同时设置与 Transmitter Preset 模式相匹配的 FS、LF、Post_cursor 系数。

  • 若 USP 所有有效 Lane 上连续收到了两个 EC=10b 的 TS1,则进入 Phase 2

    • 若速率为 8 GT/s,Link Status 2 Register 的 Equalization 8 GT/s Phase 1 Successful 位置一
    • 若速率为 16 GT/s,16 GT/s Link Status Register 的 Equalization 16 GT/s Phase 1 Successful 位置一
    • 若速率为 32 GT/s 且 perform_equalization_for_loopback 为 0,32 GT/s Link Status Register 的 Equalization 32 GT/s Phase 1 Successful 位置一
  • 下一状态为 Recovery.RcvrLock 的条件:USP 所有有效 Lane 上连续收到了 8 个 EC=00b 的 TS1,perform_equalization_for_loopback 为 0,则进入 Recovery.RcvrLock。

    • 若当前数据速率为 8 GT/s,Link Status 2 Register 中的 Equalization 8 GT/s Phase 1 Successful 及 Equalization 8 GT/s Complete 置一。
    • 若当前数据速率为 16 GT/s,16 GT/s Link Status Register 中的 Equalization 16 GT/s Phase 1 Successful 及 Equalization 16 GT/s Complete 置一。
    • 若当前数据速率为 32 GT/s,32 GT/s Link Status Register 中的 Equalization 32 GT/s Phase 1 Successful 及 Equalization 32 GT/s Complete 置一。
  • 下一状态为 Loopback.Entry 的条件:perform_equalization_for_loopback 为 1,且满足下列条件之一

    • USP 所有测试 Lane 连续收到了两个 EC=00b 的 TS1
    • 12 ms Timeout
  • 下一状态为 Recovery.Speed 的条件:perform_equalization_for_loopback 为 0 且 12 ms Timeout。然后

    • success_speed_negotiation 清零
    • 若当前数据速率为 8 GT/s,Link Status 2 Register 中的 Equalization 8 GT/s Complete 置一
    • 若当前数据速率为 16 GT/s,16 GT/s Link Status Register 中的 Equalization 16 GT/s Complete 置一
    • 若当前数据速率为 32 GT/s,32 GT/s Link Status Register 中的 Equalization 32 GT/s Complete 置一

3.2.2.3 Phase 2
  • USP 在 Phase 3 发送 EC=10b 的 TS1。
  • USP 在 Phase 3 时,每条 Lane 独立评估 EQ 参数并达到最优参数设置。若 perform_equalization_for_loopback 为 1,只在测试 Lane 上进行评估并对 Preset 及 EQ 系数进行评估优化:
    • 若 USP 希望采用 Preset 值,则将其发送 TS1 中的 Tx Preset 值置为其期望的值,并把 Use Preset 位置一;若 DSP 不采用 Preset 值,则将其发送 TS1 中的 Pre-cursor、Cursor、Post-cursor 值置为其期望的值,并把 Use Preset 位置清零。一旦开始发送请求,在完成评估前至少应持续 1 us。
    • USP 的等待一段时间(500 ns + 往返时延)。在等待期间,USP 等待 DSP 完成 Tx 参数调整,USP 可以忽略 DSP 发来的数据。等待期间,若 DSP 接受 USP 的请求,DSP 按照 USP 的请求其 DSP 自身的 Tx 参数。等待期满,USP 验证块对齐情况,无论是否完成块对齐,都对收到的 OS 进行评估。
    • 若 DSP 连续收到 2 个 TS1,TS1 中的 Tx Preset 或 Pre-cursor、Cursor、Post-cursor 与 DSP 请求的一致,且 Reject Coefficient Value 为 0,表明 DSP 接受了 USP 的参数设置请求。这些结果可以作为候选的最终结果。
    • 若 DSP 连续收到 2 个 TS1,TS1 中的 Tx Preset 或 Pre-cursor、Cursor、Post-cursor 与 DSP 请求的一致,且 Reject Coefficient Value 为 1,表明 DSP 拒绝了 USP 的参数设置请求。这些结果不可以作为候选的最终结果。
    • 若一定时间内 USP 没有收到 DSP 反馈的带有与请求参数相同的 TS1,则不能采用请求的参数。
    • USP 需要根据其评估标准及需求来复位 DSP 的 EIEOS Interval Counter,通过将发送 TS1 中的 Reset EIEOS Interval Counter 位置一来复位。不可以依据接收到的 TS1 中的 Use Preset 位来判断 USP 的请求是否被接受。
      • 什么时候来复位 EIEOS Counter 呢?USP 想要一个较长的 PRBS Pattern 时可以将 Reset EIEOS Interval Count 置一,在需要 Block Alignment 的时候将其清零。
      • Preset 及系数请求:Phase 2 时 USP 发送的所有 TS1 均为请求。第一次发送的请求中,可以为新的 Preset 或系数集(请求调整),也可以为连续接收到的 2 个 EC=10b 的 TS1 中的 Preset 及系数(请求对端保留当前设置)。
    • 每次 Preset 或系数请求应在 2 ms 内完成。在优化的最后阶段,需要更长评估时间(时间少了无法完成评估),此时可以超过 2 ms 限制,但总体评估时间不能超过 24 ms,且最多只能 2 ms 超时两次。 如果请求者在超时期限内无法接收 Ordered Sets,则可能认为请求的设置在该 Lane 中不起作用。
    • 所有新的 Preset 或系数设置必须同时出现在所有配置的通道上。 如果当时不想更改设置,则允许任何给定通道继续传输当前预设或系数作为其新值。
  • 若 perform_equalization_for_loopback 为 1,测试中的 Lane 工作在了最优设置,且所有 Lane 上连续收到了 2 个 Retimer Equalization Extent 位为 0 的 TS1,下一状态为 Phase 3。
  • 若 perform_equalization_for_loopback 为 0,所有配置 Lane 工作在最优设置下,且满足以下两个条件之一(①当前速率为 8 GT/s;②所有 Lane 上连续收到了 2 个 Retimer Equalization Extent 位为 0 的 TS1),下一状态为 Recovery.RcvrLock。
    • 若速率为 8 GT/s,Link Status 2 Register 的 Equalization 8 GT/s Phase 2 Successful 位置一。
    • 若速率为 16 GT/s,16 GT/s Link Status Register 的 Equalization 16 GT/s Phase 2 Successful 位置一。
    • 若速率为 32 GT/s,32 GT/s Link Status Register 的 Equalization 32 GT/s Phase 2 Successful 位置一。
  • 若 perform_equalization_for_loopback 为 1 且 24+2 ms Timeout,下一状态为 Loopback.Entry。
  • 否则,24+2 ms Timeout 后,下一状态为 Recovery.Speed。
    • success_speed_negotiation 清零。
    • 若当前数据速率为 8 GT/s,Link Status 2 Register 中的 Equalization 8 GT/s Complete 位置一。
    • 若当前数据速率为 16 GT/s,16 GT/s Link Status Register 中的 Equalization 16 GT/s Complete 位置一。
    • 若当前数据速率为 32 GT/s,32 GT/s Link Status Register 中的 Equalization 32 GT/s Complete 位置一。

3.2.2.4 Phase 3
  • USP 在 Phase 3 各条 Lane 独立发送 EC=11b 的 TS1 及相关 EQ 系数。

    • 若进入 Phase 3 以来连续收到 2 个 EC=11b 的 TS1
      • 若最近收到的两个 TS1 中的 Preset 及系数合法且支持,
        • 收到第 2 个 TS1 后的 500 ns 内,将 Tx Pin 相关参数设置为 Rx 请求的 Preset 及系数。Tx 更新设置引起的非法电平及参数持续时间不能超过 1 ns。
        • 如果接受了 Rx 请求,且按照 Rx 的请求设置了发送 TS1 中的 Tx Preset、Pre-cursor、Cursor、Post-cursor 系数,那么应该把TS1 中的 Reject Coefficint Values 字段清零。
      • 若 Rx 请求的 Preset 及系数不合法或 Tx 不支持,那 Tx 不能采用其请求,且应该把TS1 中的 Reject Coefficint Values 字段置一,告知 Rx 其请求被驳回。
    • 否则 Tx 继续采用其当前的 Preset 及系数。
  • 如 USP 在所有已配置 Lane 上连续收到了 2 个 EC=00b 的 TS1,进入 Recovery.RcvrLock

    • 若速率为 8 GT/s,Link Status 2 Register 的 Equalization 8 GT/s Phase 3 Successful 及 Equalization 8 GT/s Complete 位置一。
    • 若速率为 16 GT/s,16 GT/s Link Status Register 的 Equalization 16 GT/s Phase 3 Successful 及 Equalization 16 GT/s Complete 位置一。
    • 若速率为 32 GT/s,32 GT/s Link Status Register 的 Equalization 32 GT/s Phase 3 Successful 及 Equalization 32 GT/s Complete 位置一。
  • 若 perform_equalization_for_loopback 为 1 且 USP 在所有测试 Lane 上连续收到了 2 个 EC=00b 的 TS1 或 32+4 ms Timeout,进入 Loopback.Entry。

  • 否则,32+2 ms Timeout 后,下一状态为 Recovery.Speed。

    • success_speed_negotiation 清零。
    • 若当前数据速率为 8 GT/s,Link Status 2 Register 中的 Equalization 8 GT/s Complete 位置一。
    • 若当前数据速率为 16 GT/s,16 GT/s Link Status Register 中的 Equalization 16 GT/s Complete 位置一。
    • 若当前数据速率为 32 GT/s,32 GT/s Link Status Register 中的 Equalization 32 GT/s Complete 位置一。

3.2.3 Preset 及 Coefficient 响应

  PCIe 组件调整对端 Tx 以及评估自身 Rx 及对端 Rx 的算法不一而论。PCIe 组件可以请求切换到任意 Lane 数目,每条 Lane 请求的设置也不尽相同。请求可以是 Preset 值,也可以是一组满足 Preset 范围的具体的均衡器系数。每个组件都应确保在精调结束后(USP@Phase 2,DSP@Phase 3),链路对端每条 Lane 的 Tx 设置满足 PCIe 在电气层面的需求。

  PCIe 组件收到调整其 Tx 设置的请求后,必须对请求进行评估并有所反应。若 PCIe 组件 Tx 工作在 Full-swing 模式且收到了有效的 Preset 请求,其必须反映在具体的 Tx 均衡器设置中,并在接下来发送的 TS1 中反馈 Preset 及系数。若 PCIe 组件 Tx 工作在 Reduced-swing 模式且收到了一个支持的 Preset 值,其必须反映在具体的 Tx 均衡器设置中,并在接下来发送的 TS1 中反馈 Preset 及系数。工作于 Reduced-swing 模式的 Tx 可以拒绝不支持的 Preset 请求。对于调整均衡器系数的请求,可接受亦可拒绝。若针对某条 Lane 的系数设置请求被接受,其必须反应在 Tx 设置及接下来发送的 TS1 中。若针对某条 Lane 的系数设置请求被拒绝,Tx 设置不做改变,但接下来发送的 TS1 中必须反映请求的系数,并将 Reject Coefficient 位置一。对于其他响应系数请求,在上一 Preset 值发送完之后,发送的 TS1 的 Preset 字段不做改变。只有请求的系数不符合 FIR 系数约束规则时,组件才能拒绝相关请求。

  若某条 Lane 收到的 Preset 值为 Reserved 或 Polling.Compliance、Loopback、EQ Phase 0/1 不支持的值,该 Lane 可以根据具体情况采用任一支持的 Tx Preset 设置。后续在 Compliance Pattern 或有序集中反馈的 Preset 仍然为其收到了 Reserved 或不支持的 Tx Preset 值,而非该 Lane 在具体实现时真实使用的 Preset 值。例如,USP 某条 Lane 在 Recovery.RcvrCfg 状态收到了 Preset 值为 1111b (该值为 Reserved)的 EQ TS2,其可以在切换速率到 8 GT/s 后采用任意支持的 Tx Preset 值作为其 Tx 设置,但其在 Phase 0/1 阶仍然反馈 Preset 值为 1111b 的 TS1。


3.2.4 start_equalization_w_preset

  1. DSP 进入 EQ 后,start_equalization_w_preset 清零;
  2. USP 进入 EQ 后,start_equalization_w_preset 清零;
  3. 进入 Recovery.RcvrCfg 后,start_equalization_w_preset 清零,
    a. DSP start_equalization_w_preset 再置一
    b. USP 满足以下情况时 start_equalization_w_preset 置一:
    1) 若当前 2.5 GT/s 或 5 GT/s,且最大支持 8 GT/s
    2) 若当前 2.5 GT/s 或 5 GT/s,最大支持 32 GT/s 且 bypass_to_highest_rate
    3) 若当前 8 GT/s,且支持 16 GT/s(最大不一定是 16 GT/s)
    4) 若当前 16 GT/s,最大支持 32 GT/s

  那当前 USP 为 2.5 GT/s 或 5 GT/s,最大支持 16 GT/s 时,start_equalization_w_preset 该怎么处理?当前 2.5 GT/s 或 5 GT/s,最大支持 16 GT/s 时,需要经过两次调速。

  1. 第一次进入 Recovery.RcvrLock 后收到的 TS 中显示最大支持 8 GT/s,符合规则 (i),start_equalization_w_preset 置一,Gen1 -> Gen3 做一次 EQ 进行第一次调速,进入 EQ 后 start_equalization_w_preset 清零 。
  2. 第二次进入 Recovery.RcvrLock 后收到的 TS 中才切为最大支持 16 GT/s,符合规则 (iii),start_equalization_w_preset 置一,Gen3 -> Gen4 做一次 EQ 进行第二次调速,进入 EQ 后 start_equalization_w_preset 清零 。

  也就是说,切速过程为 Gen1 -> Gen3 -> Gen4,每次切速都做一次 EQ。


3.3 EQ 举例

  1. 若双方支持最大速率为 8 GT/s,EQ 过程在完成 8 GT/s EQ 后结束。
  2. 若双方支持最大速率为 16 GT/s,在完成 8 GT/s EQ 后进行 16 GT/s EQ,然后结束 EQ。
  3. 若当前处于 8 GT/s(16 GT/s),要求重复进行 8 GT/s EQ(16 GT/s),由于链路没必要返回 2.5 GT/s 或 5 GT/s (或 8 GT/s)重新发送一次与之前相同的 Preset,可以跳过 Phase 0。
  4. 若 DSP 根据平台链路情况觉得没必要对 Tx 进行精调,也可以跳过 Phase 2 及 Phase 3。

3.3.1 速率 8 GT/s Equalization Flow

  8 GT/s 时,DSP 与 USP 均衡系数协商过程如图 32 所示。

在这里插入图片描述

▲ 图 32: 8 GT/s Equalization Flow

  1. EQ 之前:在 2.5 GT/s 速率时,双方协商进行速率切换,DSP 提议最高支持 8 GT/s 并与 USP 交换 8 GT/s 的 Preset 值。
  2. EQ Phase 0:EC=0。此时速率为 8 GT/s。USP 回传 Preset 及 Coefficients 给 DSP。 DSP 没有 Phase 0
  3. EQ Phase 1:EC=1。DSP 及 USP 发送其 LF (Low Frequency,symbol7)、FS (Full Swing,symbol8) 、Post-cursor (symbol9) 给对端 ,在 Phase 2/3 使用。每隔 32 TS1 发送一次 EIEOS。
  4. EQ Phase 2:EC=2。USP 作为 Master,调节 DSP 的 Tx Preset 及系数,确保 USP 输入链路满足 USP 的电气需求。具体可分为 Preset 调节及 coefficient 调节。USP 每隔 32 TS1 发送一次 EIEOS,DSP 根据 USP 请求在 65536 TS1 时间内至少发送一次 EIEOS。
  5. EQ Phase 3:EC=3。DSP 作为 Master,调节 USP 的 Tx Preset 及系数,确保 DSP 输入链路满足 DSP 的电气需求。具体可分为 Preset 调节及 coefficient 调节。DSP 每隔 32 TS1 发送一次 EIEOS,USP 根据 DSP 请求在 65536 TS1 时间内至少发送一次 EIEOS。
  6. EQ 完成后:EC=0。LTSSM 经 Recovery.RcvrLock -> Recovery.RcvrCfg -> Recovery.Idle -> L0。进 L0 前每隔 32 TS1/TS2 发送一次 EIEOS。

3.3.2 速率 16 GT/s Equalization Flow

  与 8 GT/s EQ 类似,DSP 与 USP 均衡系数协商过程如图 33 所示。

在这里插入图片描述

▲ 图 33: 16 GT/s Equalization Flow


3.3.3 Equalization Bypass Flow

  只针对最高速率进行 EQ 的流程如图 34 所示。

在这里插入图片描述

▲ 图 34: Equalization Bypass Flow

参考


  1. PCI ExPress Base Spec 5.0, Chapter 4.2.3, Chapter 4.2.6.4.2, Chapter 8.3.3, …
  2. PCIe Express Technology, Mindshare Inc, Chapter 13
  3. SNPS PHY databook,chapter 5.11
  4. 芯片中的数学——均衡器EQ和它在高速外部总线中的应用
  5. pcie equalization学习笔记
  6. PCIE 3.0中使用的动态均衡概念
  7. 理论篇|如何实现PCIe Gen3/Gen4接收端链路均衡测试?
  8. 实践篇|如何实现PCIe Gen3/Gen4接收端链路均衡测试?)
  9. PCIe Electrical PHY(2)-SerDes中的均衡技术


— END —

🔥 精选往期 PCIe 协议系列文章🔥


⬆️ 返回顶部 ⬆️

评论 61
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MangoPapa

请作者喝瓶可乐吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值