SDRAM

**Sünkroonne dünaamiline muutmälu** ehk **SDRAM** (ingl *Synchronous Dynamic Random Access Memory*) on dünaamiline muutmälu (DRAM), mida sünkroonitakse süsteemisiini kaudu süsteemi taktsagedusega. Klassikalisel DRAM-il on asünkroonne liides, mis vastab nii kiiresti kui võimalik igasugustele muutustele juhtsisendites. Erinevalt DRAM-ist on SDRAM-il sünkroonne liides, mis ootab enne juhtsisenditele vastamist ära taktsignaali. Takti kasutatakse sissetulevate käskude vastuvõtmisega tegeleva sisemise lõpliku olekumasina (*Finite State Machine* ehk FSP) juhtimiseks (käsukonveierid). See annab kiibi töö kiirendamiseks võimaluse teha palju keerulisemaid operatsioonijuppe.

Käsukonveiereid (*instruction pipelines*) kasutatakse protsessorites ühte käsujadasse kuuluva kahe või enama masinakäsu rööbiti täitmiseks. Konveier koosneb sel juhul käsu erinevaid osi (aadresside dekodeerimine ja aritmeetika, registritest lugemine, puhvermälu poole pöördumine jne) täitvatest elementidest. Ajavahemikku mälu poole pöördumise hetkest kuni kirjutamise või lugemise lõppemiseni, mil mälu on valmis reageerima järgmisele pöördumisele, nimetatakse latentsusajaks.

SDRAM-ile edasiarendustena on järgnenud DDR SDRAMi generatsioonid DDR2, DDR3, DDR4 ja DDR5.

## Ajalugu

SDRAM-i mõiste oli teada juba 1970. aastatest ning oli kasutusel varajastes Inteli protsessorites. Üldise heakskiidu elektroonikatööstuses sai see alles aastal 1993, mil Samsung esitles SDRAM-i KM48SL2000. Aastaks 2000 asendas SDRAM oma tõhususe tõttu kõik DRAM-mälud kõigis kaasaegsetes arvutites.

SDRAM-i latentsus ei ole väiksem kui asünkroonse DRAM-i oma. SDRAM-i eelised tulenevad võimest vahendada operatsioone mitmele mäluplokile ja sellega suurendada ribalaiust. (Mäluplokk on mälu osa, mille poole pöördutakse ühekorraga ja mille laius bittides on niisama suur kui esisiinil). Näiteks Pentium-protsessorite esisiini laius on 64 bitti, mistõttu sobib mäluplokiks kas üks DIMM-moodul või kaks 72 viiguga SIMM-moodulit.

SDRAM-id toodetakse peaaegu kõik vastavalt JEDEC-i (*Joint Electron Devices Engineering Council*, avatud standardeid kehtestav elektroonikatööstuse ühing) poolt kehtestatud standarditele. JEDEC avaldas oma esimese avaliku SDRAM-i standardi aastal 1993 ja on seejärel avaldanud teisi SDRAM-i standardeid, nende hulgas DDR1, DDR2, DDR3 SDRAM ja DDR4 SDRAM

SDRAM on kättesaadav ka registreeritud variantidena suuremat mastaapsust nõudvatele süsteemidele, nagu serverid ja tööjaamad.

Tänapäeva kõige suuremad SDRAM-ide tootjad on Samsung Electronics, Panasonic, Micron Technology ja Hynix.

## SDRAM-i ajalised piirangud
DRAM-i jõudlusel on mitmeid ajalisi piiranguid. Kõige enam on tähelepanu pööratud lugemistsükli ajale on vähendatud kuni väärtuseni 10 ns (100 MHz SDRAM) ja 5 ns (DDR-400).

Teine piirang on CAS-i (ingl *Column Address Strobe* – veeruaadressi impulss ehk taktsignaal ridade ja veergudena organiseeritud mälukiibis, mida kasutatakse konkreetsele andmebitile vastava veerunumbri kindlakstegemiseks) latentsus. See on püsinud suhteliselt muutumatuna 10–15 ns juures DDR SDRAM-i generatsioonide vältel.

Operatsiooni ajal on CAS-i latentsusaeg spetsiifiline arv taktitsükleid, mis on programmeeritud SDRAM-i registrirežiimi ja oodatud DRAM-i kontrolleri poolt. Määratud võib olla suvaline väärtus, kuid SDRAM ei hakka liiga aeglase latentsi puhul korrektselt tööle. Kõrgemate taktikiiruste juures CAS-i latentsusaeg taktsitsüklites tõuseb. 10–15 ns on 2–3 tsüklit (CL 2–3) 200 MHz DDR-400 SDRAM-i kellal, CL4-6 on DDR2-800 ja CL8-12 on DDR3-1600 jaoks.

SDRAM-i moodulitel on omad ajaparameetrite spetsifikatsioonid, mis võivad olla aeglasemad kui moodulis olevatel kiipidel. 100 MHz SDRAM-kiipide esmakordsel ilmumisel müüsid osad tootjad "100 MHz" mooduleid, mis ei oleks saanud sellise taktkiiruse juures usaldusväärselt töötada. Vastuseks avaldas Intel PC100 standardi, mis oli kooskõlas igasuguste nõudmistega ning sai töötada usaldusväärselt 100 MHz juures. See standard oli laialdaselt mõjukas ning termin "PC100" sai kiiresti üldiseks identifitseerijaks 100 MHz SDRAM-i moodulite puhul. Siiani kasutatakse "PC"- kui prefiksina koos numbritega (Näiteks PC66, PC100, PC133, kuigi tegelik numbrite tähendus on praeguseks muutunud).

