在这里插入图片描述

系列文章目录


Linux内核世界专栏

PCIe总线协议基础实战

一文读懂 内存DMA 及 设备内存控制

《Linux Kernel IOMMU》翻译

PCIe MSI-X 中断编程


小杜专栏

【PCIe】链路测试,数字工程师也要会看高速信号眼图!

【PCIe】链路训练状态机(LTSSM) - PCIe链路建立过程概述

【PCIe】什么是PCIe domain?

【PCIe】PCIe配置空间与CPU访问机制

    PCIe MMIO、DMA、TLP

    A Practical Tutorial on PCIe for Total Beginners on Windows (Part 1)

【PCIe】系统如何通过PCIe基地址寄存器BARs分配EP地址空间



PCIe LTSSM

PCIe中的LTSSM(Link Training and Status State Machine)是物理层核心的状态机,用于管理链路训练、配置和电源管理。其11个状态可分为四类,具体如下:


1. 链路训练状态(Training States)

  1. Detect(检测状态)

    • 功能:检测对端设备是否存在,通过接收端阻抗判断链路是否连接。
    • 子状态
      • Detect.Quiet:发送端进入电气空闲(Electrical Idle),等待接收端信号。
      • Detect.Active:提升差分信号电压,检测接收端阻抗是否在40-60Ω范围内。
    • 转换条件:检测到有效接收端后进入Polling状态,否则返回Quiet或检测失败。
  2. Polling(轮询状态)

    • 功能:通过发送TS1/TS2训练序列完成位锁定(Bit Lock)、符号锁定(Symbol Lock)和极性翻转协商。
    • 子状态
      • Polling.Active:完成基础同步。
      • Polling.Compliance:合规性测试(如信号质量验证)。
      • Polling.Configuration:协商链路极性翻转。
      • Polling.Speed:确定初始速率(通常为2.5GT/s)。
    • 转换条件:同步完成后进入Configuration状态。
  3. Configuration(配置状态)

    • 功能:协商链路宽度(如x1/x4/x8/x16)、通道号分配及去偏斜(Deskew)。
    • 关键步骤
      • Link Number Negotiation:确定链路组编号。
      • Lane Number Negotiation:分配通道号。
      • Confirm Lane/Link Number:通过TS2序列确认配置。
    • 转换条件:配置完成后进入L0状态。

2. 链路重训练状态(Recovery State)

  1. Recovery(恢复状态)
    • 功能:链路异常时重新训练,支持速率/宽度调整或均衡优化。
    • 子状态
      • RcvrLock:重新获取位/符号锁定。
      • RcvrCfg:协商新速率或宽度。
      • Equalization:Gen3及以上需进行均衡(如预加重、后均衡)。
    • 触发条件:链路错误、速率切换(如Gen1→Gen3)、低功耗状态退出等。
    • 转换条件:均衡完成后返回L0或进入L0s/L1。

3. 低功耗状态(Power Management States)

  1. L0s(低功耗活动状态)

    • 特点:快速唤醒,仅关闭部分时钟,功耗略高于L0。
    • 应用场景:短时空闲时的节能。
  2. L1(深度低功耗状态)

    • 特点:完全停止时钟,功耗最低,唤醒时间较长。
    • 子状态:L1.0(无时钟)、L1.1(部分时钟恢复)、L1.2(完全关闭)。
  3. L2(系统级低功耗状态)

    • 特点:链路完全关闭,依赖系统电源管理,功耗最低。
    • 转换条件:系统进入S3/S4睡眠状态时触发。

4. 其他状态

  1. L0(正常工作状态)

    • 功能:链路稳定,支持TLP/DLLP数据传输。
    • 速率调整:首次进入L0时为2.5GT/s,后续通过Recovery状态提升至5/8GT/s。
  2. Hot Reset(热复位状态)

    • 功能:软件触发的链路复位,通过TS1序列发送Hot Reset位实现。
    • 转换路径:Recovery → Hot Reset → Detect。
  3. Loopback(环回状态)

    • 功能:用于测试,发送端将接收的数据环回,验证信号完整性。
    • 触发条件:诊断测试或错误恢复。
  4. Disable(禁用状态)

    • 功能:链路完全关闭,需手动配置寄存器恢复。
    • 触发条件:设备移除或驱动异常。

