问题现象
与驱动联调:驱动无法扫描到 Xilinx 的 PCIe 设备
记录了 FPGA 开发中 PCIe XDMA 驱动无法扫描到设备的问题。通过检查时钟、复位、Lane 约束及降速测试,最终利用 LTSSM 状态机监控定位故障。发现物理层就绪但 Lane 顺序检测卡住,排查硬件电路发现主机 TX 端缺少电容导致 AC 耦合失效。更换为电容后链路恢复正常。

与驱动联调:驱动无法扫描到 Xilinx 的 PCIe 设备
通过 ila 抓取 pcie_link_up 信号:发现 link up 一直为低
出现这种情况,在 FPGA 中搭建测试环境,使用 XDMA+BRAM 的形式,减少其它模块的影响,框架如下:

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



复位:PCIe 复位信号有要求--上电后,PCIE_RESTN 信号需在电源稳定后延迟一段时间再释放,通常是 100ms 以上
而这 100ms 的时间,系统主要做以下的事情:
// 典型的 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 的要求,但是保险起见还是加上

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


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

如果还是不行,那我们需要检测 pcie 的相关的几个状态。
这里我们需要查看 PCIe 的 LTSSM 状态机,那什么是 LTSSM 状态机呢?
是一种常用于 PCI Express(PCIe)接口的状态机,它可以控制 PCIe 总线的传输流程。LTSSM 由多个状态组成,每个状态都代表了不同的总线传输阶段。
一般大家会找不到,按照如下的方式
首先:勾选配置界面的 Use Class Code Lookup Assistant 这个选项

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

在这里搜索 LTSSM 的小写,就能找到 ltssm_state 的信号,将其添加到 debug 里面正常的综合实现就可以了。

LTSSM 状态机根据厂商不同会有微小的差异,我们使用的是瑞芯微的,我的状态卡在了 08 即 Lane 顺序检测。意味着是 lane 的问题。

那我们通过这个方式监控的除了 LTSSM 信号以外,还有几个关键信号
phy_rdy_n:物理层就绪,一种存在性检查,0:表示物理层就绪 1:表示异常
时钟是否存在? 复位序列是否正常? PLL 是否正常锁定? 电源是否 power good
cfg_cuurent_speed_o:协商的速率,PCIE1.0/2.0/3.0 分别对应 1/2/3
link_width:协商的宽度
我的故障就是:
phy_rdy_n 为 0,说明物理层就绪,时钟和复位是正常的
LTSSM 卡在了 0x08,且 Link_width 为 0,说明是 LANE 的异常导致的。

重新检查电路,发现主机的 TX 端,没有放置电容,而使用的是电阻,导致的 AC 耦合问题,将电阻更换为电容,链路问题解决

可以看到 Link up 拉起,驱动可以正常检测到 PCIe 设备。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online