1. 简介
FDI 或 RDI 接口两侧的模块同属于同一时钟域(Clock Domain),且 Sideband 相关信号(*cfg*)跟 Mainband 信号属于同一时钟域(lclk,Sideband Clock 在 FDI、RDI 上还不是 800 MHz)。
为了降低功耗,UCIe 提供了一种 可选的 Dynamic Clock Gating 机制 ,来动态关闭或开启协议层、适配层及物理层内的时钟。根据触发 Clock Gating 的条件,UCIe Clock Gating 可以分为 3 种:
依赖于 FDI 状态的 Clock Gating。 当 pl_state_sts 显示 FDI 状态为 Reset、LinkReset、Disable 或 PM 状态时,协议层及 Adapter 中的部分逻辑可以进行 粗粒度 的 Clock Gating。这种情况下进行的 Clock Gating,需要 FDI 上的握手信号来 Ungating。考虑到 LinkError 状态下 Error Handler 还要来处理错误,在 LinkError 状态下禁止 Clock Gating。
依赖于 RDI 状态的 Clock Gating 。 当 pl_state_sts 显示 RDI 状态为 Reset、LinkReset、Disable 或 PM 状态时,Adapter 及物理层中的部分逻辑可以进行 粗粒度 的 Clock Gating。这种情况下进行的 Clock Gating,需要 RDI 上的握手信号来 Ungating。考虑到 LinkError 状态下 Error Handler 还要来处理错误,在 LinkError 状态下禁止 Clock Gating。
PHY LSM Active 时的 Clock Gating 。 这是一种 细粒度 的 Clock Gating 机制,发生于 PHY LSM Active 状态,是一种 FDI/RDI Clock Active 状态下的 Clock Gating,其关闭的是 Logical Clock Lane 及 Physical Clock Lane,而非 RDI 上的 lclk。
FDI 及 RDI 接口上的 Clock Gating/Ungating 具有较大的相似性,下文我们合并介绍。
2. FDI/RDI Clock Gating
FDI、RDI 进入 Clock Gating 的触发条件即 FDI/RDI 进入了 Reset、LinkReset、Disable 或 PM 状态,此时相关模块无需工作,可以进入 Clock Gating。至于要 Gating 哪些模块,UCIe Spec中并未明确指出。若 RDI 处于 PM 状态且 RDI Clock Gated,PHY 中的 Sideband PLL 仍需保证正常工作,SB PLL 的 800 MHz Clock 是 Always On 的(L2 呢?待议。L2 退出到 Reset)。
① FDI、RDI Bring Up 时 ,或者 ② FDI、RDI 进入 Clock Gating 后 , 通常 需要在对应接口上进行握手才能启动 Clock(Clock Ungating),使得模块开始工作或继续工作。这里说 “通常”,是因为 “握手” 只是开启时钟的常用方法,除了 “握手” 也需要参考 pl_state_sts 状态及其他模块内或链路的需求。Clock Ungating 的过程往往伴随着 FDI、RDI 状态转移,此处我们不谈状态转移,仅谈握手的部分。
FDI 及 RDI 接口上均有两对用来 Clock Ungating 的握手信号,分别为:
lp_wake_req/pl_wake_ack 。上层* 作为请求的发起方,请求下层* 进行 Clock Ungating。上层通过 lp_wake_req 信号向下层发起请求开启时钟,下层开启时钟后通过 pl_wake_ack 信号进行响应。(Note: 本文中的上层指靠近协议层的部分,下层指该接口靠近物理层的部分。下同。)
pl_clk_req/lp_clk_ack 。下层作为请求的发起方,请求上层进行 Clock Ungating。下层通过 pl_clk_req 信号向上层发起请求开启时钟,上层开启时钟后通过 lp_clk_ack 信号进行响应。这组握手动作可以在 任意时刻发起,不依赖于 FDI 或 RDI 的状态 。
部分握手规则如下:
*_req 应比 *_ack 先行 de-assert,否则会被认为是第二次请求。
若需要 Clock Ungating 来进行 lp_state_req/lp_linkerror 状态转换,上层 lp_wake_req 发出后可以不等待 pl_wake_ack 直接切换 lp_state_req/lp_linkerror 的状态。
若 Clock Gating 时要发送 Sideband 请求到接口另一端,必须先完成握手确保 lclk 起来之后才能通过 RDI/FDI *_cfg_* 发送 Sideband 请求。
若处于 Reset 或 PM 状态下的 FDI/RDI 下一步要转移到 LinkError 状态,其需要在进入 LinkError 状态之前通过 pl_clk_req/lp_clk_ack 握手信号来开启 Clock。 当然也可以在进入 LinkError 之后再置起 pl_clk_req,但必须收到 lp_clk_ack 确保其 Clock 起来后才能进行进一步的状态转移。
3. PHY Clock Gating
这里的 PHY Clock Gating 仅限于 Lane 上的 Clock Gating。Lane 上的 Clock Gating 是一种可选的能力,该能力在 MBINIT.PARAM 状态下进行协商。
在 Mainband 数据传输过程中,若数据发送完毕后 Valid 持续拉低 16UI (8 Cycles),就需要对 Clock 进行 Gating 操作。待需要发送数据时,重新启动 Clock。Clock Gating、Ungating 及过程中 Clock、Data、Valid 的值的变化如图 1 所示。
▲图 1:UCIe PHY Mainband Clock Gating
Clock Gating -> Ungating 大致分为以下几个阶段:
Normal Operation 。本阶段 Mainband 的 Clock、Valid 及 Data 均正常变化及传输。
Clock Postamble 。MB Data 最后 1 bit 发送完毕之后,若 Valid 持续拉低 16UI,则准备对 Clock 进行 Gating。这 16 UI 称为 Clock Postamble,期间 Clock 正常 Runing:
对于没有阻抗匹配的 UCIe Link,Data 值保持最后一个 UI 时的 Data 值,Valid 为低。
对于存在阻抗匹配的 UCIe Link,前 8 UI 时 Data 保持最后一个 UI 时的 Data 值,后 8 UI Data 值为 High-Z,Valid 始终为低。
Clock Gated 。无固定时长,本阶段 Clock 被关闭,Clock Lane 的值保持 Parking 不变。
Preamble 。时长 1~8 UI。本阶段准配开启 Clock。期间:
对于没有阻抗匹配的 UCIe Link,Data 值保持此前的值不变,Valid 为低。
对于存在阻抗匹配的 UCIe Link,Data 值由此前的 High-Z 给个 0 或 1,Valid 始终为低。
Normal Operation 。Clock 重新开启,重新进行 Mainband 的数据传输。
4. 参考
UCIe Spec r1.0, Chapter 4, 5, 8
UCIe 物理层介绍(逻辑物理篇)