5. 状态转换示例(以速率提升为例)

  1. 上电初始化:Detect → Polling → Configuration → L0(2.5GT/s)。
  2. 速率协商:L0 → Recovery(协商8GT/s) → Equalization → L0(新速率)。
  3. 错误恢复:L0 → Recovery → L0(重训练完成)。

6. 关键设计要点

  • 兼容性:LTSSM需支持PCIe各版本(Gen1-Gen6),不同速率对均衡要求不同。
  • 功耗优化:L0s/L1/L2状态通过关闭时钟或降低信号活动实现节能。
  • 错误处理:Loopback和Recovery状态用于链路自愈,确保稳定性。

通过LTSSM的精细状态管理,PCIe实现了从物理层初始化到高速数据传输的全流程自动化控制。

PCIe TS1/TS2

PCIe中的TS1(Training Sequence 1)TS2(Training Sequence 2)是物理层链路训练的核心有序集(Ordered Set),主要用于链路初始化、参数协商和状态转换控制。以下是其详细解析:


1. 定义与作用

  • TS1:由16个Symbol(字符)组成,用于检测链路配置信息(如速率、宽度、均衡参数等),并触发接收端进行位/符号锁定。
  • TS2:同样由16个Symbol组成,用于确认TS1的检测结果,并完成链路参数的最终协商。
  • 核心功能
    • 链路参数交换:协商速率(2.5GT/s/5GT/s/8GT/s等)、链路宽度(x1/x4/x8/x16)、均衡模式等。
    • 状态机控制:驱动LTSSM状态转换(如Polling→Configuration)。
    • 错误恢复:通过发送特定命令(如Hot Reset、Loopback)处理链路异常。

2. TS1/TS2的Symbol结构

每个TS序列包含16个Symbol,其关键字段如下(以8b/10b编码为例):

Symbol序号 功能描述 典型内容示例
Symbol 0 序列起始标识 COM(Control)字符,复位接收端LFSR寄存器。
Symbol 1 链路号(Link Number)占位符 初始阶段为空(PAD字符),配置阶段填充实际链路号。
Symbol 2 通道号(Lane Number)占位符 初始阶段为空,配置阶段填充实际通道号。
Symbol 3 N_FTS(Fast Training Symbol数量),决定接收端PLL锁定所需的FTS序列个数 例如:0b011表示需要发送8个FTS序列。
Symbol 4 速率与控制位 - 低3位:支持速率(如011=支持8GT/s)
- 第6位:De-emphasis使能
- 第7位:速率切换请求。
Symbol 5 命令字段 - 第0位:Hot Reset
- 第1位:Disable Link
- 第2位:Loopback
- 第4位:Disable Scrambling。
Symbol 6~15 均衡参数与状态标识 - Gen1/Gen2:D10.2编码(TS1)或D5.2编码(TS2)
- Gen3+:均衡模式(如EQ Bypass)。

3. TS1与TS2的差异

特性 TS1 TS2
主要用途 发送链路配置请求 确认TS1的配置并完成协商
Symbol 6~15编码 D10.2(8b/10b编码) D5.2(8b/10b编码)
状态机转换 触发Polling状态下的参数检测 确认参数后进入Configuration状态

4. 在LTSSM中的使用场景

  1. Polling.Active状态

    • 发送端交替发送TS1和TS2序列,检测对端链路参数。
    • 若连续收到8个TS1(Gen1/Gen2)或8个TS1-TS2对(Gen3+),则判定链路连续。
  2. Configuration状态

    • 通过TS2确认链路宽度、速率等参数,完成协商后进入L0状态。
  3. Recovery状态

    • 链路异常时重新发送TS1/TS2,调整均衡参数或速率。

