4. L1 入口条件详解:链路空闲条件、电气空闲有序集(EIOS)的发送、接收端确认机制

PCIe 链路从 L0 状态进入 L1 低功耗状态,必须满足严格的入口条件。这些条件涉及物理层(PHY)的电气状态、数据链路层的协议交互以及接收端的确认机制。本章将详细拆解 L1 入口的三个核心环节:链路空闲条件、电气空闲有序集(EIOS)的发送以及接收端确认机制。

4.1 链路空闲条件:进入 L1 的前提

在发送任何电源管理请求(如 PM_Enter_L1)之前,链路必须首先满足物理层的“空闲”条件。这不仅是逻辑上的无数据发送,更是电气上的特定状态。

核心原则: 链路空闲条件是进入 L1 的“门闩”。只有链路处于电气空闲状态,接收端才能安全地关闭其接收器,而不会误判信号。

4.1.1 电气空闲(Electrical Idle)的定义

电气空闲是指差分信号对(D+ / D-)上的电压摆幅低于特定阈值,且持续一段时间。在 PCIe 规范中,这通常意味着发送端将差分电压驱动到共模电压附近,并保持稳定。

参数 描述 典型值(Gen3/Gen4)
差分输出电压 进入电气空闲时,发送端将差分电压降至接近 0 mV < 20 mV (峰峰值)
共模电压 维持在接收端可识别的共模范围内 0 V ± 100 mV
电气空闲退出检测阈值 接收端检测到差分电压超过此值,认为退出电气空闲 ~ 100 mV (差模)

4.1.2 链路空闲的判定流程

链路空闲并非瞬间完成,而是遵循一个有序的降功率过程:

  1. 数据发送完成:发送端完成所有待发送的 TLP(事务层包)和 DLLP(数据链路层包)。
  2. 发送 EIOS:发送端在最后一个数据包或有序集之后,发送电气空闲有序集(EIOS),通知接收端即将进入电气空闲。
  3. 进入电气空闲:发送端在发送完 EIOS 后,将发送器置于高阻抗状态,差分电压降至共模电平。
  4. 接收端确认:接收端检测到电气空闲状态,并准备进入 L1。
设计要点: 在进入电气空闲前,发送端必须确保最后一个数据包的 CRC 校验已经通过,且接收端已正确接收。否则,链路不会进入空闲状态。

4.2 电气空闲有序集(EIOS)的发送机制

EIOS 是物理层用于宣告“即将进入电气空闲”的特殊有序集。它由一组特定的符号序列组成,接收端通过识别 EIOS 来准备进入低功耗状态。

4.2.1 EIOS 的符号组成

EIOS 由 4 个符号组成,在 8b/10b 编码(Gen1/Gen2)或 128b/130b 编码(Gen3/Gen4/Gen5)下,其编码模式是固定的:

  • Gen1/Gen2 (8b/10b): 由 4 个 COM 符号(K28.5)组成,但最后一个 COM 符号的运行不一致性(RD)被强制为负(RD-),以标识 EIOS 的结束。
  • Gen3/Gen4/Gen5 (128b/130b): 由 4 个 EIE(Electrical Idle Exit)有序集块组成,每个块包含特定的同步头和扰码数据。
PCIe 代际 编码方式 EIOS 符号序列 关键特征
Gen1 / Gen2 8b/10b COM, COM, COM, COM (RD-) 最后一个 COM 符号的 RD 极性为负
Gen3 / Gen4 / Gen5 128b/130b EIE, EIE, EIE, EIE 每个 EIE 块包含 2 位同步头 + 128 位数据

4.2.2 EIOS 的发送时序

发送端在发送 EIOS 时,必须遵循严格的时序要求,以确保接收端能够正确识别:

  • 连续发送:EIOS 必须连续发送 4 个符号,中间不能插入其他数据。
  • 发送后立即进入电气空闲:在发送完最后一个 EIOS 符号后,发送端必须在 1 个 UI(单位间隔) 内将发送器置于电气空闲状态。
  • 最小电气空闲持续时间:链路必须保持电气空闲状态至少 50 ns,以确保接收端完成检测。
