ltpi协议的理解——4、ltpi链路初始化以及运行
前言
整个ltpi协议实现过程中,我认为最复杂的也就是ltpi的链路建立的过程 以及异步信号(特别是iic)的传输事务的控制和响应以及对iic接口线的操作。我们前面已经大致提到了各个阶段的帧定义,那么接下来我们继续来理解整个lpti协议的初始化到运行的流程是怎样的
状态图
以下场景需要执行ltpi training和link初始化:
- scm cpld 和 hpm fpga 断电事件后
- scm cpld 和 hpm fpga 复位后
- bmc 等外部请求
- 发生链路丢失错误
ltpi 链路训练和初始化的主要目的是: - 实现链路上的直流平衡条件
- 交换链接速度能力
- 切换到操作链路频率
- 交换ltpi特性能力
- 启用 ltpi 的选定操作配置
- 切换到操作模式
ltpi 链路训练和切换到操作模式被定义为状态机,可分为 3 个主要阶段:
- 链路训练——链路初始化的初始状态
- 链路配置——ltpi特性的配置
a. exchange ltpi 特性功能
b.启用 ltpi 的选定操作配置
c.切换到操作模式 - 链路可操作 – 说明链路在 ltpi 生命周期的大部分时间内处于可用状态
状态机如下图
整个链路的操作都是按照这个状态机的流程来进行运作的。
link training
scm cpld 和 hpm fpga 退出复位后,链路训练阶段开始。它在单数据速率模式下以 25mhz 的基本频率执行。链接训练阶段的主要目的是:
a.达到链路直流平衡条件
b.交换链接速度功能
c.切换到操作链路频率
链接训练阶段基于 2 个状态:
- link detect 链路检测
- link speed 链路速度
link detect
在链路检测状态下,scm cpld 和 hpm fpga 都开始发送链路检测帧。如图 28 所示,帧在两个方向上传输。主要目的是建立链路直流平衡并表明支持的工作频率。此阶段可分为 2 个部分:
- 链路检测 – 帧对齐:在这部分中,serdes 逻辑尝试通过识别逗号符号并处理帧以验证 crc 来锁定帧的开头。为了进入下一部分,至少需要接收 3 个具有正确 crc 的帧。
- 链路检测:这是链路检测的主要部分,其中帧用于解释另一端的操作速度能力。在这一部分中使用了 tx 和 rx 计数器。由于 scm 和 hpm 在实现 dc 平衡寻找帧开头方面存在时序差异,因此预计 scm 和 hpm tx/rx 计数器将不对齐。
注 1:对齐到帧开头所需的时间取决于实现 dc 平衡所需的时间以及找到逗号符号的效率(取决于 serdes 设计)。此阶段是 scm ltpi 和 hpm ltpi 之间通过发送和接收的帧数产生初始偏差的根源。发送的帧数不应包含在发送的最小帧检测帧 (255) 中(这里我理解在对齐之前,发送的帧都不计算在最小检测帧内)
scm cpld 和 hpm fpga 均应:
- 在 tx 链路上发送至少 255 个链路检测帧
- 在 rx 链路上接收至少 7 个具有正确 crc 校验和的连续帧.
如果一方较快地移动到下一个阶段并开始发送链路速度帧,则“较慢”的一方应立即移动到下一个状态,完成所需数量的 tx 和 rx 帧。
如果给定 ltpi 满足两个条件,则 scm ltpi 和 hpm ltpi 可以独立地移动到下一个状态,即不需要等待超过 7 个连续的正确 rx 帧。
链路检测状态总结如下:
进一步说明对于scm/hcm而言,进入speed的条件可以是:
1、需要发送至少255个detect帧且至少接收到7个detect帧。 或者
2、直接已经收到了speed帧,则无论此时是否发送多少detect帧和接收到多少detect帧,需要立刻进入speed
link_detect状态下是没有超时的,只要没有满足条件(发送至少255个detect帧和收到7个检测帧,或者已经收到了速度帧)就会一直在这个状态进行检测。
link speed
在链路速度状态下,scm cpld 和 hpm fpga 都开始发送链路速度帧。如下图帧正在双向传输。 scm 应根据接收到的链路检测功能及其自身的功能来选取最高的共同目标频率。在某些情况下,例如系统集成、系统调试或恢复模式,可能需要将工作频率降低到最大能力以下。 为此,ltpi 可以向 bmc 或 scm 上的其他控制器公开设置,以允许修改 scm ltpi 链路检测功能。
必须满足以下条件才能进入下一阶段:
- scm:在 tx 链路上发送至少 7 个链路速度帧
- hpm:接收至少 3 个链路速度帧
(疑问:一些异常情况的考虑,假如scm发送接收正常,但hpm发送正常,但接收异常的时候。scm成功发送了255+的detect帧之后,且也能正常收到7个detect帧,这个时候就会进入speed状态。在speed状态之后,scm也发送完7个speed帧,就自行进入了变频阶段。
我感觉是不是要接收到1个speed之后再变会不会更好点?)
link training example
以下是一个链路训练的例子,
复位退出后,scm 和 hpm 开始发送检测帧。当链路上建立直流平衡时:
- scm 从 hpm 接收速度能力,如下表 中所定义。按照表 21 中定义的速度能力,hpm 支持 25mhz、100mhz 和 250mhz。它还支持双数据速率 i/o。
- hpm 从 scm 接收速度能力,如下表 40 中所定义。根据表 21 中定义的速度能力,scm 支持 25mhz、50mhz、75mhz 和 100mhz。它还支持双数据速率 i/o。
- hpm 和 scm 使用链路速度帧发送最高通用速度设置。发送的速度选择设置如下表 41 所列。所选工作频率设置为 100mhz 并启用 ddr。
link configuration
链路配置在链路训练阶段完成后开始。它在速度阶段选择的操作频率上执行。链路配置阶段的主要目的是:
a.切换到操作链路频率
b.交换ltpi 能力
c.启用 ltpi 的选定操作配置
d.切换到操作模式
链接训练阶段基于 3 个状态:
- 通告 advertise
- 配置 configure
- 接受 accept
advertise
通告状态是链路从基本频率切换到工作频率时的第一个状态。在通告状态下,scm cpld 和 hpm fpga 都开始发送通告帧。如下图所示,帧在两个方向上传输。切换到工作频率后,rx serdes 需要重新执行字节对齐,找帧头,与链路检测阶段类似。该阶段也可以分为 2 个部分:
- 通告 – 帧对齐:在这部分中,serdes 逻辑尝试通过识别逗号符号并处理帧以验证 crc 来锁定帧的开头。为了进入下一部分,至少需要接收 3 个具有正确 crc 的帧。
- 通告:这是advertise的主要部分,其中框架用于解释对方的ltpi能力。
scm 和 hpm 均应持续发送通告帧至少 1ms,以允许链路稳定在工作频率。如果scm先完成1ms传输要求并自动开始发送configure frame,则hpm应立即切换到accept而不完成1ms传输要求。在通告状态下,scm和hpm持续发送广告帧。该状态没有进入下一个状态的超时时间。这是为了允许 bmc 读取 advertise 信息并选择 ltpi 配置。 bmc 可以使用 csr 寄存器来验证 ltpi 通告状态是否处于活动状态、读取通告信息并写入 ltpi 的目标配置。
(进一步理解:如果1ms内收到了target的advertise帧,则在1ms时,controller将根据自己的advertise内容和收到的target内容,进行能力的配置,这里有两种模式,可以预先设置好config帧,或者运行过程中由bmc通过写csr寄存器来进行修改config帧,如果可以预先设置好则1ms后,自动开始发config帧,如果是运行过程中由bmc通过写csr寄存器来进行修改,则可以无限等待bmc写csr寄存器,然后给出触发标志,才会开始发config帧。
而对于target,它也存在1ms超时机制,不同的是,它如果在1ms内已经收到了config帧,则不需要在等待1ms结束。如果1ms结束的时候收到了足够多的advertise帧,则会一直等待controller发送config帧。)
对于 scm 和 hpm,接下来的状态是不同的。 scm进入configure状态和hpm进入accept状态。要进入下一个状态,scm 需要开始发送配置帧:
1.正确进入advertise状态后自动根据scm ltpi配置
2. 根据 bmc 的请求,遵循 bmc 应用的配置
如果在通告状态下丢失 3 个连续通告帧,则 ltpi 应返回到链路检测状态。
configure & accept
在这种状态下,scm 和 hpm 状态之间存在区别:
1.scm进入configure状态
2.hpm进入accept状态
如下图所示,配置帧仅由 scm 传输,接受帧仅由 hpm 传输。在此状态下,scm 开始发送配置帧,并等待 hpm 发回下表中定义的接受帧。
要移至下一个状态:
1. scm开始向hpm发送配置帧
2. 当 hpm 接收到至少 1 个配置帧并且它与 hpm 功能匹配时,它将具有与 scm 请求的功能相同的功能的接受帧发送回 scm。
3. 当接收到接受帧并且它与配置帧功能匹配时,scm 通过在链路上发送第一个操作帧来移动到下一个状态。
如果 scm 在发送 32 配置帧后没有收到匹配的接受帧,它将返回通告状态。
link configuration example
链路训练阶段后,scm 和 hpm 进入 advertise 状态:
- scm 发送具有下表 所示功能的通告帧。
2 hpm 发送具有下表 所示功能的通告帧。
- 根据scm 和hpm 的功能,选择需要hpm 和scm 都支持的目标配置。目标配置的定义由scm自动选择最高通用配置或由bmc选择。
- scm 将配置帧发送到 hpm,其中包含下表 中定义的请求配置。
- hpm 等待至少 1 个配置帧,收到后验证配置是否有效并与 hpm 功能匹配。 hpm 通过发回接受帧来接受配置,该接受帧的配置与 scm 请求的配置相同
link operation
工作模式是 ltpi 生命周期大部分时间的主要工作条件。在操作模式下,scm 和 hpm 都不断地双向发送 i/o 帧
当使用数据通道时,当通过以下方式触发对数据通道的访问时,将按需生成数据帧。当生成数据通道帧时,它将插入 i/o 帧流中,如下所示
scm 和 hpm 保持运行状态,直到发生以下情况:
1.软复位被触发:切换到advertise state
2.硬复位被触发(cpld复位、断电):在链路检测状态下启动
3. 连续 7 个帧丢失后,链路丢失:从链路检测状态开始
link training and configuration example
整个过程可以用下面这个图来描述:
总结
lpti协议的实现,主要是要注意各种状态的跳转,各种异常的检测,以及一些调试分支都要考虑到,所以协议都要细细的研读,否则很慢把所有细节都把握清楚
发表评论