【UCIe】UCIe PHY LSM 介绍

简介: 【UCIe】UCIe PHY LSM 介绍

1. PHY LSM 简介


 UCIe LSM,全称 Link State Machine,链路状态机。UCIe 采用分层的 LSM,包括 FDI LSM、RDI LSM 及 PHY LSM。其中 FDI/RDI LSM 主要用于 UCIe 链路管理,PHY LSM 主要用于 UCIe 链路初始化及训练。PHY LSM 状态转移图如图 1 所示,接下来讲讲 PHY LSM。


373b63f6d2084bd4838d38115b2f16fd.png


▲图 1:UCIe PHY LSM 状态转移图


 UCIe PHY LSM 包含 10 大主状态,各状态及主要功能如下所述:


   RESET,复位状态,是系统复位后或 UCIe 退出 TRAINERROR 后的状态。


   SBINIT,Sideband 初始化,在该状态对 Sideband 进行初始化,选择可用的 SB Lane。


   MBINIT,Mainband 初始化,在该状态对 Mainband 进行初始化、修复坏的 MB Lane。该状态下 Mainband 处于最低速。


   MBTRAIN,Mainband 训练,在该状态对 Mainband 的 Clock、Valid、Data 等 Lane 进行训练,使得 UCIe 链路工作在链路两端设备协商好的最高速或协商速率之下物理所能达到的最高速。跟 PCIe 不同,PCIe 是从 Gen1 最低速开始一点点往最高速进行训练的,但 UCIe 除了在初始化的时候为最低速,其在 MBTRAIN 状态对 Mainband 进行训练时一次切速到最高速进行训练,训练失败的话再进行降速或者减宽。


   LINKINIT,链路管理状态,用以 D2D Adapter 完成初始链路管理。该状态时,进行 RDI Bring Up。


   ACTIVE,UCIe 的正常工作状态,该状态时进行 Mainband 的数据传输,对应 PCIe 的 L0 状态。


   L1/L2,低功耗状态,处于这两种状态下的 UCIe Module 功耗较低,处于 L2 状态的 UCIe Module 比 L1 睡眠程度更深、功耗更低。L1 可以直接退出到 MBTRAIN 状态,免去 SBINIT 及 MBINIT 的过程,但 L2 只能退出到 RESET 状态,重新进行链路的初始化。

   PHYRETRAIN,需要重新对链路进行链路初始化及训练时,进入该状态。


   TRAINERROR,链路训练失败后进入该状态。


 在 PHY 的初始化及训练过程中,Sideband、Mainband 是分开进行初始化和训练的。首先对 Sideband 进行初始化,使 Sideband 进入正常工作状态,便于后续初始化及训练过程中在 UCIe Link 上传递 Sideband Msg;然后进行 Mainband 初始化,UCIe Link 两侧的 Module 进行参数交换及协商、链路修复等工作,使 Mainband 能够工作在最低速(4 GT/s)。


接下来对 Mainband 进行训练,进行电气参数调整、切速等工作,使 Mainband 工作在最高传输速率。Mainband 训练完毕后,进行 RDI Bring Up,最后 PHY LSM 进入 Active 状态,完成链路初始化及训练过程。





1.1 Timeout 机制


 PHY LSM 所有状态(子状态)中,除了 RESTE 和 TRAINERROR 之外,其他所有状态都有个 8ms 超时退出的机制。这里的 8ms 超时退出是针对子状态或不含子状态的主状态而言的,且 8ms 计数器会在收到远端发来的 Stall Sideband Message 后重置。若 LSM 在某个状态持续时间超过 8ms 且计数器没有被重置,则状态跳转至 LINKTRAINERROR,并最终进入 RESET 状态。



2. PHY LSM 状态介绍


2.1 RESET


 每次进入 RESET 状态,至少应停留 4ms。这 4ms 主要是用来等待 PLL 稳定的,只有在满足一定的电气及软件条件之后才能进入下一状态。满足以下 所有 条件时方能进入 SBINIT 状态:


   供电稳定


   Sideband Clock 800 MHz 稳定可用


   Mainband 及 D2D Adapter 的 Clock 稳定可用


   Mainband 时钟置为最低 IO 速率(2 GHz,对应 4 GT/s)


   SoC 或 Firmware 未请求 PHY 留在 RESET 状态


   链路训练被触发



