问题现象
驱动联调时无法扫描到 Xilinx PCIe 设备,ILA 抓取 pcie_link_up 信号发现一直为低电平。
问题分析
遇到这问题时,先在 FPGA 里搭个最小系统测试环境,用 XDMA + BRAM 的形式,减少其他模块干扰。框架如下:

1. 检查 PCIe 时钟
时钟源很关键,务必用原理图里的 GT Ref 差分时钟,通过 IBUFDSGTE 转为单端时钟。



2. 检查 PCIe 复位
PCIE 复位信号有严格要求:上电后,PCIE_RESTN 需在电源稳定后延迟一段时间再释放,通常建议 100ms 以上。
这 100ms 期间系统主要在做这些事:
- 电源稳定时间
- 参考时钟稳定时间
- PCIe IP 核的复位和初始化时间
- 链路训练时间
典型时序分配参考:
- 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 的对外接口。当然也可以自己写,只要保证端口与原理图匹配就行。











