Real World Technologies - en dan specifiek David T. Wang - is in de wereld gedoken van ECC-geheugen. ECC staat hierbij voor Error Correcting Code en is bedoeld zoals de naam al aangeeft om fouten te corrigeren welke meestal worden veroorzaakt door elektronische ruis in de geheugenreepjes. Het artikel zal uit twee delen bestaan, dit eerste deel zal zich voornamelijk toespitsen op de basis van ECC, namelijk foutdetectie, -locatie en -correctie.
De makkelijkste en eenvoudigste manier om fouten te ontdekken is met behulp van een paritybit. Naar gelang van de rekensom over de eerste acht bits komt er in de paritybit een één of een nul te staan. Wanneer de gegevens uit de eerste acht bits weer worden berekend en de uitkomst niet overeen komt met de paritybit heb je te maken met een fout. Het manco van dit systeem is natuurlijk dat er toch een fout in de gegevens aanwezig is, maar de uitkomst niet verschillend is aan de paritybit. Verder is het niet mogelijk om aan te wijzen door welke bit de fout veroorzaakt wordt, waardoor een correctie een omslagachtige procedure kan aannemen. Het voordeel is echter wel dat het systeem makkelijk en relatief snel is. Vandaar dat we deze manier van foutdetectie voornamelijk terugvinden in cache-geheugen.

De volgende stap is om met behulp van algoritmes fouten te ontdekken en te verbeteren. Hierbij is men begonnen met SEC ECC, wat staat voor Single-bit Error Correction Error Correcting Code en ook bekend staat als Hamming-codes. Het simpelste foutalgoritme is SEC ECC, waarbij er een controlebit wordt toegepast op talloze andere bits (N). Hierbij geldt dat wanneer N<32, de opslagkosten hoger uitvallen dan bij een 8:1 paritybit. Dat is niet het geval wanneer N>32. Voor alle ECC-algoritmes geldt dat zij voor hun foutdetectie gebruikmaken van hetzelfde principe als bij de paritybit. Het verschil echter is nu is de rangschikking van de paritybit. Er wordt namelijk een redundante controleopstelling toegepast, waardoor het mogelijk is om een fout in een enkele bit waar te nemen. Door deze waarneming en door het feit dat het binaire systeem gebruik maakt van twee waarden, is het ook mogelijk meteen de fout te corrigeren.
De foutcontrole is mogelijk door de lay-out van een bepaalde datastroom op te slaan in een langere codeword. Dankzij het Hamming-verschil van drie, is er namelijk altijd minimaal een afwijking van drie bits tussen de verschillende SEC ECC-codewords. Hierdoor kan er een fout van één enkele bit worden gecorrigeerd, echter het nadeel is wanneer er twee fouten aanwezig zijn, deze niet van elkaar kunnen worden onderscheiden. Dit wel mogelijk wanneer SECDED ECC - Single bit Error Correction, Double bit Error Detection - wordt aangewend. Hier wordt in plaats van een Hamming-verschil van drie, een Hamming-verschil van vier gehanteerd. Echter het is alleen mogelijk om de twee foute bits te ontdekken, niet te corrigeren. Voor een gedetailleerde uitleg verwijzen we naar de uitleg van de schrijver.
Met de komst van steeds kleinere ontwerpen van DRAM-circuits is de kans op multi-bitfouten steeds groter geworden. Vandaar de noodzaak om gebruik te gaan maken van multi-bitfoutdetectie en -correctie. Onderzoek heeft uitgewezen dat multi-bitfouten voornamelijk veroorzaakt worden door een energieke neutron of een hardwarematige fout in het DRAM-geheugen. Het resultaat hiervan is, is dat deze fouten bij elkaar plaatsvinden en dat de detectie hiervan zich ook daarop kan gaan focussen. De achtergrond van het toegepaste algoritme is iets te complex om daar gedetailleerd op in te gaan. De auteur heeft echter wel een verwijzing voor de geïnteresseerde lezers.
Een manier om multi-bitfoutdetectie en -correctie uit te voeren is het Bossen b-adjacent Error Correction Algorithm. Dit algoritme maakt ook gebruik van een paritybit zoals het SEC ECC-algoritme, maar met een fundamenteel verschil. Er worden namelijk N/2-paritybitsets gebruikt, waarbij de set bestaat uit aangrenzende bitwaarden (01,), (2,3) en (63,64). N staat voor het aantal te controleren bits. Bij een veld van 64 te controleren bits ontstaan er 32 sets van twee aangrenzende waarden die elk uit vier elementen kunnen bestaan. Deze elementen zijn (0,1), (1,0), (1,1) en (0,0) en hierbij is een enkele foutcorrectiebit in het Galouis-veld gelijk aan de twee aangrenzende correctiebits in het binaire veld. Dit vormt samen de onderstaande matrices. Voor een uitgebreidere uitleg van de werking van het Bossen-algoritme, wordt door de auteur hier en hier verder op ingegaan.

