LTSSM 概述

LTSSM(Link Training and Status State Machine)是PCIe链路层的核心状态机,负责链路的初始化、训练、电源管理和错误恢复。每条PCIe链路的两端各有一个独立的LTSSM实例,它们协同工作以建立和维护可靠的通信链路。

状态数量

11个主要状态

多个子状态

主要功能

链路初始化与训练

速度/宽度协商

电源管理

L0/L0s/L1/L2 低功耗状态

ASPM支持

状态机全景图

配置状态
Detect S0
Polling S1
Configuration S2
工作状态
L0 S3
电源管理
L0s S4
L1 S5
L2 S6
恢复/错误状态
Recovery S7
Hot Reset S8
Disable S9
测试状态
Loopback S10
配置流程 正常工作 电源管理 错误恢复

状态详解

Detect 状态

这是LTSSM的初始状态和复位后的入口状态,主要任务是检测链路对端是否存在设备。

子状态

Detect.Quiet

初始子状态,检测接收器是否检测到差分信号。如果没有检测到任何信号且超时(12ms),则进入Detect.Active。

Detect.Active

向对端发送检测脉冲,通过检测接收端的阻抗来判断对端是否有设备连接。如果检测到设备,进入Polling状态;否则返回Detect.Quiet。

关键行为

  • 发送端发送电气空闲序列
  • 接收端检测差分信号的存在
  • 使用接收器终端检测机制判断连接状态
  • 支持多Lane链路的逐Lane检测

时序要求

参数 最小值 典型值 最大值
Detect.Quiet 超时 12 ms - 24 ms
Detect.Active 超时 - - 24 ms

Polling 状态

Polling状态的主要任务是建立符号锁定(Symbol Lock)和Lane极性对齐,完成训练序列(TS)的交换。

子状态

Polling.Active

发送训练序列TS1/TS2,请求对端进行链路训练。接收端尝试建立符号锁定。

Polling.Compliance

可选状态,用于发送符合性测试码型。主要用于工厂测试和验证。

Polling.Configuration

发送TS2序列确认链路参数,准备进入Configuration状态。

训练序列 (Training Sequence)

TS1 用于链路训练,包含链路号和Lane号
TS2 确认训练完成,协商链路参数
字段 大小 描述
COM 1 字节 逗号字符,用于符号对齐
Link Number 1 字节 链路编号
Lane Number 1 字节 Lane编号
Num of FTS 1 字节 L0s退出所需的FTS数量
Data Rate 1 字节 支持的数据速率

Configuration 状态

Configuration状态完成链路宽度协商、Lane反转和Lane对齐等配置任务。

子状态

Configuration.Linkwidth.Start

开始链路宽度协商,发送带有链路号信息的TS1序列。

Configuration.Linkwidth.Accept

接受对端提议的链路宽度配置。

Configuration.Lanenum.Wait

等待Lane编号分配完成。

Configuration.Lanenum.Accept

接受Lane编号分配。

Configuration.Complete

配置完成,准备进入L0状态。

Configuration.Idle

发送空闲序列,等待进入L0。

Lane协商过程

1 两端各自通告最大Lane数
2 协商实际使用的Lane数(取较小值)
3 检测Lane极性并反转(如需要)
4 Lane对齐和Deskew
5 进入L0正常工作状态

L0 状态

L0是链路的正常工作状态,所有数据传输都在此状态下进行。在L0状态下,链路可以全速传输数据包。

L0状态特性

  • 全速数据传输(根据协商的速度)
  • 支持所有TLP和DLLP传输
  • 正常的流量控制操作
  • 可以进入L0s/L1低功耗状态
  • 错误检测和报告功能激活

状态转换

目标状态 触发条件 说明
L0s 发送端电气空闲 ASPM L0s进入
L1 收到PM进入请求 软件发起的电源管理
Recovery 错误或速度切换 链路恢复或速率改变
Disable 软件命令 链路禁用
Hot Reset 软件复位 热复位

Recovery 状态

Recovery状态用于链路恢复和速度切换。当链路发生错误或需要改变数据速率时进入此状态。

进入Recovery的场景

