3、Detect状态(检测):Detect.Quiet子状态、Detect.Active子状态、接收器检测逻辑与电气空闲退出
Detect 状态是 PCIe 链路训练状态机(LTSSM)的初始状态,也是物理层连接建立的起点。当链路从复位(Fundamental Reset)或电气空闲(Electrical Idle)中恢复时,LTSSM 首先进入 Detect 状态。该状态的核心目标是:检测对端设备是否存在,并确认链路两端的物理连接是否完好。Detect 状态内部包含两个子状态:Detect.Quiet 和 Detect.Active,通过有序的电气序列完成接收器检测。
3.1 Detect.Quiet 子状态:静默等待与电气空闲退出
Detect.Quiet 是 Detect 状态的入口子状态。进入该状态后,发送端(Tx)必须保持 电气空闲(Electrical Idle) 状态,即差分电压维持在共模电平附近,不发送任何数据或信令。此静默期的目的是:
- 消除残余电荷:确保前一次链路操作在传输线上残留的电荷完全泄放,避免干扰后续检测。
- 等待对端稳定:为对端设备从复位或低功耗状态恢复提供足够的稳定时间。
- 准备退出电气空闲:在静默期结束后,Tx 必须主动退出电气空闲,进入 Detect.Active 子状态。
电气空闲退出(Electrical Idle Exit)是 Detect.Quiet 结束的标志。Tx 必须将差分电压从共模电平快速提升到正常摆幅,并开始发送 Detect 信令序列。退出过程需要满足特定的电气特性,包括上升时间、过冲和稳定时间,以确保对端接收器能够正确识别退出事件。
3.2 Detect.Active 子状态:接收器检测逻辑
Detect.Active 是 Detect 状态的核心工作阶段。在此子状态下,Tx 执行 接收器检测(Receiver Detection) 逻辑,以判断对端是否存在有效的接收器(Rx)。检测原理基于 交流耦合电容的充放电特性:
- 发送检测脉冲:Tx 在差分对上发送一个已知幅度和宽度的电压脉冲(通常为低摆幅脉冲,约 200-400 mV)。
- 监测反射/回波:由于传输线末端存在交流耦合电容(通常为 75 nF 或 100 nF),如果对端连接了有效的 Rx,电容会吸收部分能量,导致反射波形与开路状态不同。Tx 通过比较发送脉冲与反射脉冲的幅度、时间或斜率,判断接收器是否存在。
- 判定结果:
- 检测成功:若反射特性符合预期(电容负载存在),则判定对端 Rx 存在,链路进入 Polling 状态。
- 检测失败:若反射特性显示开路或短路(无有效电容负载),则判定对端不存在,链路重新回到 Detect.Quiet 子状态,等待下一次检测机会。
3.3 接收器检测逻辑的详细流程
接收器检测逻辑在硬件层面通常由 模拟前端(AFE) 和 检测状态机 协同完成。下表总结了检测过程中的关键参数和判定条件:
| 参数 | 描述 | 典型值(Gen1/Gen2) | 典型值(Gen3/Gen4/Gen5) |
|---|---|---|---|
| 检测脉冲幅度 | Tx 发送的差分电压摆幅 | 200 mV | 200 mV |
| 检测脉冲宽度 | 脉冲持续时间 | 4 UI(约 1.6 ns @ 2.5 GT/s) | 4 UI(约 0.4 ns @ 8 GT/s) |
| 反射阈值 | 判定 Rx 存在的反射电压门限 | ≥ 50 mV | ≥ 50 mV |
| 检测超时 | Detect.Active 最大停留时间 | 12 ms | 12 ms |
| 交流耦合电容 | Tx 与 Rx 之间的隔直电容 | 75 nF | 100 nF |
3.4 Detect 状态流程图
下图展示了 Detect 状态内部的状态转换关系,以及接收器检测逻辑的决策路径:
3.5 Detect 状态的关键设计要点
在硬件实现中,Detect 状态的设计需要关注以下几个关键点:
- 电气空闲检测器:接收端必须配备电气空闲检测器(Electrical Idle Detector),用于识别 Tx 是否处于空闲状态。该检测器通常基于共模电压比较器实现,阈值设定在 50-100 mV 范围内。
- 检测脉冲生成:Tx 的检测脉冲必须具有精确的幅度和宽度,以避免误触发或损坏对端电路。建议使用专用的脉冲生成电路,而非依赖数据路径。
- 噪声容限:在高速链路中,反射信号可能被噪声淹没。设计时应保证检测阈值留有至少 20% 的噪声容限,并考虑使用多次采样平均来提高可靠性。
- 跨时钟域同步:Detect 状态机通常运行在低速参考时钟域(如 100 MHz),而检测脉冲生成在高速时钟域(如 2.5 GHz)。需要设计可靠的跨时钟域同步逻辑,避免亚稳态。
3.6 Detect 状态与后续状态的衔接
Detect 状态的成功完成是链路训练的第一步。一旦接收器检测通过,LTSSM 立即进入 Polling 状态,开始进行速率协商和位锁定。如果检测失败,LTSSM 会循环在 Detect.Quiet 和 Detect.Active 之间,直到检测成功或系统复位。这种循环机制确保了链路在热插拔或电源波动后能够自动恢复。
下表总结了 Detect 状态与其他 LTSSM 状态的交互关系:
| 前驱状态 | 当前状态 | 后继状态 | 转换条件 |
|---|---|---|---|
| Reset / Electrical Idle | Detect.Quiet | Detect.Active | 电气空闲退出完成 |
| Detect.Quiet | Detect.Active | Polling | 接收器检测成功 |
| Detect.Active | Detect.Quiet | Detect.Quiet | 接收器检测失败或超时 |
| Detect.Active | Detect.Quiet | Detect.Quiet | 检测到电气空闲(异常情况) |
通过 Detect 状态的精确定义和实现,PCIe 链路能够在物理层建立可靠的连接基础,为后续的速率协商和数据传输铺平道路。