5. A DIGITÁLIS ADATTÁRAK (MEMÓRIÁK) A digitális berendezések a feladatuk ellátása közben rendszerint nagy mennyiségű adatot dolgoznak fel. Feldolgozás előtt és után rendszerint tárolni kell az adatokat. A tárolásra léteznek mágneses, optikai és félvezetős megoldások. A továbbiakban elsősorban a félvezetős memóriákat tárgyaljuk.
A FÉLVEZETŐ ALAPÚ MEMÓRIÁK A félvezető alapú memóriák elektronikus áramkörökkel oldják meg a tárolást. A tranzisztorok bekapcsolt és kikapcsolt állapotot használják fel a nullák és az egyesek tárolására. Elvileg egy memóriacellához (egy bit tárolására) elegendő egy tranzisztor, de rendszerint több másik tranzisztor is szükséges a címzés-‐ és más funkciók megvalósításához. A műszaki fejlődés és a vele memória áramkörök irányában támasztott igények számos megoldáshoz vezettek. Különböző elvek szerint történik a memória-‐ technológiák besorolása. Beszélünk lassú vagy gyors hozzáférésű eszközökről. Egyesek alkalmasak a számítógépek operatív memóriájának megépítésére, másokkal csak tömeges tárolásra alkalmas periféria építhető. A tárolás módja lehet statikus (tartós) vagy dinamikus (ideiglenes). A statikus tárolás cellánként egy flip-‐flopot feltételez. A dinamikus tárolás rendszerint nagyon költséghatékony, mindössze egy tranzisztor parazita kapacitását kell feltölteni vagy kiüríteni a beíráshoz, de periodikus frissítést igényel. A tárolás tartóssága más értelemben is lehet tartós vagy ideiglenes: vannak olyan memória áramkörök, amelyekbe egyszer tölthetünk tartalmat és az táplálás nélkül is megmarad. Másoknál a készülék kikapcsolásakor elveszik a tartalom. A cellákhoz való hozzáférés sorrendjében is jelentős különbségek vannak: a digitális adattárolás kezdetén csak soros hozzáférés volt lehetséges. Nagy előrelépés volt, amikor tetszés szerinti memóriacellához, várakozás nélkül hozzá lehetett férni (random access, pl. a ferritgyűrűs memóriáknál vagy a későbbi RAM-‐oknál). További osztályozás végezhető a belső szervezés alapján. Egyes megoldásoknál minden bit tárolása külön szervezési egység, míg más esetekben egy byte vagy nagyobb az alapegység, amelyet egyszerre írunk vagy olvasunk. A memória IC-‐k az alábbi tömbvázlattal ábrázolhatók:
C
MEM
A
V
A központi rész a memória mező (MEM). A külső áramkörökkel a kapcsolat címvonalakon-‐ (C), adatvonalakon-‐ (A) és a vezérlő vonalakon keresztül valósul meg. t A STATIKUS RAM (SRAM) A RAM rövidítés elsősorban a tetszőleges sorrend szerinti hozzáférésre utal (RAM – random access memory), de az ilyen eszközöket az is jellemzi, hogy a tartalom csak tápfeszültség alatt marad meg.
A RAM-‐okban a tárolást D típusú latch-‐ekkel végezzük, ezek képeznek egy-‐egy memória cellát. Beíráskor aktivizáljuk az engedélyező jelet (E), a kimenet (Q) elvileg mindig rendelkezésre áll.
Tényleges alkalmazásoknál az adatok bevezetése (beíráshoz) ugyanazon a vonalon történik, amelyen a kiolvasott értékeket is kapjuk. Ez a lehetőség az ábra szerinti kétirányú illesztő kapcsolással oldható meg.
A RAM-‐ok tömeges tárolásra szolgálnak, ami hatékony belső szervezést követel. Az ábrán látható módon, dekódoló áramkörrel történik az aktuális cella kiválasztása.
Valós áramköröknél a cella mező nem egysoros, hanem mátrix-‐szerű. Ilyenkor a dekódoló áramkört két részre osztják: egyik dekódoló a sort választja ki, a másik az oszlopot. Ilyen megoldást mutat az alábbi ábra. Valójában a K6T1008V2C típusú, 128kx8bit tárolására alkalmas statikus RAM belső szerkezetét és lábkiosztását látjuk.
A SRAM-‐ok nagy sebességű írást és olvasást tesznek lehetővé, bármely cella elérhető 10...100ns között, ezért ezek az eszközök alkalmasak számítógépek operatív memóriájának építéséhez. A DINAMIKUS RAM (DRAM) A statikus RAM könnyen használható, de nem számít olcsó megoldásnak, mivel egy memória cellához 6-‐8 tranzisztor szükséges. Egyszerűbb megoldást kínál a kondenzátorban történő töltés tárolás. Ha egy MOS tranzisztor bemenő kapacitását adott szintre feltöltjük, a tranzisztor állapota megváltozik (vezet, vagy nem vezet). Ilyen módon egyetlen tranzisztorral tudunk egy bitet tárolni. A gond csak azzal van, hogy a tárolt töltés fokozatosan elszivárog, ezért időnként frissíteni kell. A DRAM memóriacellái is mátrix alakban helyezkednek el. A dekódolás is hasonlóan oszlop-‐ és sor dekódolóval történik. A címek idő multiplexben érkeznek ugyanazokon a vezetékeken és két regiszterbe íródnak be a RAS majd a CAS jeleket aktiválva. Az időzítést olvasás és beírás eseteire az alábbi ábrák mutatják:
A tárolást végző kondenzátorok töltöttségi állapotát erősítők érzékelik és továbbítják a kimenetre a megfelelő bináris értékeket. Ugyanezek az erősítők végzik a frissítést is. Egyszerre egy egész sort lehet frissíteni.
Egy 2Gbit (512Mx4bit) kapacitású DRAM (típusjelzése MT41J512M4) belső szerkezetét láthatjuk a következő ábrán.
A dinamikus RAM-‐okat gyakran nem egyenként árusítják, hanem több IC-‐t egy nyomtatott lapra szerelve. Ilyen memória lapot mutat a következő ábra (MT8JSF12864HZ, 1GByte kapacitású egység, 204 kivezetéssel):
A SZINKRON DRAM ÉS SRAM ESZKÖZÖK Az eddigi leírások szerint a SRAM-‐ok és DRAM-‐ok működése aszinkron jellegű: a vezérlőjelek megfelelő kombinációjánál, és a címek megjelenését követően kis késéssel, megjelennek a kimeneti adatok vagy megtörténik a bemeneti adatok beírása. Számos korszerű berendezésben való felhasználáshoz az aszinkron működés nem megfelelő. A működés szinkronizálásához a SRAM és a DRAM szerkezethez építenek egy szinkron illesztő egységet:
A ROM Rendszerint van olyan igény, hogy bizonyos változatlan tartalmat (alap-‐szoftver, beállítások, stb.) meg kell őrizni egy berendezés teljes élete során. Ilyen feladatokat látnak el a ROM-‐ok (read only memory – csak olvasható memória). Szerkezetileg a ROM egy kódátalakító (kombinációs hálózat). A bemenetre vezetett címeket az egyik kódrendszer kódjainak tekintjük, a kiolvasott tartalom pedig a másik kódrendszer egy kódja. A közönséges ROM-‐ok esetében a beírás bizonyos belső vezetékek megszakításából vagy összekötéséből áll. Az eljárás nem ismételhető. A beírás végezhető gyárilag (mask programmable ROM). Más esetekre az OTP ROM (one time programmable ROM) az alkalmas, ezeket a felhasználó programozhatja, de csak egy alkalommal. Az ábra az M27C256B típusú, 32kx8bit kapacitású ROM rajzjelét és lábkiosztását mutatja:
AZ EPROM A fejlesztési munkákra sokkal alkalmasabb az EPROM, ennek tartalma ibolyántúli sugárzással törölhető. A tárolás módja hasonlít a dinamikus RAM-‐oknál látotthoz (5.1.2 szakasz), csak az állapotot őrző kondenzátor (a tranzisztor bemenő kapacitása) jól el van szigetelve a környezettől, ennek köszönhetően az egyszer beírt tartalom sok évig megmarad. A beírás kissé nehézkes: viszonylag nagy feszültségre (12V, 21V) van szükség. Különleges programozó berendezések szükségesek a beíráshoz.
Az egész tartalom egyidejűleg törölhető ibolyántúli fénnyel. Az ibolyántúli fény fotonjai a tárolt töltéseknek olyan nagy energiát adnak át, hogy azok el tudnak vándorolni a szigetelt vezérlőelektródáról. A fény bejutásához a tokozás tetején kvarcüveg ablakot biztosítanak.
Az előző szakaszban említett 27C256B típusú ROM-‐mal azonos lábkiosztással készítenek EPROM-‐ot is, a különbség csak az ablak:
Az EPROM-‐ok aszinkron módon működnek: az engedélyező jelek (CE, OE) és a cím (A) megjelenését követően a kimeneti adatsínen (D) megjelenik a megfelelő cellák tartalma:
AZ EEPROM Az EEPROM (electrically erasable PROM) használata könnyebb, mivel a tartalom villamos jelekkel törölhető. Nem jellemző nagy kapacitású egységek gyártása. Alkalmazni olyan helyen szokták, ahol kisebb-‐, de változtatható kapacitású ROM-‐ra van szükség, pl. rendszerparaméterek tárolására. Vannak párhuzamos és soros kivitelek. A párhuzamos kivitelek hasonló tokozásban és lábkiosztással készülnek, mint az EPROM-‐ok. A soros EEPROM-‐ok viszonylag népszerűek, tekintettel arra, hogy kis tokozásban-‐, kevés kivezetéssel készülnek és kicsi a fogyasztásuk. A DS2433 típusú soros EEPROM belső szerkezetét az alábbi ábrán láthatjuk:
A FLASH MEMÓRIA A flash memória (flash EPROM) ma a legelterjedtebb azon memóriák közül, amelyek táp nélkül is megőrzik tartalmukat. A programozáshoz szükséges bizonyos nagyobb feszültség, de ezt az IC-‐n belül megoldották, így nincs szükség különleges programozó eszközre. A törlés ellenkező előjelű feszültséggel történik, amit szintén belül állítanak elő. A programozások és újraírások száma nem végtelen, kezdetben 100.000 ciklust emlegettek, ma az egymillió a jellemző. Az ábrán az AM29F040B típusjelzésű flash memória belső szerkezete és egyik tokozására érvényes lábkiosztása látható:
A flash memóriába történő beírás nem olyan egyszerű, mint a RAM-‐ba történő írás, hiszen először el kell végezni a törlést. Másik gond, hogy, a belső szerkezet egyszerűsítése végett egész blokkokat lehet csak törölni. A MEMÓRIA BŐVÍTÉSÉNEK LEHETŐSÉGEI Vannak esetek, amikor egy memória IC kapacitása nem elég. A bővítés két irányban szokott történni: egyik esetben a szóhosszat növeljük, a másik esetben a szavak számát. A szóhossz növelése nagyon kézenfekvő: felsorakoztatjuk a memóriaegységeket, összekötjük az egyes IC-‐k azonos sorszámú címvonalait, az adatvonalakat pedig egy adatsínbe gyűjtjük, az ábra szerint:
A szavak számának növelésekor is felsorakoztatjuk a memóriaegységeket, a kisebb sorszámú címeket bekötjük minden egyes IC-‐re, néhány legfelső címet viszont a kívánt memória egység kiválasztására használunk, egy dekódoló egységen keresztül. Az azonos sorszámú adatvonalakat egy pontba kötjük össze
A TÖBBSZÖRÖS HOZZÁFÉRÉSŰ MEMÓRIA Az esetek többségében a memóriaegységhez egy adat-‐ és címsínen férhetünk hozzá. Vannak viszont olyan esetek is, amelyekben több eszköz (pl. mikrovezérlő) szükséges, hogy hozzáférjen ugyanahhoz a memória áramkörhöz. Megfelelő külső logikával elérhető el, hogy az eszközök közül mindig csak egy tudjon írni vagy olvasni a közös memóriából. Az igazi többszörös hozzáférésű memória szimultán hozzáférést kell, hogy biztosítson több eszköz számára. Sajnos, ha nincs semmilyen korlátozás, megeshet, hogy ugyanabba a cellába egyszerre írni is akarunk, de ki is akarjuk olvasni a tartalmát. Az ábra egy bejáródott megoldást mutat be két mikrovezérlő közötti kommunikációra közös memórián keresztül:
A memóriaegység két részre van osztva, egyik rész az A-‐ból a B-‐be küldött információkat tartalmazza, míg a másik rész a B-‐ből az A-‐ba küldötteket. Az üzenetek közvetítése a következő forgatókönyv szerint történik: • A beír egy B-‐nek szóló üzenetet a számára fenntartott A memóriarészbe, • A megszakítást generál B számára, • B elolvassa az A memóriarészben levő üzenetet, • B jelzi a megszakítás elfogadását, • A megszűnteti a megszakítást. Hasonló módon küldhető üzenet az ellenkező irányban. A FIFO SZERVEZÉSŰ MEMÓRIA Az eddig tárgyalt memória eszközök tekinthetők egydimenziós cellasoroknak, amelynél, megfelelő logikával, a cella egy-‐egy elemét, adott pillanatban, össze tudjuk kötni az adatsínnel. A FIFO (first in, first out) egy olyan cellasor, amelynek van egy bemenő és egy kimenő adatsínje (portja), de nincsenek címvonalai. Az egyes cellákhoz csak sorjában lehet hozzáférni. Minden írásnál vagy olvasásánál eggyel tovább lépünk a sorban. Logikailag a sor önmagában záródik – körben helyezkednek el a cellák. Az egyszer kiolvasott tartalmat nem olvashatjuk újra, az elveszett számunkra.
A cellák számát a FIFO mélységének nevezzük. Megeshet, hogy felülírjuk a még ki nem olvasott tartalmat (túlcsordulás, overflow) vagy olyan helyről próbálkozunk olvasni, amelybe még nem is írtunk semmit (üres állapot, underflow). A FIFO szerkezet egy kettős hozzáférésű memóriának felel meg, van egy írási pointerje és egy olvasási pointerje.
Az írási pointer képezi azt a (belső, nem látható) címet, amelyre a pillanatnyi adat beírásra kerül. Az olvasási pointer képezi azt a címet, amelyről a következő olvasás történik. Megeshet, hogy a FIFO megtelik (overflow) vagy kiürül (underflow). Ezek az állapotok a pointerek tartalmának összehasonlításával érzékelhetők. A FIFO-‐kat gyakran órajel tartományok határain szokták alkalmazni. A FIFO lehetővé teszi, hogy az egyik oldalon az egyik órajellel szinkronban végezzük a műveleteket, a másik oldalon pedig a másik órajellel szinkronizálva. Az ábra egy ilyen megoldást mutat.
Hasonlóan alkalmazható FIFO olyan helyeken, ahol az adatforrás rohamszerűen állítja elő az adat csomagokat (pl. adattömb kiolvasása DRAM-‐ból), a felhasználás meg némi késéssel és lassúbb ütemben történik (pl. soros átvitel).