LTPI协议的理解——4、LTPI链路初始化以及运行

这篇具有很好参考价值的文章主要介绍了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 个主要阶段:
  1. 链路训练——链路初始化的初始状态
  2. 链路配置——LTPI特性的配置
    a. Exchange LTPI 特性功能
    b.启用 LTPI 的选定操作配置
    c.切换到操作模式
  3. 链路可操作 – 说明链路在 LTPI 生命周期的大部分时间内处于可用状态
    状态机如下图

LTPI协议的理解——4、LTPI链路初始化以及运行,LTPI协议,fpga开发
整个链路的操作都是按照这个状态机的流程来进行运作的。

Link Training

SCM CPLD 和 HPM FPGA 退出复位后,链路训练阶段开始。它在单数据速率模式下以 25MHz 的基本频率执行。链接训练阶段的主要目的是:
A.达到链路直流平衡条件
B.交换链接速度功能
C.切换到操作链路频率
链接训练阶段基于 2 个状态:

  1. Link Detect 链路检测
  2. Link Speed 链路速度

Link Detect

在链路检测状态下,SCM CPLD 和 HPM FPGA 都开始发送链路检测帧。如图 28 所示,帧在两个方向上传输。主要目的是建立链路直流平衡并表明支持的工作频率。此阶段可分为 2 个部分:

  1. 链路检测 – 帧对齐:在这部分中,SERDES 逻辑尝试通过识别逗号符号并处理帧以验证 CRC 来锁定帧的开头。为了进入下一部分,至少需要接收 3 个具有正确 CRC 的帧。
  2. 链路检测:这是链路检测的主要部分,其中帧用于解释另一端的操作速度能力。在这一部分中使用了 TX 和 RX 计数器。由于 SCM 和 HPM 在实现 DC 平衡寻找帧开头方面存在时序差异,因此预计 SCM 和 HPM TX/RX 计数器将不对齐。

注 1:对齐到帧开头所需的时间取决于实现 DC 平衡所需的时间以及找到逗号符号的效率(取决于 SERDES 设计)。此阶段是 SCM LTPI 和 HPM LTPI 之间通过发送和接收的帧数产生初始偏差的根源。发送的帧数不应包含在发送的最小帧检测帧 (255) 中(这里我理解在对齐之前,发送的帧都不计算在最小检测帧内)

LTPI协议的理解——4、LTPI链路初始化以及运行,LTPI协议,fpga开发
SCM CPLD 和 HPM FPGA 均应:

  • 在 TX 链路上发送至少 255 个链路检测帧
  • 在 RX 链路上接收至少 7 个具有正确 CRC 校验和的连续帧.
    如果一方较快地移动到下一个阶段并开始发送链路速度帧,则“较慢”的一方应立即移动到下一个状态,完成所需数量的 TX 和 RX 帧。
    如果给定 LTPI 满足两个条件,则 SCM LTPI 和 HPM LTPI 可以独立地移动到下一个状态,即不需要等待超过 7 个连续的正确 RX 帧。
    链路检测状态总结如下:
    LTPI协议的理解——4、LTPI链路初始化以及运行,LTPI协议,fpga开发
    进一步说明对于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 链路检测功能。

LTPI协议的理解——4、LTPI链路初始化以及运行,LTPI协议,fpga开发
必须满足以下条件才能进入下一阶段:

  • SCM:在 TX 链路上发送至少 7 个链路速度帧
  • HPM:接收至少 3 个链路速度帧
    LTPI协议的理解——4、LTPI链路初始化以及运行,LTPI协议,fpga开发
    (疑问:一些异常情况的考虑,假如SCM发送接收正常,但HPM发送正常,但接收异常的时候。SCM成功发送了255+的detect帧之后,且也能正常收到7个detect帧,这个时候就会进入speed状态。在speed状态之后,SCM也发送完7个speed帧,就自行进入了变频阶段。
    我感觉是不是要接收到1个speed之后再变会不会更好点?)

Link Training Example

以下是一个链路训练的例子,
复位退出后,SCM 和 HPM 开始发送检测帧。当链路上建立直流平衡时:

  1. SCM 从 HPM 接收速度能力,如下表 中所定义。按照表 21 中定义的速度能力,HPM 支持 25MHz、100MHz 和 250MHz。它还支持双数据速率 I/O。
    LTPI协议的理解——4、LTPI链路初始化以及运行,LTPI协议,fpga开发
  2. HPM 从 SCM 接收速度能力,如下表 40 中所定义。根据表 21 中定义的速度能力,SCM 支持 25MHz、50MHz、75MHz 和 100MHz。它还支持双数据速率 I/O。
    LTPI协议的理解——4、LTPI链路初始化以及运行,LTPI协议,fpga开发
  3. HPM 和 SCM 使用链路速度帧发送最高通用速度设置。发送的速度选择设置如下表 41 所列。所选工作频率设置为 100MHz 并启用 DDR。
    LTPI协议的理解——4、LTPI链路初始化以及运行,LTPI协议,fpga开发