5. 编码与速率适配

  • 8b/10b编码(Gen1/Gen2)
    • TS1/TS2始终不加扰,通过D10.2/D5.2编码标识序列类型。
  • 128b/130b编码(Gen3+)
    • TS1/TS2需加扰,Symbol 6~9用于标识序列类型。
  • Modified TS1/TS2
    • 在Gen3及以上版本中,修改Symbol 6~15的均衡字段,支持更灵活的均衡协商。

6. 实际应用示例

  • 速率协商:若发送端支持8GT/s,TS1的Symbol 4第7位置1,接收端通过TS2确认后切换速率。
  • 均衡调整:TS1的Symbol 6~15携带均衡模式(如Pre-Emphasis Level),接收端根据信号质量反馈调整。

7. 常见问题与处理

  • TS序列不连续:若未收到足够连续的TS序列,LTSSM退回Detect状态重新初始化。
  • 命令冲突:如同时收到Hot Reset和Disable Scrambling命令,优先处理Hot Reset。

总结

TS1和TS2是PCIe物理层链路训练的核心机制,通过有序集的交互实现参数协商与状态控制。其设计兼顾了灵活性与兼容性,支持从Gen1到Gen6的速率演进,并通过Modified TS优化了高速链路的均衡能力。

PCIe 位锁定

位锁定(Bit Lock)是PCIe物理层链路训练的核心步骤之一,其核心目标是确保接收端能够正确识别发送端传输的每一位数据的起始和结束位置,从而为后续的字符/块锁定及数据解析奠定基础。以下是其详细解析:


1. 定义与作用

  • 定义:位锁定指接收端通过时钟恢复电路(Clock and Data Recovery, CDR)从接收到的差分信号中提取与发送端同步的时钟信号,确保数据采样点准确对齐到信号边沿(如上升沿或下降沿)的过程。
  • 作用
    • 消除时钟偏差:解决发送端与接收端时钟频率或相位差异,避免数据采样错误。
    • 基础同步:为后续字符锁定(Symbol Lock)和块锁定(Block Lock)提供稳定的时钟基准。
    • 链路稳定性保障:确保数据流的连续性和正确性,避免因时钟不同步导致的数据包丢失或误码。

2. 实现机制

  • 嵌入式时钟(Embedded Clock):PCIe采用串行传输,发送端仅发送数据信号,时钟信息隐含在数据流的过渡边沿(如0→1或1→0)中。接收端需通过CDR从数据流中恢复时钟。
  • CDR电路工作原理
    • 相位调整:通过锁相环(PLL)动态调整采样时钟相位,使其与数据信号边沿对齐。
    • 训练序列辅助:发送端在Polling状态发送特定模式(如连续的1010...或Jitter Tolerance Pattern),帮助接收端快速锁定时钟。
  • 收敛条件:当接收端连续正确采样数据位(如连续检测到预期的逻辑电平变化),即判定位锁定完成。

3. 在LTSSM中的位置

  • 触发阶段:位锁定主要在Polling状态完成,具体通过发送TS1(Training Sequence 1)和TS2(Training Sequence 2)有序集实现。
  • 状态转换
    • 成功:位锁定完成后,进入字符锁定(Gen1/Gen2)或块锁定(Gen3)阶段。
    • 失败:若超时未锁定,可能触发Recovery状态重新训练。

4. 与其他锁定的关系

  • 字符锁定(Symbol Lock):位锁定完成后,接收端通过识别8b/10b编码的控制字符(如K28.5)确定字符边界。
  • 块锁定(Block Lock):Gen3及以上版本采用128b/130b编码,需通过块锁定同步更长的数据块。
  • 依赖关系:位锁定是字符/块锁定的前提,三者共同构成物理层同步的完整流程。

5. 设计挑战与优化

  • 抖动容忍:需支持Jitter Tolerance Pattern(如JTP)以应对信号抖动,确保锁定鲁棒性。
  • 高速场景优化:在Gen4/Gen5(16GT/s及以上)中,需采用更复杂的CDR算法(如多相位插值)应对高频信号失真。
  • 功耗平衡:CDR电路需在高速运行时保持低功耗,避免影响整体能效。

