跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++

FPGA 调试:PCIE XDMA 无 Link Up 使用 LTSSM 定位问题

解决 FPGA 中 PCIe XDMA 驱动无法扫描到设备的问题。通过 ILA 抓取信号发现 Link Up 为低。排查步骤包括检查时钟、复位时序、Lane 约束及降速测试。利用 LTSSM 状态机监控链路训练过程,发现卡在 Lane 顺序检测阶段。最终定位为硬件 AC 耦合电容缺失,更换后链路恢复正常。

岁月神偷发布于 2026/4/6更新于 2026/5/2031 浏览
FPGA 调试:PCIE XDMA 无 Link Up 使用 LTSSM 定位问题

问题现象

与驱动联调:驱动无法扫描到 Xilinx 的 PCIE 设备

通过 ILA 抓取 pcie_link_up 信号:发现 link up 一直为低

问题分析

出现这种情况,在 FPGA 中搭建测试环境,使用 XDMA+BRAM 的形式,减少其它模块的影响,框架如下:

文章配图

1 检查 PCIE 的时钟

时钟,必须使用原理图上的 GT Ref 差分时钟,通过 IBUFDSGTE 转为单端时钟

文章配图

文章配图

文章配图

2 检查 PCIE 复位

复位:PCIE 复位信号有要求--上电后,PCIE_RSTN 信号需在电源稳定后延迟一段时间再释放,通常是 100ms 以上。

而这 100ms 的时间,系统主要做以下的事情:

  • 电源稳定时间
  • 参考时钟稳定时间
  • PCIe IP 核的复位和初始化时间
  • 链路训练时间

典型的 100ms 时间分配:

  • 0-10ms : 电源稳定 (Power Stable)
  • 10-20ms : 参考时钟稳定 (Refclk Stable)
  • 20-30ms : 复位释放和 PLL 锁定 (Reset Release & PLL Lock)
  • 30-50ms : 物理层初始化 (PHY Initialization)
  • 50-70ms : 链路训练 (Link Training)
  • 70-100ms : 设备配置 (Device Configuration)

为了避免这个问题,建议在程序中添加这么一段复位控制。但是有的时候你不添加也没有关系,因为有的时候硬件的复位时序可以满足这个 100ms 的要求,但是保险起见还是加上。

文章配图

3 LANE 检查

检查你的 LANE 约束,一般 XDMA IP 核生成的时候会自带一个约束文件,约束每个 LANE 的对外接口,但我们也可以自己约束,保证端口与原理图匹配即可。

文章配图

文章配图

这些确认无误,还是无法 link up 的,先将 PCIE 降速为 1.0 X1,看看情况。

4 PCIE 降速

文章配图

如果还是不行,那我们需要检测 pcie 的相关的几个状态。

5 具体问题定位(PCIE LTSSM 状态)

这里我们需要查看 PCIE 的 LTSSM 状态机,那什么是 LTSSM 状态机呢?

LTSSM 是一种常用于 PCI Express(PCIe)接口的状态机,它可以控制 [PCIe 总线] 的传输流程。LTSSM 由多个状态组成,每个状态都代表了不同的总线传输阶段。

5.1 给 LTSSM 信号添加 debug

首先:勾选配置界面的 Use Class Code Lookup Assistant 这个选项。

文章配图

此时还是无法在端口显示出 LTSSM 信号,不要着急,按照你的流程生成 IP 核,执行完 Run Syn 操作,然后点击 Set up debug。

文章配图

在这里搜索 LTSSM 的'小写',就能找到 ltssm_state 的信号,将其添加到 debug 里面正常的综合实现就可以了。

文章配图

5.2 LTSSM 状态说明

LTSSM 状态机根据厂商不同会有微小的差异,我们使用的是瑞芯微的,我的状态卡在了 08 即 Lane 顺序检测。意味着是 lane 的问题。

文章配图

那我们通过这个方式监控的除了 LTSSM 信号以外,还有几个关键信号。

5.3 其余关键信号说明

phy_rdy_n:物理层就绪,一种存在性检查,0:表示物理层就绪,1:表示异常。

  • 时钟是否存在?
  • 复位序列是否正常?
  • PLL 是否正常锁定?
  • 电源是否 power good

cfg_cuurent_speed_o:协商的速率,PCIE1.0/2.0/3.0 分别对应 1/2/3 link_width:协商的宽度

6 故障点说明及解决

我的故障就是:

phy_rdy_n 为 0,说明物理层就绪,时钟和复位是正常的

LTSSM 卡在了 0x08,且 Link_width 为 0,说明是 LANE 的异常导致的。

文章配图

重新检查电路,发现主机的 TX 端,没有放置电容,而使用的是电阻,导致的 AC 耦合问题,将电阻更换为电容,链路问题解决。

文章配图

可以看到 Link up 拉起,驱动可以正常检测到 PCIE 设备。

目录

  1. 问题现象
  2. 问题分析
  3. 1 检查 PCIE 的时钟
  4. 2 检查 PCIE 复位
  5. 3 LANE 检查
  6. 4 PCIE 降速
  7. 5 具体问题定位(PCIE LTSSM 状态)
  8. 5.1 给 LTSSM 信号添加 debug
  9. 5.2 LTSSM 状态说明
  10. 5.3 其余关键信号说明
  11. 6 故障点说明及解决
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Windows 本地部署闲鱼 AI 自动回复系统实战
  • 前端文件上传处理:提升用户体验与性能
  • Dify MCP-Server 插件将工作流发布为第三方可调用服务
  • C++ 入门基础:历史、首个程序与命名空间详解
  • 前端大数据导出优化:解决 Chrome 内存崩溃的实战方案
  • JWT(JSON Web Token)结构化知识体系
  • 前端设计与布局常用术语中英对照速查表
  • 使用 Anthropic Skill 提升大模型前端设计审美
  • 深入理解 Claude Skills:架构、特性与实战
  • 数据结构与算法:单链表综合运用(合并、分割与约瑟夫环)
  • Java 调用百度地图 API 实现长沙热门路段与景点实时路况检索
  • 【Js逆向 python】Web JS 逆向全体系详细解释
  • 大语言模型核心原理必读的十篇论文梳理
  • 目标检测数据集 第133期-基于yolo标注格式的无人机航拍人员搜救检测数据集(含免费分享)
  • 前端开发工程师规范简历参考
  • Faster-Whisper 实现 3 倍速语音转文字:完整参数配置指南
  • C++ 不使用第三方库在 RGB 图像上打印信息
  • Web JS 逆向全体系详解:Python 实战与渗透测试
  • Chart.js 集成 CosyVoice3 前端可视化监控方案
  • Java IO 流体系核心梳理:字节流与字符流详解

相关免费在线工具

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online