04-13-2015 02:55 AM
Does anybody have any suggestions for implementing ECC on external DDR3 on address widths less than 72 bit, preferably 32 bit.
I see the option to include ECC using the MIG however thats using a width of 72 bits.
Does anybody know if I can use the LogiCore ECC IP block on the front end of my MIG generated memory controller?
04-13-2015 02:59 AM
MIG supports ECC only for X72 data width, other data widths do not have this feature.
04-13-2015 11:43 AM
Just to be clear, a "72-bit" data width for ECC means 72 total bits including 8-bit ECC (Hamming code) and 64-bit data. Do you want 32 bit data plus ECC or 32 bits including the ECC?
04-13-2015 11:15 PM
The specifiation isn't set in stone however I believe that using 72 bits is going to use up too many pins and use too much board space. I was wondering if you knew of any solution using either 32-bit plus ECC bits or even 16-bit plus ECC bits.
Any help would be appreciated.
04-14-2015 06:27 AM - edited 04-14-2015 06:33 AM
My thought is that you can do this two ways:
1) edit the MIG source to add ECC for smaller data width, for example 32 + 7 bits. This places the ECC "under the hood" so your application code doesn't deal with it. The down side is that you'd probably spend a long time getting acquainted with code you'd really rather get as a black box.
2) Use "end to end" ECC by creating a non-ECC memory of say 40 bits and doing the ECC in wrapper code. Usually the user side data interface is 4 times the size of the memory, so you'd instantiate 4 copies of the ECC generator / checker if you wanted 32-bit data. This approach probably rules out scrubbing, although I'm not sure if the MIG ECC does scrubbing, either.
[Edit] I see you also asked about the Logicore ECC. It looks like this would be usable in your wrapper, since it can be configured for your desired data width. It just adds a little latency (looks like 3 clocks from the block diagram). Again, you'd need to instantiate multiple copies of this if they go in the user application-side interface to MIG.