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 时,必须在 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 | — | 接收端等待退出事件的最大时间 |
工程实践: 在高速链路(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 状态下实现低功耗与快速响应的关键机制。通过精确的进入/退出条件定义和可靠的检测机制,链路能够在无数据传输时快速进入低功耗状态,并在数据到达时迅速恢复,为后续的链路均衡协同提供了基础保障。