To work around this issue: 1. Open the phy_init.v module located in the MIG output 'rtl/phy' directory.
2. Locate the following code fragment in phy_init.v:
// Assert ODT when: (1) Write Leveling, (2) Issuing Write command
// Timing of ODT is not particularly precise (i.e. does not turn
// on right before write data, and turn off immediately after
// write is finished), but it doesn't have to be
generate
if (nSLOTS == 1) begin
always @(posedge clk)
if ((((RTT_NOM == "DISABLED") && (RTT_WR == "OFF")) ||
(wrlvl_done && !wrlvl_done_r)) && (DRAM_TYPE == "DDR3"))begin
phy_odt0 <= #TCQ {CS_WIDTH*nCS_PER_RANK{1'b0}};
phy_odt1 <= #TCQ {CS_WIDTH*nCS_PER_RANK{1'b0}};
end
else if ((((RTT_WR != "OFF") && (DRAM_TYPE == "DDR3"))
||((RTT_NOM != "DISABLED") && (DRAM_TYPE == "DDR2")))
&& ((wrlvl_odt) ||
(init_state_r == INIT_RDLVL_STG1_WRITE) ||
(init_state_r == INIT_RDLVL_STG1_WRITE_READ) ||
(init_state_r == INIT_RDLVL_STG2_WRITE) ||
(init_state_r == INIT_RDLVL_STG2_WRITE_READ))) begin
phy_odt0 <= #TCQ phy_tmp_odt0_r;
phy_odt1 <= #TCQ phy_tmp_odt1_r;
end else begin
phy_odt0 <= #TCQ {CS_WIDTH*nCS_PER_RANK{1'b0}};
phy_odt1 <= #TCQ {CS_WIDTH*nCS_PER_RANK{1'b0}};
end
3. Make the following change (highlighted in bold): // Assert ODT when: (1) Write Leveling, (2) Issuing Write command
// Timing of ODT is not particularly precise (i.e. does not turn
// on right before write data, and turn off immediately after
// write is finished), but it doesn't have to be
generate
if (nSLOTS == 1) begin
always @(posedge clk)
if ((((RTT_NOM == "DISABLED") && (RTT_WR == "OFF")) ||
(wrlvl_done && !wrlvl_done_r)) && (DRAM_TYPE == "DDR3"))begin
phy_odt0 <= #TCQ {CS_WIDTH*nCS_PER_RANK{1'b0}};
phy_odt1 <= #TCQ {CS_WIDTH*nCS_PER_RANK{1'b0}};
end
else if (((DRAM_TYPE == "DDR3") ||((RTT_NOM != "DISABLED") && (DRAM_TYPE == "DDR2")))
&& ((wrlvl_odt) ||
(init_state_r == INIT_RDLVL_STG1_WRITE) ||
(init_state_r == INIT_RDLVL_STG1_WRITE_READ) ||
(init_state_r == INIT_RDLVL_STG2_WRITE) ||
(init_state_r == INIT_RDLVL_STG2_WRITE_READ))) begin
phy_odt0 <= #TCQ phy_tmp_odt0_r;
phy_odt1 <= #TCQ phy_tmp_odt1_r;
end else begin
phy_odt0 <= #TCQ {CS_WIDTH*nCS_PER_RANK{1'b0}};
phy_odt1 <= #TCQ {CS_WIDTH*nCS_PER_RANK{1'b0}};
end
This issue will be resolved in MIG v3.4 which will be released with ISE 12.1 software.