Link Configuration

链路配置在链路训练阶段完成后开始。它在速度阶段选择的操作频率上执行。链路配置阶段的主要目的是:

A.切换到操作链路频率
b.交换LTPI 能力
C.启用 LTPI 的选定操作配置
D.切换到操作模式
链接训练阶段基于 3 个状态:

  1. 通告 Advertise
  2. 配置 Configure
  3. 接受 Accept

Advertise

通告状态是链路从基本频率切换到工作频率时的第一个状态。在通告状态下,SCM CPLD 和 HPM FPGA 都开始发送通告帧。如下图所示,帧在两个方向上传输。切换到工作频率后,RX SERDES 需要重新执行字节对齐,找帧头,与链路检测阶段类似。该阶段也可以分为 2 个部分:

  1. 通告 – 帧对齐:在这部分中,SERDES 逻辑尝试通过识别逗号符号并处理帧以验证 CRC 来锁定帧的开头。为了进入下一部分,至少需要接收 3 个具有正确 CRC 的帧。
  2. 通告:这是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帧。)

LTPI协议的理解——4、LTPI链路初始化以及运行,LTPI协议,fpga开发
对于 SCM 和 HPM,接下来的状态是不同的。 SCM进入Configure状态和HPM进入Accept状态。要进入下一个状态,SCM 需要开始发送配置帧:
1.正确进入Advertise状态后自动根据SCM LTPI配置
2. 根据 BMC 的请求,遵循 BMC 应用的配置
如果在通告状态下丢失 3 个连续通告帧,则 LTPI 应返回到链路检测状态。
LTPI协议的理解——4、LTPI链路初始化以及运行,LTPI协议,fpga开发

Configure & Accept

在这种状态下,SCM 和 HPM 状态之间存在区别:
1.SCM进入Configure状态
2.HPM进入Accept状态
如下图所示,配置帧仅由 SCM 传输,接受帧仅由 HPM 传输。在此状态下,SCM 开始发送配置帧,并等待 HPM 发回下表中定义的接受帧。
LTPI协议的理解——4、LTPI链路初始化以及运行,LTPI协议,fpga开发
要移至下一个状态:
1. SCM开始向HPM发送配置帧
2. 当 HPM 接收到至少 1 个配置帧并且它与 HPM 功能匹配时,它将具有与 SCM 请求的功能相同的功能的接受帧发送回 SCM。
3. 当接收到接受帧并且它与配置帧功能匹配时,SCM 通过在链路上发送第一个操作帧来移动到下一个状态。
如果 SCM 在发送 32 配置帧后没有收到匹配的接受帧,它将返回通告状态。
LTPI协议的理解——4、LTPI链路初始化以及运行,LTPI协议,fpga开发

Link Configuration Example

链路训练阶段后,SCM 和 HPM 进入 Advertise 状态:

  1. SCM 发送具有下表 所示功能的通告帧。
    LTPI协议的理解——4、LTPI链路初始化以及运行,LTPI协议,fpga开发
    2 HPM 发送具有下表 所示功能的通告帧。
    LTPI协议的理解——4、LTPI链路初始化以及运行,LTPI协议,fpga开发
  2. 根据SCM 和HPM 的功能,选择需要HPM 和SCM 都支持的目标配置。目标配置的定义由SCM自动选择最高通用配置或由BMC选择。
  3. SCM 将配置帧发送到 HPM,其中包含下表 中定义的请求配置。
    LTPI协议的理解——4、LTPI链路初始化以及运行,LTPI协议,fpga开发
  4. HPM 等待至少 1 个配置帧,收到后验证配置是否有效并与 HPM 功能匹配。 HPM 通过发回接受帧来接受配置,该接受帧的配置与 SCM 请求的配置相同

Link Operation

工作模式是 LTPI 生命周期大部分时间的主要工作条件。在操作模式下,SCM 和 HPM 都不断地双向发送 I/O 帧
LTPI协议的理解——4、LTPI链路初始化以及运行,LTPI协议,fpga开发
当使用数据通道时,当通过以下方式触发对数据通道的访问时,将按需生成数据帧。当生成数据通道帧时,它将插入 I/O 帧流中,如下所示
LTPI协议的理解——4、LTPI链路初始化以及运行,LTPI协议,fpga开发
SCM 和 HPM 保持运行状态,直到发生以下情况:
1.软复位被触发:切换到Advertise State
2.硬复位被触发(CPLD复位、断电):在链路检测状态下启动
3. 连续 7 个帧丢失后,链路丢失:从链路检测状态开始

LTPI协议的理解——4、LTPI链路初始化以及运行,LTPI协议,fpga开发

Link Training and Configuration Example

整个过程可以用下面这个图来描述:
LTPI协议的理解——4、LTPI链路初始化以及运行,LTPI协议,fpga开发

总结

LPTI协议的实现,主要是要注意各种状态的跳转,各种异常的检测,以及一些调试分支都要考虑到,所以协议都要细细的研读,否则很慢把所有细节都把握清楚文章来源地址https://www.toymoban.com/news/detail-793276.html