2.1.1 触发链路训练的条件


 符合以下 任一 情况,即可认为触发了链路训练:


   软件将 UCIe Link Control 寄存器 Link Training 位置一。


   Adapter 触发 RDI 链路训练。


   Sideband 接口上连续接收到两笔 SBINIT Pattern (64 UI Clock + 32 UI Low)。




2.2 SBINIT


 SBINIT 期间涉及到的 Sideband Msg 及 Pattern:


   SBINIT Pattern,64UI Clock Pattern + 32UI Low x2


   {SBINIT Out of Reset}


   {SBINIT done req}


   {SBINIT done resp}


 SBINIT 期间,Tx 在 SB Data Lane (Normal & Redundant for Advanced)上 同时发送 Clock Pattern,Rx 在检测到连续 2 个 Clock Pattern 后即表示检测成功。此后,其 Tx 继续发送 4 个 Clock Pattern,然后停止发送 Clock Pattern。接下来应该是要继续连续发送 {SBINIT Out of Reset} 了。


 举个例子:Module 1 发送 Clock Pattern 给 Module 2,Module 2 收到了,并停止了发送 Clock Pattern,转而发送 {SBINIT Out of Reset}。若此时 Module 1 并没有收到 Module 2 的 Clock Pattern,该怎么办?是否有可能收不到 Clock Pattern 但能收到 {SBINIT Out of Reset}? ——是不可能跳过 Clock Pattern 直接收到 {SBINIT Out of Reset} 的。


对端在发送 {SBINIT Out of Reset} 之前肯定已经检测到了我方发给它的 Clock Pattern,其也正在发送 Clock Pattern 给我方。若我方收不到对方发来的 Clock Pattern,说明 Sideband Lane 是坏的,不能说一会儿坏一会儿好。如果是对端到我方的 TXSB 坏了,那我方一直收不到 Clock Pattern,会进 TRAINERROR 的。


 两种封装形式下 SBINIT 稍有不同,先进封装的 SBINIT 比标准封装多了 Sideband 时钟数据线选择这一步,需要在初始化期间选择最终要用的 SB Lane。



2.3 MBINIT


 MBINIT 分为 6 个子状态,如图 2 所示,先后依次执行。在 MBINIT 期间,进行 Mainband 初始化、修复或减宽。6 个子状态中 Lane Repair 仅适用于先进封装的 UCIe Module。Mainband Lane 的检测跟 Sideband 稍有不同,Sideband 是在 Clock、Data Lane (Normal & Redundant for Advanced) 上同时发生 Test Pattern,而 Mainband 是按照 Clock、Track、Valid、Data 依次测试,且 Normal Lane 与 Redundant Lane 也是依次进行测试的。


cf48919ff42a43d0bc6cd8c027a4718e.png


▲图 2:UCIe PHY LSM 的 MBINIT 子状态转移



2.3.1 MBINIT.PARAM


 MBINIT.PARAM 期间,链路两端的 UCIe Module 进行参数交换,以协商链路速度、链路宽度及其他 PHY 相关参数。交换的参数主要有:


   Voltage Swing


   Maximum Data Rate


   Clock Mode


   Clock Phase


   Module ID


 协商以上参数涉及到的 Sideband Message:


   {MBINIT.PARAM Configuration Req}


   {MBINIT.PARAM Configuration Resp}



2.3.2 MBINIT.CAL


 MBINIT.CAL 进行一些 Calibration 相关操作,比如 Tx 占空比校正、Rx 偏移及 Rx 参考电压 Vref 校正。涉及到的 SB Msg:


   {MBINIT.CAL Done Req}


   {MBINIT.CAL Done Resp}



2.3.3 MBINIT.REPAIRCLK


 对于先进封装,该状态下检测 Clock 及 Track 功能,存在问题时进行 Clock 及 Track Lane 修复;对于标准封装,仅检测 Clock 及 Track Lane 的功能。