速率切换

从Gen1/Gen2切换到更高速率

链路重训练

错误恢复、信号质量下降

带宽切换

改变Lane数量

子状态

Recovery.RcvrLock

接收器重新建立符号锁定。

Recovery.RcvrCfg

接收器配置,交换TS1/TS2。

Recovery.Idle

发送空闲序列,准备返回L0。

Recovery.Speed

速率切换,改变数据速率。

Recovery.Equalization

均衡调整(Gen3+),优化信号质量。

均衡 (Equalization) - Gen3+

从Gen3开始,链路恢复需要执行均衡过程,调整发送端的预加重和去加重参数以优化信号完整性。均衡分为4个阶段,每个阶段有特定的目标和操作。

Phase 0 初始化 - 准备均衡参数
Phase 1 粗调 - Preset选择
Phase 2 精调 - Coefficient调整
Phase 3 确认 - 优化值验证
均衡阶段详解
Phase 0 - 初始化
  • 发送端和接收端准备均衡所需的寄存器和状态
  • 交换均衡能力信息
  • 设置初始Preset值(通常从Preset 7开始)
  • 进入Phase 1前的准备工作
Phase 1 - 粗调(Preset选择)
  • 发送端依次发送所有Preset(0-9)的测试码型
  • 接收端评估每个Preset的信号质量(BER、眼图)
  • 选择最佳的Preset作为起始点
  • 目标是找到一个可工作的初始设置
Phase 2 - 精调(Coefficient调整)
  • 基于Phase 1选择的最佳Preset进行微调
  • 调整发送系数(Pre-cursor、Cursor、Post-cursor)
  • 接收端反馈建议的系数调整方向
  • 迭代优化直到信号质量满足要求
Phase 3 - 确认和优化
  • 验证最终选择的Preset和系数设置
  • 进行最终的眼图和BER测试
  • 确认链路可以在优化后的参数下稳定工作
  • 均衡完成,准备返回L0状态
均衡关键参数
参数 描述 典型值
Preset 预定义的均衡系数组合 0-9(共10个)
Pre-cursor 前导系数(去加重) -6 dB 至 0 dB
Cursor 主系数(信号幅度) 基准电平
Post-cursor 后导系数(去加重) -12 dB 至 0 dB

电源管理状态

PCIe定义了多个低功耗状态,支持不同的功耗和唤醒延迟级别。

L0s

功耗降低: ~90% 退出延迟: 数微秒

轻量级低功耗状态,发送端进入电气空闲。唤醒速度最快,适合频繁唤醒场景。

进入流程: 发送FTS → 电气空闲

L1

功耗降低: ~99% 退出延迟: 数十微秒

深度低功耗状态,需要两端协商进入。支持ASPM L1和软件控制的L1。

进入流程: PM请求 → 确认 → 电气空闲

L2

功耗降低: ~99.9% 退出延迟: 毫秒级

最低功耗状态,链路完全关闭,仅保留辅助电源。需要外部唤醒信号。

进入流程: L1 → PME_Turn_Off → L2

ASPM (Active State Power Management)

ASPM是一种硬件自动的电源管理机制,在链路空闲时自动进入低功耗状态。

ASPM级别 描述 功耗节省
L0s Only 仅使用L0s 较低
L1 Only 仅使用L1 较高
L0s + L1 组合使用 最优平衡

交互式状态机模拟器

通过交互式模拟器了解LTSSM的状态转换过程。点击下方按钮进入模拟器。

典型场景分析

设备插入流程

T+0ms 设备插入,Detect.Quiet检测到信号
T+1ms 进入Detect.Active,发送检测脉冲
T+5ms 确认设备存在,进入Polling
T+25ms 符号锁定完成,发送TS1/TS2
T+50ms 进入Configuration,协商链路参数
T+60ms 进入L0,链路可用

速率升级流程

T+0μs 软件发起速率切换请求
T+1μs 进入Recovery.RcvrLock
T+24μs 交换TS1通告新速率
T+48μs 进入Recovery.Speed,切换PLL
T+100μs 重新锁定,执行均衡
T+200μs 均衡完成,返回L0