到了这里,关于LTPI协议的理解——4、LTPI链路初始化以及运行的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 深入理解Linux网络技术内幕(八)——设备注册和初始化

    经过前面所学,我们已经知道内核如何验证NIC,以及内核所做的初始化,使得NIC得以和其他设备驱动程序对话。下面我们将讨论初始化的其他步骤: 网络设备何时以及如何在内核注册 网络设备如何利用网络设备数据库注册,并指派一个 net_device 结构的实例。 net_device 结构如

    2024年02月08日
    浏览(49)
  • 深入理解 Flink(八)Flink Task 部署初始化和启动详解

    核心入口: 部署 Task 链条:JobMaster -- DefaultScheduler -- SchedulingStrategy -- ExecutionVertex -- Execution -- RPC请求 -- TaskExecutor JobMaster 向 TaskExecutor 发送 submitTask() 的 RPC 请求,用来部署 StreamTask 运行。TaskExecutor 接收到 JobMaster 的部署 Task 运行的 RPC 请求的时候,就封装了一个 Task 抽象,然

    2024年01月17日
    浏览(75)
  • 05_从0运行,重定位,初始化,中断再到定时器

    总结 这边简单讲讲,代码上电后从0开始发生了什么,为什么要重定位把代码复制到sdram, bin文件前面几条跳转函数都跳转去哪 中断产生后发生什么 重定位问题 1.为什么需要重定位 把程序从一个位置移到另一个位置 叫重定位 可以只重定位部分段的数据 也可以把所有的都重定位

    2024年02月02日
    浏览(53)
  • 多进程运行含有任意参数的函数、为什么multiprosessing会进行多次初始化

    目录 多进程运行含有任意个参数的函数,以map_async为例 为什么multiprocessing 的了进程会多次初始化?         使用偏函数:偏函数有点像数学中的偏导数,可以让我们只关注其中的某一个变量而不考虑其他变量的影响。 如以下代码中,我们要将set_seq、tokenizer和model作为变量

    2024年02月03日
    浏览(54)
  • 自动化构建平台(五)之Jenkins初始化配置以及插件安装操作

    上一篇我们介绍了Jenkins的安装和登录等相关操作,今天给大家介绍登录Jenkins后的一些初始化配置和插件安装的操作。因为如果要使用Jenkins来进行代码构建,必须先安装相关的插件和配置一些系统环境变量才行。 这里我列举了才代码构建阶段Jenkins需要的主要插件,包含:

    2024年03月27日
    浏览(60)
  • 【C++技能树】类和对象的使用 --初始化列表,static,友元,内部类,匿名对象的理解与使用

    Halo,这里是Ppeua。平时主要更新C语言,C++,数据结构算法…感兴趣就关注我bua! 这是一个C++的默认构造函数 虽然我们大多时候混淆初始化与赋值的概念,但在这里,构造函数体中只能成为 赋值 ,因为初始化只能初始化一次,而赋值可以赋值多次。 那么在哪里进行初始化呢

    2024年02月06日
    浏览(43)
  • 17. C++ static、const 和 static const 类型成员变量声明以及初始化

    1. C++ static、const 和 static const 类型成员变量声明以及初始化 const 定义的常量在超出其作用域之后其空间会被释放; static 定义的静态常量在函数执行后不会释放其存储空间; 1.2 static static 表示的是静态的 类的静态成员函数、静态成员变量是和类相关的,而不是和类的具体对

    2024年01月18日
    浏览(58)
  • [解决]Elasticsearch 8.6.0 安装,初始化乱码,运行后无法访问及安装插件,需要账号密码解决方法

    安装(官网):Download Elasticsearch | Elastic 选择系统版本就好,我是windows,下载解压到要安装的盘符。下图为目录结构 2.安装成功之后,先不急着初始化。(最好先解决初始化乱码问题,不解决如果你能找的到哪一行是用户名密码,就可以忽略) 进入config目录找到jvm.options文件

    2024年02月13日
    浏览(45)
  • Elasticsearch 8.6.0 安装,及初始化乱码,运行后无法访问,需要账号密码验证身份的解决方法

    1.安装(官网):Download Elasticsearch | Elastic      选择系统版本就好,我是windows,下载解压到要安装的盘符。下图为目录结构 2.安装成功之后,先不急着初始化。(先解决初始化乱码问题,不解决也可使用,请忽略)         进入config目录找到jvm.options文件, 添加 -Dfile.enco

    2023年04月08日
    浏览(43)
  • MATLAB中怎样初始化(创建)二维、三维、四维以及多维矩阵,各维度的索引顺序是怎样的?

    在MATLAB中初始化一个二维矩阵是很容易的,我们既可以直接把矩阵的元素值写出,比如下面这样: 也可以直接用函数ones()、zeros()、rand()等函数初始化一个全1或全0或均匀随机分布等的矩阵,然后再对其中的元素进行访问赋值,比如下面这样: 从上面的示例中我们可以看出,

    2024年01月17日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包