PCIE调试笔记理解--LTSSM

本文详细解析了PCIE链路训练的过程,包括链路初始化与训练的基本概念、不同状态之间的转换逻辑,以及各状态的具体行为如Detect、Polling、Configuration和L0等。特别关注了Detect状态的检测原理与问题解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考大佬:https://blog.csdn.net/zhuzongpeng/article/details/78995340

参考大佬:https://blog.csdn.net/zhuisuitong6951/article/details/105983674?utm_medium=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~default-16.baidujs&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~default-16.baidujs

PCIE硬核内部使用了Serdes实现了高速数据传输,在可以正常通讯之前必要要进行链路初始化与训练(Link initialization & training),链路初始化与训练是完全有FPGA内部IPcore自己完成的(链路初始化与训练类似于xilinx selectIO 调节Tap和bitslish),理论上用户不需要做处理(是否有操作详见IPcore规格书)。LTSSM在PCIE结构中位置

3

LTSSM状态机涵盖了11个状态,包括Detect,Polling,Configuration,Recovery,L0,L0s,L1,L2,Hot Reset,Loopback,Disable,逻辑转换关系如下

 这11个状态大致可以分成4大类。Detect->Polling->Configuration->L0. L0是PCIe链路可以正常工作收发TLP包的状态。

Detect

检测原理:通过集成在发送器Transmitter中接收器检测receiver detection电路实现,电路的功能在于检测接收器等效对地阻抗Zrx是否在40~60Ω之间,当对端设备灭有插入或者PCIE链路芯片在复位或者为上电等异常状态下其阻抗也会呈现开路状态。

这是物理层的初始状态,仅在Gen1 2.5 GT/s速率下使用,或是从数据链路层转换而来,或是在reset之后,或者从其他状态(Disable, Polling, Configuration,Recovery等)转换。总之,Detect状态是PCIe链路训练的开端。因为在这个状态时,发送端TX需要检测接收端RX是否存在且(TX和RX是相对的,连接的两个设备都相互检测)可以正常工作,如果检测正常,才能进入其他状态。Detect状态主要包含了两个子状态:Detect.Quiet和Detect.Active.

1)从其他状态或者Reset之后,处于Detect.Quiet,TX处于Electrical Idle状态(Electrical Idle状态指的是发送器D+和D-保持在同一个恒定电平下,接收器差分信号两端电压都是0V),LinkUP清零。当超过12ms或者所有Lane均退出Electrical Idle时,则从Dectect.Quiet转换进入Detect.Active。

(2)Detect.Active在这个状态Detect.Active就会开启检测RX工作。判断RX是否存在就是通过Detect logic电路比较RC时间常数的大小: RX不存在,RC时间常数比较小,反之,RC时间常数比较大。如果所有的未配置Lane都检测到接收器的存在,设备立马进入Polling状态。如果所有Lane都没有检测到接收器存在则进入Detect.Quiet状态(一个Lane指的是一组发送差分信号和一组接收差分信号)。一个Lane检测到了设备在位,但也有未配置的Lane未检测到接收器在位。此情况下回首先等待12ms,然后再次进行接收器在位检测。如果检测结果与上次一致,且检测到在位的Lane可以组成1个或多个Link,则设备进入Polling状态。(那么如何判断能否组成Link呢?这主要看设备的特性。Link指的是设备到设备的一个链接,一个Link可以是X4链路宽度,则指的是4个Lane组成该链路。如果一个设备有4个Lane,那么一种可能其只支持1个Link,即只有一个控制器,此时若只有Lane 0检测到接收器在位,那么可以形成一个X1宽度的Link,而若只有Lane 1检测到接收器在位,那么久无法形成Link,设备就会退回到Detect.Quiet子状态。如果这个设备支持4个Link,那么设备就可以协商成4个X1的链路,此时只有Lane 1检测到接收器在位也可行形成1个Link,设备会进入Polling状态。链路两端的设备LTSSM是独立运行的,所以有时两端设备所处的状态会出现不一致的现象。例如上文的例子,链路两侧的设备都是X4且都检测到了Lane 1接收器在位,但是一个只支持1个Link而另一个可以支持4个Link,此时现象回事一个回到Detect.Quiet子状态而另一个会进入Polling状态。两个设备的训练状态机会独立运行同时又互相影响,因此常常需要从两个角度去分析才能找到定位问题的线索)

 

 

