Obsah
1. Trvalé a přechodné chyby pamětí DRAM
2. Vliv ionizujícího záření na paměťovou buňku DRAM
3. Chyby adresního dekodéru a čtecích zesilovačů
4. Chyby vznikající v paměťové matici
5. Chyby vznikající vlivem nesprávného časování a úrovně signálů
6. Chyby závislé na úrovni napájecího napětí
7. Testování pamětí – detekce chyb
8. Testovací vzory
9. Obsah následující části seriálu
1. Trvalé a přechodné chyby pamětí DRAM
Podobně jako u dalších elektronických součástek, které se nacházejí uvnitř počítače, může i u dynamických pamětí (DRAM) docházet ke vzniku chyb. Chyby je možné rozdělit podle několika kritérií, ovšem základní dělení je na chyby trvalé a chyby přechodné. Trvalé chyby vznikají defektem ve vlastní paměťové matici (bitových buňkách paměti), spojích v paměťové matici, čtecích a zápisových zesilovačích nebo podpůrné logice. Vznik defektu může být rozmanitý, od chyb vzniklých už ve výrobě přes tepelný či elektrický průraz až po fyzické poškození paměťového čipu. Přechodné (měkké) chyby naproti tomu mohou vzniknout i na zcela funkčním paměťovém čipu vlivem vnějších podmínek – typicky buď nárazem částice alfa nebo nedodržením doporučeného rozsahu provozních teplot, popř. výchylkami v úrovních a časování signálů. Přechodné chyby sice způsobí ztrátu informace zapsané do paměti, nezničí však vlastní paměťový čip.
2. Vliv ionizujícího záření na paměťovou buňku DRAM
V patnácté části tohoto seriálu jsme si ukázali, jakým způsobem jsou v dynamických pamětech zkonstruovány jednotlivé paměťové buňky. Každá buňka je na čipu představována jedním tranzistorem vyrobeným planární technologií a obdobou kondenzátoru, který je u novějších dynamických pamětí vytvořen v hlubokém zářezu v substrátu čipu (původní DRAM měly kondenzátor také vytvořen planární technologií, to však na čipu zabíralo zbytečně mnoho místa, proto se přistoupilo k částečnému rozšíření čipu do třetího rozměru). Samotný kondenzátor je od svého okolí oddělen izolační vrstvou tvořenou většinou oxidem křemičitým (SiO2). Sice se jedná o velmi kvalitní izolant, ovšem jeho vrstva je velmi tenká, takže se kondenzátor v paměťové buňce postupně vybíjí, což je důvodem k cyklické obnově náboje přečtením hodnoty a jejím opětovným zápisem (refresh).

