当前位置: 首页 > news >正文

如何在XDMA中查看LTSSM状态机

简介

经常会遇到PCIe不能识别的问题,到底怎么去定位。本文以XDMA 为例,一方面复习下LTSSM状态机,一方面描述下如何通过FPGA的XDMA查看这个状态机

技术名词

LTSSM是一种常用于PCI Express(PCIe)接口的状态机,它可以控制PCIe总线的传输流程。LTSSM由多个状态组成,每个状态都代表了不同的总线传输阶段。在PCIe通信中,通过状态转移来实现数据的传输和接收。具体来说,LTSSM可以控制PCIe设备之间的握手、数据传输、错误处理等操作,保证数据在传输过程中的稳定性和完整性。

XDMA指的是跨领域内存访问(Cross Domain Memory Access),它是一种基于硬件实现的内存共享技术,可以在不同的设备之间实现高速、低延迟的数据传输。相比于传统的数据传输方式,XDMA可以大大减少数据传输的时间和成本,并且可以支持多种不同的设备之间的数据传输,包括FPGA、GPU、CPU等。

通过使用XDMA,可以将不同设备之间的数据传输延迟降至最低,同时也可以实现高速数据传输,提高系统性能和响应速度。此外,由于XDMA是一种硬件实现的技术,因此它可以保证数据传输的稳定性和安全性,本文特质xilinx的IP核。、

如何查看

首先打开vavodo,选择XDMA 的IP核。点击

需要勾选PCIe ID标签页中的Use Class Code Lookup Assistant之后才能搜索到相关itssm信号。

在编译之后。搜索LTSSM,添加debug信号。

LTSSM-Detect
Detect:检测远端阻抗以确定是否有设备
a) Detect.Quiet时,Tx处于Electrical Idle状态,LinkUp清0,以及其他复位动作
b) 只要有lane退出Electrical Idle,就进入Detect.Active,此时双方检测对端阻抗,确定对端是否有设备
c) 只要有某条/几条lane的双方均检测到对端有Rx,则进入Polling,其他没有检测成功的lane进入Electrical Idle,一条lane也没有则回到Quiet

LTSSM-Polling
Polling:发送和回复TS,bit lock,symbol lock,lane 极性在此阶段确定
TS(Training Sequences)用于初始化bit align,symbol align,交换参数。TS1主要检测PCIe链路配置信息,TS2确认TS1的检测结果
a)Polling.Active,Tx向对端发送TS1,对端Rx接收到TS1后通过其Loopback发送回来
b)当Rx收到8个连续的TS1或者收到8个TS2,这种情况下进入Polling.Configuration
c)Polling.Configuration:此时TX发送TS2(lane/link number为PAD,linkup为0)
d)当在Polling.Configuration时收到8个连续的TS2,并且在收到一个TS2之后再发出去16个TS2之后进入Configuration状态

LTSSM-Configuration
Configuration:Rx/Tx协商link number,lane number,(这步骤可以确定link width)当recovery出现错误没有进入L0也可能先进Configuration
首次从Polling进入Configuration时LinkUp=0,从recovery进入该状态是LinkUp=1
Configuration.Idle时,PCIe链路设置完毕,当收到对端8个Idle序列并且向对端发送16个Idle序列之后将LinkUp值1,数据链路层从DL_Inactive进入DL_Init,物理层进入L0

LTSSM-Recovery
Recovery:用于切换data rate,或者从L0经过Recovery.Rcvrlock再到Configuration去切换link width,此时bit lock(位锁),symbol lock(符号锁) 会重新建立

当PCIe链路需要重新训练时,进入Recovery状态。主要有以下几种情况:
(1) PCIe链路信号发现error,需要调整Bit Lock和Symbol Lock;
(2) 从L0s或者L1低功耗电源状态退出;
(3) Speed Change。因为第一次进入L0状态时,速率是2.5GT/s. 当需要进行速率调整5.0GT/s或者8.0GT/s时,需要进入Recovery状态进行Speed Change. 这个阶段,Bit Lock、Symbol Lock等都需要重新获取;
(4) 需要重新调整PCIe链路的Width;
(5) 软件触发retrain操作;

http://www.lryc.cn/news/362918.html

相关文章:

  • 编译和运行qemu-uboot-arm64单板的Armbian系统
  • Python版《消消乐》,附源码
  • Kubernetes ingress
  • 【JavaScript】ECMAS6(ES6)新特性概览(二):解构赋值、扩展与收集、class类全面解析
  • Linux入门学习指南
  • 纯血鸿蒙实战开发—如何添加顶部tab页面
  • 数仓建模—指标拆解和选取
  • HTML静态网页成品作业(HTML+CSS)——VIVO介绍网页(1个页面)
  • MySQL(四) - SQL优化
  • 用 DataGridView 控件显示数据
  • VisualSVN Server/TortoiseSVN更改端口号
  • 如何解决研发数据传输层面安全可控、可追溯的共性需求?
  • 表 ,索引的 degree 检查, trim(degree) default INSTANCES
  • Git - Rebase命令介绍
  • JavaScript 从入门到精通Object(对象)
  • Postgresql中json和jsonb类型区别
  • 太强了,使用 C# 开发的开源内网穿透工具
  • leetcode及牛客网二叉树相关题、单值二叉树、相同的树、二叉树的前序、中序、后序遍历、另一棵树的子树、二叉树的遍历、 对称二叉树等的介绍
  • Spring (38)Spring Cloud
  • MySQL之数据库相关操作学习笔记(一)
  • 【Node】node的Events模块(事件模块)的介绍和使用
  • C#中字节数组(byte[])末尾继续添加字节的示例
  • Socket编程学习笔记之TCP与UDP
  • JavaScript第九讲BOM编程的练习题
  • JavaScript 中创建函数的多种方式
  • 对称二叉树[简单]
  • 判断GIF类型并使用ImageDecoder解析GIF图
  • 数组对象数据修改后页面没有更新,无法进行编辑,校验失效问题
  • 什么是低代码?有什么特点?
  • Kafka 消息保留时长由 24 小时变更为 72 小时的影响分析