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

news2024/11/24 12:54:03

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

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

  • 前言
  • 状态图
  • Link Training
    • Link Detect
    • Link Speed
    • Link Training Example
  • Link Configuration
    • Advertise
    • Configure & Accept
    • Link Configuration Example
  • Link Operation
  • Link Training and Configuration Example
  • 总结


前言

整个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 生命周期的大部分时间内处于可用状态
    状态机如下图

在这里插入图片描述
整个链路的操作都是按照这个状态机的流程来进行运作的。

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) 中(这里我理解在对齐之前,发送的帧都不计算在最小检测帧内)

在这里插入图片描述
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 开始发送检测帧。当链路上建立直流平衡时:

  1. SCM 从 HPM 接收速度能力,如下表 中所定义。按照表 21 中定义的速度能力,HPM 支持 25MHz、100MHz 和 250MHz。它还支持双数据速率 I/O。
    在这里插入图片描述
  2. HPM 从 SCM 接收速度能力,如下表 40 中所定义。根据表 21 中定义的速度能力,SCM 支持 25MHz、50MHz、75MHz 和 100MHz。它还支持双数据速率 I/O。
    在这里插入图片描述
  3. HPM 和 SCM 使用链路速度帧发送最高通用速度设置。发送的速度选择设置如下表 41 所列。所选工作频率设置为 100MHz 并启用 DDR。
    在这里插入图片描述

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帧。)

在这里插入图片描述
对于 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 状态:

  1. SCM 发送具有下表 所示功能的通告帧。
    在这里插入图片描述
    2 HPM 发送具有下表 所示功能的通告帧。
    在这里插入图片描述
  2. 根据SCM 和HPM 的功能,选择需要HPM 和SCM 都支持的目标配置。目标配置的定义由SCM自动选择最高通用配置或由BMC选择。
  3. SCM 将配置帧发送到 HPM,其中包含下表 中定义的请求配置。
    在这里插入图片描述
  4. 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协议的实现,主要是要注意各种状态的跳转,各种异常的检测,以及一些调试分支都要考虑到,所以协议都要细细的研读,否则很慢把所有细节都把握清楚

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1343525.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[Angular] 笔记 18:Angular Router

Angular Router 视频 chatgpt: Angular 具有内置的大量工具、功能和库,功能强大且经过良好设计,如组件化架构、依赖注入、模块化系统、路由和HTTP客户端等。这些功能可以直接用于项目中,无需额外的设置或第三方库。这简化了开发流…

nginx源码分析-3

这一章内容讲述nginx中的事件是如何一步步添加到epoll实例中的。 在初始化http连接的函数ngx_http_init_connection中,nginx为http连接初始化了处理请求的回调函数,之后调用ngx_handle_read_event函数对可读数据进行处理。这里只为连接设置read而没有设…

如何编写一个javaAgent jar工具包超详细教程

介绍 Java Agent技术 Java Agent技术是JDK提供的用来编写Java工具的技术,使用这种技术生成一种特殊的jar包,这种jar包可以让Java程序 运行其中的代码。 Java Agent技术的两种模式 Java Agent技术实现了让Java程序执行独立的Java Agent程序中的代码…

C语言编写Windows程序:组合启用/禁用Telnet客户端,并Telnet指定ip和端口

本文程序是将启用/禁用Telnet客户端的命令进行组合&#xff0c;单个命令的解析可参考文章&#xff1a; 启用/禁用Windows功能中的Telnet客户端的命令_()命令将阻止使用telnintel-CSDN博客 源代码如下&#xff1a; #include <stdio.h> #include <stdlib.h> #include…

在 Golang 应用程序中管理多个数据库

掌握在 Golang 项目中处理多个数据库的艺术 在当前软件开发领域中&#xff0c;处理单个应用程序内的多个数据库的需求越来越普遍。具有强大功能的 Golang 是处理此类任务的绝佳解决方案&#xff0c;无论您是与多个数据源合作还是仅为增强组织和可扩展性而分隔数据。在本文中&a…

Docker 入门 ------ 基本命令

1. 使用Docker镜像 1.1 获取镜像 主要命令: docker pull NAME[:TAG] NAME 为镜像名称&#xff0c;后跟:版本号&#xff0c;如果没有跟后面的版本号&#xff0c;默认拉取最新的稳定版本 例子&#xff1a; 上述命令相当于&#xff1a;docker.io/library/ubuntu:latest 1.2 查…

Jetson Orin安装riva以及llamaspeak,使用 Riva ASR/TTS 与 Llama 进行实时交谈,大语言模型成功运行笔记

NVIDIA 的综合语音 AI 工具包 RIVA 可以处理这种情况。此外&#xff0c;RIVA 可以构建应用程序&#xff0c;在本地设备&#xff08;如 NVIDIA Jetson&#xff09;上处理所有这些内容。 RIVA 是一个综合性库&#xff0c;包括&#xff1a; 自动语音识别 &#xff08;ASR&#x…

