4. L1SS 关键参数:Common Mode保持、PLL关闭、Reference Clock关闭、Rx Detect等参数对功耗和延迟的影响
L1 Substates(L1SS)的功耗优化并非简单地“进入更深睡眠”,而是通过一系列精细的硬件参数控制,在功耗节省与链路恢复延迟之间进行权衡。本章将深入剖析 Common Mode保持、PLL关闭、Reference Clock关闭 以及 Rx Detect 这四个核心参数,揭示它们如何影响功耗和退出延迟。
核心原则: 每个参数的“关闭”或“保持”状态,都对应着一次功耗的降低,但同时也增加了链路重新激活所需的时间。配置的关键在于找到满足系统延迟要求的“最省电”组合。
4.1 Common Mode 保持(Common Mode Keep)
在 L1 状态下,链路进入电气空闲。Common Mode 保持参数决定了发送端(Tx)是否维持其输出驱动器的共模电压。
- 保持(Keep): Tx 维持共模电压,接收端(Rx)的耦合电容无需重新充电。退出 L1 时,链路可以快速建立电气连接,延迟极低(通常 < 1μs)。但 Tx 的模拟前端仍需消耗少量静态功耗。
- 不保持(No Keep): Tx 关闭共模电压,进一步降低静态功耗。退出时,Rx 需要重新检测共模电压并稳定,增加了退出延迟(通常增加 1-2μs)。
| 配置 | 功耗节省 | 退出延迟影响 | 适用场景 |
|---|---|---|---|
| Common Mode Keep | 低 | 低(~0.5μs) | 延迟敏感型,如 NVMe SSD |
| Common Mode No Keep | 中 | 中(~2μs) | 允许稍长延迟,追求更低功耗 |
配置建议: 对于大多数客户端设备,建议保持 Common Mode 开启,以换取更快的响应速度。仅在电池供电且对延迟不敏感的物联网设备中考虑关闭。
4.2 PLL 关闭(PLL Off)
锁相环(PLL)为高速 SerDes 提供稳定的时钟。PLL 关闭是 L1SS 中功耗节省最显著的手段之一。
- PLL On: PLL 持续锁定,消耗大量模拟功耗(通常为 mW 级)。退出时,时钟立即可用,延迟极短。
- PLL Off: PLL 完全断电,功耗降至接近零。退出时,PLL 需要重新锁定,这通常需要 10μs 到 100μs 的时间,具体取决于 PLL 设计。
关键权衡: PLL Off 是 L1SS 中最大的功耗节省来源,但也是最大的延迟贡献者。如果系统无法容忍 10μs 以上的退出延迟(例如,某些实时数据流),则必须保持 PLL On。
4.3 Reference Clock 关闭(Refclk Off)
参考时钟(Refclk)是 PLL 的基准源。关闭 Refclk 可以进一步节省时钟树上的功耗。
- Refclk On: 时钟缓冲器和分配网络持续工作,消耗一定功耗。
- Refclk Off: 完全切断参考时钟。退出时,不仅 PLL 需要重新锁定,Refclk 本身也需要重新稳定,这通常需要额外的 几百纳秒到几微秒。
通常,Refclk Off 与 PLL Off 配合使用,以实现最大程度的功耗节省。但需要注意的是,某些平台设计可能要求 Refclk 保持开启以支持其他功能(如带外管理)。
4.4 Rx Detect
Rx Detect 参数控制接收端是否定期检测链路上是否有有效的终端(Termination)存在。这在 L1SS 中用于确保链路完整性,但也会消耗功耗。
- Rx Detect 开启: Rx 定期发送检测信号,确认对端设备仍在。这增加了功耗,但可以快速发现链路断开或热插拔事件。
- Rx Detect 关闭: 停止检测,节省功耗。退出时,Rx 需要重新进行初始检测,增加了延迟。
| 参数 | 功耗节省潜力 | 退出延迟增加 | 典型配置值 |
|---|---|---|---|
| Common Mode No Keep | ~0.5mW | ~1-2μs | 0 (Keep) / 1 (No Keep) |
| PLL Off | ~5mW | ~10-100μs | 0 (On) / 1 (Off) |
| Refclk Off | ~1mW | ~1-5μs | 0 (On) / 1 (Off) |
| Rx Detect Off | ~0.2mW | ~0.5-2μs | 0 (On) / 1 (Off) |
综合配置策略: 在实际产品中,这些参数通常通过
1. 首先确定系统允许的最大退出延迟(例如,10μs)。
2. 如果延迟预算紧张,优先保持 PLL On 和 Common Mode Keep。
3. 如果延迟预算充裕,可以逐步关闭 PLL、Refclk 和 Common Mode,以最大化功耗节省。
4. Rx Detect 通常建议保持开启,除非对功耗有极致要求且链路环境非常稳定。
L1 Substates Control 1 和 L1 Substates Control 2 寄存器进行配置。建议按照以下优先级进行权衡:1. 首先确定系统允许的最大退出延迟(例如,10μs)。
2. 如果延迟预算紧张,优先保持 PLL On 和 Common Mode Keep。
3. 如果延迟预算充裕,可以逐步关闭 PLL、Refclk 和 Common Mode,以最大化功耗节省。
4. Rx Detect 通常建议保持开启,除非对功耗有极致要求且链路环境非常稳定。
4.5 综合影响与寄存器配置示例
所有参数最终通过 PCIe 配置空间中的寄存器进行控制。以下是一个典型的寄存器位定义示例:
// L1 Substates Control 1 Register (Offset 0x204)
// Bit 0: Common Mode Keep (1 = Keep, 0 = No Keep)
// Bit 1: PLL Off (1 = Off, 0 = On)
// Bit 2: Refclk Off (1 = Off, 0 = On)
// Bit 3: Rx Detect (1 = On, 0 = Off)
// 示例:配置为深度睡眠模式(PLL Off, Refclk Off, No Keep, Rx Detect Off)
// 二进制: 1110 = 0xE
// 注意:此配置退出延迟可能超过 50μs
#define L1SS_DEEP_SLEEP 0xE
// 示例:配置为快速唤醒模式(PLL On, Refclk On, Keep, Rx Detect On)
// 二进制: 1001 = 0x9
// 退出延迟通常 < 2μs
#define L1SS_FAST_WAKE 0x9
// 写入配置空间
pci_write_config_word(dev, 0x204, L1SS_FAST_WAKE);
平台验证: 上述寄存器地址和位定义可能因 PCIe IP 供应商(如 Synopsys、Cadence)和具体芯片实现而异。在实际开发中,务必参考芯片的 Datasheet 或 Reference Manual 进行配置,并在硬件上通过示波器测量退出延迟来验证配置效果。