6. 实际应用示例

  • 场景:当x1 PCIe设备插入x16插槽时,接收端通过位锁定同步发送端的时钟,随后协商链路宽度为x1。
  • 故障排查:若位锁定失败,可能因信号完整性差(如过冲、反射)或CDR参数配置错误导致,需通过示波器分析眼图或调整均衡参数。

总结

位锁定是PCIe链路初始化的关键步骤,通过CDR电路和训练序列实现时钟同步,直接影响链路的稳定性和数据传输可靠性。其完成标志着物理层从电气空闲状态过渡到有效数据传输阶段,为后续高层协议(如数据链路层)的运行提供基础支持。

PCIe 去偏斜(Deskew)

去偏斜(Deskew)是PCIe多通道链路中用于补偿不同通道间信号传输时延差异的关键机制,其核心目标是确保同一链路内所有通道的数据在接收端能够同步对齐,避免因物理路径差异导致的数据错位或错误。以下是其详细解析:


1. 产生原因

在PCIe多通道(Lane)传输中,即使发送端采用同一时钟源,各通道的信号仍可能因以下原因产生时延差异(Skew):

  • 物理路径差异:不同通道的走线长度、阻抗不匹配或电路板布局差异。
  • 串化/解串延迟:发送端和接收端的串行器(Serializer)与解串器(Deserializer)引入的固有延迟差异。
  • 温度/电压波动:环境因素导致信号传播速度变化。
  • 均衡参数差异:不同通道的预加重(Pre-emphasis)或后均衡(Post-emphasis)设置不一致。

2. 功能与作用

  • 时序对齐:调整各通道数据的采样点,确保同一链路内所有通道的比特流在接收端同步。
  • 误码率降低:减少因时延差异导致的采样错误,提升链路可靠性。
  • 支持多通道聚合:在x4/x8/x16等高宽度链路中,Deskew是保证通道间协同工作的必要条件。

3. 实现机制

(1) 硬件级补偿

  • 延迟线(Delay Line):在接收端为每个通道插入可调延迟电路,补偿通道间时延差异。
  • 同步FIFO:通过缓冲和时钟调整实现多通道数据对齐(如搜索结果中提到的同步FIFO方案)。
  • 均衡器(Equalizer):在Gen3及以上版本中,通过预加重/后均衡调整信号幅度和相位,间接优化时延一致性。

(2) 协议级协商

  • LTSSM配置阶段:在Polling和Configuration状态中,链路两端交换通道特性信息(如延迟范围),协商Deskew参数。
  • 动态调整:在Recovery状态中,根据链路质量动态调整均衡参数或重新训练Deskew。

4. 在PCIe协议中的位置

  • 配置阶段(Configuration State):完成通道号分配后,启动Deskew流程,通过发送端和接收端的交互完成时延补偿。
  • 恢复阶段(Recovery State):链路异常时重新执行Deskew,适应环境变化或速率切换。

5. 典型应用场景

  • 长距离传输:如背板互连中,不同通道的PCB走线长度差异显著。
  • 高密度连接器:多通道连接器(如PCIe插槽)因插针位置不同引入时延差异。
  • 多芯片级联:级联系统中,各芯片间的信号路径差异需通过Deskew补偿。

6. 设计挑战

  • 动态范围要求:需覆盖从几纳秒到几十纳秒的时延补偿范围。
  • 功耗与面积:硬件补偿电路(如延迟线)需兼顾低功耗和小型化。
  • 高速适应性:在Gen4/Gen5(16GT/s及以上)中,需应对更严格的时序容差。

7. 实际案例

  • 同步FIFO方案:在接收端为每个通道配置FIFO,通过时钟相位调整对齐数据(参考)。
  • 自适应均衡:Gen3及以上版本通过动态调整均衡参数间接优化Deskew效果。

总结

去偏斜是PCIe多通道链路稳定性的核心保障机制,通过硬件补偿与协议协商的结合,解决了物理层信号传输中的时延差异问题。其设计需综合考虑链路长度、速率、环境因素及功耗限制,是PCIe高速互连技术中不可或缺的一环。


   
 

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