尽量避免删改List

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 学习必须往深处挖&…

golang 图片加水印

需求&#xff1a; 1&#xff0c;员工签到图片加水印 2&#xff0c;水印文字需要有半透明的底色&#xff0c;避免水印看不清 3&#xff0c;图片宽设置在600&#xff0c;小于600或者大于600都需要等比例修改图片的高度&#xff0c;保持水印在图片中的大小和位置 4&#xff0c;处理…

摸鱼摸出来的vue3+element-plus毒蘑菇后台管理:新标签页的实现。

在浏览器中&#xff0c;点击标签页右边的加号可以新加一个标签页&#xff0c;所以&#xff0c;在毒蘑菇后台管理&#xff08;简称毒蘑菇儿&#xff09;中也可以这样操作。 点击标签页右边的按钮就可以打开一个新标签页了&#xff0c;可以打开多个&#xff0c;互不冲突&#xff…

Animate 2024(Adobe an2024)

Animate 2024是一款由Adobe公司开发的动画和互动内容创作工具&#xff0c;是Flash的演进版本。Animate 2024为设计师和开发者提供了更丰富的功能&#xff0c;让他们能够创建各种类型的动画、交互式内容和多媒体应用程序。 Animate 2024具有以下特点&#xff1a; 强大的设计工…

UE5.1_Gameplay Debugger启用

UE5.1_Gameplay Debugger启用 重点问题&#xff1a; Gamplay Debugger启用不知道&#xff1f; Apostrophe、Tilde键不知道是哪个&#xff1f; Gameplay调试程序 | 虚幻引擎文档 (unrealengine.com) Gameplay Debugger

一些深度学习训练过程可视化以及绘图工具

常见的可视化方法 深度学习训练过程的可视化是一个重要的环节&#xff0c;它可以帮助研究人员和工程师更好地理解和调整他们的模型。常见的可视化方法包括&#xff1a; 损失和准确率曲线&#xff1a; 这是最常见的可视化类型&#xff0c;通常在训练过程中绘制损失函数和准确率…

【网络技术】【Kali Linux】Wireshark嗅探(三)用户数据报(UDP)协议

一、实验目的 本次实验使用wireshark流量分析工具进行网络嗅探&#xff0c;旨在了解UDP协议的报文格式。 二、网络环境设置 本次实验使用Kali Linux虚拟机完成&#xff0c;主机操作系统为Windows 11&#xff0c;虚拟化平台选择Oracle VM VirtualBox&#xff0c;组网模式选择…

软件测试/测试开发丨Windows系统chromedriver安装与环境变量配置

一、selenium 环境配置 1、chrome 浏览器的安装与配置 目前比较常用的浏览器是 Google Chrome 浏览器&#xff0c;所以本教程以 chrome 为主&#xff0c;后面简介一下其他浏览器的环境配置。 &#xff08;1&#xff09;chrome 下载: www.google.cn/chrome/ &#xff08;2&a…

日志记录、跟踪和指标

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版&#xff0c;欢迎购买。点击进入详情 日志记录、跟踪和指标是系统可观察性的三大支柱。 下图显示了它们的定义和典型架构。 记录 日志记录系统中的离散事件。例如&#xff0c;我们可以将传入请求或对…

回归预测 | MATLAB实ZOA-LSTM基于斑马优化算法优化长短期记忆神经网络的多输入单输出数据回归预测模型 (多指标,多图)

回归预测 | MATLAB实ZOA-LSTM基于斑马优化算法优化长短期记忆神经网络的多输入单输出数据回归预测模型 &#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实ZOA-LSTM基于斑马优化算法优化长短期记忆神经网络的多输入单输出数据回归预测模型 &#xff08;…

ubuntu python播放MP3,wav音频和录音

目录 一.利用pygame&#xff08;略显麻烦&#xff0c;有时候播放不太正常&#xff09;1.安装依赖库2.代码 二.利用mpg123&#xff08;简洁方便&#xff0c;但仅争对mp3&#xff09;1.安装依赖库2.代码 三.利用sox&#xff08;简单方便&#xff0c;支持的文件格式多&#xff09;…

jvm实战之-常用jvm命令的使用

各命令的使用 JMAP 1、查看内存信息&#xff0c;对象实例数、对象占有大小 jmap -histo 进程号>./log.txt2、查看堆的配置信息和使用情况 jmap - heap 进程号3、将堆的快照信息dump下来&#xff0c;使用java自带的jvisualvm.exe打开分析 jmap -dump:formatb,filedump.h…

oracle学习(5)

数据处理 SQL语言的类型&#xff1a; 1. 数据库中&#xff0c;称呼增删改查&#xff0c;为DML语句。(Data Manipulation Language 数据操纵语言)&#xff0c;就是指代&#xff1a; insert、update、delete、select这四个操作。 2. DDL语句。(Data Definition Language 数据…