Gép-Észet

 

A fönti cím felfogható szórejtvénynek is, meg akármi másnak is, mindenesetre a látszat ellenére van értelme: eme kis remekem az ENTERPRISE eszéről, azaz RAM-memóriájáról fog szólani.

Hosszú fejlesztési periódus végére tettem pontot nem is oly rég: elkészült a sok hónappal ezelőtt beharangozott 1 millió bájtos RAM-bővítő kártya. Tulajdonképpen egy évvel ezelőtt is elkészülhetett volna, mivel már akkor is csak egy forrasztásnyira állt a sikertől, csak akkor még nem tudtam, hova kell az az egy forrasztás. Az időmet meg a munkahelyemen való dolgozással, némi alvással és egyéb hívságos dolgokkal töltöttem (meg kifejlesztettem közben az egérillesztőt, a gép dobozába építhető billentyűzetet, meg az elemmel védett CMOS RAM-kártyát)...

A kártya egyébként egy technikai újdonsággal szolgál: ebben használtam másodszor ún. GAL-áramkört. (Először az elemes SRAM/EPROM-illesztő kártyában fordult elő ilyen, de az arról szóló cikket csak a következő számba teszi be a Főszerkesztő Úr.) A GAL elnevezés a General Array Logic, azaz az Általános Logikai Tömb rövidítése, magyarul tehát ÁLT-rak lehet hívni. Nevének megfelelően sok mindenre alkalmas, többek között címdekódolásra is, én is erre használom.

Ilyen célra eddig a 74S188-as PROM (Programozható Csak Olvasható Memória) áramköri alkalmaztam (meg mások is: lásd a microTEAM-féle memóriabővítős lemezvezérlő kártyát), ami szép is, jó is, csak sajnos kicsi: öt bemenete és nyolc kimenete van, vagy másképpen fogalmazva öt címlába, és nyolc adatlába, azaz 32 bájt a kapacitása. Programozása egyszerű: meg kell adni az összes (32) bemenő kombinációra, hogy milyen bájt jelenjen meg a kimeneten, pontosan úgy, mint egy memóriánál (merthogy az is). Tegyük fel, hogy egy áramkörben 13 bemenő lábra és öt kimenő lábra van szükség, ilyen pl. egy 1 MB-os RAM-bővítő. Semmi gond, alkalmazzunk nagyobb memóriát! A 13 bemenet 2^13=8192 bájtot, azaz 8 Kbájtot jelent. Ilyen memória a 2764-es típus, ennek ugyan nyolc kimenete van, de sebaj, három fölösleg még mindig jobb mint egy hiány. Ezzel a megoldással csupán három baj van:

1 - nagy és drága. Alig foglal kevesebb helyet (28-lábú a tok) és többe kerül, mint ha ugyanezt TTL-áramkörökből állítanánk össze.

2 - baromi bonyolult. Mármint a csekély 8192 kimeneti kombináció előállítása, begépelése, ellenőrzése, a hibák kijavítása, ellenőrzés, hibajavítás, ellenőrzés, stb. Olyasmi ez, mint egy üres lapon egy egyenes vonalat bittérképével megadni. Leginkább számítógéppel lehet ezt is megoldani, ekkor csupán a programot kell megírni, ellenőrizni, hibajavítani, ellenőrizni...

3 - túl lassú. Egy ilyen közönséges EPROM válaszideje (tehát a bemeneti kombináció rákapcsolása után a kimeneti jelek megjelenésének ideje) a legjobb esetben is 120 ns, ami alig több, mint a másodperc egymilliomod részének tizede, de kedvenc mikroprocesszorunk, a Z-80 számára ez kivárhatatlanul hosszú idő. (A 74S188 válaszideje 25 ns.)

Figyelmes olvasóim bizonyára már kitalálták, miért jó a GAL:

kicsi és olcsó, egyszerű a programozása, és gyors. Nézzük sorban az előnyöket!

1 - a 16V8-as típus 20-lábú plasztik tokban lakik. Ára változó, de jóval alacsonyabb, mint a nagyobb EPROM-oké.

2 - a programozása külön élvezet. A GAL nem memória, nincs benne 8192 tárolóhely, ezért nem is kell ennyi adat az életre keltéséhez. A fenti hasonlatot folytatva úgy lehet a tartalmát definiálni, mint ha ama egyenes vonalat az üres lapon a kezdő- és végpontjával adnánk meg.