Advanced Package


 每一根 Clock 或 Track Lane 先后独立进行检测,检测其是否存在短路或断路。这几条 Lane 的检测顺序为:TCKP_L -> TCKN_L -> TRDCK_L -> TTRK_L。这里为啥要检测 Redundant Lane?——要是常规 Lane 真出了问题,得保证 Redundant Lane 没问题啊。



 检测过程如下:


   检测之前,先通过 {MBINIT.REPAIRCLK init req}、{MBINIT.REPAIRCLK init resp} 进行握手。


   检测的时候,在 Clock 或 Track Lane 上发送 128 次特定格式的 Clock Repair Pattern (16 cycle pattern + 8 cycle low)。Tx 发送完 Clock Repair Pattern 后,发送 {MBINIT.REPAIRCLK result req} 给对方,请求对方反馈检测结果。


   Rx 该条 Lane 上连续收到 16 次即可认为该 Lane 完好。如若该 Lane 没有检测到,表明该 Lane 发生了断路;若该 Lane 及之外的 Lane 同时检测到了,表明发生了短路。检测完后将检测结果记录在相关寄存器中。


   Rx 在收到 {MBINIT.REPAIRCLK result req} 后通过 {MBINIT.REPAIRCLK result resp} 反馈结果给对方。


 经过以上检测步骤之后,有三种结果:


   Lane 功能正常,无需修复。


   需要修复且可以修复。 如果需要 Lane Repair 且可修复,则进行 Lane Repair 相关操作。Tx 发送 {MBINIT.REPAIRCLK apply req} 给对端,收到对端发来的 {MBINIT.REPAIRCLK apply resp} 后即可在 Tx 进行 Clock Lane Repair。Tx 修复完成后,需要检测下是否修复成功。检测时不检测 Redundant Lane 了,已经被占用了。检测过程如下:


       Tx 发送 {MBINIT.REPAIRCLK check repair init req} 给 Rx,Rx 收到 {MBINIT.REPAIRCLK check repair init req} 后回复 {MBINIT.REPAIRCLK check repair init resp}。


       Tx 收到 Rx 发来的 {MBINIT.REPAIRCLK checkrepair init resp} 后,按照 Clock Lane 检测程序走一遍。


   需要修复但无法修复。 考虑到只有一条 Redundant Lane,如果有 2 条及以上的 Clock Lane 有问题,那就不可修复了,则 Rx 进行相关握手跳至 TRAINERROR 状态。

 如果无需进行 Clock Lane Repair 或已经修复完毕且检测成功,发送 {MBINIT.REPAIRCLK done req},收到对端反馈的 {MBINIT.REPAIRCLK done resp} 后,状态机进入 MBINIT.REPAIRVAL 修复 Valid Lane。


Standard Package


 对于标准封装的 UCIe,MBINIT.REPAIRCLK 期间仅检测 Clock Lane 的功能,检测过程跟 Advanced 时的检测过程类似,只是没有 Redundant Lane 的检测过程。如果检测到某些 Clock Lane 有问题,则跳转到 TRAINERROR 状态,否则直接进入 MBINIT.REPAIRVAL 状态。



2.3.4 MBINIT.REPAIRVAL


 该过程检测 Mainband Data Valid Lane,若存在短路或短路,则进行修复。检测及修复过程跟 Clock/Track Lane 的过程类似,只是检测的 Lane、Pattern 及 Msg 稍有区别:


   检测的 Lane 有 TVLD_P 及 TRDVLD_P,先后依次检测。


   测试 Pattern 为 4 UI High + 4 UI Low。


   Msg 跟 Clock Repair Msg 类似,所有的 Msg 名称由 REPAIR 换成了 REPAIRVAL。



2.3.5 MBINIT.REVERSALMB


 只有在 Mainband 的 Clock 及 Valid Lane 能够正常工作的前提下,MBINIT.REVERSALMB 状态才有效,否则 Lane Reversal 是没有意义的。如有需要,该状态时进行 Lane 序重排。Lane Reversal 步骤如下:


   Tx 发送 {MBINIT.REVERSALMB init req} 到对端。


   若对端 Mainband Data Lane 准备好接受数据,则反馈 {MBINIT.REVERSALMB init resp}。


   本端收到 {MBINIT.REVERSALMB init resp} 后,每条 Data Lane 上发送携带有 Lane ID 的 Pattern,连续发送 128 次。


   对端收到带有 Lane ID 的 Pattern 后,跟本地 Lane ID 进行比较,将比较结果记录在相关寄存器中。


   本端发送 {MBINIT.REVERSALMB result req},请求对端反馈检查结果。


   对端通过 {MBINIT.REVERSALMB result resp} 反馈结果。


   考虑到可能有些 Data Lane 需要进行 Lane Repair,只要大部分 Lane ID 都是对的,就不用进行 Lane Reversal;若只有少部分对,则需要 Lane Reversal。


   若需要 Lane Reversal,则在 Tx 端进行 Lane Reversal,完成之后重新检查一遍。若 Lane Reversal 之后还是检查不过,那就是链路存在问题,进入 TRAINERROR 状态。


   若无需 Lane Reversal 或成功完成了 Lane Reversal,Tx 发送 {MBINIT.ReversalMB done req} 请求退出。


   对端回复 {MBINIT.ReversalMB done resp} 后跳转到 MBINIT.REPAIRMB 状态。



