1. PCIe 均衡技术介绍(概要)
2. 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。软件均衡的步骤如下:
- 软件将 Link Control 3 Register (图 19)的 Perform Equalization 位置一。
- 软件填写 Link Control 2 Register (图 20)的 Target Link Speed 字段为 8 GT/s 或以上速率。
- 软件将 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:
- 针对某速率均衡失败;
- 针对某速率均衡成功,但在检查均衡系数设置时发现了问题;
- 改变链路宽度。
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 都可以用。