3 - gyors: a válaszideje 15-25 ns között van.

A GAL áramkörök a PAL-okból (Programmable Array Logic) fejlődtek ki. Azoknál jóval bonyolultabb, de alapvetően hasonló a felépítésük, működési elvük vázolásához ezért kiindulásként megteszi egy egyszerűbb PAL ismertetése.

Az áramkör bemeneteire inverterek is csatlakoznak, így minden bemeneti jel és a negáltja is megjelenik. Ezeket a jeleket azután programozott módon ("biztosítékok" kiolvasztásával) VAGY-áramkörökre, azok kimeneteit és/vagy invertált kimeneteit pedig ÉS-kapukra vezetjük. Az áramkör kimeneteit ezen ÉS-kapuk invertált vagy nem invertált kimenetei adják. A kettes számrendszer logikája szerint NEM és VAGY, illetve NEM és ÉS műveletekkel bármilyen logikai függvény leírható, így fentebb vázolt hálózatunkkal a kimenetekhez a bemenetek bármilyen logikai kapcsolatát hozzárendelhetjük. A valódi áramköröknél persze korlátozott a logikai összefüggések száma, egyszerűen a "biztosítékok" korlátozott száma miatt, pl. a GAL16V8 áramkörnél egy kimenet megadásához legfeljebb hét tagot adhatunk meg a logikai egyenletben. Szerencsére a PAL-tervező szoftverek tűrhetően optimalizálnak, és látszatra bonyolult, nagy egyenletrendszereket képesek egészen rövid, egyszerű alakra hozni. Lássunk egy példát logikai egyenletre!

OE = !(!A21 & A20 & !A19 & !A18) \ MREQ

Itt a "!" az invertálóst, a "&" az ÉS, a " \ " a VAGY- műveletet jelenti. Az OE jelnek alacsonynak kell lenni, hogy egy memória-áramkört engedélyezzen. Ha MREQ értéke 1, az egész VAGY kapcsolat értéke szintén 1 lesz, tehát az OE aktiválásához MREQ-nak 0-rak kell lennie. Szintén 0-rak kell lennie a másik tagnak is, de mivel a zárójel előtt invertálós áll, a zárójelen belüli kifejezés értéke 1 kell legyen. Az ÉS-kapcsolat értéke akkor 1, ha minden tagja 1, tehát A21-nek, A 19-nek és A 18-rak alacsonynak, A20-nak magasnak kell lennie. Mindezek alapján az OE jel a 40-tót 4F-ig terjedő memórialap-tartományban lesz aktív, ez összesen 256 KB-ot jelent.

A GAL-áramkörökben még sok egyéb is van, pl. regiszterek, azonkívül konfigurálhatjuk az egyes lábakat bemenetnek is, és kimenetnek is, valamint ami a legkitűnőbb dolog: többször újraprogramozhatók. Maga a GAL-áramkör programozása teljesen meglepő módon GAL-áramkör-programozó készülékkel történik. Előtte még meg kell szerkeszteni a fentihez hasonló logikai egyenleteket, leellenőrizni, hogy mindent figyelembe vettünk-e, majd lefordítani az egyenleteket ún. JEDEC-formátumra, ilyet eszik a GAL-programozó. Szerencsére ehhez megfelelő számítógépes (értsd: PC-s) programok állnak rendelkezésre...

Visszakanyarodva a RAM-kártyához, szokásommal ellentétben a kapcsolási rajzot nem is közlöm, mert nem mond túl sokat. Van a kártyán egy 7805-ös stabilizátor, egy 74LS245-ös buszmeghajtó, nemi címmultiplexer (2 db 74LS157 és egy 74LS153), két 74LS74 a frissítéshez, meg a GAL, amelybe bemegy egy csomó jel, meg kijön belőle egy csomó jel, de hogy miért, meg hogyan, azt a program ismertetése nélkül nehéz elmagyarázni. A program ismertetését pedig kerülöm, mióta hírét vettem, hogy másolják a kártyáimat... (Bocs!)

Aki csak RAM-bővítő panelt és dokumentációt kíván rendelni, természetesen az is megkaphatja a beégetett GAL-t is (+350 Ft-ért).

 

Mészáros Gyula

 

Enterpress V. évfolyam 1. szám 1994. január-február