4. LTSSM 状态详解 – Detect
Detect 是 PCIe 链路训练状态机(LTSSM)的起始状态,也是链路从电气空闲(Electrical Idle)恢复后进入的第一个稳定状态。该状态的核心任务是:确认对端设备是否存在,并为后续的 Polling 状态建立基本的电气连接。Detect 状态不进行任何协议层交互,仅依赖物理层的电气检测机制。
关键认知: Detect 状态不发送任何有序集(Ordered Sets),也不进行位锁定或符号锁定。它只回答一个问题——“链路的另一端是否有设备?”
4.1 Detect 状态的目的
Detect 状态在以下三种场景下被进入:
- 初始上电或复位: 链路从未知状态启动,需要探测对端。
- 从电气空闲退出: 链路进入低功耗或发生电气空闲条件后,重新探测对端是否仍在。
- 链路恢复失败回退: Recovery 状态超时或失败后,回退到 Detect 重新开始训练。
Detect 状态的成功退出条件是:接收器检测逻辑(Receiver Detection Logic)确认至少有一条通道(Lane)存在对端接收器。如果所有通道均未检测到接收器,LTSSM 将保持在 Detect 状态并周期性重试。
4.2 电气空闲检测(Electrical Idle Detection)
在进入 Detect 状态之前,链路必须确认处于电气空闲状态。电气空闲是指差分信号线上的电压差维持在 0 V 附近(通常 < 50 mV 峰峰值),且持续至少 TDETECTQUIET 时间。
电气空闲检测电路(EIDLE Detect)是每个 Lane 上的独立模拟比较器,其关键参数如下:
| 参数 | 符号 | Gen5 典型值 | 说明 |
|---|---|---|---|
| 退出电气空闲阈值 | VEXIT-IDLE | 50 mVpp-diff | 超过此值认为退出空闲 |
| 进入电气空闲阈值 | VENT-IDLE | 20 mVpp-diff | 低于此值认为进入空闲 |
| 电气空闲检测时间 | TDETECTQUIET | 20 µs | 进入 Detect 前必须保持空闲 |
时序陷阱: 如果电气空闲检测时间 TDETECTQUIET 设置过短,链路可能误判噪声为有效信号,导致 Detect 状态提前退出;设置过长则增加链路训练延迟。Gen5 要求该参数在 12 µs – 20 µs 范围内可配置。
4.3 接收器检测逻辑(Receiver Detection Logic)
接收器检测是 Detect 状态的核心操作。发送器通过测量 RC 时间常数 来判断对端是否存在接收器。其基本原理如下:
- 预充电阶段: 发送器将差分对的两个信号线(D+ / D-)驱动到共模电压(约 0 V),然后进入高阻态。
- 检测阶段: 发送器施加一个已知的电压阶跃(通常为 300 mV – 600 mV),并监测信号线上的电压上升时间。
- 判定逻辑:
- 如果对端存在接收器(约 20 pF – 50 pF 的等效电容),电压上升较慢,时间常数较大。
- 如果对端不存在接收器(开路),电压上升极快,时间常数接近 0。
接收器检测的时序参数由 TDETECT 定义,详见 4.4 节。
4.4 时序参数 TDETECT
TDETECT 是 Detect 状态中最重要的时序参数,它定义了从进入 Detect 状态到完成接收器检测并做出退出决策的 最大允许时间。Gen5 规范对 TDETECT 的要求如下:
| 参数 | 符号 | Gen5 最小值 | Gen5 最大值 | 单位 |
|---|---|---|---|---|
| 接收器检测时间 | TDETECT | 12 | 24 | ms |
| 电气空闲静默时间 | TDETECTQUIET | 12 | 20 | µs |
| 检测采样窗口 | TDETECTSAMPLE | 1 | 2 | µs |
TDETECT 的时序约束在数字电路设计中需要特别注意以下几点:
- 计数器精度: 用于 TDETECT 计时的计数器必须使用高频参考时钟(通常为 100 MHz 或 125 MHz),确保 12 ms – 24 ms 的计时误差 < 1% 。
- 状态机同步: Detect 状态内的子状态(Detect.Quiet、Detect.Active、Detect.Wait)之间的切换必须满足 无毛刺(Glitch-Free) 的跨时钟域同步。
- 多 Lane 对齐: 在 x4 / x8 / x16 链路中,所有 Lane 的接收器检测结果必须通过 Lane-to-Lane 对齐逻辑 汇总,只有当所有 Lane 都检测到接收器(或超时)时,状态机才允许退出 Detect。
4.5 Detect 状态的设计约束与调优建议
在 Gen5 链路训练中,Detect 状态的设计质量直接影响链路训练的成功率和初始化时间。以下是针对数字电路设计工程师的约束与调优建议:
| 设计维度 | 约束要求 | 调优方向 |
|---|---|---|
| 时钟域 | Detect 状态机必须运行在 PCLK(PHY Clock)域 | 使用异步 FIFO 或双级同步器隔离 MAC 层时钟域 |
| 计数器 | TDETECT 计数器分辨率 ≤ 1 µs | 采用 16 位计数器,参考时钟 100 MHz 以上 |
| 检测精度 | 接收器检测误判率 < 10⁻⁶ | 增加多次采样取多数判决(Majority Voting) |
| 功耗 | Detect 状态功耗 < 50 mW(x16 链路) | 检测完成后立即关闭预充电电路 |
| 多 Lane 同步 | 所有 Lane 检测结果必须在 2 µs 内对齐 | 使用专用硬件对齐逻辑,避免软件轮询 |
实战经验: 在 Gen5 链路调试中,如果链路反复卡在 Detect 状态无法进入 Polling,优先检查:① 电气空闲检测阈值是否被噪声误触发;② 接收器检测的 RC 时间常数是否因 PCB 寄生电容过大而超出判定范围;③ TDETECT 计数器是否因时钟抖动导致超时提前。