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

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

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

云间运维发布于 2026/4/9更新于 2026/9/662 浏览
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. 故障点说明及解决

更多推荐文章

查看全部
  • Meta-Llama-3-8B-Instruct 工业设备故障诊断实践
  • 大模型提示工程实战:15 个核心技巧与策略
  • 2024 大模型学习路线:从零基础到精通的系统指南
  • OpenClaw 多 Agent 多 Discord 频道配置实战:从零搭建 AI 团队
  • ComfyUI 可视化搭建教程:构建 AI 绘画工作流
  • LW-CTrans: 用于 3D 医学图像分割的轻量级 CNN-Transformer 混合网络
  • Coze 抓取小红书爆款视频写入飞书多维表实战
  • VSCode Copilot 登录失败排查指南:常见问题与解决方案
  • Windows 10 彻底关闭 Microsoft 365 Copilot 弹窗的 6 种方法
  • ZeroClaw Gateway + LM Studio + Reflex 本地 AI 管理面板搭建
  • Seedance 2.0 实操教程:从入门到 AI 导演模式
  • OpenClaw Web Search 工具配置与渠道详解
  • OSCP 实战:获取并破解 Net-NTLMv2 哈希(下)
  • 人工智能(AI)常见面试题及答案汇总
  • Linux 服务器部署 OpenClaw 教程
  • Java 串口通信库 jSerialComm 跨平台开发指南
  • Flutter 三方库 algolia_client_recommend 鸿蒙适配指南
  • 四款主流 AI 编程 IDE 横向评测:从辅助到代理的演进路径
  • 从销售助理转行软件测试:零经验求职与学习路径分享
  • SpringBoot Java 银行排队叫号系统

相关免费在线工具

  • 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