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 子状态。
关键时序参数: Detect.Quiet 子状态的持续时间由 Quiet Time 参数控制。根据 PCIe Base Spec,该时间至少为 12 ns(对于 Gen1/Gen2)或 24 ns(对于 Gen3/Gen4/Gen5)。实际实现中,通常使用一个内部定时器来保证最小静默时间。

电气空闲退出(Electrical Idle Exit)是 Detect.Quiet 结束的标志。Tx 必须将差分电压从共模电平快速提升到正常摆幅,并开始发送 Detect 信令序列。退出过程需要满足特定的电气特性,包括上升时间、过冲和稳定时间,以确保对端接收器能够正确识别退出事件。

3.2 Detect.Active 子状态:接收器检测逻辑

Detect.Active 是 Detect 状态的核心工作阶段。在此子状态下,Tx 执行 接收器检测(Receiver Detection) 逻辑,以判断对端是否存在有效的接收器(Rx)。检测原理基于 交流耦合电容的充放电特性:

  1. 发送检测脉冲:Tx 在差分对上发送一个已知幅度和宽度的电压脉冲(通常为低摆幅脉冲,约 200-400 mV)。
  2. 监测反射/回波:由于传输线末端存在交流耦合电容(通常为 75 nF 或 100 nF),如果对端连接了有效的 Rx,电容会吸收部分能量,导致反射波形与开路状态不同。Tx 通过比较发送脉冲与反射脉冲的幅度、时间或斜率,判断接收器是否存在。
  3. 判定结果:
    • 检测成功:若反射特性符合预期(电容负载存在),则判定对端 Rx 存在,链路进入 Polling 状态。
    • 检测失败:若反射特性显示开路或短路(无有效电容负载),则判定对端不存在,链路重新回到 Detect.Quiet 子状态,等待下一次检测机会。
检测精度要求: 接收器检测必须在 12 ms 的超时时间内完成(从进入 Detect.Active 开始计算)。如果超时仍未检测到对端,LTSSM 必须返回 Detect.Quiet 并重新尝试。对于 Gen3 及以上速率,检测逻辑需要更精确地处理信号完整性,因为高速信号对反射和串扰更敏感。

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
设计注意事项: 接收器检测逻辑对 PCB 走线的寄生参数非常敏感。过长的走线或过大的寄生电容可能导致误判(将开路误判为存在接收器)。建议在硬件设计时,确保差分对特性阻抗为 85Ω ±15%,并严格控制交流耦合电容的容差(±20%)。

3.4 Detect 状态流程图

下图展示了 Detect 状态内部的状态转换关系,以及接收器检测逻辑的决策路径:

Detect 状态机流程图 Detect 状态机:Quiet → Active → 检测判定 Detect.Quiet 电气空闲保持 ≥ 12 ns 电气空闲退出 Detect.Active 发送检测脉冲 检测到 接收器? 是 Polling 状态 进入速率协商 否 返回 Detect.Quiet 说明: • 检测超时(12 ms)未完成,则强制返回 Detect.Quiet。 • 检测脉冲的反射特性由交流耦合电容和接收器输入阻抗共同决定。

3.5 Detect 状态的关键设计要点

在硬件实现中,Detect 状态的设计需要关注以下几个关键点:

  • 电气空闲检测器:接收端必须配备电气空闲检测器(Electrical Idle Detector),用于识别 Tx 是否处于空闲状态。该检测器通常基于共模电压比较器实现,阈值设定在 50-100 mV 范围内。
  • 检测脉冲生成:Tx 的检测脉冲必须具有精确的幅度和宽度,以避免误触发或损坏对端电路。建议使用专用的脉冲生成电路,而非依赖数据路径。
  • 噪声容限:在高速链路中,反射信号可能被噪声淹没。设计时应保证检测阈值留有至少 20% 的噪声容限,并考虑使用多次采样平均来提高可靠性。
  • 跨时钟域同步:Detect 状态机通常运行在低速参考时钟域(如 100 MHz),而检测脉冲生成在高速时钟域(如 2.5 GHz)。需要设计可靠的跨时钟域同步逻辑,避免亚稳态。
实战经验: 在 Gen5 链路中,由于速率高达 32 GT/s,接收器检测的时序窗口非常窄。建议在 PCB 设计时,将 Detect 相关的模拟电路(如脉冲生成器、反射比较器)放置在靠近 SerDes 的位置,并采用独立的电源域供电,以减少数字噪声耦合。

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 链路能够在物理层建立可靠的连接基础,为后续的速率协商和数据传输铺平道路。