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

RTD1296PB与RK3568在NAS与智能家居中的实战性能较量

1. 从NAS到智能家居:为什么需要关注这两颗芯片? 如果你正在搭建家用NAS系统或者规划智能家居中枢设备,处理器选型绝对是绕不开的关键决策。RTD1296PB和RK3568作为市面上主流的中端ARM处理器,经常让开发者陷入选择困难。我在实际项目中用过这两款芯片,深刻体会到它们的差异不仅体现在参数表上,更直接影响着设备的实际体验。 RTD1296PB是瑞昱半导体面向家庭影音市场推出的老将,凭借出色的视频处理能力和成熟的OpenWRT支持,在早期NAS设备中占据重要地位。而瑞芯微的RK3568则是后来居上的多面手,22nm制程搭配Cortex-A55架构,在保持低功耗的同时提供了更强的扩展性。实测下来,两者的性能差距在日常使用中可能不会立即显现,但在特定场景下会拉开明显差距。 2. 硬件架构深度对比:藏在参数背后的细节 2.1 计算核心与制程工艺 先看最核心的CPU部分,RK3568采用4核Cortex-A55设计,最高主频2.0GHz,相比RTD1296PB的Cortex-A53架构有着明显的IPC提升。我在压力测试中发现,同样的文件压缩任务,RK3568能快15-20%。

Isaac Lab 机器人强化学习实战:配置架构、机器人添加流程与调参技巧全解析

Isaac Lab 机器人强化学习实战:配置架构、机器人添加流程与调参技巧全解析

0. 前言 Robot Lab 是基于 NVIDIA Isaac Lab 构建的机器人强化学习扩展库,专注于足式机器人的运动控制任务。该项目由 Ziqi Fan 开发维护,目前已支持包括 Unitree Go2、G1、H1 在内的十余款主流机器人平台。与原生 Isaac Lab 相比,Robot Lab 提供了更加完善的奖励函数库、域随机化配置以及针对不同机器人形态优化的训练参数。 在深入技术细节之前,有必要先理解 Isaac Lab 的基本架构。Isaac Lab 构建于 Isaac Sim 之上,采用分层设计:最底层是 Omniverse 渲染引擎与 PhysX 物理引擎,中间层是 Isaac Sim 提供的机器人仿真接口,最上层则是

Radar: Record of Practical Operations for Handheld Laser Radar Mapping Preparation

Radar: Record of Practical Operations for Handheld Laser Radar Mapping Preparation

03 - 手持激光雷达建图实操记录 1. 概述 手持 TG30 激光雷达进行 Cartographer 建图测试,验证 SLAM 软件链路是否跑通。 与官方教程的区别: 项目官方教程我们的方案SLAM 算法Gmapping(粒子滤波)Cartographer(图优化)里程计有底盘 odom无 odom,纯激光匹配雷达型号4ROS(三角测距型)TG30(TOF 飞行时间型)安装方式编译源码apt 一键安装启动方式ros2 launch slam_gmapping ...ros2 launch yahboomcar_nav map_cartographer_test_launch.py 官方教程使用 Gmapping,因 TG30 每圈 2020 点超过 Gmapping 的

无人机影像的像素坐标转大地坐标

无人机影像的像素坐标转大地坐标

前言 最近老板让我实现:已知无人机的位置、姿态、相机参数,获取无人机所摄照片中某一地物的地理坐标,虽然本科学过摄影测量,可无奈当时没好好学,现在大脑一片空白·······但直觉告诉我:就是获取相机内外方位元素,然后进行坐标转换即可。 (如有错误,还请批评指正QAQ) 一、认识坐标系 拜读了一些大佬的博客,发现从像素坐标系到大地坐标系的转换过程中,涉及到好多坐标系,如:像素坐标系、图像坐标系、相机坐标系、机体坐标系、ENU坐标系、大地坐标系。下面简略介绍一下各个坐标系及其之间的联系。 (1)像素坐标系 像素坐标系通常以o-u-v表示,原点o位于图像右上角,u轴水平指向右,v轴竖直指向下,以像素(pixel)为单位。 (2)图像坐标系 图像坐标系和像素坐标系在同一个平面上,原点是相机光中与成像平面的交点,通常为成像中心,以毫米(mm)为单位。从下图不难看出,图像坐标系和像素坐标系之间由平移、缩放关系,转换起来还是比较容易滴~ (3)相机坐标系