UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

AR# 54710

MIG 7 Series - DDR3 - Controller hangs on a read-modify-write operation

Description

Version Found: MIG 7 Series 1.8
Version Resolved: See (Xilinx Answer 45195)

There is a known issue with the user design top-level wrapper when the ECC logic is enabled that causes the controller to freeze when a read-modify-write operation is issued. The failure signature of this issue is that the initial read is performed correctly, but the subsequent write does not occur. Instead, the controller unexpectedly returns the read data on the UI interface by asserting app_rd_data_valid.  Shortly afterward, the controller hangs, observed as a permanent desertion of the app_rdy signal.

Solution

The reason for this is that two of the ECC parameters (MC_ERR_ADDR_WIDTH and ECC_WIDTH) are defined incorrectly in the user design top-level wrapper. These parameters are set statically in the top-level user design and for some configurations are set incorrectly, causing the behavior described above. They should be set dynamically, similar to how they are done in the example_design.v/.vhd. To work around the problem, replace the MC_ERR_ADDR_WIDTH and ECC_WIDTH parameter definitions in the top-level user design with the following equations:

localparam C0_MC_ERR_ADDR_WIDTH = ((C0_CS_WIDTH == 1) ? 0 : C0_RANK_WIDTH)
                                 + C0_BANK_WIDTH + C0_ROW_WIDTH + C0_COL_WIDTH
                                 + C0_DATA_BUF_OFFSET_WIDTH;

localparam C0_ECC_WIDTH = (C0_ECC == "OFF")?
                           0 : (C0_DATA_WIDTH <= 4)?
                            4 : (C0_DATA_WIDTH <= 10)?
                             5 : (C0_DATA_WIDTH <= 26)?
                              6 : (C0_DATA_WIDTH <= 57)?
                               7 : (C0_DATA_WIDTH <= 120)?
                                8 : (C0_DATA_WIDTH <= 247)?
                                 9 : 10;

Note: In multi-controller designs, C0 will need to correspond to the number of memory controllers (i.e. C0, C1, C2, etc.)

Revision History
03/05/2013 - Initial release

AR# 54710
Date Created 03/04/2013
Last Updated 10/13/2016
Status Active
Type Known Issues
Devices
  • Artix-7
  • Kintex-7
  • Virtex-7
  • Zynq-7000
IP
  • MIG 7 Series