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

FPGA 调试:PCIe XDMA 链路不通使用 LTSSM 定位问题

解决 FPGA 开发中 PCIe XDMA 驱动无法扫描到设备的问题。通过检查时钟、复位时序、Lane 约束及降速测试,最终利用 LTSSM 状态机定位故障。发现物理层就绪但 Lane 协商失败,排查硬件 AC 耦合电容缺失导致。修复后链路正常。

CloudNative发布于 2026/4/5更新于 2026/9/475 浏览
FPGA 调试:PCIe XDMA 链路不通使用 LTSSM 定位问题

问题现象

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

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

问题分析

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

测试框架

1. 检查 PCIe 的时钟

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

时钟连接

IBUFDSGTE

时钟信号

2. 检查 PCIe 复位

PCIE 复位信号有要求:上电后,PCIE_RESTN 信号需在电源稳定后延迟一段时间再释放,通常是 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)

为了避免这个问题,建议在程序中添加复位控制。虽然有时硬件复位时序可以满足要求,但保险起见还是加上。

复位控制

3. 检查 Lane 约束

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

Lane 约束

约束文件

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

4. PCIe 降速测试

降速设置

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

5. 问题定位:LTSSM 状态

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

5.1 添加 LTSSM 信号 Debug

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

配置选项

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

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. 问题定位:LTSSM 状态
  8. 5.1 添加 LTSSM 信号 Debug
  9. 5.2 LTSSM 状态说明
  10. 5.3 关键信号说明
  11. 6. 故障点说明及解决

更多推荐文章

查看全部
  • 无人机航拍小目标检测:YOLO11 实战与 PyQt6 应用
  • WindowsCleaner v5.0:基于 Tkinter 的 Python 系统优化工具
  • Linux 创建用户并配置 Sudo 权限
  • Flutter 三方库 dart_webrtc 的鸿蒙化适配指南
  • 基于 YOLO 的航拍船舶目标检测数据集与训练教程
  • Windows 本地部署 Ollama 与 OpenClaw 的实操记录
  • FPGA 实现 OV5640 摄像头视频图像显示
  • AI 与传统方法处理历史观看数据的效率对比
  • Microi 吾码:基于.NET8 的开源低代码平台核心功能介绍
  • Windows 系统安装 Neo4j 图数据库教程
  • 昇腾 Ops-CV 库:AIGC 多模态视觉生成加速方案
  • Android 开发环境搭建教程
  • 基于 Unity 与 AI 工具快速开发简易小游戏
  • Angular 状态管理:NgRx 核心概念与实战
  • 开源 PPT 工具 Presenton 本地部署与使用指南
  • 【大模型知识】Chroma + Ollama + Llama 3.1 搭建本地知识库
  • 如何在 Conda 环境中安全切换 Python 版本
  • Windows 11 资源管理器增强:QTTabBar 中文优化版安装指南
  • macOS 指定版本升级指南:从 15.3 升级至 15.4 而非最新版
  • Windows 下通过 WSL 安装 OpenClaw 并配置飞书与百炼模型

相关免费在线工具

  • 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