只有TX和RX所有lane均检测到对端存在设备,则进入Polling,其他没有检测成功的lane进入Electrical Idle,一条lane也没有则回到Quiet。

Detect可能遇到的问题

各种原因导致连接断开或者连接不良会导致Delect出现异常,使得链路卡在Detect状态。表现在数据链路上是发送信号线上都是0V电平或者24ms间隔的脉冲信号(24ms是由Detect.Quiet子状态的12ms超时和Detect.Active状态中等待12ms组成)。

1、物理连接

这种情况多数是电容失效导致的,失效后短路、断路或容值偏移都会导致检测不到对端在位;另外连接器装配、芯片焊接不良也有可能出现此现象

2、对端设备处在复位或断电状态下,或是PCIe控制器未配置或使能,则会检测不到接收器在位。在FPGA使用PCIe IP核的情况下,大量配置需要编程人员调整。其中检测接收器在位的阈值寄存器在默认值不合理的情况下则会导致误判为接收器不在位。默认值是经过大量验证的,一般情况下不会出现这种情况。

当出现Detect相关问题,首先排除两端电源,复位,时钟状态。其实排查链路是否有失效器件或者连接器问题。当都难以判断的时候是可以尝试在耦合电容连接接收器的一侧接50Ω电阻到GND,若此时设备可以通过Detect到达Polling状态或之后的状态,则基本可以确定问题在对端设备或是耦合电容之后的链路中。在耦合电容后接电阻到GND后,可以保证在位检测电路可以正常检测到接收器在位,因此若设备正常则会进入到下一个状态。反之如果操作之后还是卡在Detect状态,则需要仔细排查本端设备的问题。

Polling

进入这个状态后,TX和RX之间通过发送TS1、TS2和OS序列来确定Bit Lock、Symbol Lock和Lane极性反转问题。

Bit Lock: 在Bit传输过程中,RX PLL锁定TX Clock频率,这个过程称为RX实现"Bit Lock"。

Symbol Lock: RX端串并转化器知道如何区别一个有效的10-bit Symbol,这个过程称为“Symbol Lock”. 这里用到的是COM控制符。

Polling状态主要包含了三个子状态:Polling.Active, Polling.Configuration, Polling.Compliance.

Polling.Active::这是从这是链路从Detect退出后进入的状态,在这个状态下,发送端需要在所有Lane至少发送1024个TS1序列,因为接收端需要通过接收到的TS1序列来实现Bit/Symbol Lock. 由于发送端和接收端不是同时退出Detect状态,所以,TS1序列交流可能不会同步。此时,链路出于Gen1(2.5GT/s), Symbol time=4ns(10b/2.5Gb/s), 发送1024个TS1序列(16 symbols)至少需要64us(1024*16*4ns).

Polling.Configuration: 当发送端TX发送完至少1024个TS1并且接收端RX连续收到8个TS1或者TS2,此时TS1和TS2中的Link/Lane区域由PAD填充, 那么,链路进入Polling.Configuration状态。处于此状态,发送端停止发送TS1序列,改为发送TS2序列,此时Link/Lane区域仍然由PAD填充,这个过程也会完成极性反转的问题,为进入下一个状态作准备。

Polling.Compliance: 这个状态主要是通过发送不同的Pattern来测试发送端以及设备连接是否符合Spec要求。

 

Configuration

这个状态工作就是通过发送TS1、TS2来确定Link/Lane number。

Link Number Negotiation:Downstream在TS1中设定Link number, 此时Lane number=PAD,并发送给Upstream. 而Upstream回的第一个TS1中,Link num仍然是PAD。此时,Upstream也处于Configuration.LinkWidth.Start状态。之后Upstream回的TS1中Link number则是设定值,此时, Upstream率先进入Configuration.LinkWidth.Accept状态。到这里,Link Number Negotiation就完成了。