2.3.6 MBINIT.REPAIRMB


 MBINIT.REPAIRMB 状态下,对 Mainband Data Lane 的功能进行检测。若先进封装的 UCIe 出现坏 Lane,在修复能力之内时进行坏 Lane 修复,在修复能力之外时进入 TRAINERROR 状态。若标准封装的 UCIe 出现了坏 Lane,进行减宽操作。



2.4 MBTRAIN


 MBTRAIN 状态下对 Mainband 进行训练,将 UCIe 链路速度提升到双方协商好的最高速率,并调整 Clock 边沿到最佳采样时刻。对于较高的速率,还需要进行 Rx Clock Calibration、Tx/Rx Deskew 等操作以提高传输性能。


UCIe 链路两端的两个 UCIe Module 通过 Sideband 上的 Msg 进行握手来进入和退出各个子状态,如果进入某个子状态后不需要相关操作,可以退出去,但这个子状态还是要进来的。MBTRAIN 子状态转移图如图 3 所示。


af6364a0dba94390b1afd42bdb74c3dc.png

▲图 3:UCIe PHY LSM 的 MBTRAIN 子状态转移


 注意:在 MBINIT 的时候还是最低速,在 MBINIT.SPEEDIDLE 的时候就一把切到了协商好的最高速。如果一次 MBTRAIN 能够到最高速,那就一次齐活。如果最高速失败了,那就降速。


  在链路训练连续失败次数达到指定上限之后,LSM 回退到 RESET 状态,等待再次触发链路训练。若软件或 RDI 触发的链路训练失败,或 Link Up 转为 Link Down,物理层需要上报 RDI 的 Fatal Error。




目录
相关文章
|
安全 物联网 数据安全/隐私保护
深入理解AMBA总线协议(AXI总结篇)
深入理解AMBA总线协议(AXI总结篇)
1638 1
|
缓存 SoC
深入理解AMBA总线(八)AHB2APB同步桥设计
深入理解AMBA总线(八)AHB2APB同步桥设计
821 0
|
异构计算 SoC
深入理解AMBA总线(三)APB interconnect的补充
深入理解AMBA总线(三)APB interconnect的补充
310 0
|
芯片 流计算 内存技术
【UCIe】初识 UCIe
【UCIe】初识 UCIe
2394 3
【UCIe】初识 UCIe
|
固态存储
SATA系列专题之一:浅析Physical Layer物理层OOB信号
SATA信号链结的建立主要是靠OOB(Out Of Band)的检测实现的,并且向上层Link Layer提供了物理层的链结情况。
|
DataX 图形学
【UCIe】UCIe 物理层介绍(电气物理篇)
【UCIe】UCIe 物理层介绍(电气物理篇)
1699 0
【UCIe】UCIe 物理层介绍(电气物理篇)
|
数据格式 流计算
【UCIe】UCIe 协议层介绍
【UCIe】UCIe 协议层介绍
1351 0
【UCIe】UCIe 协议层介绍
【UCIe】UCIe Clock Gating
【UCIe】UCIe Clock Gating
559 0
【UCIe】UCIe Clock Gating
|
数据格式 流计算
【UCIe】UCIe 支持的协议及操作模式
【UCIe】UCIe 支持的协议及操作模式
2101 1
【UCIe】UCIe 支持的协议及操作模式
【UCIe】UCIe PHY LSM 介绍2
【UCIe】UCIe PHY LSM 介绍
414 1