引言
在PCI Express (PCIe) 5.0规范中,为了兼顾高速传输和设备能耗,定义了多种链路电源管理状态。其中,L1.2作为L1低功耗状态的子状态,能够将链路功耗降至极低,但相应地增加了从休眠恢复到正常工作的延迟 。本调研报告将介绍PCIe 5.0中L1.2低功耗子状态的退出机制,重点分析关键信号和参数在退出过程中的作用,包括CLKREQ#时钟请求信号、REFCLK参考时钟、TLP事务层包、RefclkOn参考时钟启动时机、LTR延迟容忍报告以及作为中间过渡的L1.0状态。通过这些技术细节的阐述,帮助读者了解PCIe 5.0设备如何从深度省电状态L1.2高效、安全地恢复到正常工作状态。
背景
PCIe链路支持多个电源管理状态,以在空闲时降低功耗。常见状态包括:工作状态L0、浅度省电的L0s、较深省电的L1,以及更深的L2/L3等。其中L1状态本身已关闭了一些收发器电路来节省能耗,而PCIe 5.0规范在L1基础上引入了两个更深的L1子状态(L1 Substates):L1.1和L1.2 。基本思想是在L1状态时使用带外(sideband)信号来进一步唤醒或关闭链路,从而尽可能降低功耗 。相比L1.1,L1.2是功耗最低的子状态——在该状态下PCIe收发器的锁相环(PLL)以及收发电路全部关闭,甚至连链路上的共模保持电路(common mode keeper)也可以关闭 。这种极限省电通过牺牲更多的恢复延迟来实现,每次从L1.2唤醒链路需要更长的时间。为了解决高功耗与延迟之间的权衡,PCIe规范采用Active State Power Management (ASPM)机制和PCI-PM软件机制相结合,使系统能自动或通过软件控制进入/退出这些低功耗状态。
要进入L1.2子状态,链路两端设备需在L1状态空闲期间达成一致:停止驱动CLKREQ#时钟请求引脚,使其在上拉电阻作用下变为高电平(即CLKREQ#去使能,De-assert) 。CLKREQ#变高表示双方同意关闭参考时钟REFCLK,从而使链路进入L1.2状态** 。在L1.2状态中,仅有极少数电路(例如检测CLKREQ#电平的电路)保持工作,其余大部分模块掉电,链路差分信号维持电气空闲(Electrical Idle)状态。这样的设计使设备在接近零功耗**的状态下“休眠”,只需监视CLKREQ#这一条带外信号即可 。当需要恢复通信时,则通过CLKREQ#引发退出流程,将链路从L1.2逐步唤醒至L0正常工作状态。
技术细节
下面详细介绍PCIe 5.0链路从L1.2低功耗子状态退出至L0过程中,各关键概念和信号的作用机制。
CLKREQ#(时钟请求信号)
CLKREQ#是一条PCIe边带信号线(侧带引脚),全称为“Clock Request”。它采用开漏三态设计,允许链路上下游两端均可主动控制信号电平 。在默认工作状态下,CLKREQ#由设备拉低(Assert,低电平有效),通知主机的时钟发生器提供参考时钟REFCLK;而当设备和主机都不再驱动该信号时,线上拉电阻会将其拉高(De-assert),表示可以关闭参考时钟以节省能耗 。因此,CLKREQ#引脚的电平直接决定了参考时钟的开闭,是进入/退出L1子状态的关键握手机制。
在L1.2子状态退出过程中,CLKREQ#扮演唤醒触发信号的角色。当链路任一端的组件(上游或下游)有事务要发送时,就需要发起退出L1.2的请求 。具体而言,具有发送需求的一端将CLKREQ#由高电平拉低为低电平(即对CLKREQ#信号进行Assert),这相当于向对端发出了“请求启动参考时钟、退出低功耗状态”的信号 。由于CLKREQ#是双向的,链路上游端口(例如Root Complex)或下游端口(例如Endpoint设备)都可以主动拉低该信号来发起唤醒 。一旦CLKREQ#被拉低,表示当前至少有一方需要链路恢复活动,系统将据此开始唤醒流程。整个退出过程中,规范要求CLKREQ#保持低电平不放松,一直持续到链路训练完成进入恢复状态,并且在链路重新活跃期间保持低电平,防止尚未完成唤醒时链路再次进入低功耗 。只有当链路重新进入L1低功耗模式的条件满足且打算再次进入L1.x子状态时,CLKREQ#才会被双方释放为高电平,从而允许再次关闭时钟。由此可见,CLKREQ#信号是L1.2退出机制中最重要的触发和控制信号,相当于PCIe链路