Lane Number Negotiation:当Downstream看到Upstream返回的TS1中Link number已经是设定值,那么就认为Link num已经协商成功,然后就开始准备设定Lane number,此时Downstream链路也接着进入Configuration.LinkWidth.Accept状态. 由于在录这个Trace时有过滤重复的TS序列,所以,我们看到一个TS1序列对应了三个状态:Configuration.LinkWidth.Accept,Configuration.LaneNum.Wait,Configuration.LaneNum.Accept. 这个三个状态发送的TS1序列一样,Link number和Lane number都已设定。当Upstream收到Downstream设定Lane number的TS序列之后,也很快进入了Configuration.LaneNum.Accept状态。

Confirm Lane/Link Number:双方通过发送TS2序列,对之前设定的Link/Lane number进行确认,这个过程,LTSSM处于Configuration.Complete. 确认没有问题之后,就准备进入下一个状态L0。

 

L0

进入这个状态时,PCIe链路就可以愉快的开始正常工作了。这个状态可以传输TLP,DLLP等报文。

 

LTSSM其他状态可以去看看文章刚开始大佬的链接

 


 

### PCIe VTX-DIFF-PP 的定义及作用 #### 定义 PCIe VTX-DIFF-PP 是指 PCIe 发射器输出的差分信号峰峰值电压。该参数用于定义发射器在差分模式下生成的信号幅度,是衡量 PCIe 信号完整性的重要指标之一[^1]。具体而言,VTX-DIFF-PP 表示 PCIe 差分对中 D+ 和 D- 信号之间的电压差的最大值和最小值之差。 #### 技术细节与规范 根据 PCIe 规范,发射器的差分电压必须满足特定范围以确保信号完整性和兼容性。例如,在 PCIe 5.0 中,VTX-DIFF-PP 的典型值为 200 mV 至 400 mV,具体取决于链路速率和电气环境[^2]。这一范围的设计目的是为了平衡功耗、噪声容忍度以及接收器的检测能力。 差分信号的优点在于其抗干扰能力较强,因为差分对中的两个信号(D+ 和 D-)相互抵消了共模噪声的影响。因此,VTX-DIFF-PP 的精确控制对于减少误码率(BER, Bit Error Rate)至关重要。 ```python # 示例代码:计算差分信号峰峰值电压 def calculate_vtx_diff_pp(v_pos_peak, v_neg_peak): """ 计算 PCIe 差分信号的峰峰值电压 :param v_pos_peak: 正信号的峰值电压 :param v_neg_peak: 负信号的峰值电压 :return: 差分信号峰峰值电压 """ vtx_diff_pp = abs(v_pos_peak - v_neg_peak) return vtx_diff_pp # 示例输入 v_pos_peak = 0.3 # 单位:伏特 v_neg_peak = -0.1 # 单位:伏特 # 计算结果 result = calculate_vtx_diff_pp(v_pos_peak, v_neg_peak) print(f"VTX-DIFF-PP: {result} V") ``` #### 作用 VTX-DIFF-PP 的作用主要体现在以下几个方面: - **信号完整性**:通过设定合适的差分电压范围,确保信号在传输过程中保持清晰可辨,避免因过低或过高的电压导致的误码。 - **兼容性**:符合 PCIe 标准的 VTX-DIFF-PP 值能够保证不同设备之间的互操作性,尤其是在多代 PCIe 设备混用的情况下。 - **功耗优化**:较低的 VTX-DIFF-PP 值有助于降低功耗,这对于高性能计算和移动设备尤为重要[^3]。 #### 测试与验证 在实际应用中,VTX-DIFF-PP 的测试通常通过示波器或其他专用测试设备完成。测试过程包括以下关键步骤: - 测量发射器输出的 D+ 和 D- 信号的峰峰值电压。 - 确保测量值落在 PCIe 规范规定的范围内。 - 评估信号在不同负载条件下的稳定性。 此外,发射器的共模电压调整也会影响 VTX-DIFF-PP 的表现,因此需要同时满足 VTX-RCV-DETECT 参数的要求,并遵循表 8-10 中关于 ZRX-HIGH-IMP-DC-POS 和 ZRX-HIGH-IMP-DC-NEG 的限制[^1]。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值