本章节我们以gen4 Endpoint为例介绍PCIe ltssm(链路状态机)协商过程。
正常PCIe设备链路状态跳变为 detect-->polling-->configuration-->L0(gen1)-->recovery-->L0(gen3)-->recovery-->L0(gen4)。
需要注意的是在进入configuration状态之前,因为物理层还未收到有效数据(例如在PIPE接口的时钟pclk稳定之前),ltssm会在detect和polling之间反复跳转。
链路状态机首次进入L0时是2.5 GT/s速率,接着从L0进入recovery(步骤4)状态,在recovery状态将速率切换到8 GT/s,然后再回到L0(步骤5),接着从gen3 L0跳转到recovery状态(步骤6),在recovery状态将速率切换到16 GT/s,然后再回到gen4 L0(步骤7),至此链路协商已完成,后续使用DLLP完成credit初始化后就能发送TLP了。
1.Detect
detect目的是检测对端设备是否存在。
1.1.Detect.Quiet
Detect.Quiet 状态是上电、复位(Function Level Reset 除外)、power‐up event之后进入的初始状态。
设备发送侧逻辑Transmitter 处于 Electrical Idle state.
Detect.Quiet 状态下,默认使用 2.5 GT/s 的数据传输速率。
物理层状态信号LinkUp = 0通知数据链路层当前链路无法正常工作
之前已更新的均衡(equalization )状态会被清零
何时进入Detect.Active?
在Detect.Quiet状态超过12ms或者任意lane退出了Electrical Idle,则会进入Detect.Active
如何进入Detect.Quiet 状态?
ltssm可以从Disabed、Loopback、L2、Polling、Configuration 或者 Recovery 状态进入 Detect.Quiet 状态。
1.2.Detect.Active
只有从Detect.Quiet才能进入Detect.Active。在Detect.Active状态,使用Receiver Detection机制检测是否存在对接的lane。发送侧通过改变共模电压检测对端是否存在对接设备,如果链路如果存在对接设备,则电压变化较慢,反之,则电压变化很快。
- 进入 “Detect.Quiet”
如果任意lane均没有检测到对端设备,则等待12ms后,进入Detect.Quiet
- 进入“Polling State”
如果在所有lane均检测到对端设备,则进入polling状态。
只有部分lane检测到对端设备
- 等待12ms,再执行一次Receiver Detection,如果检测结果与首次检测结果相同则进入polling状态,否则进入Detect.Quiet
2.Polling
在此状态,端口TX逻辑发送TS1 和 TS2 Ordered Sets(2.5 GT/s)、RX逻辑接收TS1 和 TS2 Ordered Sets(2.5 GT/s)
通过接收到的 TS1 和 TS2 序列,完成如下操作:
- 完成bit lock、
- 完成Symbol lock 或者 Block Lock
- 完成Lane polarity配置
Gen4协商过程在此状态会依次经过Polling.Active和Polling.Configuration。在Polling.Active阶段,完成bit lock、Symbol lock,在Polling.Configuration阶段完成Polarity Inversion。
3.Configuration
发送逻辑 TX 和 接收逻辑 以在 2.5 GT/s 的速度交换 TS1 和 TS2 Ordered Sets,完成如下功能
- Determine Link width
- Assign Lane numbers
- Optionally check for Lane reversal and correct it
- Deskew Lane‐to‐Lane timing differences
Endpoint设备在gen4链路协商过程中在Configuration状态经过的子状态分别是CFG_LINKWIDTH_START、CFG_LINKWIDTH_ACCEPT、CFG_LANENUM_WAIT、CFG_LANENUM_ACCEPT、CFG_COMPLETE和CFG_IDLE。
因为有些PCIe port支持bifucation,可以同时对接多个PCIe设备,因此需要在CFG_LINKWIDTH_START和CFG_LINKWIDTH_ACCEPT阶段确认Link width,而很多PCIe设备支持lane reversal并且支持部分lane对接设备(例如:x16lane的PCIe设备可以使用lane4~lane7 对接一个x4的PCIe设备)因此需要在CFG_LANENUM_WAIT和CFG_LINKWIDTH_START阶段确认有效的lane number。PCIe设备在CFG_COMPLETE阶段通过TS2确认已协商好的 Link width和Lane numbers并且完成lane deskew,最后在CFG_IDLE阶段发送Idle data,然后进入L0。
4.Recovery
在recovery状态可以实现如下功能:
- change the data rate
- 例如从2.5 GT/s切换到8GT/s、从8GT/s切换到16 GT/s
- re-establish bit lock, Symbol lock or Block alignment
- Lane-to-Lane de-skew
- Equalization Complete
从L0进入Loopback、Disabled和Hot Reset状态都需要先进入Recovery
例如从L0开始重新协商有效lane数量,则首先进入recovery再进入Configuration
8GT/s及其以上速率,均衡(Equalization )是非常重要的步骤,能够有效保证高速通信过程中的信号质量,均衡的协商在Recovery.Equalization状态完成。
Recovery.speed状态用于完成速率切换
Recovery.RcvrLock阶段完成bit lock、完成Symbol lock 或者 Block Lock
Recovery.Rcvrcfg: 通过TS2 协商speed change or link width change、指定均衡阶段需要使用的init Preset
5.L0
L0正常工作状态,可以发送TLP
作者: IC小鸽
文章来源: IC小鸽
推荐阅读
- SystemVerilog/Verilog中的各种延迟模型
- PCIe 复位:必须了解的PERST#
- 讲个SystemVerilog随机约束小坑
- ARM V2处理器微架构介绍
- PCIe 复位:hot reset
更多IC设计干货请关注IC设计专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。