常见错误: 如果发送端在发送 EIOS 后未能及时进入电气空闲,或者电气空闲持续时间不足,接收端可能无法正确识别,导致链路状态机进入错误状态。

4.3 接收端确认机制:从电气空闲到 L1 状态

接收端在检测到电气空闲后,需要完成一系列确认步骤,才能将链路状态从 L0 迁移到 L1。这个过程涉及物理层和数据链路层的协同。

4.3.1 接收端电气空闲检测

接收端通过内置的电气空闲检测器(Electrical Idle Detector)来监控差分信号。检测器通常基于以下两种机制之一:

  • 幅度检测:检测差分电压是否低于阈值(如 20 mV),并持续一段时间(如 10 ns)。
  • 边沿检测:检测信号是否在指定时间内没有发生跳变(即无数据翻转)。

4.3.2 接收端确认流程

一旦接收端检测到电气空闲,它会执行以下操作:

  1. 锁定 EIOS 序列:接收端确认收到的 4 个符号是有效的 EIOS,而不是噪声或数据。
  2. 停止时钟恢复:接收端关闭其时钟数据恢复(CDR)电路,因为不再有数据需要采样。
  3. 关闭接收器:接收端将模拟前端(AFE)置于低功耗模式,关闭差分放大器等电路。
  4. 通知数据链路层:物理层向数据链路层发送“电气空闲已建立”的指示。
  5. 进入 L1 状态:数据链路层确认链路空闲后,将 LTSSM(链路训练和状态机)迁移到 L1 状态。
协同设计: ASPM(主动电源管理)在 L1 入口中扮演“决策者”角色。ASPM 定时器超时后,会触发数据链路层发送 PM_Enter_L1 DLLP,而物理层则负责执行 EIOS 发送和电气空闲检测。两者必须紧密配合,才能实现低延迟、低功耗的 L1 入口。

4.4 L1 入口条件完整流程 SVG 图

下图展示了从链路空闲条件到 EIOS 发送,再到接收端确认的完整 L1 入口流程:

L1 入口条件完整流程 L1 入口条件完整流程 链路空闲条件 无待发送数据 发送 EIOS 4 个连续符号 进入电气空闲 差分电压 < 20mV 数据发送完成 1 UI 内 接收端检测 识别 EIOS 序列 停止时钟恢复 关闭 CDR 电路 关闭接收器 AFE 低功耗模式 电气空闲信号 EIOS 锁定 无数据翻转 通知数据链路层 电气空闲已建立 进入 L1 状态 LTSSM 迁移 接收器关闭完成 确认空闲 关键说明: 1. 链路空闲条件是进入 L1 的物理层前提,必须在发送 EIOS 前满足。 2. EIOS 是发送端宣告“即将进入电气空闲”的唯一合法序列。 3. 接收端确认机制包括 EIOS 锁定、CDR 停止、接收器关闭和通知数据链路层四个步骤。 4. ASPM 定时器超时是触发整个流程的“决策信号”,但物理层执行是入口条件的关键。

4.5 入口条件对比总结

下表总结了 L1 入口条件中,发送端和接收端各自承担的角色和关键动作:

角色 关键动作 时序要求 失败后果
发送端 发送 EIOS → 进入电气空闲 EIOS 后 1 UI 内进入空闲 接收端无法识别,链路状态机卡死
接收端 检测 EIOS → 锁定 → 停止 CDR → 关闭接收器 电气空闲持续 > 50 ns 误判电气空闲,导致数据丢失
数据链路层 接收物理层指示 → 迁移 LTSSM 到 L1 在电气空闲建立后立即执行 链路无法进入低功耗状态
避坑指南: 在实际设计中,常见的 L1 入口失败原因包括:
1. EIOS 发送后,发送端未能在 1 UI 内进入电气空闲(驱动电路响应慢)。
2. 接收端的电气空闲检测器阈值设置不当,导致误触发或漏检。
3. 链路中存在噪声,导致接收端将噪声误判为 EIOS 或数据。