光
最近调一块 FPGA 板,DDR 接口一上高速率就报时序违例,仿真看着没问题,一上板就偶发读写错误。复盘下来,排查顺序其实很固定,分享一下我的做法。
第一,先看约束对不对。很多人直接抄参考设计的时序约束,却没核对自己这颗颗粒的速率等级和位宽。先确认时钟约束、输入输出延迟约束是不是按实际时钟树写的,约束里写错一个数,后面全白忙。
第二,看 PHY 的校准结果。DDR PHY 上电会做写均衡、读门控校准,把校准日志拉出来:哪一组 DQ 没过、眼图余量最小的是哪几根线,往往就是问题集中区。校准不过先别怀疑代码,先查电源和参考电压。
第三,查板级走线。DDR 对等长、阻抗、参考平面的要求很实在:地址命令线和数据线分组等长有没有做够,换层有没有连续参考平面,VTT 端接电源纹波大不大。有一回就是 VTT 电源纹波超标,校准时好时坏。
第四,再回到时序报告本身。区分建立时间和保持时间违例:建立违例多半是路径太长或时钟偏斜大,保持违例多半是时钟树不对称或约束写错,两者改法完全不同,不要一股脑加流水线。
最后留个经验:DDR 调试先把速率降一半跑通,再一级一级往上加,定位速度比直接在满速率上硬调快得多。
大家在 DDR 调试时,最先翻的是时序报告还是校准日志?有没有遇到过约束没错、校准也过,上板还是偶发错误的情况?
第一,先看约束对不对。很多人直接抄参考设计的时序约束,却没核对自己这颗颗粒的速率等级和位宽。先确认时钟约束、输入输出延迟约束是不是按实际时钟树写的,约束里写错一个数,后面全白忙。
第二,看 PHY 的校准结果。DDR PHY 上电会做写均衡、读门控校准,把校准日志拉出来:哪一组 DQ 没过、眼图余量最小的是哪几根线,往往就是问题集中区。校准不过先别怀疑代码,先查电源和参考电压。
第三,查板级走线。DDR 对等长、阻抗、参考平面的要求很实在:地址命令线和数据线分组等长有没有做够,换层有没有连续参考平面,VTT 端接电源纹波大不大。有一回就是 VTT 电源纹波超标,校准时好时坏。
第四,再回到时序报告本身。区分建立时间和保持时间违例:建立违例多半是路径太长或时钟偏斜大,保持违例多半是时钟树不对称或约束写错,两者改法完全不同,不要一股脑加流水线。
最后留个经验:DDR 调试先把速率降一半跑通,再一级一级往上加,定位速度比直接在满速率上硬调快得多。
大家在 DDR 调试时,最先翻的是时序报告还是校准日志?有没有遇到过约束没错、校准也过,上板还是偶发错误的情况?

