判断是否写入裕度会导致数据错误:
如果在 MIG v2.3 版之前的设计中发现数据错误,应注意确保错误是由校准过程中选择的中心抽头导致的小幅写入裕度造成的。
- 严格遵守所有的 MIG PCB 指南,仔细关注 IBIS 仿真必须首先完成。
- 应对数据错误进行分析,以判断是否有写入错误发生。
查看 UG586 的“DDR3调试数据错误”部分,以协助隔离数据错误。
- 分析 MIG 2.3 之前版本的 OCLKDELAY 校准结果:
- 把来自“rtl/phy/mig_7series_v2_1_ddr_phy_oclkdelay_cal.v”的 dbg_phy_oclkdelay_cal[254:0]、“oclkdelay_calib_done”和“oclkdelay_calib_start” 添加到 ILA 中。
- 在把触发器设置为 oclkdelay_calib_done 的情况下,采集通过的复位(无写入数据错误)和失败的复位(有写入数据错误)的 ILA 波形。
- 确定找到的边缘数量,找到边缘的位置,最后(中心)抽头的位置以及最后(中心)抽头在成功写入和失败写入之间移动的抽头数量。
值得关注的信号有:
- dbg_phy_oclkdelay_cal[6*dqs_i+:6] = ocal_tap_cnt_r[dqs_i][5:0]
- dbg_phy_oclkdelay_cal[58] = ocal_rise_edge1_found_timing
- dbg_phy_oclkdelay_cal[59] = ocal_rise_edge2_found_timing
- dbg_phy_oclkdelay_cal[65:60] = ocal_rise_edge1_taps
- dbg_phy_oclkdelay_cal[71:66] = ocal_rise_edge2_taps
- dbg_phy_oclkdelay_cal[84:79] = stg3_tap_cnt
- dbg_phy_oclkdelay_cal[219+:6] = stg2_tap_cnt
- dbg_phy_oclkdelay_cal[225] = ocal_fall_edge1_found
- dbg_phy_oclkdelay_cal[226] = ocal_fall_edge2_found
- dbg_phy_oclkdelay_cal[232:227] = ocal_fall_edge1_taps
- dbg_phy_oclkdelay_cal[238:233] = ocal_fall_edge2_taps
- dbg_phy_oclkdelay_cal[244:239] = ocal_rise_right_edge
*在 OCLKDELAY 校准过程中只检测到一个边缘且选择的中心抽头基于一个已知抽头位置的时候,一般就会出错。