FPGA Debug:PCIE XDMA没有Link up(驱动检测不到xilinx PCIE设备)使用LTSSM定位问题

FPGA Debug:PCIE XDMA没有Link up(驱动检测不到xilinx PCIE设备)使用LTSSM定位问题

问题现象:

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

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

问题分析:

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

1 检查PCIE的时钟

时钟,必须使用原理图上的GT Ref 差分时钟,通过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)

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

3 LANE检查

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

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

4 PCIE降速

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

5 具体问题定位(PCIE 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

在这里搜索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设备。

Read more

深入解析Xilinx 7系FPGA核心资源:从IO单元到CLB架构

1. Xilinx 7系FPGA硬件架构概览 Xilinx Kintex-7系列FPGA采用28nm工艺制程,在性能、功耗和成本之间实现了出色的平衡。我第一次接触K7芯片是在一个高速数据采集项目中,当时就被它灵活的架构设计所吸引。与前辈Virtex-6相比,K7在保持高性能的同时,功耗降低了约30%,这对需要长时间运行的嵌入式系统来说是个重大利好。 整个7系列FPGA采用统一的架构设计,包含几个关键组成部分:可编程输入输出单元(IOB)、可配置逻辑块(CLB)、时钟管理模块(CMT)、块存储器(BRAM)和数字信号处理单元(DSP48E1)。这些资源通过丰富的布线网络相互连接,形成完整的可编程系统。 以XC7K325T为例,它包含326,080个逻辑单元、16,020KB的块RAM和840个DSP切片。这种资源配置使其非常适合需要大量并行计算的应用场景,比如实时图像处理、高速信号采集等。在实际项目中,我经常用这款芯片来实现多通道数据预处理,它的并行处理能力可以轻松应对GHz级采样率的数据流。 2. 可编程IO单元深度解析 2.1 SelectIO技术架构 7系FPGA的I

【图文】Windows + WSL + Ubuntu 安装 OpenClaw 全套流程(飞书机器人 + 百炼模型)

目录 * 一、安装 WSL * 二、安装基础组件 * 三、安装 Node.js(通过 nvm) * 1 安装 nvm * 2 安装 Node * 四、安装 OpenClaw * 五、OpenClaw 初始化配置 * 六、Hooks 配置(重要) * 七、打开 Web UI * 八、安装飞书插件 * 九、第三方飞书插件(备用方案) * 十、飞书权限配置(注意先做好飞书机器人设置,再配置channel) * 十一、配置飞书channel * 十二、配置飞书回调事件 * 十三、重启 OpenClaw * 十四、配置百炼模型

揭秘PHP低代码表单引擎:如何3步实现企业级表单开发

第一章:揭秘PHP低代码表单引擎的核心价值 在现代Web开发中,快速构建可维护、可扩展的表单系统成为企业级应用的关键需求。PHP低代码表单引擎通过可视化配置与代码生成技术,大幅降低开发门槛,提升交付效率。其核心价值不仅体现在开发速度的提升,更在于对业务变化的敏捷响应能力。 提升开发效率 低代码表单引擎允许开发者通过JSON配置或可视化拖拽定义表单结构,自动生成HTML与后端验证逻辑。例如,一个用户注册表单可通过如下配置快速生成: { "fields": [ { "name": "username", "type": "text", "label": "用户名", "validation": { "required": true, "minLength": 3 } }, { "name"

SLAM Toolbox实战指南:快速掌握机器人定位与建图核心技术

SLAM Toolbox实战指南:快速掌握机器人定位与建图核心技术 【免费下载链接】slam_toolboxSlam Toolbox for lifelong mapping and localization in potentially massive maps with ROS 项目地址: https://gitcode.com/gh_mirrors/sl/slam_toolbox SLAM Toolbox是一款基于ROS的开源SLAM框架,专门为机器人学和自动驾驶领域设计,提供完整的2D定位与地图构建解决方案。作为一款高效的机器人导航工具,它能够帮助开发者在大规模环境中实现实时、精确的定位与建图。 什么是SLAM Toolbox?核心功能解析 SLAM Toolbox是专为机器人定位与地图构建而设计的强大工具箱,集成了多种先进的SLAM算法和优化技术。无论是室内服务机器人、仓库物流系统,还是智能安防巡逻,都能通过这个工具实现精准导航。 该项目的核心优势在于支持多种运行模式,满足不同应用场景的需求: * 同步建图模式:实时处理所有激光扫描数据,适合小型到中型环境