Hlavní navigace

Práce se synchronními a asynchronními DRAM

19. 6. 2008
Doba čtení: 11 minut

Sdílet

V dnešní části seriálu o funkcích jednotlivých součástí počítačů si ukážeme, jakým způsobem se pracuje s různými typy dynamických pamětí (DRAM). Popíšeme si jak asynchronní, tak i synchronní dynamické paměti (včetně technologií DDR a DDR2). U asynchronních pamětí si ukážeme režimy FP a EDO.

Obsah

1. Práce se synchronními a asynchronními DRAM
2. Asynchronní dynamické paměti (DRAM)
3. Adresování asynchronní dynamické paměti v režimu RBC
4. Režim FP (Fast Page)
5. Režim EDO (Extended Data Out)
6. Synchronní dynamické paměti (SDRAM)
7. Burst režim
8. DDR (Double Data Rate) a DDR2
9. Obsah následující části seriálu

1. Práce s moderními DRAM a detekce chyb

Již v předchozí části tohoto seriálu jsme si řekli, že dynamické paměti (DRAM) jsou v současnosti používány jako operační (hlavní) paměti většiny počítačů, od jednoduchých PDA až po výkonné servery. Ovládání dynamických pamětí je sice poněkud složitější než v případě pamětí statických (SRAM), ovšem relativně nízká cena přepočtená na jeden bit, velká integrace a současně i malá spotřeba paměťových čipů více než vyvažují složitější ovládání. V minulosti se používaly především asynchronní dynamické paměti s minimem podpůrných obvodů na čipu, dnes se setkáváme především se synchronními dynamickými paměťmi, které na svém čipu kromě vlastní paměťové matice obsahují i poměrně složité podpůrné obvody, pomocí kterých se provádí poloautomatické či skryté obnovování pamětí (refresh), blokové přenosy dat (burst mode) atd. Na prvním obrázku je graf vyjadřující růst rychlosti synchronních DRAM, ovšem jak se dozvíme v dalších kapitolách, rychlost čtení či zápisu do jednotlivých paměťových buněk se od dob asynchronních DRAM příliš nezvýšila.

pc1601

Obrázek 1: Graf růstu rychlosti čtení a zápisu dat pro různé technologie dynamických pamětí

2. Asynchronní dynamické paměti (DRAM)

Asynchronní dynamické paměti se vyznačují tím, že na svém čipu většinou obsahují pouze minimum podpůrných obvodů, přičemž tyto obvody pracují maximální možnou rychlostí bez přítomnosti jakýchkoli synchronizačních (hodinových) signálů. Výrobce u těchto pamětí udává maximální dobu, kterou paměti trvá přečtení či naopak zápis do paměťové buňky určené svou adresou. O dodržení této doby se musí starat paměťový subsystém, v jednodušších případech přímo mikroprocesor. V praxi to například může znamenat, že mezi vystavením adresy (přesněji řečeno adresy sloupce – viz další text) na adresovou sběrnici a přečtením dat z paměti uběhne doba 50 či 60 ns (to je typická doba většiny asynchronních pamětí). Aby mikroprocesor tuto dobu dodržel (tj. nesnažil se z datové sběrnice číst data, která tam ještě nebyla pamětí zapsána), musí provádět jinou činnost, v nejhorším případě pouze nečinně několik taktů čekat. Principiální schéma asynchronní dynamické paměti je zobrazeno na druhém obrázku:

pc1602

Obrázek 2: Paměťová matice s adresním dekodérem řádků a sloupců

