问题现象
与驱动联调:驱动无法扫描到 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 的对外接口,但我们也可以自己约束,保证端口与原理图匹配即可。











