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

FPGA 调试:PCIe XDMA Link Up 失败使用 LTSSM 定位问题

FPGA PCIe XDMA 驱动无法识别设备且 Link Up 信号为低。排查流程包括检查 GT 差分时钟、复位时序(需延迟释放)、Lane 约束及降速测试。通过 ILA 抓取 LTSSM 状态机定位问题,发现卡在 Lane 顺序检测阶段。最终确认为主机 TX 端 AC 耦合电容缺失导致链路异常,更换电阻为电容后解决。

云间运维发布于 2026/4/9更新于 2026/5/2113 浏览
FPGA 调试:PCIe XDMA Link Up 失败使用 LTSSM 定位问题

问题现象

驱动联调时无法扫描到 Xilinx PCIe 设备,ILA 抓取 pcie_link_up 信号发现一直为低电平。

问题分析

遇到这问题时,先在 FPGA 里搭个最小系统测试环境,用 XDMA + BRAM 的形式,减少其他模块干扰。框架如下:

文章配图

1. 检查 PCIe 时钟

时钟源很关键,务必用原理图里的 GT Ref 差分时钟,通过 IBUFDSGTE 转为单端时钟。

文章配图

文章配图

文章配图

2. 检查 PCIe 复位

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

这 100ms 期间系统主要在做这些事:

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

典型时序分配参考:

  • 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)

为了避免时序问题,建议在程序里加一段复位控制逻辑。虽然有时候硬件复位时序能自然满足要求,但加上更保险。

文章配图

3. Lane 约束检查

检查你的 Lane 约束文件。XDMA IP 核生成时通常会自带一个约束文件,指定每个 Lane 的对外接口。当然也可以自己写,只要保证端口与原理图匹配就行。

文章配图

文章配图

如果这些确认无误还是无法 Link Up,可以先尝试将 PCIe 降速为 1.0 x1,看看情况是否有变化。

4. PCIe 降速测试

文章配图

如果降速后依然不行,就需要深入检测 PCIe 的相关状态了。

5. 具体问题定位(查看 PCIe LTSSM 状态)

这时候得看 PCIe 的 LTSSM 状态机。LTSSM 是控制 PCIe 总线传输流程的状态机,由多个状态组成,每个状态代表不同的传输阶段。

5.1 给 LTSSM 信号添加 Debug

首先在配置界面勾选 Use Class Code Lookup Assistant 选项。

文章配图

此时端口可能还显示不出 LTSSM 信号,别急。按流程生成 IP 核,执行完 Run Syn 操作后,点击 Set up debug。

在这里搜索 LTSSM 的小写形式,就能找到 ltssm_state 信号,将其添加到 Debug 里,正常综合实现即可。

文章配图

文章配图

5.2 LTSSM 状态说明

不同厂商 LTSSM 定义略有差异,这里以瑞芯微为例。我的状态卡在了 0x08(Lane 顺序检测),意味着是 Lane 的问题。

文章配图

通过这个方式监控 LTSSM 信号的同时,还要关注几个关键信号。

5.3 其余关键信号说明
  • phy_rdy_n:物理层就绪信号。0 表示物理层就绪,1 表示异常。用于检查时钟是否存在、复位序列是否正常、PLL 是否锁定以及电源是否 Power Good。
  • cfg_current_speed_o:协商速率。PCIe 1.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

更多推荐文章

查看全部
  • 基于改进 YOLOv11n 的无人机红外目标检测算法
  • Java 刷题常用集合类、函数及类型转换指南
  • Ultrascale FPGA System Management Wizard 配置指南:温度电压监测
  • 基于 Web 的汽车销售系统设计与实现
  • 前缀和算法原理与实战
  • Spring Cloud Gateway 文件上传代理:处理大文件 multipart 请求
  • 基于 Python+Flask+Vue 的油田土地档案管理系统设计
  • AI 绘画精讲与 AIGC 时代游戏美术设计
  • Linux 网络编程实战:用 C++ 实现 JSON 解析与 HTTP 服务器
  • VS Code 编辑器 Git 工具 - 分支操作
  • AIGC 时代下的模型上下文协议 MCP 详解
  • Stable Diffusion 与 Z-Image-Turbo 快速部署及效果对比
  • RxHttp Android HTTP 请求框架使用指南
  • Python 与 Jupyter Notebook 数据可视化入门
  • AIGC 十年演进(2015–2025)
  • 具身智能视角下的机器人训练全流程解析
  • 基于 SpringBoot+Vue 的高校一卡通管理系统设计与实现
  • Supabase 实战教程:从云服务到本地部署,集成 Vue 与行级安全策略
  • jQuery 系列教程 8:插件生态与最佳实践
  • Android Studio 安装及 SDK、JDK、Gradle 配置指南

相关免费在线工具

  • 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