Z druhého obrázku je patrné, že se na paměťovém čipu nachází vlastní paměťová matice tvořená paměťovými buňkami (typicky tranzistor+kon­denzátor), dekodér adresy řádku (row address decoder) provádějící bitovou operaci „výběr 1 z n“, dekodér adresy sloupce (column address decoder), záchytný registr adresy řádku (row address latch), záchytný registr adresy sloupce (column address latch) a konečně blok zesilovačů (sense and refresh amplifiers) sloužících jak pro zápis, tak i pro čtení dat (jejich význam jsme si vysvětlili v předchozí části tohoto seriálu). Také si povšimněte způsobu připojení paměti na vnitřní sběrnici počítače – adresní část je rozvedena do záchytného registru adresy řádku a současně i záchytného registru adresy sloupce. V praxi se totiž adresa požadované paměťové buňky do paměti zapisuje nadvakrát. To, která část adresy se v daném okamžiku na adresní části sběrnice vyskytuje, je určeno pomocí signálů RAS (row address strobe) a CAS (column address strobe). Tyto signály jsou většinou negované (logická nula značí aktivní úroveň), z důvodu omezení HTML je budu značit s lomítkem před názvem: /RAS, /CAS. Význam rozdělení adresy na dvě části bude uveden v následující kapitole.

3. Adresování asynchronní dynamické paměti v režimu RBC

Typický způsob adresování asynchronních dynamických pamětí si vysvětlíme na příkladu velmi jednoduché paměti Intel 2118, jejíž pouzdro je zobrazeno na třetím obrázku (pamětníci možná znají spíše paměť Intel 2114 se čtyřbitovou datovou částí, která byla použita v ZX-81). Podobná pouzdra (resp. podobný význam pinů) mají i další asynchronní paměti s mnohem větší kapacitou. V případě Intel 2118 jedná o paměť s kapacitou 16k × 1 bit, tj. po přepočtu 2 kB. Některé piny mají jasný význam – Ucc je napájecí napětí, Udd zem. Dále se na pouzdře nachází pin Din, na který je zapisována hodnota bitu přečteného z paměti a naopak pin Dout určený pro zápis bitu do paměťové matice. Piny A0A6 slouží k zápisu adresy, která je rozdělena na horní a dolní polovinu. Horní polovinou adresy se volí řádek v paměťové matici, dolní polovinou pak sloupec. Pro řízení zápisu adresy i čtení či zápisu vlastních dat jsou určeny piny /RAS, /CAS a \WE.

pc1603

Obrázek 3: Vývody dynamické paměti Intel 2118 s odděleným vstupním a výstupním datovým pinem

Adresování, tj. výběr paměťové buňky pro čtení, je provedeno následujícím způsobem: nejprve se do záchytného registru adresy řádku nahraje adresa řádku, která většinou způsobí přečtení celého řádku, zapamatování přečtených hodnot v bloku zesilovačů a současně i zpětný zápis přečtených hodnot do buněk paměti (čtení je, jak již víme, destruktivní operace). V praxi to vypadá tak, že mikroprocesor na adresovou část sběrnice vyšle horní polovinu adresy a po ustálení signálů (za několik nanosekund) nastaví signál /RAS do nuly, tj. do jeho aktivního stavu. V této chvíli se adresa řádku zapíše do záchytného registru, provede se výběr řádku a celý řádek se pomocí zesilovačů přečte a současně obnoví. Posléze se do paměti zapíše adresa sloupce, pomocí které je vybrána konkrétní hodnota poslaná na datovou část sběrnice. Tato operace je signalizována snížením signálu /CAS na nulu (do jeho aktivního stavu). Nakonec se pomocí signálu \WE povolí čtení dat:

       ________                                      ____________________                                      ____________
/RAS           \____________________________________/                    \____________________________________/
       ________:_____________                        ____________________:_____________                        ____________
/CAS           :             \______________________/                    :             \______________________/
               :             :                                           :             :
adresa ----[adresa řádku]--[adresa sloupce]--------------------------[adresa řádku]--[adresa sloupce]----------------------
                      ______________________________                            ______________________________
\WE    ______________/                              \__________________________/                              \____________

Dout   ----------------------------[platná data]---------------------------------------------[platná data]----------------- 

Mezi zápisem adresy řádku a přečtením bitu uplyne doba tRAC, mezi zápisem adresy sloupce a přečtením pak čas tCAC. Tyto dva časy (resp. jejich minimální povolené hodnoty) musí výrobce paměti přesně specifikovat, protože jejich nedodržení by vedlo k chybnému čtení.

