3. 电气空闲(Electrical Idle)定义:进入条件、退出条件、检测机制

电气空闲(Electrical Idle,EI)是 PCIe 物理层中一种重要的低功耗信号状态。当链路进入 L0 状态但无数据需要传输时,发送端会主动进入电气空闲,将差分信号摆幅降低至共模电平,从而减少动态功耗。理解 EI 的进入、退出条件及检测机制,是掌握 L0 状态保持策略的基础。

核心概念: 电气空闲并非链路关闭,而是发送器将差分电压维持在 |VDIFF| < 50 mV 的静默状态,接收器通过检测信号幅度变化来判断链路是否处于空闲。

3.1 电气空闲进入条件

发送端进入电气空闲需满足以下条件之一:

  • 数据静默: 发送端无待发送的 TLP(事务层包)或 DLLP(数据链路层包),且链路层指示物理层进入空闲。
  • SKP 有序集结束: 在发送完 SKP 有序集后,若后续无数据,发送端可立即进入 EI。
  • 链路均衡触发: 在链路均衡过程中,发送端可能主动进入 EI 以重置接收端均衡器状态。
  • 接收端请求: 接收端通过发送 电气空闲有序集(EIOS) 请求发送端进入 EI。
电气空闲进入条件对比
触发源 触发条件 响应动作 典型场景
发送端自主 无数据发送 & 链路层空闲指示 发送 EIOS 后进入 EI 突发传输结束后的空闲期
接收端请求 接收端检测到链路空闲 发送 EIOS 请求发送端进入 EI 接收端缓冲区满
链路均衡 均衡阶段切换 发送端主动进入 EI Gen3/Gen4 均衡过程
错误恢复 接收端检测到信号异常 发送 EIOS 强制进入 EI 链路错误恢复流程
设计要点: 发送端在进入 EI 前必须发送 电气空闲有序集(EIOS),该有序集包含 4 个符号的特定编码(K28.5 + K28.5 + K28.5 + K28.5),用于通知接收端即将进入空闲状态。接收端在收到 EIOS 后,会启动 EI 退出检测定时器。

3.2 电气空闲退出条件

电气空闲退出由发送端主动发起,接收端通过检测信号跳变来识别退出事件。退出条件包括:

  • 数据到达: 发送端有新的 TLP 或 DLLP 需要发送,立即退出 EI 并发送 电气空闲退出有序集(EIEOS)。
  • 定时器超时: 接收端在 EI 状态下启动 EI 退出检测定时器,若在指定时间内未检测到信号跳变,则判定链路异常并触发恢复流程。
  • 链路均衡请求: 均衡过程中,发送端退出 EI 以发送训练序列(TS1/TS2)。
  • 接收端主动唤醒: 接收端通过发送 电气空闲退出有序集(EIEOS) 请求发送端退出 EI。
电气空闲退出流程 发送端 接收端 电气空闲 (EI) 电气空闲 (EI) 数据到达 发送 EIEOS EIEOS 有序集 检测信号跳变 退出 EI L0 正常操作
关键时序要求: 发送端退出 EI 时,必须在 12 个 UI(单位间隔) 内将差分电压从 <50 mV 提升至 >175 mV。接收端需在 20 个 UI 内完成信号跳变检测并退出 EI 状态。若超时未检测到有效信号,接收端将触发 EI 退出超时错误,并启动链路恢复流程。

3.3 电气空闲检测机制

接收端通过以下机制检测电气空闲状态:

  • 幅度检测: 接收器持续监测差分信号幅度。当 |VDIFF| 持续低于 50 mV 超过 10 个 UI 时,判定为电气空闲。
  • 共模检测: 检测差分信号的共模电压是否稳定在 VCM ± 50 mV 范围内,用于区分 EI 与信号丢失。
  • 有序集检测: 接收端通过识别 EIOS(电气空闲有序集)来确认发送端即将进入 EI,从而提前准备检测逻辑。
  • 定时器机制: 接收端维护一个 EI 退出检测定时器,在进入 EI 后启动。若定时器超时(通常为 1 μs)仍未检测到退出事件,则触发错误处理。
电气空闲检测参数
参数 最小值 典型值 最大值 说明
EI 进入阈值 — 50 mV — 差分幅度低于此值判定为 EI
EI 退出阈值 175 mV — — 差分幅度高于此值判定为退出 EI
EI 进入稳定时间 10 UI — — 幅度需持续低于阈值的时间
EI 退出检测时间 — 20 UI — 接收端检测退出所需最大时间
EI 退出超时 — 1 μs — 接收端等待退出事件的最大时间
电气空闲检测状态机 L0 正常操作 EI 检测中 电气空闲 (EI) 退出检测中 |VDIFF| < 50mV 持续 10 UI 检测到 EIEOS |VDIFF| > 175mV 超时 (1μs)
工程实践: 在高速链路(Gen4/Gen5)中,电气空闲检测的可靠性直接影响链路稳定性。建议在接收端设计中增加 迟滞比较器,避免信号噪声导致 EI 状态误判。同时,EI 退出检测定时器的超时值应根据链路速率动态调整,Gen5 建议设置为 500 ns 以加快错误恢复。

3.4 电气空闲与链路均衡的协同

在链路均衡过程中,电气空闲扮演着关键角色:

  • 均衡阶段切换: 发送端在完成一个均衡阶段后,会进入 EI 状态,等待接收端完成均衡器系数更新。
  • EI 作为同步信号: 接收端通过检测 EI 退出事件来同步均衡阶段的开始,确保双方在相同的时间点开始新的训练序列。
  • 噪声隔离: 在均衡器系数切换期间,EI 状态可避免信号跳变对接收端均衡器造成干扰。
// 电气空闲检测伪代码(接收端实现)
if (|V_diff| < EI_ENTER_THRESHOLD) {
    ei_detect_counter++;
    if (ei_detect_counter >= EI_STABLE_TIME) {
        state = ELECTRICAL_IDLE;
        start_ei_exit_timer();
    }
} else {
    ei_detect_counter = 0;
    if (state == ELECTRICAL_IDLE && |V_diff| > EI_EXIT_THRESHOLD) {
        state = L0_ACTIVE;
        stop_ei_exit_timer();
        notify_link_layer();
    }
}

// EI 退出超时处理
if (ei_exit_timer > EI_EXIT_TIMEOUT) {
    state = EI_TIMEOUT_ERROR;
    trigger_link_recovery();
}
总结: 电气空闲是 PCIe 链路在 L0 状态下实现低功耗与快速响应的关键机制。通过精确的进入/退出条件定义和可靠的检测机制,链路能够在无数据传输时快速进入低功耗状态,并在数据到达时迅速恢复,为后续的链路均衡协同提供了基础保障。