PCIe LTSSM(链路训练状态机Link Training and Status State Machine)

PCIeSSD在初始化时通过LinkTraining和LTSSM自动完成链路速率、信号质量和宽度的调节。LTSSM包括Detect、Polling、Configuration和Recovery等状态,确保位锁定、字符锁定和块对齐。PCIe3.0及以上版本在Recovery状态执行EqualizationProcedure,通过Phase0至Phase3优化信号质量。BypassingEqualization在PCIe5.0中引入,以加速高带宽链路的初始化过程。

还可以参考另一篇文章:

PCIe PHYMAC--LTSSM详细讲解_pcie协商过程_maxwell2ic的博客-CSDN博客Phy layer框图Byte striping of Tlp(transaction layer package),dllp(data link layer package),os(ordered set)下面是典型的tlp,dllp,os的格式。LtssmDetect检测电气连接Pipe_txdetrx,差分线波形检测端接阻抗,以确定是否有电气连接Polling实现bit lockPolling.active tx在gen1速率下至少发1024个ts1,让对端rx实现b_pcie协商过程https://blog.csdn.net/maxwell2ic/article/details/119855307

接口速度决定SSD的性能上限。如今,PCIe SSD正全面进入PCIe 4.0时代,并向速度更快的PCIe 5.0进发。为避免PCIe链路以较低的速率工作导致PCIe SSD性能下降(如PCIe 4.0的SSD以PCIe 1.0速率工作),自PCIe 2.0开始,PCIe SSD在初始化过程中,会在链路训练(Link Training)阶段进行链路信号质量、速率、链路宽度的调节,它由链路训练状态机(Link Training and Status State Machine,以下简称LTSSM)自动完成。

PCIe链路训练过程

LTSMM的主要状态(From PCIe Spec)

如上图所示,LTSSM一共有11个状态,当系统启动或复位等情况发生,PCIe会从Detect开始,经Polling、Configuration进入L0,并正式开始用户指令和数据的传输。

Detect:LTSSM的入口状态,当Downstream Port检测到PCIe对端设备(Upstream Port,如PCIe SSD)存在后,就会往下进入Polling状态。

Polling:链路两端设备建立“无障碍”通信过程,通过相互发送TS报文以完成Bit Lock、Symbol Lock或Block Alignment、信号极性翻转等操作。

1) Bit Lock:位锁定,准确识别出数据流中的0和1;

2) Symbol Lock:字符锁定,适用于PCIe 1.0和PCIe 2.0,确定每个字符的开始与结束;

3) Block Alignment:块对齐,适用于PCIe 3.0、PCIe 4.0、PCIe 5.0和PCIe 6.0,利用EIEOS(Electrical Idle Exit Ordered Set)来获取Block Sync Header的位置。

Configuration:链路两端设备确定链路宽度、分配通道号,以及通道对齐的过程。如确定PCIe SSD是以PCIe x4还是PCIe x8的链路宽度工作,并让这些链路协同起来。该过程同样通过TS报文完成。

在首次进入L0的过程中,PCIe设备始终工作在2.5GT/s的传输速率。在首次进入L0后,如果PCIe两端设备均支持更高的速率,则会进入Recovery状态。该状态允许设备变更信号的传输速率,重新进行Bit Lock、Symbol Lock或Block Alignment、信号极性翻转等操作,并进行信号质量的调节。此外,当设备从L0s、L1状态退出,以及链路出现错误等情况发生时,也会进入Recovery状态。

对PCIe 2.0来说,由于信号速率相对较低,它只需要在首次进入L0后,再以5GT/s的速率重新进行Bit Lock、Symbol Lock、信号极性翻转等操作,即可满足速率和信号质量的要求。

而对于PCIe 3.0和更高速率来说,则需要在Recovery状态进行名为“Equalization Procedure”的均衡过程。此过程中PCIe链路两端端口——Downstream Port(主机)和Upstream Port(如PCIe SSD)会通过TS报文相互协商信号参数,以达到最佳的链路状态。

(from PCI-SIG)

TS报文(Training Sequence)是PCIe设备进行链路训练的重要依据,如前面提到的位锁定、字符锁定、块对齐、通道号等。TS报文中的Symbol 6到Symbol 9包含了均衡过程所需的重要物理层参数设定,如Tx预设,FS、LF或Pre-Cursor、Cursor、Post-Cursor等,它们都是影响信号质量的重要参数,可在提高信号速率的同时,降低误码率。