Een nadeel van de hiervoor besproken algoritmen is dat er enige vertraging optreedt in de verwerking van de gegevens, deze vertraging kan nu net fataal zijn bij gebruik in een kritiek real-timesysteem. Vandaar dat er ook nog andere methoden zijn ontwikkeld die ervoor moeten zorgen dat geen fouten optreden in de gegevensstroom. Een van deze technieken is, bit steering waarbij er gebruik wordt gemaakt van fysiek nabij gelegen gegevenbits. De waarden hiervan worden verder gestuurd naar verschillende ECC-words, welke worden toegepast bij ontdekking van een of meerdere corrupte bits. In dat geval wordt de waarde van de ECC-word overgestuurd en kan het systeem zonder enige vertraging weer verder.
Het grote nadeel van bit steering is echter wel incompatibiliteit met moderne geheugentechnieken. Aangezien deze voornamelijk gebruik maken van synchrone gegevensoverdracht. Een mogelijke oplossing hiervoor kan bijvoorbeeld het moment van versturen van gegevens naar het ECC-word te verschuiven. Door dit pas uit te voeren wanneer de data in de geheugencontroller is beland, kan de synchronisatie van datatransport tussen DRAM-chips en geheugencontroller intact blijven.
Twee andere manieren die wel in combinatie met nieuwere geheugentechnologieën kunnen worden toegepast zijn chipkill en memory scrubbing. Chipkill hanteert het principe van tolerantie. Hierbij wordt getolereerd dat er een geheugenfout ontstaat op systeemlevel, maar er wordt wel voor gezorgd dat de fout niet doorwerkt door de juiste waarde over de corrupte heen te kopiëren. Dit kan in een aantal manieren worden toegepast. Zo kunnen er redundante geheugenchips of langere ECC-words - waardoor er betere foutcorrectie mogelijk is - worden gebruikt als parity. Verder werd de eerste generatie van de chipkill-technologie in gespecialiseerde DRAM-geheugenchips geïmplementeerd, terwijl tegenwoordig de techniek naar de geheugencontroller is verplaatst en toegepast wordt in combinatie met standaard ECC-geheugen.

Tenslotte is er ook nog de techniek van memory scrubbing. Waar er hiervoor van wordt uitgegaan van het principe dat aangrenzende bits te corrigeren zijn en multi-bitfouten die niet bij elkaar in de buurt voortkomen, niet, gaat memory scrubbing een stapje verder. Er wordt namelijk continue een constante leesactie uitgevoerd door de geheugencontroller in het foutcorrectiecircuit en de ingelezen gegevens worden dan weer teruggezet in het geheugen. Hierdoor wordt elke corrupte bit gecorrigeerd en 'scrubbed'. Deze manier vraagt echter flink wat stroom en bandbreedte, vandaar dat deze techniek alleen wordt toegepast in high-end servers waar er een grote mate van nauwkeurigheid is vereist en wordt verwacht.