问题现象
与驱动联调:驱动无法扫描到 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)
为了避免这个问题,建议在程序中添加复位控制。虽然有时硬件复位时序可以满足要求,但保险起见还是加上。

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