Järjestikuste aadresside poole pöördumisel (mis on levinud juhtum, näiteks käskude lugemine programmist) genereerib SDRAM pärast esimese aadressi andmist järgmised ise. Seda nimetatakse “sähvatuseks” (inglise *burst*). Seejuures kulub esimesele pöördumisele sama palju aega kui FPM- ja EDO-mälu puhulgi, kuid järgnevad andmed on loetavad ja kirjutatavad juba siini sagedusega. “Sähvatuse” pikkuse ja muud parameetrid saab SDRAM-le vastava registri abil ette anda.

## SDR SDRAM
Alguses tuntud kui SDR SDRAM (ingl. *single data rate SDRAM* ehk ühekordse kiirusega sünkroon-DRAM*),* aktsepteerib ühe käsu ja saadab ühe andmesõna ühe taktitsükli jooksul. Tüüpilised taktsagedused on 100 ja 133 MHz. Kiibid on valmistatud valiku andmesiini suurustest (levinumad on 4, 8 või 16 bitti), kuid kiibid on peamiselt kokku pandud 168-kontaktilistesse DIMM-idesse, mis loevad või kirjutavad üheaegselt 64 (non-ECC) või 72 (ECC) bitti.

Andmesiinide kasutamine on keerukas ja nõuab kompleksset DRAM-kontrolleri vooluringi, kuna DRAM-ile asuvad andmed peavad olema esitatud kirjutamiskäsuga sama tsükli ajal, kuid lugemine annab väljundi 2 või 3 tsüklit pärast lugemiskäsku. DRAM-kontroller peab jälgima, et andmesiini ei kasutataks samal ajal nii lugemiseks kui ka kirjutamiseks.

Tüüpiline SDR SDRAM-i kella sagedus on 66, 100 ja 133 MHz (perioodid 15, 10 ja 7,5 ns), kuid on saavutatud ka sagedust kuni 150 MHz.

### SDRAM-i juhtsignaalid

Kõik käsud on ajastatud sõltuvalt taktsignaali tõusvast servast. Lisaks kellale on 6 madalalt töötavat kontrollsignaali, mis on kogutud kella tõusva servale.

***CKE** (*Clock Enable* "Kell lubatud"). Kui see signaal on madalal, käitub kiip nagu oleks kell peatatud. Mingeid käske ei tõlgendata ja käsulatentsusaeg ei möödu. Teiste kontrollridade olek ei muuda midagi. Selle signaali efekt on ühe tsükli jagu viivitatud, mis tähendab, et käimasolev tsükkel jätkub tavapäraselt, kuid järgmist eiratakse (välja arvatud CKE sisendi kontrollimine). Normaal tegevus taastub kella tõusul juhul, kui CKE on kõrgel.

***CS** (*Chip Select* "Kiibi valik"). Kui see signaal on kõrgel, siis kiip eirab kõiki teisi sisendeid (välja arvatud CKE) ja käitub, nagu oleks saanud käsu NOP.
***DQM** (*Data Mask* "Andme mask"). Kui kõrgel, siis need signaalid lülitavad andmete sisend/väljundi välja. Kui antud signaal kaasneb kirjutatavate andmetega, siis tegelikult andmeid DRAM-ile ei kirjutata. Kui pandud kõrgeks kaks tsüklit enne lugemis tsüklit, siis andmeid kiibist ei väljastata. DIMM-il ja x16 mäludel on iga 8 biti kohta on üks DQM rada
***RAS** (*Row Address Strobe* – rea-aadressi strobeerimisimpulss). Hoolimata nimetusest ei ole see impulss, pigem lihtsalt käsu bit. Koos CAS-i ja WE-ga valib see ühe kaheksast käsust.
***CAS** (*Column Address Strobe –* veeruaadressi strobeerimisimpulss). Hoolimata nimetusest ei ole see impulss, pigem lihtsalt käsu bit. Koos RAS-i ja WE-ga valib see ühe kaheksast käsust.
***WE** (*Write enable* – 'luba lugemine'). Koos RAS-i ja WE-ga valib see ühe kaheksast käsust. Enamasti saab selle järgi eristada lugemis käske kirjutus käskudest.

SDRAM-seadmed on üldjuhul jagatud kaheks või neljaks sisemiseks andmepangaks. Üks või kaks aadressi sisendit (BA0 ja BA1) valivad, millisesse ossa signaal saadetakse.

Paljud käsud kasutavad ka aadresse aadressi sisendjalgadelt. Osad käsud, mis ei kasuta aadressi või esitavad tulpaadressi, kasutavad ka A10-t, et valida variante.

Käskude mõistekaart:

### SDRAM-i talitlus

### Käskude interaktsioon

#### Valangu/sähvatuse lugemise katkestus

### SDRAM-i valangu/sähvatuse käsk

### SDRAM-i režiimiregister

### Automaatväskendus

### Energiasäästlik režiim

## Kirjandus
*http://vallaste.ee/
*http://www.keeleveeb.ee/dict/speciality/aks/
*http://www.keeleveeb.ee/dict/speciality/computer/
*http://www.keeleveeb.ee/dict/speciality/itstandard/
*http://aare.pri.ee/dictionary.html
*http://en.wikipedia.org/wiki/Synchronous_dynamic_random_access_memory