Zápis hodnoty do paměťové buňky je prováděn obdobným způsobem, ovšem s tím rozdílem, že zapisovaný bit musí být znám ještě před výběrem sloupce. Je to ostatně logické – výběrem řádku pomocí /RAS se všechny tranzistory na daném řádku otevřou a před obnovením nábojů v paměťových buňkách je již zapotřebí změnit stav příslušného zesilovače. Průběh řídicích signálů při zápisu je naznačen níže:

       ________                                      ____________________                                      ____________
/RAS           \____________________________________/                    \____________________________________/
       ________:_____________                        ____________________:_____________                        ____________
/CAS           :             \______________________/                    :             \______________________/
               :             :                                           :             :
adresa ----[adresa řádku]--[adresa sloupce]--------------------------[adresa řádku]--[adresa sloupce]----------------------
       __________          ________________________________________________          ______________________________________
\WE              \________/                                                \________/
                 :        :                                                :        :
Din    ---------[zapisovaná data]-----------------------------------------[zapisovaná data]-------------------------------- 
pc1604

Obrázek 4: Matice paměťových buněk v asynchronní DRAM s naznačením významu signálu /RAS a /CAS

4. Režim FP (Fast Page)

V předchozí kapitole jsme si ukázali základní režim nazývaný také RBC (RAS before CAS). Je typický tím, že se adresa vždy přenáší ve dvou částech – horní část (adresa řádku) a dolní část (adresa sloupce). Čtení i zápis je tak poměrně pomalou operací, protože je nutné vždy vybrat nějaký řádek (+ provést jeho obnovení) a až po určitém čase z daného řádku vybrat požadovaný sloupec. Ve snaze o urychlení přístupu do paměti přišli výrobci se zajímavou myšlenkou: proč neustále vybírat řádky v případě, že jsou data uložena za sebou? (kupodivu se poměrně často dosahuje lokálnosti dat, ať už se jedná o operační kód programu či zpracovávaná data) V případě, že by se vyžadovalo čtení či zápis do jednou vybraného řádku, stačilo by do paměťového čipu přidat ke každému zesilovači záchytný registr a vybírat z přečteného řádku jednotlivé sloupce mnohem rychlejším způsobem. Tak se zrodil režim FP (Fast Page Mode), který je typický tím, že se nemusí dodržet posloupnost signálů /RAS-/CAS, ale je možné (po prvotním výběru) použít pouze signály /CAS. Přístup k datům je tak mnohem rychlejší, může se jednat i o více než dvojnásobné urychlení:

       ________
/RAS           \___________________________________________________________________________________________________________________________
       ________:_____________                      ________________                        ________________                        ________
/CAS           :             \____________________/                \______________________/                \______________________/
               :             :                                     :                                       :
adresa ----[adresa řádku]--[adresa sloupce]----------------------[adresa sloupce]------------------------[adresa sloupce]------------------
                      ____________________________          ______________________________          ______________________________
\WE    ______________/                            \________/                              \________/                              \________

Dout   ----------------------------[platná data]-------------------------[platná data]---------------------------[platná data]------------- 

5. Režim EDO (Extended Data Out)

Ještě dalšího urychlení (o cca 10 až 20 procent) je možné dosáhnout v režimu EDO, neboli Extended Data Out, který byl podporován na některých čipsetech určených pro mikroprocesory 486 a prakticky všech čipsetech pro mikroprocesory Pentium. Tento režim se od režimu Fast Page odlišuje ve zdánlivé maličkosti – na datové sběrnici jsou platná data udržována po delší dobu, dokonce i po výběru dalšího sloupce pomocí signálu /CAS. Jakou má tento režim přednost? Mikroprocesor již nemusí čekat na to, až paměť vystaví přečtený bit na pin Dout, ale může v tomto „mezidobí“ již posílat novou adresu. Dochází tak k částečnému překryvu dvou operací, což ve výsledku vede k urychlení přístupu do paměti o zmiňované jednotky až desítky procent, především ve chvíli, kdy se mají přečíst či zapisovat data uložená na po sobě jdoucích adresách. Průběh signálů je ukázán níže:

       ________
