FPGA 外接 DDR4,最让人头疼的不是时序约束,而是上电那一下:MIG 的 init_calib_complete 始终拉不高,DDR 初始化失败,板子直接“变砖”在第一步。校准(Calibration)是 MIG 在上电后自动跑的一套训练流程——写均衡(Write Leveling)、读 DQS 门控、读/写眼图居中,本质是逐 bit 地找 DQS 和 DQ 之间的最佳采样点。训练失败,十有八九是下面的清单里某一项。

按排查成本从低到高过一遍。第一,MIG 配置里的颗粒型号:part number、位宽、rank、容量必须和实际贴片完全一致,选错型号训练参数全错,这是最高频的翻车点。第二,参考时钟:频率对不对、抖动够不够、MMCM/PLL 到底锁没锁,时钟不稳后面全是玄学。第三,复位时序:sys_rst 释放时参考时钟和电源必须已经稳定,复位释放太早是经典坑。第四,管脚约束:DQS/DQ 必须按 Byte Group 分组约束,I/O 电平标准(SSTL15/SSTL135/1.2V)要和原理图电源一致,VREF 引脚别悬空。第五,PCB:DQ/DQS 组内等长、DQS 差分对内等长超标会导致眼图偏到一边,训练余量直接吃光。

调试手段:把 MIG 的 dbg 接口引出来,用 ILA 抓校准状态机停在哪一步——卡在写均衡多半是 DQS/DQ 关系问题,卡在读训练多半是时钟或复位。Vivado 的 Hardware Manager 也能看 VTC 后的眼图余量。

结论:DDR 调不通时别先怀疑板子,先对一遍 MIG 配置和约束。校准失败九成是配置/约束/时钟三件套的问题,逐项打勾比盲目改板快得多。