Schematický řez paměťovou buňkou DRAM
Ovšem samotný paměťový čip i jeho obal obsahují různé izotopy, které vyzařují (v malém množství, ale přece jen) částice alfa, tj. relativně pomalu se pohybující jádra helia. Při nárazu částice alfa do kondenzátoru v paměťové buňce může dojít k jeho rychlejšímu vybití a rozptýlení náboje do substrátu paměťového čipu. Spolu se zvyšující se integrací DRAM se sice pravděpodobnost zásahu nějaké paměťové buňky snižuje (buňka má menší povrch a představuje tak menší cíl), ovšem zvyšuje se počet buněk a také se snižuje napájecí napětí i kapacita kondenzátorů, takže se podle některých studií (http://www.edn.com/index.asp?layout=article&articleid=CA454636) pravděpodobnost této chyby dalším vývojem paměťových čipů zvyšuje. Také ve vyšších výškách se zvětšuje intenzita kosmického záření (to má na DRAM podobný vliv jako částice alfa) a tím se i zvyšuje pravděpodobnost chyby. Uvádí se příklad běžného notebooku s 256 MB paměti v letadle, u kterého chyba nastane průměrně jednou za pět hodin.
3. Chyby adresního dekodéru a čtecích zesilovačů
Další chybou, kterou DRAM relativně často trpí, jsou poruchy adresního dekodéru. Jak již víme z předcházejících částí, je paměťová matice (přesněji řečeno buňka v paměťové matici) adresována adresou řádku (row address) a adresou sloupce (column address). Jak adresa řádku, tak i adresa sloupce se v adresních dekodérech převádí do kódu 1 z n. Pokud dojde k chybě v této části paměťového čipu, většinou dochází buď k souběžnému čtení/zápisu do několika buněk paměti současně (například dva řádky budou mít prakticky stejnou adresu) nebo naopak nějaká adresa nepovede k výběru žádného sloupce ani řádku. Může se jednat jak o trvalou, tak i přechodnou chybu. Trvalá chyba je způsobena skutečnou nefunkčností adresního dekodéru, přechodná chyba pak kapacitními vazbami mezi jednotlivými souběžně vedenými sloupcovými a řádkovými vodiči, jejichž intenzita závisí například na napájecím napětí nebo sekvenci za sebou jdoucích adres (v tomto případě se chyba velmi špatně testuje).

Blok paměťových buněk v paměti DRAM
4. Chyby vznikající v paměťové matici
Chyby samozřejmě mohou vznikat i ve vlastní paměťové matici. Kromě již zmíněného vlivu části alfa nebo kosmického záření se může jednat i o stálé chyby. Asi nejsnáze detekovatelné jsou chyby typu „trvalá nula“ či „trvalá jednička“, při kterých se z dané paměťové buňky neustále čte konstantní hodnota bez ohledu na to, co se do buňky předtím pokusilo zapsat. Může se jednat například o zkrat v buňce, průraz izolační vrstvy kondenzátoru, odpojení paměťové buňky od jejího tranzistoru vlivem příliš vysokého napětí či tepelné destrukce čipu atd. Taktéž ovšem může docházet k interakci sousedních paměťových buněk, typicky vlivem kapacitních vazeb. V praxi to může například vypadat tak, že v případě, že je do čtyř či osmi sousedních buněk zapsána ta samá hodnota, dochází k samovolnému přepisu této hodnoty i do buňky prostřední. Tato chyba se nedá pomocí jednoduchých paměťových testů odhalit, je nutné použít testy s vyšší složitostí, například Galpat.
5. Chyby vznikající vlivem nesprávného časování
V případě, že jsou při některých operacích s pamětí použity nesprávně časované signály, může docházet ke vzniku mnoha typů chyb, které však ve velkém množství případů nejsou destruktivní, tj. jedná se o měkké chyby. Může se jednat o vzájemnou interakci diferenciálních zesilovačů či o specifickou vlastnost těchto zesilovačů způsobující, že zesilovače mohou vyžadovat delší dobu zotavení v případě, že se po dlouhou dobu četla stále stejná úroveň (logická hodnota) – první pokus o přečtení opačné hodnoty může vést k chybné operaci. Také v případě, že jsou parazitní kapacity na spojích v paměťové mřížce příliš velké, může docházet ke zvyšování přístupové doby, což se (například na přetaktovaných systémech) může projevit chybami v paměti, zejména při zvýšené teplotě. Z tohoto důvodu je nutné provádět paměťové testy na zatíženém a dlouho spuštěném počítači, kdy se teploty paměťových čipů ustálí. Se zvyšující se teplotou také roste citlivost paměti na obnovování, přesněji řečeno se může urychlit vybíjení kondenzátorů umístěných v jednotlivých paměťových buňkách.
6. Chyby závislé na úrovni napájecího napětí
Na správnou funkci dynamické paměti má velký vliv i kvalitní napájecí napětí, které musí odpovídat specifikacím výrobce paměti jak svou voltáží, tak i maximálním povoleným zvlněním. Většina paměťových čipů akceptuje poměrně malý rozsah napájecího napětí, na rozdíl od jiných logických obvodů, které jsou na tuto veličinu méně citlivé. Tato citlivost dynamických pamětí je samozřejmě způsobena povahou paměťových buněk a způsobem čtení jejich hodnot v diferenciálních zesilovačích. Možná ještě citlivější jsou paměťové čipy na různé zákmity a zvlnění napájecího napětí, které může v počítači vznikat na různých místech – zapnutím motoru CD-ROM počínaje a přechodem mikroprocesoru do režimu spánku konče. Napájecí zdroj také nemusí odfiltrovat všechny vnější vlivy, zejména ty, které mají vysokou frekvenci (synchronní elektrické motory, zapnutí zářivky atd.). Povahy tímto způsobem vznikajících chyb jsou typicky náhodné (není jimi ovlivněna pouze jedna skupina paměťových buněk) a v některých případech také nepravidelné.
S tímto typem chyb mám osobní zkušenost. Na jednom mém pracovním počítači se začaly nepravidelně objevovat chyby paměti, které se projevovaly častým pádem programů i celého systému. Hlášení kernel panic či „modrá smrt“ – dříve zcela neznámé – se objevilo i několikrát do týdne. Zajímavé bylo, že testy paměti hlásily zcela zmatené výsledky – chyba byla pokaždé nalezena na jiné adrese (skupině paměťových buněk). Tento syndrom ukazoval na to, že samotná paměťová matice bude v pořádku, ale mohou být poškozeny dekodéry adres na paměťovém čipu, popř. se mohlo jednat o závadu na sběrnici. Později však byl odhalen mnohem prozaičtější důvod: na základní desce v jednom elektrolytickém kondenzátoru vyschnul elektrolyt, což způsobilo snížení jeho kapacity na skoro nulovou hodnotu. Tento kondenzátor měl za úkol vyhlazovat napájecí napětí operační paměti, jehož zvlnění mělo za následek nepravidelné „zapomínání“ některých paměťových buněk.
Jedná se o poměrně nepříjemnou ale častou závadu, která je zákeřná v tom, že se většinou projeví až po uplynutí záruční doby na základní desky, kdy se parametry napěťových stabilizátorů rozladí. Oprava v tomto případě spočívá v prosté výměně vadného kondenzátoru za nějaký kvalitnější (na většině základních desek jsou použity velmi nekvalitní součástky, pravděpodobně z důvodu jejich nízké morální životnosti pro některé uživatele) – nejlépe jeho napájením na nožičky kondenzátoru původního, protože přímé pájení na několikavrstvé základní desce není v amatérských podmínkách zrovna nejjednodušší.
7. Testování pamětí – detekce chyb
Chyby paměťových čipů je možné různým způsobem testovat, a to mnohdy bez fyzického zásahu uživatele do zapojení počítače (jinými slovy – testy mohou probíhat přímo na počítači, paměť se nemusí dávat do žádného speciálního zařízení; čímž se mimo jiné otestují i chyby vznikající například vlivem kolísání napájecího napětí). Pro tento účel se používají takzvané testovací vzory, což jsou programově (přesněji řečeno algoritmicky) definované posloupnosti vstupních signálů, adres posílaných do paměťového čipu, vstupních dat a dat výstupních. Obecně platí, že v praxi (při dnešních kapacitách pamětí) není možné vytvořit takový testovací vzor, který by vždy a bezezbytku zjistil všechny chyby v paměti, protože složitost takového testovacího vzoru (měřená většinou počtem přístupů k paměti, tj. počtem operací čtení a zápisů v závislosti na počtu paměťových buněk) je obrovská.
V praxi se tedy používají sice neúplné, ale zato praktické testovací vzory, které většinou mají složitost N (lineární), N2 (kvadratickou) či N3/2 (menší než kvadratickou), kde N je počet paměťových buněk. Testovací vzory s vyšší složitostí se většinou nepoužívají, místo toho se aplikuje kombinace více typů testovacích vzorů se složitostí maximálně N2 (to je případ i populárního programu memtest, ve kterém je možné spustit sekvenci různých testovacích vzorů).
8. Testovací vzory
Testovacích vzorů byla vyvinuta celá řada, my si zde popíšeme pouze pět základních vzorů, od kterých mohou být odvozeny různé vylepšené varianty.
Ones/Zeros
Jedná se nejjednodušší typ testu se složitostí N. Nejprve se do všech buněk paměti zapíšou nulové hodnoty a posléze se celá paměť přečte a otestuje se, zda opravdu nulové hodnoty obsahuje. Totéž se provede s jedničkami. Počet kroků je tedy roven 4N. Tento test zjistí pouze ty nejzákladnější chyby, například „trvalou nulu“ či „trvalou jedničku“, ale chyby zákeřnější už ne. Například interakci paměťových buněk není možné zjistit, a také poruchy dekodéru adres se v tomto případě neprojeví – dokonce je v limitním případu možné, aby dekodéry nepracovaly vůbec a veškeré čtení a zápisy by probíhaly na stejné buňce paměti, aniž by to test odhalil.
Checkerboard
Tento test vznikl jednoduchou úpravou testu předchozího. Místo zápisu pouze jedné logické hodnoty se do paměťové matice zapisuje periodický vzorek 01010101, ve druhém kroku se tento vzorek testuje, třetím krokem je zápis inverzního periodického vzorku 10101010 a krokem čtvrtým čtení tohoto vzorku. Složitost tohoto testu je opět rovna N (provede se 4N kroků). Jedná se již o poněkud vylepšený test, který dokáže zjistit další poruchy paměti. S určitou pravděpodobností zjistí poruchy dekodéru adres (ale pouze pro sloupce, přičemž se musí jednat o chybu, která způsobí změnu sudého sloupce za lichý a naopak) a některé interakce mezi paměťovými buňkami. Ovšem tento vzorek vede k zaplnění paměťové matice sloupci stejných hodnot, takže nelze zjistit například poruchy adresního dekodéru řádku či vzájemné ovlivňování buněk ve stejném sloupci.
Marching ones/zeros
Tento test, který má taktéž složitost N (konkrétně se provede 10N kroků), je velmi často používaný pro svoje vylepšené detekční schopnosti. Test probíhá tak, že se všechny paměťové buňky nejprve vynulují a posléze se provádí následující operace: přečtení hodnoty i-té buňky, zápis inverzní hodnoty do i-té buňky pro hodnoty i od 1 do N (adresy postupně rostou) a posléze čtení hodnoty i-té buňky a zápis inverzní hodnoty i-té buňky pro hodnoty i od N do 1 (čítá se pozpátku). Posléze se test opakuje ještě jednou, ovšem s tím rozdílem, že je celá paměť naplněna jedničkami. Zapisovaný vzorek je již poněkud složitější, takže se dají zjistit i chyby v adresových dekodérech a čtecích zesilovačích.
Walking ones/zeros
Podobný název tohoto testu s testem předchozím by mohl naznačovat, že se opět jedná o jednoduchý test s lineární složitostí. Ve skutečnosti se v tomto testu provede 2(N2+N) operací, jedná se tedy o kvadratickou složitost. Nejprve se celá paměť vynuluje a posléze se vždy do i-té buňky zapíše jednička a otestuje se celá paměť na svůj obsah (evidentně v ní musí být zapsána pouze jedna jednička). Takto se pokračuje dále – původní jednička se vynuluje, zapíše se do další adresy a opět se přečte celá paměť. Druhá část testu je inverzní – všechny buňky jsou nastaveny na jedničku a mezi nimi „kráčí“ jediná nula. Tímto způsobem se poměrně přesně otestuje jak funkce paměťových dekodérů, tak i interakce mezi jednotlivými paměťovými buňkami. Pro programátory: tento test se hodně podobá bubble sortu v případě, že se má sestupně setřídit bitové pole, které obsahuje samé nuly a na konci jedinou jedničku.
Galpat (Galloping Pattern)
Jeden z nejlepších testů se nazývá Galpat, neboli Galloping Pattern. Tento test se podobá testu předchozímu, liší se však celkový počet kroků (4N2) i vlastní způsob čtení a zápisu jednotlivých paměťových buněk. Nejprve se, podobně, jako u předchozích testů, celá paměť vynuluje. Poté se provádí smyčka pro všechny paměťové buňky od 0 do N, ve které se provede inverze i-té buňky a ve vnitřní smyčce se postupně čte obsah i-té buňky, následně se čte obsah ostatních buněk a nakonec se obsah i-té buňky opět invertuje na svoji původní hodnotu. Posléze se celý test opakuje pouze s tou změnou, že je paměť na počátku naplněna samými jedničkami. Pomocí tohoto testu se otestuje velké množství různých vzorků uložených v paměti, takže lze detekovat chyby dekodérů adres, čtecích zesilovačů i vlastní paměťové matice.
9. Obsah následující části seriálu
V následující části tohoto seriálu se budeme věnovat problematice hierarchických paměťových systémů, ve kterých se mezi mikroprocesor a relativně pomalou operační paměť typu DRAM vkládá buď jedna nebo více vrstev takzvaných vyrovnávacích pamětí (cache memory). Použití vyrovnávacích pamětí je dnes prakticky nezbytné, protože rychlost mikroprocesorů roste již po více než dvě desetiletí mnohem rychleji než přístupová doba k libovolné buňce operační paměti (tvořené právě pomocí DRAM, dnes nejčastěji s využitím SDRAM) a není žádoucí, aby mikroprocesor musel neustále čekat na pomalou paměť a degradoval tak svůj výpočetní výkon.