TS数据报文构成(From Mindshare PCI

Equalization Procedure详解

Equalization Procedure分为4个阶段,Phase 0至Phase 3,具体流程如下:

2.5GT/s切换到8GT/s流程示例(from PCI

Phase 0

以上图为例,当Downstream Port(主机)准备从2.5GT/s切换到8GT/s时,它就会向Upstream Port(如PCIe SSD)以2.5GT/s速率发送带有起始预设的TS2数据报文。Upstream Port在接收到该报文后会按照要求设置自己的预设参数,然后发送TS1报文给Downstream Port。

例外情况:当链路重新进行均衡,PCIe两端设备已经处在最高速率状态,此时不需要经过Phase 0,而是直接进入Phase 1;对于速率更高的PCIe 6.0,则需要从32GT/s速率重新进行均衡。

Phase 1

在Phase 1阶段中,Upstream Port和Downstream Port通过交换FS、LF信息,来确定Tx系数的上限和下限——Downstream Port在接收到Upstream Port发来的TS1报文后,会进入到Phase 1并以8GT/s发送EC = 01b的TS1报文;Upstream Port会评估接收到的信号,一旦能够识别到2个连续的8GT/s的TS1报文(这意味着误码率已经低于10-4),也会进入到Phase 1,开始以8GT/s的速率发送EC = 01b的TS1报文。Downstream Port在接收到Upstream Port发出的EC=01b的TS1报文后,表明初步的提速和信号优化工作已经完成。

Phase 2 和 Phase 3(可选)

接Phase 1:当Downstream Port接收到Upstream Port发出的EC=01b的TS1报文后,会进入Phase 2阶段,开始发送EC=10b的TS1报文;当Upstream Port也回复了EC=10b的TS1报文,表明两个Port都进入了Phase 2。

在Phase 2阶段中,将进行Downstream Port的信号质量优化工作,降低链路的误码率:Upstream Port会要求Downstream Port进行Tx参数,如boost、pre-shoot、de-emphasis的设定,以满足Upstream Port端对于信号电气质量的要求。

Downstream Port在接收到请求后会进行相应设定并发送TS1报文,Upstream Port在接收到报文后会对其信号质量加以评估,如果误码率无法满足小于10-12,则会向Downstream Port提出新的Tx参数设定,如此往复,直到Downstream Port的信号质量能够满足要求。

在Phase 3阶段中,将进行Upstream Port的信号质量优化工作,方法和Phase 2相同:Upstream Port按照Downstream Port提出的参数设定自己的Tx参数,然后发送TS1报文。Downstream Port评估接收到的TS1报文是否满足小于10-12误码率,如果不满足则提出新的Tx设定请求,如此往复,直到Upstream Port的信号质量能够满足要求。

至此,均衡过程的4个阶段就都完成了。需要指出的是,Phase 2和Phase 3是可选的,如果跳过这两个阶段,会加速PCIe链路的初始化,但会以数据准确性为代价。

Bypassing Equalization

一般来说,PCIe链路速率达到PCIe 3.0之后,如果链路两边端口都支持PCIe 4.0,那么可以再进行一次均衡过程。

但是,随着速率级别的越来越高,如果始终以一级一级的提速方式进行均衡,无疑会浪费大量的时间,并让初始化过程变得冗长。

Bypassing Equalization流程(from PCI

在PCIe 5.0规范中,加入了Bypassing Equalization功能(如上图所示),如果链路两端设备均支持该能力,那么可以跳过中间态,直接进行32GT/s的均衡过程,并达到最高速率和信号质量,即2.5GT/s、5GT/s → 32GT/s;如果Bypassing Equalization失败,则需要一级一级向上训练,直到达到最高速率。

而对于PCIe 6.0,则需要经过32GT/s中间态,可由2.5GT/s或5GT/s,经32GT/s再提升至64GT/s。

### PCIe LTSSM状态机详解 PCIe(Peripheral Component Interconnect Express)的LTSSMLink Training and Status State Machine链路训练与状态状态机)是物理层中负责初始化和维护链路的关键模块。以下是关于LTSSM状态机的详细解析以及常见问题解决方案。 #### 1. LTSSM状态机概述 LTSSM是一个有限状态机,用于管理PCIe链路从初始状态到完全激活状态的过程。它确保两个设备之间的链路能够正确建立并保持稳定。整个状态机分为多个阶段,每个阶段都有特定的功能和行为[^1]。 #### 2. 主要状态及功能 以下是LTSSM的主要状态及其功能描述: - **Detect**: 系统上电后进入的第一个状态,在此状态下检测是否存在对端设备。 - **Polling**: 在此状态下,发送Polling符号以尝试与对端建立连接。如果成功接收到对端的Polling响应,则进入下一状态。 - **Configuration**: 配置链路宽度和速率。在此状态下,双方协商链路的参数,例如通道数和传输速率。 - **L0s Entry / L0s Exit**: 这些状态用于低功耗模式下的进入和退出操作。L0s是一种非常低延迟的低功耗状态。 - **Recovery**: 当链路出现错误时进入此状态,尝试恢复链路而不需重新进行完整的链路训练。 - **Hot Reset**: 此状态用于热复位操作。当交换机或网桥传播热复位信号时,下游端口会被引导至此状态[^2]。 - **L1 Entry / L1 Exit**: 进入和退出L1低功耗状态。L1比L0s更低功耗但延迟更高。 - **Active**: 链路完全激活并可以正常传输数据的状态。 #### 3. 常见问题及解决方案 ##### (1) 链路无法进入Active状态 **原因**: 可能是链路训练失败或配置参数不匹配。 **解决方案**: 检查双方设备支持的链路速率和宽度是否一致,并确保正确的时钟和电源供应。 ##### (2) 数据包丢失或重传 **原因**: 接收端未能及时确认已接收的数据包。 **解决方案**: 根据ACKD_SEQ和NEXT_TRANSMIT_SEQ检查未确认的数据包范围,并确保序列号计算正确[^3]。 ##### (3) 热复位后链路无法恢复 **原因**: 热复位过程中可能未正确引导下游端口进入Hot Reset状态。 **解决方案**: 确保上游端口正确地将下游端口引导至Hot Reset状态,并在复位完成后立即开始链路训练。 #### 4. 示例代码:模拟LTSSM状态转移 以下是一个简单的Python代码示例,用于模拟LTSSM的基本状态转移逻辑: ```python class LTSSM: def __init__(self): self.state = "Detect" def transition(self, event): if self.state == "Detect" and event == "device_detected": self.state = "Polling" elif self.state == "Polling" and event == "polling_response_received": self.state = "Configuration" elif self.state == "Configuration" and event == "parameters_configured": self.state = "Active" # Add more state transitions as needed ltssm = LTSSM() ltssm.transition("device_detected") print(f"Current State: {ltssm.state}") # Output: Current State: Polling ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值