So here's my problem. I've got a 16 bit SRAM connected to a microprocessor through an FPGA. This is for a manned lunar mission, so it needs to work right 100% of the time. The processor has a built in EDAC scheme, which uses 6 additional bits. This scheme detects and corrects all single bit errors, and detects all two bit errors. It can detect all odd numbers of bit errors. The problem is that it misses about 3% of 4, 6, etc., bit errors.
Now, some will say that the odds of a 4 bit error are very small - I'm talking about errors induced by radiation - a single event upset (SEU). As a charged particle passes through the SRAM, it sucks charge along with it, and if it hits just right, it's possible to affect multiple bits. The probability of this is actually very low, BUT - I'm not a fan of statistics when it comes to the life of the crew. So I'd like to get 100% coverage up to as many bits as possible.
Now, in order to accommodate the extra 6 bits in the EDAC scheme, I use a 32 bit wide SRAM. 16 + 6 = 22, so I have 10 bits left over to play with. I'm looking at implementing some sort of secondary EDAC scheme in the FPGA to catch the errors that the first scheme misses.
I only have a clock or two to do the calculations, so it can't be any fancy convolutional matrix operation, but I can do any kind of parity checking.
So - 16 bits of data, 10 bits of check code. Who knows a good algorithm for multiple bit error correction? Or better, who can point me to some basic principles that I can use to create my own?