/RAS           \___________________________________________________________________________________________________________________________
       ________:_____________                      ________________                        ________________                        ________
/CAS           :             \____________________/                \______________________/                \______________________/
               :             :                                     :                                       :
adresa ----[adresa řádku]--[adresa sloupce]----------------------[adresa sloupce]------------------------[adresa sloupce]------------------
                      ____________________________          ______________________________          ______________________________
\WE    ______________/                            \________/                              \________/                              \________

Dout   ----------------------------[           platná data            ]--[           platná data              ]--[      platná data       ] 

6. Synchronní dynamické paměti (SDRAM)

V současných počítačích se již asynchronní dynamické paměti příliš často neobjevují, místo toho se můžeme setkat s paměťmi synchronními, které jsou označovány zkratkou SDRAM (Synchronnous DRAM). Zatímco u asynchronních pamětí všechny jejich podpůrné obvody běžely svu maximální možnou rychlostí, jsou u synchronních pamětí použity hodinové signály a podpůrné obvody pracují na základě stavového automatu. Díky tomu je umožněno, aby měl paměťový čip svoji vlastní „inteligenci“, rozšiřuje se (a současně i komplikuje) protokol použitý pro přenosy dat do a z paměti, paměťové čipy většinou dokáží automaticky provádět obnovu (refresh) dat atd. Na tomto místě je vhodné uvést, že synchronní DRAM nejsou automaticky rychlejší než asynchronní DRAM – v praxi tomu bylo v počátcích právě naopak, protože nutnost synchronizace některé operace (resp. jejich výsledky) nepatrně zpomalovala. Samotná rychlost zápisu či čtení do a z jednotlivých paměťových buněk je poměrně konstantní a nijak výrazně se nezvyšuje, zejména v porovnání s neustále rostoucím výpočetním výkonem mikroprocesorů.

Vzhledem k tomu, že jsou veškeré operace v SDRAM prováděny synchronně, neuvádí se u nich žádné přístupové časy, tak, jak tomu bylo u pamětí asynchronních. Místo toho výrobce zveřejňuje taktovací frekvence a počet taktů nutných pro provedení nějaké operace. Způsob zápisu se postupně vyvíjel, poměrně často používaný je například zápis typu 5–2 (+ další číslice), kterým je řečeno, že mezi výběrem řádku a přečtením/zápisem dat uběhne minimálně pět hodinových taktů a mezi výběrem sloupce (řádek musí být již vybrán dříve) a přečtením/zápisem dat uběhnou minimálně dva takty. Délka taktu se zjistí z frekvence paměti: pro čipy taktované 100 MHz je délka taktu rovna 10ns. Případné další číslice mohou značit počet taktů nutných pro přenos dat v případě použití takzvaného burst režimu (blokové čtení či zápis posloupnosti dat bez uvedení adresy).

          __    __    __    __    __    __    _
hodiny __/  \__/  \__/  \__/  \__/  \__/  \__/  \__/
       ________:  2CLK     :   2CLK    :
/RAS           \_______________________:__________
       ________:___________:           :       ___
/CAS           :           \___________:______/
               :           :           :
adresa ----[adresa řádku]--[adresa sloupce]-------
                                       :
Dout   --------------------------------[platná data]- 

Poměrně často lze v různých dokumentech (především na Internetu) narazit na názor, že paměť o taktovací frekvenci 100 MHz a šířce 32 bitů dokáže zajistit přenosovou rychlost 100×32/8=400 MBs-1. Trvalého dosažení této rychlosti obecně nelze očekávat, snad jen při neustálém čtení pomocí burst režimu (a ještě s vypnutím obnovování), což ovšem v praxi není vždy možné. Při zcela náhodném přístupu je rychlost většinou mnohem menší, někdy dosahuje pouhé desetiny teoretické maximální přenosové rychlosti.

