1. 物理层概述
物理层(Physical Layer)是 PCIe 协议栈的最底层,负责比特流的收发、链路的训练与协商、以及电气特性的定义。物理层在 PCIe 体系中扮演"公路与交通灯"的角色------所有上层数据最终都要经过物理层的编码、串行化并发送到链路上。
物理层分为两个子层:
- 逻辑物理层(Logical Physical Layer):与数据链路层交互,负责 8b/10b 或 128b/130b 编码/解码、加扰/解扰、串行/并行转换
- 电气物理层(Electrical Physical Layer):模拟接口,包含差分信号收发器、终端阻抗、均衡器等
1.1 发送端数据流
|--------|--------------------------|-------------------------------------|
| 步骤 | 操作 | 说明 |
| 1 | DLLP/TLP 进入 Tx Buffer | 来自数据链路层 |
| 2 | 添加 Start / End 标识 | 1 Byte Start + 1 Byte End,标识 TLP 边界 |
| 3 | Byte Stripping | 多 lane 场景下,数据按字节交替分发到各 lane |
| 4 | Scramble(加扰) | 打破长连零/连一,减少 EMI 和串扰(Gen1/Gen2) |
| 5 | 8b/10b 或 128b/130b 编码 | Gen1/Gen2:8b/10b;Gen3 及以上:128b/130b |
| 6 | Parallel to Serial (P2S) | 并转串,通过 Serializer 输出差分信号 |
1.2 接收端数据流
|--------|--------------------------|----------------------------------|
| 步骤 | 操作 | 说明 |
| 1 | Serial to Parallel (S2P) | 串行数据转为并行 |
| 2 | 时钟数据恢复(CDR) | 从数据流中恢复时钟(嵌入式时钟) |
| 3 | 8b/10b 或 128b/130b 解码 | Gen1/Gen2:8b/10b;Gen3+:128b/130b |
| 4 | De-Scramble(解扰) | 逆向 Scramble 操作 |
| 5 | Byte Un-Stripping | 合并各 lane 数据 |
| 6 | 检查 Start / End 标识 | 确认 TLP 边界 |
| 7 | 数据送入 Rx Buffer | 传递给数据链路层 |
1.3 编码方式对比
|-----------|-----------|--------|----------------|
| 版本 | 编码 | 开销 | 主要优点 |
| Gen1/Gen2 | 8b/10b | 20% | 直流均衡、嵌入时钟、错误检测 |
| Gen3+ | 128b/130b | ~1.5% | 低开销,Gen3+ 强制使用 |
2. LTSSM 链路训练状态机
2.1 状态机概述
LTSSM(Link Training and Status State Machine)负责在链路初始化、速率切换、热插拔等场景下完成链路的协商和配置。LTSSM 包含 11 个主要状态,分为五大类:
|---------------|----------------------------------|
| 类别 | 状态 |
| 链路训练 | Detect, Polling, Configuration |
| 重训练(Recovery) | Recovery |
| 正常活动 | L0 |
| ASPM 功耗管理 | L0s, L1 |
| 其他 | L2, Loopback, Disable, Hot Reset |
2.2 Detect 状态
设备复位后进入 Detect 状态,检测链路对端是否存在:
- Detect.Active:发送检测脉冲,检测接收端终端阻抗
- Detect.Quiet:无检测脉冲进入安静状态,节省功耗
若检测到对端电阻为标准终端阻抗(85Ω 或 100Ω),进入 Polling 状态。
2.3 Polling 状态
在 Polling 状态,链路两端通过交换 TS1OS 和 TS2OS 完成初始协商:
- Bit Lock:接收端从数据流中恢复时钟,达到稳定位同步
- Symbol Lock:确定字符边界(8b/10b 编码下每个符号为 10 bits)
- Polarity Detection:检测并自动翻转差分信号极性(如果布线反接)
- Lane Reversal Detection:检测 Lane 顺序是否需要翻转
- Negotiate Link Speed:协商链路速率(Gen1/2/3/4/5)
2.4 Configuration 状态
Configuration 状态进一步细化链路参数:
- Link Width:协商链路宽度(x1 / x2 / x4 / x8 / x16)
- Lane Number Assignment:为每个 Lane 分配逻辑 Lane 号
- Lane-to-Lane De-skew:修正各 Lane 之间的偏斜,保证数据对齐
Configuration 完成后进入 L0 状态。
2.5 L0 状态
L0 是链路的正常活动状态,所有 TLP、DLLP 和 Ordered Set 均可正常收发。支持 PCIe Gen1-Gen5 速率,可在 Recovery 状态切换。
2.6 Recovery 状态
Recovery 用于链路速率重协商或位锁定重新获取:
- 链路从低速率升到高速率(如 Gen1 -> Gen3)时必须经过 Recovery
- 重新进行 Bit Lock 和 Symbol Lock(但比 Polling 快)
- 重新交换 TS2 以协商新速率
- 接收端均衡器重新训练(Gen3+)
2.7 L0s 状态(ASPM)
L0s 是 Active State Power Management 的一种,用于短时空闲后快速恢复:
- 进入条件:发送端连续 7us 无 TLP/DLLP 发送(可配置)
- 进入方式:发送 EIOS(Electrical Idle Ordered Set),两端进入 Electrical Idle
- 退出方式:发送 N_FTS 个 FTS + 1 个 SOS,快速恢复位锁定后回到 L0
- 恢复延迟:< 1us(比 L1 快得多)
2.8 L1 状态(ASPM)
L1 比 L0s 功耗更低,但恢复时间更长:
- 进入方式 1(ASPM L1):硬件自动,发送端空闲超时后建议,接收端同意后进入
- 进入方式 2(软件控制):系统软件将设备置入 D1/D2/D3 Hot 状态,通过 PM 消息协商进入
- L1 要求链路两端同时同意(双向协议)
- 退出方式:通过 Recovery 状态重新训练,回到 L0
2.9 L2 状态
L2 是最低功耗状态,仅保留 Vaux 电源:
- Beacon 或 WAKE# 信号唤醒
- Beacon 是低频差分信号(30kHz-500MHz)
- 需要完整链路训练恢复(L0),延迟最高
2.10 其他状态
|-----------|-----------------------------------------------------------------------|
| 状态 | 说明 |
| Hot Reset | 软件设置 Bridge Control 寄存器的 Secondary Bus Reset 位,发送含 Hot Reset 的 TS1 OS |
| Disable | 软件禁用链路,发送端进入 Electrical Idle,接收端处于低阻态 |
| Loopback | 测试模式,上游设备发送数据,下游设备环回(用于硅验证和调试) |
2.11 典型状态转移路径
典型复位后转移路径:Reset -> Detect -> Polling -> Configuration -> L0
典型功耗管理转移路径:L0 -> (空闲) -> L0s / L1 -> Recovery -> L0
典型速率切换路径:L0 -> Recovery(高速) -> Configuration -> L0(新速率)
3. Ordered Sets(训练序列)
3.1 TS1 / TS2 Ordered Set
TS1OS 和 TS2OS 是链路训练的核心 Ordered Set,包含:
|------------------|---------------------------------------|
| 字段 | 说明 |
| Link # | 链路号 |
| Lane # | Lane 号 |
| N_FTS | L0s 退出所需 FTS 数量 |
| Data Rate | 目标速率 |
| Training Control | 控制位(Hot Reset / Disable / Loopback 等) |
| Speed Change | 速率切换指示 |
3.2 FTS(Fast Training Sequence)
FTS 用于 L0s 快速退出,接收端通过 FTS 重新获得位锁定和符号锁定。N_FTS 值在 Configuration 阶段协商,越大意味着接收端恢复能力越强。
3.3 EIOS / EIEOS(Electrical Idle Ordered Set)
EIOS:进入 Electrical Idle 状态(信号 D+ 和 D- 无压差),用于 L0s/L1/L2 进入和链路 Disable。EIEOS:Gen3+ 使用的扩展 Idle 序列,替代 EIOS。
3.4 SOS(Start of Symbol)
SOS 在 FTS 序列之后发送,用于标识数据的真正开始(Gen1/Gen2)。
4. 链路均衡(Link Equalization, Gen3+)
4.1 预知系数(Preset)与均衡值
Gen3+ 引入了 Preset 概念,发送端从 16 个 Preset 中选择一个最优值。Preset 是发送端均衡器(TX FFE coefficient sets)的预定义组合。
4.2 Gen3+ 均衡流程
- Phase 0:发送端发送 Preset 8(0dB 增益),接收端测量并反馈最优 Preset
- Phase 1:上游设备依次发送各 Lane 的最优 Preset
- Phase 2:下游设备依次反馈各 Lane 的最优 Preset
- Phase 3:两端协商最终 Preset,均衡完成
5. 电气特性
5.1 差分信号
- PCIe 采用低压差分信号(Low Voltage Differential Signaling, LVDS/LVPE)
- 典型输出摆幅:800mV(Gen1/2)、400mV(Gen3+)
- 差分阻抗:85Ω(Gen1/2)、100Ω(Gen3+)
5.2 嵌入式时钟
PCIe 不提供独立的时钟线,时钟嵌入在数据流中(8b/10b 或 128b/130b 编码),接收端通过 CDR(Clock Data Recovery)电路从数据流恢复时钟。
5.3 参考时钟(RefClk)
- 100MHz 差分参考时钟(±300ppm)
- Common RefClk(CC):链路两端共享同一时钟源
- Separate RefClk(SRIS):各自独立时钟(Gen3+ 可选,需 SSC)
- No RefClk(SRNS):发送端 PLL 提供时钟(Gen3+ 可选)
5.4 均衡器(Equalizer)
|---------------------------------|--------|------------------------------|
| 均衡器类型 | 位置 | 说明 |
| CTLE(Continuous Time Linear EQ) | 接收端 | 模拟均衡,放大高频衰减 |
| DFE(Decision Feedback EQ) | 接收端 | Gen4+ 使用,消除码间干扰 |
| TX FFE(Feed-Forward EQ) | 发送端 | 预加重(pre-shoot / de-emphasis) |
6. 眼图与信号质量
6.1 眼图测试
眼图是评估 PCIe 链路信号质量的经典方法,通过采样点叠加显示"眼睛"张开程度。眼图测试关注:
- Timing Margin:接收端采样窗口的时序余量
- Voltage Margin:电压余量
- Jitter:时钟抖动(周期抖动 / 随机抖动)
6.2 眼图工具
Intel 提供 PCIe Gen4 Margin Tool,可在支持 margining 的接收端上自动测量眼图位置(Lane Margining at Receiver),量化 Timing 和 Voltage Margin。
7. 热插拔(Hot Plug)
物理层负责热插拔的硬件信号部分:
- PRSNT1# / PRSNT2#:卡是否存在(PRSNT1# 接地,卡插入时 PRSNT2# 拉高)
- PERST#:热插拔时控制卡的复位
- CLKREQ#:ASPM L1 电源管理时钟请求信号
- WAKE#:L2 唤醒信号(边带)
8. Synopsys PCIe IP 物理层实现
Synopsys PCIe Controller 物理层通过 PIPE 接口(PCIe PHY Interface)与外部 PHY 连接(支持 PIPE 4.4.1 / 5.1.1 / 5.1.2 标准接口)。控制器内部实现 MAC 层(含 LTSSM)、8b/10b 或 128b/130b 编解码、以及 PHY PCS 子层功能。
9. 参考文档
- PCI Express Base Specification Revision 5.0,Chapter 4(Physical Layer)
- PCI Express Base Specification Revision 5.0,Chapter 5(Physical Layer Hot Plug)
- PCIe_PHY_Test_Spec_4.0_V1.01(PCIe PHY 测试规范)
- DWC_pcie_ctl_overview / user(Synopsys PCIe IP 物理层相关章节)