7. Burst režim

V předchozích odstavcích jsem několikrát narazil na termín burst režim. Jedná se o zvláštní režim paměti používaný při čtení či zápisu bloku dat o předem známé délce. Díky použití hodinového signálu je možné pouze inicializovat přenos (nastavit adresu řádku i adresu sloupce) a poté je (po prvotním zpoždění způsobeném výběrem řádku) v k každém taktu hodin provedeno přečtení jedné hodnoty či naopak zápis jedné hodnoty. Tímto způsobem paměť pracuje na své maximální možné rychlosti, proto je žádoucí v praxi používat právě přenosy bloků dat a nikoli čtení či zápis na náhodné adresy. Vzhledem k tomu, že při běžné práci mikroprocesoru to není možné přímo zajistit, používají se vyrovnávací paměti (cache), které se s operační pamětí synchronizují právě pomocí přesunů větších bloků dat. Právě blokové přenosy představují největší přínos synchronních dynamických pamětí oproti pamětem asynchronním, i když technologie výroby samotné paměťové matice zůstávají prakticky shodné.

8. DDR (Double Data Rate) a DDR2

Dalším krokem k urychlení přístupu k synchronním dynamickým pamětem je lepší využití hodinového signálu. Zatímco v původních SDRAM se využívala pouze vzestupná (či naopak sestupná) hrana hodin, jsou u pamětí DDR využity obě hrany – jak vzestupná, tak i sestupná. Výsledkem je, že při stejné frekvenci hodinového signálu se mohou operace provádět dvakrát rychleji (nebo se naopak některé operace prodlouží například z původních dvou taktů na 5 půltaktů, záleží na implementaci konkrétního čipu). Využití obou hran hodin je z hlediska konstrukce počítače i samotných paměťových čipů výhodnější než použití hodin s dvojnásobnou frekvencí (SRAM na 200 MHz vs. DDR SRAM na 100 MHz)), protože při velmi vysokých frekvencích dochází k nežádoucím jevům, například k vyhlazování hran, vyzařování signálu do okolí atd. V praxi se při popisu rychlostí pamětí můžeme setkat s hodnotami hodinových cyklů obsahujícími desetinnou část, například 3,5 atd. Význam je při znalosti funkce DDR jasný – paměť sice používá obě hrany jednoho hodinového pulsu, ovšem doba reakce se zapisuje v násobcích celých pulsů, tj. zmiňovaná hodnota 3,5 značí, že operace trvá 7 hran hodinového signálu (například 4 vzestupné a 3 sestupné).

Paměti DDR2 pracují podobným způsobem jako DDR, až na jednu změnu: sběrnice používá dvojnásobnou frekvenci hodinových signálů než vlastní paměťová matice, čímž se některé operace (především blokové přenosy) dvojnásobně urychlí, ale samotná matice může být vyrobena původní technologií. Zatímco u blokových operací dochází k urychlení, jsou operace náhodného přístupu většinou zatíženy větším zpožděním (latencí), což je pochopitelné, protože se sice zrychlilo rozhraní mezi paměťovým čipem a mikroprocesorem, ale samotné paměťové buňky i jejich podpůrné obvody jsou stále stejně pomalé, jako v případě SDRAM či DDR.

root_podpora

9. Obsah následující části seriálu

Vzhledem k tomu, ž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), je nutné nějakým způsobem zajistit, aby mikroprocesory nemusely čekat na čtení či zápis dat do operační paměti. Řešením jsou hierarchické paměťové systémy, ve kterých se mezi mikroprocesor a relativně pomalou operační paměť vkládá buď jedna nebo více vrstev takzvaných vyrovnávacích pamětí (cache memory). Právě této problematice, která je velmi důležitá i pro vývojáře, se budeme věnovat v následující části tohoto seriálu.

Byl pro vás článek přínosný?

Autor článku

Vystudoval VUT FIT a v současné době pracuje na projektech vytvářených v jazycích Python a Go.