ZILOG
Mikroprocesszor Családok
Tartalom
II. Rész: Z8000
Bevezetés
A Zilog cégnek sikerült a Z-80 családdal a piacra betörnie, és elmondható, hogy sikerült vele feljutni a csúcsra. Természetesen a továbbfejlesztés nem állt meg. Látható volt, hogy a Z-80-nál jobbat a 8 bites kategóriában nem tudnak kihozni, legfeljebb az utasításkészleten lehet módosítani, vagy a sebességet növelni. Ez utóbbi megtörtént (Z-80 B változat), de ez is zsákutca. Próbálkoznak a Z-80 és a memória felügyelő egység házasításával (Z800). Ez a központi egység még további utasításokkal is bővült, az osztással és szorzással. Ma még nem tudjuk, hogyan válik majd be. A mikroprocesszorok világa a nagyobb bitszámú processzorok felé halad, megközelítve ezzel a miniszámítógépeket.
A Zilog cég a Z8000-et fejlesztette ki a 16 bites kategóriában. Vele közel egy időben jelent meg a Motorola a maga 68000-esével és az Intel a 8086-ossal. Az Intel azóta ennek variánsait is piacra dobta, megpróbálja a vevőket - széles választéklistával - magához csalogatni. A jelszavuk minden feladatra más CPU. A hazai választékolási törekvések ezt az üzleti fogást nem támogatják. Ha egy magyar cég egy mikroprocesszor alkalmazása mellett dönt, el kell határoznia, hogy melyik - univerzális - típust választja. A 16 bites kategóriában az Intel 8086, a Motorola 68000 és a Z8000 típus jön számításba. A 8086 melletti döntést az Intel cég bő katalógusáradata támasztja alá, és a már itt-ott beszerzett 8086 alapú KIT-ek. Azonban ezeknek-a KIT-eknek az alkalmazása ma még a "játszadozás" szintjén van. Nem létezik sem 68000-es, sem Z8000-es KIT, ennek ellenére van hazánkban mindkét mikroprocesszor típusnak pártolója, olyanok, akik gyártmányba kívánják építeni, és szorgalmasan kísérleteznek velük. E három 16 bites processzor között a verseny még nem dőlt el, sok esetben a megszokás dönt, mindhárom egyformán megfelelő. Egyes szolgáltatásaik eltérőek, de egyik sem rosszabb, egyik sem körözi le a többit.
A 16 bites processzorokkal más szemszögből kell foglalkozni, mint a 8 bitesekkel. Ezek nem a 8 bitesek feldagasztásából keletkeztek, inkább a közép és nagyszámítógépek fogásaiból lestek el néhányat. Aki középszámítógépes rendszerekkel foglalkozott, az sokkal könnyebben sajátíthatja el a 16 bites mikroprocesszor technikát, mint aki pl. a 8080 mellől kacsingat rá. A bitszámban rejlő különbség egymagában még nem újdonság, hanem pl. a SYSTEM és NORMÁL üzemmód, a memóriakezelés teljesen újszerű (mikroprocesszor esetében) módja (szegmens címzés, fizikai és logikai cím, offszet, báziscímzés), multiprocesszoros üzem, multiprogramozást segítő eszközök (memória felügyelet).
Az alkotók a Z-80 igen jó buszrendszere helyett egy teljesen új buszrendszert konstruáltak. Ez persze később érthetővé válik, mivel a Z-80 busz vezérlő-jelei nem alkalmasak az intelligensebb Z8000 kiszolgálására. A Zilog cég megalkotta a Z-Buszt, ezzel kompatibilis a Z8000 és Z8 család. Tekintsük át először ezt.
2.1. Z busz
A Z busz tervezésekor a jelenlegi busz technológiákat úgy fogták össze, hogy tekintettel voltak a továbbfejlesztés lehetséges irányaira. Ez alatt főleg a multiprocesszoros üzemet és a 16 Mbyte /!/ operatív tár alkalmazását érthetjük. A multi-mikroprocesszoros üzemnél csupán a daisy-chain-t tűzték ki célul - hasonlóan a megszakítás- és buszkérési daisy-chain-hez. Ma még nem dönthető el, hogy ez a topológiailag kötött, statikus multiprocesszor prioritás technika megfelelő lesz-e a jövőben. Léteznek más technológiájú buszvezérlő logikák, melyek lehet, hogy alkalmasabbak lesznek egy multiprocesszoros üzemre. Ez mindenesetre nem vonatkozik a Z8000-re, mert az nem kötődik mereven a multiprocesszor daisy-chain-hez, ez csupán Z busz definíció.
A Z busz nem csupán összeköttetések halmaza, hanem helyenként némi dekódoló hardware-t is feltételez. Ez látható a buszjeleket vázlatosan bemutató 2.1-1. ábrán is.
A Z busznak legalább 16 címvezetéke van, mely multiplexelve hordozza a 8/16 bites adatbuszt. (Memória címzésre legalább 16 vezetéket használ, I/O címzésére 16 vezetéket.) A címbusz vezetékeinek száma nem kötött, ha MNU egység van a rendszerben, akkor a címbusz 24 bites )16 Mbyte).
A Z buszon állapotjelek jelzik, hogy adat vagy programmemóriát címez a címbusz, vagy I/O egységet, illetve az átvitt adat 8 vagy 16 bites. Mivel az adatok és a címek egyazon 8, illetve 16 vezetéket használják, kiválasztó jeleket alkalmaznak. Az -AS jelzi, hogy a buszon cím van, a -DS jelzi, hogy a buszon adat van. (A 8085-ös multiplexelt busza csak az (ALE=AS) jelet ismeri.)
A Z busz tartalmaz egyéb vezérlő jeleket is, így:
R/-W | - jelzi a címzett egység időkérését. |
-RESET | - a rendszer alapállapotba való hozása. |
-CS | - az egyes buszra csatlakozó elemeknek jelzi, hogy a címzés őket "szólította" meg. Ez a definiálás feltételezi, hogy a busz címdekóderekkel rendelkezik. |
A busz vezérlését az egyes egységek elkérhetik egymástól, erre szolgálnak az alábbi jelek: (A szokásos buszkéréstől a buszkérés melletti daisy-chain-ban térnek el.) | |
-BUSREQ | - jelzi, hogy valaki igényt tart a buszra. |
-BUSACK | - jelzi, hogy a busz vezérlését a CPU átengedi. |
-BAI, -BAO | - A buszt kérők közötti daisy-chain prioritásláncot valósít meg. (Lásd DMA) |
A megszakításkéréssel összefüggő vonalak az alábbiak: | |
-INT | - jelzi, hogy valamely egység megszakítást kér. Megjegyzendő, hogy a Z8000 háromféle IT-t különböztet meg: NMI (direkt IT), NVI (nem vektoros IT) és VI (vektoros IT). |
-INTACK | - jelzi, hogy a CPU a megszakításkérést elfogadta. Megjegyzendő, hogy ez a vonal feltételezi, hogy a busz rendelkezik egy dekódoló logikával, amely az állapotjelekből kialakítja az -INTACK jelet. |
-IEI, IEO | - az IT kérés daisy-chain-je. (A Z-80-as rendszernél megismerttel megegyezik.) |
A Z busz több CPU-ra is felkészült, így az alábbi jelek a multiprocesszoros üzemre teszik a buszt alkalmassá: | |
- MMRQ | - jelzi, hogy egy CPU igényt tart a buszra. |
- MMST | - jelzi az egységek felé az MMRQ állapotát. |
-MMAI, -MMAO | multi-mikroprocesszoros CPU- k daisy-chain jelei. |
A Z buszra négyféle eszköz csatlakozhat: CPU, nem CPU típusú buszvezérlő (például DMA), I/O egység és memória. Az egyes egységek és a busz jelei közötti kapcsolatot a következő táblázat mutatja:
Jel | CPU |
Vezérlő |
Periféria |
Memória |
AD0-AD15 ADX Állapot R/-W B/-W -WAIT -AS -DS -CS -RESET -BUSREQ -BUSACK -BAI -BAO -INT -INTACK -IEI -IEO -MMRQ -MMST -MMAI -MMAO |
B3 03 03 03 0 I 03 03 - I I 0 - - I - - - OK I I O |
B3 03 03 03 0 I 03 03 - I BK - I O - - - - - - - - |
B3 - I I I OK I I I I - - - - OK I I O - - - - |
B3 I - I I OK I I I - - - - - - - - - - - - - |
A táblázatban alkalmazott jelölések:
B = kétirányú kapcsolat
I = bemenet az egységbe
O = kimenet az egységből
K = nyitott kollektoros kimenet
3 = három állapotú busz
Az alábbiakban bemutatjuk a Z busz tipikus adatátviteli idődiagramjait. (2.l-3. ábra)
A Z busz adatátviteli idődiagramja
Minden átvitel az -AS jel megváltozásával indul. Az -AS jel felfutó élekor érvényes az állapot vonalakon az információ (ST0-ST3), mely az adatátvitel fajtáját határozza meg. A cím is ugyanekkor érvényes a címbuszon (AD0-AD15). Az adatátvitel, melynek irányát az R/-W; jelzi, a -DS jel hatására történik meg az adatbuszon (AD0-AD15).
2.2.1. Általános ismertetés
A Z8000 mikroprocesszor család lelke a Z8000 központi egység. Ez az elnevezés több változat összefogó neve, ezek a következők: Z8001, Z8002, Z8003 és Z8004 CPU. Ezek nagy általánosságban megegyeznek, de a memóriakezelésben egymástól eltérnek: A Z8001 és Z8003 rendelkezik szegmens címzéssel, ezért kivezetéseinek száma 8-cal több (48 láb), a Z8002 és Z8004 szegmens címzésre nem képes. A Z8003 és Z8004 memória felügyelő egységet tartalmaz, a Z8001 és Z8002 nem, ezért ezekhez az MMU (memória felügyelő) áramkört lehet csatlakoztatni. Kiadványunkban a Z8001 és Z8002 típusjelű központi egységeket és a memória felügyelő egységet ismertetjük. A Z8003 és Z8004 központi egységek ezekből származtathatlak. A Z8001 és Z8002 mikroprocesszorokat együtt ismertetjük Z8000 megjelöléssel, csak ott jelezzük külön-külön a típusszámot, ahol a két változat egymástól eltér.
A Z8000-es CPU 16 bites processzor, 16 bites adatbuszszal rendelkezik. 16 bites utasításait 32 bites műveletek egészítik ki. 110 féle utasítása a különböző címzési módokkal és adattípusokkal kombinálva 414 különböző utasítást ad.
A központi egység blokkdiagramját a 2.2.1-1. ábrán mutatjuk be.
2.2.1-1 ábra: A Z8000 CPU blokkvázlata
A Z8000-es központi egység kétféle üzemmódban működik, az egyik a normál futás, a másik a "system" üzemmód. Ez utóbbi üzemmódban az operációs rendszer futásakor dolgozik a CPU. A központi egységnek vannak kiváltságos, úgynevezett "privilegizált" utasítása, melyek csak "system" üzemmódban hajthatók végre. Így a operációs rendszer és felhasználói programok elkülönülnek, sőt külön stack-kel rendelkezik a két CPU futási állapot. A CPU multiprocesszoros üzemben való részvételre is alkalmas.
A Z8001-es CPU 8 Mbyte memóriát tud címezni a szegmens címzési technikával, míg a Z8002-es csupán 64 Kbyte-ot. A CPU külön tudja kezelni a program, az adat-és a stack-memóriát. A futási állapot különböző voltát (system / normál) is kihasználva, a címezhető memória terület meghatszorozható, azaz 48 Mbyte-ra, illetve 384 Kbyte-ra növelhető. Ezek a számok elméletiek, mert a gyakorlatban ritkán használható ki egy 8 Mbyte-os stack. A Z8001-hez illeszthető a Z8010-es MMU (Memory Management Unit), amely a memória felügyeletét látja el. (2.2.1-2. ábra)
2.2.1-2 ábra: Z8001 kiegészítése MMU-val
A 16 bites központi egységhez az eddigi 8 bites memória és periféria illesztők csatlakoztatása nem oldható meg közvetlenül, így illesztésre van szükség, melyre a 2.2.1-3. és -4. ábrákon mutatunk be példát. A 2.2.1-4. ábrán bemutatott blokkvázlat vezérlő jel illesztő részét a 2.2.1-5. ábrán részletesebben is bemutatjuk. Ez a példa a Z busz és a Z-80 rendszer közötti illesztésre is felhasználható.
2.2.1-3. ábra: Mamória illesztése Z8000-hez
2.2.1-4 ábra: Z8000 rendszer Z-80 periféria illesztökkel
2.2.1-5 ábra: Vezérlő jel illesztő
2.2.2. Regiszterek
A Z8000 CPU belső felépítését a 2 .2.1-1. ábra mutatja. Látható, hogy a regiszterek fontos szerepet játszanak a CPU - ban: akkumulátorként, memória címzőként, indexregiszterként, stack pointerként és általános célú regiszterként lehet őket használni.
2.2.2-1 ábra: Z8001 regiszterei
Az egyes Z8000-es CPU változatok regiszter kiosztását a 2 .2.2-1. és a -2. ábrákon láthatjuk.
2.2.2-2 ábra: Z8002 regiszterei
2.2.2-3. ábra: Z8001 és Z8002 speciális regiszterei
Az ábrákról kitűnik, hogy a regiszterek címezhetők: byte-onként, szavanként (16 bit), hosszú szavanként (32 bit), és négyszeres szavanként (64 bit). A regiszterblokkban a címezhető regiszterek száma 16 (R0-R15) ezen kívül a Z8001-nél az R14 és R15 a "system" állapot céljaira duplázott, a Z8002 esetében csak az R15. Byte-onként csak a nyolc első regiszter érhető el, így 16 byte definiálható (RL0-RL7-RH0-RH7). Két-két regiszter együttesen ad egy hosszú regisztert, (RR0-RR14), így 8 hosszú regiszter definiálható. Egymás után következő négy regiszterrel alakítható ki a négyszeres regiszter, melyből 4 definiálható (RQ0-RQ12). Mint látható az összekapcsolt regiszterek esetén az elnevezést a legkisebb számú regiszterből származtatják, mely tartalmazza a legnagyobb helyértéket.
Az R0 regiszter speciális felhasználásra fenntartott, nem lehet indexregiszterként definiálni, ez a regiszter a címzési mód váltásakor használatos. Az összes regisztert használhatjuk akkumulátorként.
Az általános célú regiszterblokkon kívül a CPU tartalmaz egy speciális regiszterblokkot és egy frissítő regisztert. A speciális regiszterek számában eltérés van az egyes típusok-nál, a Z8001-ben öt, a Z8002-ben három 16 bites speciális regisztert találunk. Értelmezésük a 2.2.2-3. ábrán látható.
Az egyes bitek jelentése a következő:
C | - átvitel (carry) |
Z | - nulla (zéro) |
S | - előjel S=1: negatív; S=2: pozitív |
P/V | - paritás / túlcsordulás |
DA | - decimális aritmetika segédbitje |
H | - rész-átvitel (half-carry) |
NVIE | - nem vektoros IT engedélyezése |
VIE | - vektoros IT engedélyezése |
S/N | - futási állapot jelzése (system / normál) |
SEG | - szegmens címzési mód engedélyezése (csak Z8001-nél) |
a SEG bitbe való 0 írásával a Z8001-es CPU-n a Z8002-re írt programok futtathatók, mivel ekkor a szegmens címzési mód tiltott.
2.2.3. A központi egység belső állapotai
A CPU állapotait az úgynevezett állapot vonalakon (status lines) közli. Ez a technológia hasonlít az i8085-ös S0, Sl vonalaihoz. Az egyes állapot bitek jelentése:
3 | 2 | 1 | 0 | állapot |
0 |
0 |
0 |
0 |
belső művelet |
0 |
0 |
0 |
1 |
memória frissítés |
0 |
0 |
1 |
0 |
I/O művelet |
0 |
0 |
1 |
1 |
speciális I/O művelet |
0 |
1 |
0 |
0 |
szegmens ugrás elfogadva |
0 |
1 |
0 |
1 |
NMI elfogadva |
0 |
1 |
1 |
0 |
NVI elfogadva |
0 |
1 |
1 |
1 |
VI elfogadva |
1 |
0 |
0 |
0 |
adatmemória művelet |
1 |
0 |
0 |
0 |
stackmemória művelet |
1 |
0 |
1 |
0 |
adatmemória művelet (EPU) |
1 |
0 |
1 |
1 |
stackmemória művelet (EPU) |
1 |
1 |
1 |
1 |
utasításmemória művelet |
1 |
1 |
0 |
1 |
utasítás első szavának olvasása |
1 |
1 |
1 |
0 |
külső processzor (EPU) művelet |
1 |
1 |
1 |
1 |
fentartott |
Az utasítások között van olyan utasítás (pl. DIV), amely a CPU belső egységeit (pl. ALU) hosszú ideig veszi igénybe. A tervezők úgy oldották meg a CPU szervezését, hogy ezen idő alatt a következő utasítás végrehajtását kezdje meg ha arra van mód. Z-80-nál a belső műveletek végzésekor történik a frissítés, a Z8000-nél erre egy külön állapot szolgál. Ezért tiltható le a frissítés, illetve adható meg a gyakorisága. Mivel nincs mindig frissítés, az átlapolt utasítás beolvasása jelentősen gyorsítja azok végrehajtását. Ezt nem mindig lehet megoldani, mert ugró utasítás esetében a következő utasítás még nem ismert, illetve amikor memória referenciás utasítás végrehajtása folyik nem lehet az utasításmemóriához hozzáférni.
A következő ábrákon a központi egység idődiagramjait mutatjuk be.
A 2.2.3-1. ábrán a memória hozzáférés látható. Az utasítás beolvasás és az adatolvasás ciklusa megegyező. A szegmens szám kiadása a memória cím kiadását egy órajel periódussal megelőzi, hogy az NMU a címátalakítást el tudja végezni.
2.2.3-1. ábra: Memória hozzáférés
A 2.2.3-2. ábrán a CPU és az I/O egységek közötti adatátvitel idődiagramját ismertetjük.
2.2.3-2. ábra: I/O hozzáférés
Az I/O hozzáférés hasonlatos a memória-hozzáféréshez, de itt a szegmens szám nem értelmezett, és a központi egység egy várakozó ciklust szúr be a T2 és T3 ciklusok közé. Természetesen WAIT hatására több várakozó ciklust iktat be a CPU. Az I/O cím 16 bites, és a címbuszon az -AS jel felfutó élekor mintavételezhető. A központi egység I/O utasítás esetén "system" állapotban van.
Belső művelet esetén nincs sem memória, sem I/O hozzáférés. Az -AS jel felfutásakor érvényes állapot információ belső műveletet jelez, a többi buszjel érdektelen. (2.2.3-3. ábra)
2.2.3-3. ábra: Belső művelet idődiagramja
A memória frissítés idődiagramját mutatja a 2.2.3-4 ábra (A frissítés vezérlését lásd a 2.2.5 fejezetben.)
2.2.3-4. ábra: memória frissítés
A buszkérés és a buszkérés elfogadás idődiagramját a 2 .2.3-5. ábrán mutatjuk be.
2.2.3-5 ábra: buszkérés és elfogadása
A -BUSRQ jel mintavételezését a CPU minden gépi ciklus első órajel felfutásakor végzi el. Ha a -BUSRQ jel aktív, ezt egy belső buszkérés-jelző regiszterben tárolja. A gépi ciklus befejezése után a CPU a buszt elengedi. A -BUSRQ jel inaktívvá válását az órajel felfutó élekor vett mintából érzékeli a CPU. Ennek hatására törli a belső BUSRQ flip-flopot, majd a -BUSAK jel logikai "1'"-be állításával jelzi, hogy a CPU a buszt újból vezérli. A buszvezérlő jelek a busz elengedés előtti állapotból indulnak.
A -STOP bemenet aktivizálásával a CPU megállítható. Ennek idődiagramja a 2.2.3-6. ábrán látható. Minden utasításkód olvasási ciklus utolsó lefutó órajelének hatására mintavételezi a -STOP bemenetet a CPU. STOP kérés esetén a CPU frissítő ciklusokat hajt végre.
2.2.3-6 ábra: megállás
2.2.4. Megszakításkezelés
A Z8000-nél a program futás megszakításakor a program állapotát jelző byte-ok (Z8001-nél 4 byte, a Z8002-nél 3 byte) a "program állapot terület"-re kerülnek. Ezt a PSAP (Program Status Area Pointer) jelöli ki. A PSAP-nak a programmemóriára kell mutatnia, mert a program állapot betöltése mindig program területről történik. Ez nem okoz problémát, ha a program és adatmemória megegyezik.
A program állapot terület nagysága Z8001-nél 570 byte, Z8002-nél 540 byte. A Z8001-nél a vektoros megszakításkérések ugró táblájában 4 byte-ot foglal egy vektorhoz tartozó cím, a Z8002-nél csak 2 byte-ot. A vektoros megszakításnál 8 bites IT vektor érkezik az adatbuszon, ennek kétszerezése után hozzáadódik a PSAP regiszter tartalmához, valamint ehhez hozzáadódik Z8001 esetén 60, Z8002 esetén 30.
Így alakul ki az IT vektorhoz tartozó megszakításkezelő rutin kezdőcímét tartalmazó mutató címe. A Z8001 esetén az IT vektor csak páros értékű lehet. Így a Z8001-nél csupán 128 vektor létezhet, míg a Z8002-nél 256 féle.
A Z8000-es megszakításkérései (a felsorolás a prioritássorrendet is tükrözi).
Legmagasabb rendű megszakításkérés:
Megszakítás esetén a programszámláló (PC), az állapot jelző szó (FCW) és a 16 bites azonosító kerül mentésre a stack-be. Az azonosító a megszakításkérés okát tartalmazza, azaz belső trap esetén a megszakítást leérő utasítás első szava, külső IT esetén a megszakítás elfogadásakor az adatbuszról beolvasott szó.
Megszakításkor a futó program állapotszavainak mentése után az új állapotszavak automatikusan betöltődnek a program állapot területről.
2.2.5. Memória frissítés
A frissítő regiszter (2.2.5-1. ábra) tartalmaz egy bitet (RE) amellyel engedélyezni, illetve tiltani lehet a frissítést. A frissítés frekvenciája egy hat-bites órajelelosztóval 1 lmsec és 64msec között állítható be (4 MHz órajelnél), így nem vesz el feleslegesen sok időt a processzortól. Megjegyzendő, hogy a Z-80-as CPU-hoz hasonlóan BUSAK állapotban a CPU nem tud frissítést végezni, ugyanígy a RESET állapotban sem. STOP üzem esetén a frissítés folyik, sőt az elosztót megkerülve frissítés állandóan folyik.
2.2.5-1 ábra: Frissítő regiszter
2.2.6. Együttműködés külső feldolgozó egységgel
A Z8000 mikroprocesszor érdekessége a külső processzor feltételezése. Ez azt jelenti, hogy a központi egységben nincs minden lehetséges utasításkód kombináció kihasználva, így a CPU utasítás készletét külső processzor(ok) segítségével kiterjeszthetjük. Ennek megfelelően az utasításkódok között speciális kódok állnak rendelkezésünkre, az utasítások kiterjesztésére:
0EH, 0FH, 4EH, 4FH, 8EH, 8FH
A külső utasítás végrehajtáshoz úgynevezett EPU-t (Extended Processing Unit) kell a rendszerbe illeszteni, ami az utasítások alapján elvégzi a megfelelő műveleteket (pl. speciális adatmozgatás, adattranszformáció, speciális aritmetikai műveletek, mátrix operációk, rendszervezérlés, hálózati kommunikáció stb.). Az előrejelzések szerint a Zilog cég lebegőpontos aritmetikai műveleteket végző EPU-t kíván kifejleszteni. Természetesen a felhasználási igényeknek megfelelően tetszőleges, nem csak gyári EPU illeszthető a rendszerbe, lehet az akár TTL logika segítségével megvalósított processzor, vagy lehet egy mikroprocesszoros alrendszer is.
A Z8000-es CPU az utasítást kiolvassa a memóriából, ha ez nem neki szól, hanem az EPU-nak és a CPU állapotregiszterében a megfelelő bit jelzi, hogy EPU üzem engedélyezett, akkor az utasítás, mint EPU utasítás értelmezett. Ha az EPU üzem nem engedélyezett, - mert a rendszerben nincs EPU realizálva a CPU egy "külső utasítás miatti megszakításkérés"-t hajt végre, és a megszakításkérést kezelő software leutánozza (emulálja) az utasítást - ha erre mód van.
A külső utasításoknak négy típusa lehetséges:
Ha EPU belső utasítás definiált, a Z8000 a következő utasítást kezdi végrehajtani, esetleg a két processzor párhuzamosan dolgozhat és egy következő EPU utasítás alkalmával adja vissza az EPU az eredményt. Ha a Z8000 EPU-val való párhuzamos program futtatása valamilyen okból hátrányos, akkor a Z8000-est az EPU a STOP vezetéken keresztül szinkronizálja.
2.2.7. A Z8000 indítása
A központi egység REST hatására nem a 0000-ás címről indítja a programot, mint az szokásos, hanem először alaphelyzetbe állítja a program állapotszavakat.
Z8001 esetében a 0002 címről beolvassa a "jelző és állapotszó"-t (FCW), a 0004-es címről a programszámláló programszámláló címet tartalmazó részét, majd a 0006-os címről beolvassa a programszámlálóba annak tartalmát (PC). Ezek után, a program az ott definiált helyről indul. (2.2.7-1. ábra)
2.2.7-1 ábra: RESET és CPU indítás idődiagramja (Z8001)
Z8002 esetén az FCW törlése szintén a 0002-es címről történik, de mivel a PC csak egy szavas, a 0004-es címről történő beolvasás után rögtön indulhat a program az ott definiált helyről.
2.2.8. A Z8001 és Z8002 kivezetései
2.2.8-1. ábra: a Z8001 és Z8002 kivezetései
AD0-AD15 | Cím és adatbusz (ADDRESS / DATA) Multiplexelt cím és adatvezetékek, kétirányú adatátvitelre. |
-AS | Címjelző (ADDRESS STROBE) Felfutó éle jelzi, hogy az AD buszon érvényes cím van. |
-DS | Adatjelző (DATA STROBE) Amíg a jel aktív, addig az AD buszon adatáramlás folyik. |
R/-W | Olvasás / Írás (READ / WRITE) Az AD buszon az adatáramlás irányát jelzi, ha logikai "0", akkor a CPU ír adatot, ha logikai "1", akkor a CPU olvas. |
B/-W | Byte / szó (BYTE / WORD) Az AD buszon áramló adatok típusát határozza meg. Ha logikai "1", akkor Byte, ha logikai "0", akkor Word (szó). |
-MREQ | Memória hozzáférési igény (MEMORY REQUEST) Jelzi, hogy az AD buszon levő cím memóriára vonatkozik. |
SN0-SN6 | Szegmens szám (SEGMENT NUMBER) A szegmens szám jelenik meg ezen a kimeneten (csak Z8001 esetében). |
-SEGT | Szegmens miatti megszakításkérés (SEGMENT TRAP) Az MMU kér megszakítást ezen a vezetéken, amikor szegmenskezelési hibát észlel. |
-WAIT | Várakoztatás (WAIT) Jelzi a CPU-nak, hogy a memória, illetve az I/O egység még nem kész az adat adására, illetve vételére. |
N/-S | Normál / "System" üzemmód (NORMAL / SYSTEM) Jelzi a CPU futás állapotát, ha logikai "1", akkor normál üzemben fut, ha logikai "0", akkor system állapotban van. |
-RESET | Törlés (RESET) A CPU törlésére és alaphelyzetbe való beállítására alkalmas bemenet. Hatására:
|
CLK | Rendszer órajel (SYSTEM CLOCK) A Z-80 órajellel azonos szintű (nem TTL) egyfázisú órajel bemenete. Maximális frekvencia 4 MHz, minimális frekvencia 500 kHz. |
STOP | Megállás (STOP) A CPU egy utasítás végrehajtása után megáll. Lépésenkénti utasításvégrehajtást tesz lehetővé, vagy EPU szinkronizációt. |
-NMI | Nem maszkolható megszakításkérés (NON MASKABLE IT) Lefutó él hatására nem maszkolható megszakítás történik a CPU-ban. |
-VI | Vektoros megszakításkérés (VECTORED IT) A logikai "0" szint vektoros megszakításkérést hoz létre. |
-NVI | Nem vektoros megszakításkérés (NON VECTORED IT) A logikai "0" szint nem vektoros megszakításkérést hoz létre. |
-BUSREQ | Buszkérés ( BUS REQUEST ) A logikai "0" szint jelzi, hogy valamely külső egység igényt tart a CPU buszára. |
-BUSAK | Buszkérés elfogadása (BUS ACKNOWLEDGE) Jelzi, hogy a CPU elfogadta a buszkérést, azaz minden kimenetét (a -BUSAK kivételével) nagy-impedanciás állapotba helyezte. |
-MI, MO | MULTI-MICRO be, MULTI-MICRO ki (MULTI MICRO IN, MULTI MICRO OUT) A multiprocesszoros daisy-chain ki és bemenő jele. |
2.3.1. Adattípusok
A Z8000 központi egység a következő adattípusokat ismeri:
A biteket lehet beállítani, törölni és értéküket lekérdezni. A BCD digitek a BCD aritmetikai műveleteknél alkalmazhatók. A byte-os adatformátum, karakterek vagy kis értékű adatok (+/- 127) tárolásánál fordulhat elő. Szavakban nem szegmentált utasításokat és változókat (+/- 32767) tárolhatunk, míg a hosszú szavak nagy értékű adatokat (+/- 2147483647), illetve szegmentált utasításokat tárolhatnak. A szövegsorokat kivéve, bármely adattípus vonatkozhat regiszterre és memóriára egyaránt. Szövegsor csak memóriában definiálható.
A különböző adattípusok memóriában való elhelyezkedését a 11.3.1-1. ábrán mutatjuk be.
2.3.1-1 ábra: adatok elhelyezkedése a memóriában
Az ábrán látható, hogy a kisebb címen van a legnagyobb helyértékű byte és az adat legnagyobb című byte-ja a legkisebb helyértékű. Címezni mindig a legkisebb címűt kell, azaz a legnagyobb helyi értékű byte-ra mutat a cím.
2.3.2. Címzési módok
A Z8001 szegmens címzési módot ismer:
A memória 64 Kbyte-os szegmensekre van felosztva, mely szegmensekből mindig egy szegmens érvényes, az adott időpontban. A 16 bites cím, mely a 64 Kbyte-ot címzi, felfogható offszet címnek, mely a szegmens kezdetétől való távolságot jelenti, a 7 bites szegmens cím pedig ezt a kezdőpontot állítja be. Ezzel a technológiával egyszerűen oldható meg több program futtatása, csupán más-más szegmensbe kell őket helyezni, és máris nem tudnak egymásról.
Ebben a szemléletben beszélhetünk logikai címről, és fizikai címről. A program a logikai címet használja és a szegmens cím hozzáadásával keletkezik a fizikai cím. Ha alkalmazzuk a Z8010 MMU-t (Memory Management Unit), a fizikai cím előállítása bonyolultabbá válik, de dinamikusabb memória felosztást tesz lehetővé. A transzformáció elve a 2.4.1-1. ábrán látható. Az ábráról leolvasható, hogy a 16 bites offszet cím alsó fele marad változatlanul, ami egy lap címzését adja meg (256 byte). Az MMU-ban a szegmensek lapokból állnak, illetve egy szegmens állhat minimum egy lapból (256 byte) és maximum 256 lapból (64 Kbyte).
Az utasításokban alkalmazható címzési módok:
A címzési módokat a jobb áttekinthetőség végett a 2.3.2-1. ábrán sematikusan is bemutatjuk.
2.3.2-1. ábra: címzési módok
2.3.3. Utasítás típusok
A Z8000 utasításai szó formátumúak. Lehetséges egy, két, három és négyszavas utasítás.
Töltő utasítások |
|
CLR EX LD LDM PUSH, POP |
törli az operandust bit operandus tartalmát törli az egyik operandusból a másikba tölt az LD n-szeres ismétlése |
Aritmetikai utasítások |
|
ADC, ADD SBC, SUB DEC, INC CP DAB DIV MULT EXTS NEG |
összeadás Carry-vel vagy anélkül kivonás Carry-vel vagy anélkül n-nel való csökkentés, illetve növelés összehasonlítás BCD helyreállítás osztás szorzás előjel áthelyezés negálás (0 - operandus) |
Logikai műveletek |
|
AND OR XOR COM TEST TCC |
és vagy kizáró vagy komplementálás operadus vagy 0 feltétel vizsgálat |
Bit műveletek |
|
BIT RES SET TEST |
bit vizsgálat bit törlés beállítás bit vizsgálat és beállítás |
Eltolások |
|
RL, RR RLC, RRC SLA, SRA SLL, SRR |
eltolás balra, jobbra eltolás balra, jobbra Carry-n át eltolás balra, jobbra aritmetikailag n -szer eltolás balra, jobbra logikailag n-szer |
Blokkos műveletek |
|
CP LD TR TRT |
byte(ok), szövegsorok összehasonlítása blokk áttöltés táblázatos karakter konvertálás táblázatos karakter konvertálás és ellenőrzés |
Ugrások és hívások |
|
JP JR DJNZ CALL CALR RET IRET SC |
feltételes ugrás feltételes relatív ugrás cikluszáró relatív ugrás szubrutinhívás relatív szubrutinhívás visszatérés szubrutinból IRET visszatérés IT rutinból rendszer hívás |
I/O műveletek |
|
IN INR OUT OUTR |
beolvasás blokkos beolvasás blokkos kivitel blokkos kivitel és a fenti I/O műveletek az MMU számára (speciális I/O). Az I/O műveletek mind privilegizált utasítások. |
CPU vezérlő utasítások |
|
RESFLG COMFLG SETFLG DI, EI HALT LDCTL LDCTLB LDPS MBIT MREQ MRES MSET |
jelzőbit törlés jelzőbit komplementálás jelzőbit beállítás megszakítás vezérlés megállítás vezérlő regiszter töltés és kiolvasás jelző regiszter töltés és kiolvasás program állapot töltés MI tesztelés multi-mikro kérés MO:=1 MO:=0 |
2.3.4. Utasítások ismertetése
Az utasításokat részletesen az alábbiakban ismertetjük. Az utasításokat alfabetikus sorrendben adjuk meg, első sorban a mnemonik áll az operandusokkal, a második sorban adjuk, hogy a művelet byteos (B), szavas (W), illetve hosszú szavas (L), és felsoroljuk az értelmezett címzési módokat (ismertetésük a 2.3.2. fejezetben). Végül ismertetjük az utasítás funkcióját.
Az alkalmazott rövidítések:
OP1 OP2 IB R RH RX RY n cc S PS ITK CTLR IR1 IR2 |
= operandus 1 / memória vagy I/ O = operandus 2 / memória vagy I/ O = jelzőbitek = regiszter = RH regiszter (RH0 - RH7) = regiszter = regiszter = adattípusnak megfelelő szám = állapot jelzőbitek kombinációja = előjel (jelzőbit) = program állapot = megszakításkérési okok kombinációja (NVI, VI) = vezérlő regiszter = OP1 címét jelzi = OP2 címét jelzi |
ADC | R,OP1 | |
B, W | R | |
R := R+OP1+CY |
||
ADD | R,OP1 | |
B, W, L | R, IM, IR, DA, X | |
R := R+OP1 |
||
AND | R,OP1 | |
B, W, L | R, IM, IR, DA, X | |
R := R logikai ÉS OP1 |
||
BIT | OP1,b | |
B, W | R, IR, DA, X | |
Z := -(OP1 b-edik bitje) |
||
BIT | OP1,R | |
B, W | R | |
Z := -(OP1 R-ben címzett bitje) |
||
CALL | OP1 | |
- | IR, DA, X | |
SP := SP- (SP) := PC PC := OP1 |
||
CALLR | OP1 | |
- | RA | |
SP := SP- (SP) := PC PC := PC+OP1 (-4094 <= OP1 <= 4096) |
||
CLR | OP1 | |
B, W | R, IR, DA, X | |
OP1 := 0 |
||
COM | OP1 | |
B, W | R, IR, DA, X | |
OP1 := -OP1 |
||
COMFLG | IB | |
- | - | |
IB := -IB |
||
CP | R, OP1 | |
B, W, L | R, IM, IR, DA, X | |
R-OP1 |
||
CP | OP1,n | |
B, W | IR, DA, X | |
OP1-n |
||
CPD | RX,OP1,RY | |
B, W | IR | |
RX-OP1 IR := IR- RY := RY-1 |
||
CPDR | RX,OP1,RY,CC | |
B, W | IR | |
RY-OP1 IR := IR- RY := RY-1 utasítás ismétlés amíg CC= igaz és R <> 0 |
||
CPI | RX, OP1, RY | |
B, W | IR | |
RX-OP1 IR := IR+ RY := RY-1 |
||
CPIR | RX,OP1,RY,CC | |
B, W | IR | |
RY-OP1 IR := IR+ RY := RY-1 utasítás ismétlés, amíg cc = igaz és RY <> 0 |
||
CPSD | OP1,OP2,R | |
B, W | IR | |
OP1-OP2 IR1 := IR1- IR2 := IR2- R := R-1 |
||
CPSDR | OP1,OP2,R,CC | |
B, W | IR | |
OP1-OP2 IR1 := IR1- IR2 := IR2- R := R-1 utasítás ismétlés, amíg cc = igaz és R <> 0 |
||
CPSI | OP1,OP2,R | |
B, W | IR | |
OP1-OP2 IR1 := IR1+ IR2 := IR2+ R := R-1 |
||
CPSIR | OP1,OP2,R,CC | |
B, W | IR | |
OP1-OP2 IR1 := IR1+ IR2 := IR2+ R := R-1 utasítás ismétlés, amíg cc = igaz és R <> 0 |
||
DAB | OP1 | |
B | R | |
OP1 decimális helyreállítása |
||
DEC | OP1,n | |
B, W | R, IR, DA, X | |
OP1 := OP1-n (1 <= n <= 16) |
||
DI | ITK | |
- | - | |
ITK megszakításkérés tiltása |
||
DIV | R,OP1 | |
W, L | R, IM, IR, DA, X | |
R := R/OP1 |
||
DJNZ | R,OP1 | |
B, W | RA | |
R := R-1 PC := PC+OP1, ha R <>0 (-254 <= OP1 <=0) |
||
EI | ITK | * |
- | - | |
ITK megszakításkérés engedélyezése |
||
EX | R,OP1 | |
B, W | R, IR, DA, X | |
R csere OP1 |
||
EXTS | OP1 | |
B, W, L | R | |
Előjel kiterjesztés MSB-ig. |
||
HALT | * | |
- | - | |
megállás |
||
IN | R,OP1 | * |
B, W | IR, DA | |
R := OP1 |
||
INC | OP1,n | |
B, W | R, IR, DA, X | |
OP1 := OP1+n (1 <= n <= 16) |
||
IND | OP1,OP2,R | |
B, W | IR | |
OP1 := OP2 IR1 := IR1- R := R-1 |
||
INDR | OP1,OP2,R | * |
B, W | IR | |
OP1 := OP2 IR1 := IR1- R := R-1 utasítás ismétlés, amíg R <>0 |
||
INI | OP1,OP2,R | * |
B, W | IR | |
OP1 := OP2 IR1 := IR1+ R := R-1 |
||
INIR | OP1,OP2,R | * |
B, W | IR | |
OP1 := OP2 IR1 := IR1+ R := R-1 utasítás ismétlés, amíg R <>0 |
||
IRET | * | |
- | - | |
PS := (SP) SP := SP+ |
||
JP | cc,OP1 | |
- | - | |
PC := OP1, ha cc = igaz |
||
JR | cc,OP1 | |
- | - | |
PC := PC+OP1, ha cc = igaz (-256 <= OP1 <= 254) |
||
LD | R,OP1 | |
B, W, L | R, IM, IR, DA, X, BA, BY | |
R := OP1 |
||
LD | OP1,R | |
B, W, L | IR, DA, X, BA, BX | |
OP1 := R |
||
LD | OP1,n | |
B, W | IR, DA, IX | |
OP1 := n |
||
LDA | R,OP1 | |
W | DA, X, BA, BX | |
R := OP1 címe |
||
LDAR | R,OP1 | |
B | RA | |
R := OP1 relatív címe |
||
LDCTL | CTLR,OP1 | * |
W | R | |
CTLR := OP1 |
||
LDCTL | OP1,CTLR | * |
W | R | |
OP1 := CTLR |
||
LDCTLB | IB,OP1 | |
B | R | |
IB := OP1 |
||
LDCTLB | OP1,IB | |
B | R | |
OP1 := IB |
||
LDD | OP1,OP2,R | |
B, W | IR | |
OP1 := OP2 IR1 := IR1- IR2 := IR2- R := R-1 |
||
LDDR | OP1,OP2,R | |
B, W | IR | |
OP1 := OP2 IR1 := IR1- IR2 := IR2- R := R-1 utasítás ismétlés, amíg R <> 0 |
||
LDI | OP1,OP2,R | |
B, W | IR | |
OP1 := OP2 IR1 := IR1+ IR2 := IR2+ R := R-1 |
||
LDIR | OP1,OP2,R | |
B, W | IR | |
OP1 := OP2 IR1 := IR1+ IR2 := IR2+ R := R-1 utasítás ismétlés, amíg R <> 0 |
||
LDK | R,n | |
B | IM | |
R := n (0 <= n <= 15) |
||
LDM | R,OP1,n | |
W | IR, DA, X | |
R := OP1 ismétlés n-szer, egymás utáni operandusokkal |
||
LDM | OP1,R,n | |
W | IR, DA, X | |
OP1 := R ismétlés n-szer, egymás utáni operandusokkal |
||
LDR | R,OP1 | |
B, W, L | RA | |
R := OP1 |
||
MBIT | * | |
- | - | |
S := -MI |
||
MREQ | OP1 | * |
- | - | |
multi-mikro kérés |
||
MRES | * | |
- | - | |
M0 := 0 |
||
MSET | * | |
- | - | |
M0 := 1 |
||
MULT | R,OP1 | |
W, L | R, IM, IR, DA, X | |
R := R*OP1 |
||
NEG | OP1 | |
B, W | R, IR, DA, X | |
OP1 := -OP1 | ||
NOP | ||
- | - | |
nincs műveletvégzés |
||
OR | R,OP1 | |
B, W | R, IM, IR, DA, X | |
R := logikai VAGY OP1 |
||
OUT | OP1,R | |
B, W | IR, DA | |
OP1 := R |
||
OUTD | OP1,OP2,R | |
B, W | IR | |
OP1 := OP2 IR2 := IR2- R := R-1 |
||
OUTDR | OP1, OP2,R | |
OP1 := OP2 IR2 := IR2- R := R-1 utasítás ismétlés, amíg R <> 0 |
||
OUTI | OP1,OP2,R | |
B, W | IR | |
OP1 := OP2 IR2 := IR2+ R := R-1 |
||
OUTIR | OP1,OP2,R | |
B,W | IR | |
OP1 :=OP2 IR2 := IR2+ R := R-1 utasítás ismétlés, amíg R <> 0 |
||
POP | OP1,R | |
W, L | R, IR, DA, X | |
OP1 := IR R := R+ |
||
PUSH | IR,OP1 | |
W, L | R, IH, IR, DA, X | |
R := R- IR := OP1 |
||
RES | OP1,b | |
B, W | R, IR, DA, X | |
OP1 b-edik bitje := 0 |
||
RES | OP1,R | |
B, W | R | |
OP1 R-ben címzett bitje := 0 |
||
RESFLG | IB | |
- | - | |
IB := 0 |
||
RET | cc | |
- | - | |
ha cc = igaz, akkor: PC := (SP) SP := SP+ |
||
RL | OP1,n | |
B, W | R | |
OP1 eltolása balra n-szer |
||
RLC | OP1,n | |
B, W | R | |
OP1 eltolása balra n-szer CY-n át |
||
RLDB | R,OP1 | |
B | R | |
BCD digit eltolása balra |
||
RR | OP1,n | |
B, W | R | |
OP1 eltolása jobbra n-szer |
||
RRC | OP1,n | |
B, W | R | |
OP1 eltolása jobbra n-szer CY-n át |
||
RRDB | R,OP1 | |
B | R | |
BCD digit eltolása jobbra |
||
SBC | R,OP1 | |
B, W | R | |
R := R-OP1-CY |
||
SC | OP1 | |
B | IM | |
rendszer hívás: SP := SP- (SP) :=PS IR := OP1 IR := IR- PS := rendszer hívásai PS |
||
SDA | OP1,R | |
B, W, L | R | |
OP1 aritmetikai eltolása R-ben adott módon |
||
SDL | OP1,R | |
B, W, L | R | |
OP1 logikai eltolása R-ben adott módon |
||
SET | OP1,b | |
B, W | R, IR, DA, X | |
OP1 b-edik bitje := 1 |
||
SET | OP1,R | |
B, W | R | |
OP1 R-ben definiált bitje := 1 |
||
SETFLG | IB | |
- | - | |
IB := 1 |
||
SIN | R,OP1 | |
B, W | DA | |
R := OP1 |
||
SIND | OP1,OP2,R | |
B, W | IR | |
OP1 := OP2 IR1 := IR1- R := R-1 |
||
SINDR | OP1,OP2,R | |
B, W | IR | |
OP1 := OP2 IR1 := IR1- R := R-1 utasítás ismétlése, amíg R <> 0 |
||
SINI | OP1,OP2,R | |
B, W | IR | |
OP1 := OP2 IR1 := IR1+ R := R-1 |
||
SINIR | OP1,OP2,R | |
B, W | IR | |
OP1 := OP2 IR1 := IR1+ R := R-1 utasítás ismétlése, amíg R <> 0 |
||
SLA | OP1,n | |
B, W, L | R | |
OP1 aritmetikai eltolása balra n-szer |
||
SLL | OP1,n | |
B, W, L | R | |
OP1 logikai eltolása balra n-szer |
||
SOUT | OP1,OP2 | |
B, W | DA | |
OP1 := OP2 |
||
SOUTD | OP1,OP2,R | |
B, W | IR | |
OP1 := OP2 IR2 := IR2- R := R-1 |
||
SOUTDR | OP1,OP2,R | |
B, W | IR | |
OP1 := OP2 IR2 := IR2- R := R-1 utasítás ismétlése, amíg R <> 0 |
||
SOUTI | OP1,OP2,R | |
B, W | IR | |
OP1 := OP2 IR2 := IR2+ R := R-1 |
||
SOUTIR | OP1,OP2,R | |
B, W | IR | |
OP1 := OP2 IR2 := IR2+ R := R-1 utasítás ismétlése, amíg R <> 0 |
||
SRA | OP1,n | |
B, W, L | R | |
OP1 aritmetikai eltolása jobbra n-szer |
||
SRL | OP1,n | |
B, W, L | R | |
OP1 logikai eltolása jobbra n-szer |
||
SUB | R, OP1 | |
B, W, L | R, IM, IR, DA, X | |
R := R-OP1 |
||
TCC | cc, OP1 | |
B, W | R | |
OP1 LSB-je := 1, ha cc = igaz |
||
TEST | OP1 | |
B, W, L | R, IR, DA, X | |
OP1 logikai VAGY 0 |
||
TRDB | OP1,OP2,R | |
B | IR | |
OP1 := OP2(OP1) IR1 := IR1- R := R-1 |
||
TRDRB | OP1,OP2,R | |
B | IR | |
OP1 := OP2(OP1) IR1 := IR1- R := R-1 utasítás ismétlése, amíg R <> 0 |
||
TRIB | OP1,OP2,R | |
B | IR | |
OP1 := OP2(OP1) IR1 := IR1+ R := R-1 |
||
TRIRB | OP1,OP2,R | |
B | IR | |
OP1 := OP2(OP1) IR1 := IR1+ R := R-1 utasítás ismétlése, amíg R <>0 |
||
TRTDB | OP1,OP2,R | |
B | IR | |
RH1 := OP2(OP1) IR1 := IR1- R := R-1 |
||
TRTDRB | OP1,OP2,R | |
B | IR | |
RH1 := OP2(OP1) IR1 := IR1- R := R-1 utasítás ismétlése, amíg R <>0 és RH1 <>0 |
||
TRTIB | OP1,OP2,R | |
B | IR | |
RH1 := OP2(OP1) IR1 := IR1- R := R-1 |
||
TRTIRB | OP1,OP2,R | |
B | IR | |
RH1 := OP2(OP1) IR1 := IR1+ R := R-1 utasítás ismétlése, amíg R <> 0 és RH <> 0 |
||
TSET | OP1 | |
B, W | R, IR, DA, X | |
S := OP1 MSB-je OP1 összes bitje := 1 |
||
XOR | R,OP1 | |
B, W | R, IM, IR, DA, X | |
R := R logikai kizáró VAGY OP1 |
2.4. Memória felügyelő egység (MMU)
2.4.1. Általános ismertetés
A memória felügyelő egység a Z8001 CPU-val együttműködve felügyel a memória kezelésre, a CPU által adott logikai címekből a szegmens táblázat alapján előállítja a fizikai címeket. A szegmens táblázat 64 különböző szegmenet tud nyilvántartani. Ezen szegmensek illegális hozzáférés, illetve átírás ellen védhetőek.
Minden szegmens 1-256 lapból áll, egy lap 256 byte - os, így tároló-kapacitása 256 byte - tól 64 Kbyte-ig terjedhet (256 byte-os lépcsőkben) . Ha a 64 szegmens a rendszerben kevésnek bizonyul, több MMU-t lehet alkalmazni, a közvetlenül címezhető szegmensek a rendszerben alkalmazott MMU-k számának a 64-szerese. Az MMU 16 Mbyte-os memóriát tud címezni, mert a 23 bites logikai címet 24 bites fizikai címmé alakítja. A logikai fizikai átalakítás menetét a 2.4.1-1. ábra mutatja.
2.4.1-1 ábra: Címátalakítás az MMU-ban
Ezután az MMU blokkvázlata könnyen érthető. (2.4.1-2. ábra)
2.4.1-2. ábra: az MMU blokkvázlata
Szegmens leíró regiszterek:
Mind a 64 blokkhoz tartozik egy szegmens leíró terület, amely tartalmazza a 16 bites báziscímet, a 8 bites lapszámot és a 8 bites szegmens jellemzőt. A szegmens jellemző byte a következő információkat tartalmazza:
RD | CSAK OLVASHATÓ (READ-ONLY) ha a bit=1 írásvédelem van |
SYS | CSAK RENDSZERNEK (SYSTEM-ONLY) ha a bit=1 csak a system üzemben hozzáférhető |
CPU | CPU TILTÁS (CPU INHIBIT) ha a bit= 1 a CPU nem férhet a szegmenshez csak a DMA |
EXC | CSAK UTASÍTÁSKÉNT (EXECUTE ONLY) ha a bit=1 csak az utasítás beolvasási ciklus (fetch) férhet a szegmenshez |
DMAI | DMA TILTÁS (DMA INHIBIT) ha a bit= 1 a DMA nem férhet a szegmenshez, csak a CPU |
DIRW | FIGYELMEZTETÉS (DIRECTION AND WARNING) ha a bit=1 a szegmens legutolsó lapjára történő íráskor figyelmeztető jelzést ad (szegmens trap) |
CHG | MEGVÁLTOZOTT (CHANGED) ha a bit=1, szegmensre írás történt |
REF | HOZZÁFÉRÉS VOLT (REFERENCED) ha a bit=1, akkor jelzi, hogy a szegmenshez volt hozzáférés. |
Vezérlő regiszterek:
Az MMU vezérlésére szolgálnak ezek a CPU átal hozzáférhető regiszterek (MDR, SAR, DSCR) (2.4.2-1. ábra).
2.4.2-1. ábra: Vezérlő regiszterek
ID | AZONOSÍTÓ (IDENTIFICATION FIELD) Az MMU címét tartalmazza (több MMU esetén). |
NMS | NORMÁL ÜZEMMÓD (NORMAL MODE SELECT) Ha több MMU üzemel, lehet az egyiket a system üzemben, a másikat normál üzemben igénybe venni. Ez a bit választja ki, hogy az MMU melyik üzemanódban legyen aktív. |
MST | TÖBB MMU VAN (MULTIPLE SEGMENT TABLE) Ha a bit=1 az MMU-nak figyelnie kell az N/S kivezetéseket az NMS bit beállítása alapján. |
URS | KIVÁLASZTÁS (UPPER RANGE SELECT) Az MMU a szegmensszám MSB-jét és az URS bitet hasonlítja össze, ha megegyeznek, az MMU elvégzi a címkonvertálást, ha nem, nagy-impedanciás állapotban vannak a kimenetei. |
TRNS | CÍMÁTALAKITÁS (TRANSLATE) A bit jelzi, hogy az MMU-nak címátalakítást kell-e végezni, vagy a logikai cím megegyezik a fizikai címmel. (Ez utóbbi esetben az MMU által kiadott cím MSB-je 0, azaz az alsó 8 Mbyte-ot címzi.) |
MSEN | TILTÁS (MASTER ENABLE) Az MMU művelet felfüggesztésére szolgál, ha a bit=0 az MMU kimenetei nagy-impedanciás állapotban vannak. |
A SAR regiszterben a 64 szegmens leíró kiválasztására szolgáló cím (SDN) található. A szegmens leírón belüli regiszter kiválasztására a DSCR regiszterben levő 2 bites DSC szolgál.
Állapotregiszterek
Hat darab egyenként 8 bites regiszter tartalmazza az MMU információit, főleg amelyek a memória hozzáférési hibák esetén fontosak (VTR, VSN, VOFF, BSR, ISN, IOFF) (2.4.2-2. ábra).
2.4.2-2 ábra: Állapot regiszterek
RDV | ÍRÁSVÉDELEM SÉRTÉS (READ ONLY VIOLATION) Í rási k í sérlet írásvédett szegmensre. |
SYSU | SYSTEM VÉDELEM SÉRTÉS (SYSTEM VIOLATION) A CPU normál módban akart hozzáférni a szegmenshez. |
CPUIV | CPU TILTÁS SÉRTÉS (CPU INHIBIT VIOLATION) A tiltott szegmenshez akart a CPU hozzáférni. |
EXCV | UTASÍTÁSVÉDELEM SÉRTÉS (EXECUTE ONLY VIOLATION) A CPU az utasítás szegmenshez nemcsak utasításbevételi ciklusban akart hozzáférni. |
SLV | TÚLCSORDULÁS (SEGMENT LENGHT VIOLATION) Szegmens túlcsordulás. |
PWW | FIGYELMEZTETÉS (PRIMARY WRITE WARNING) Ha a DIRW=1 és írás történik a szegmens utolsó lapján. |
SWW | FIGYELMEZTETÉS (SECONDARY WRITE WARNING) Ha a DIRW= 1 és a CPU system módban a stack utolsó lapjára kezd írni (stack túlcsordulás várható). |
FATL | TÖBBSZÖRÖS HIBA (FATAL CONDITION) A bit=1, ha valamelyik memória sértést jelző bit értéke már logikai "1" és újabb sértési kísérlet történik, vagy írás-figyelmeztető jelzés érkezik. Ez azt jelzi, hogy a memória védelmi trap rutinban újabb hiba volt. |
A VSN és WOFF regiszterekben definiált SN (szegmens szám) és UPOFF (felső offszet) jelzi, hogy milyen logikai című lapon történt a memóriavédelem megsértése. Az ISN és IOFF regiszterek a memóriasértési kísérlet előtti utolsó utasítás lapcímét tartalmazzák. A BSR-ben azt a busz állapotot (N/S jel, R/W jel, és az állapotkód ST3-ST0) találjuk, ami a memóriasértési kísérlet időpontjában volt.
Ha az MMU memóriavédelem sértését észleli a SEGT vonalon Szegmens Trap-ot kér a CPU-tól és a SUP kivezetésen jelzi a memóriának, hogy a most futó ciklus memóriavédelmet sért. A memória ezzel a jellel védhető. Amennyiben a memóriavédelmi sértés DMA ciklusban történt, a Szegmens Trap kérése elmarad, mert a CPU azt nem tudná végrehajtani, mivel átadta a busz vezérlését. Ez esetben csak a SUP (SUPPRESS) jel kiadása történik meg.
A Z8001-es CPU az MMU-val együttműködve virtuális memória kezelésére is képes. Ez az üzemmód nem alapszolgáltatása a CPU-nak és az MMU-nak, de egy kis módosítással megoldható. Azt a szegmenet, amelyet nem a memóriában helyezünk el, CPU TILTÁS védelemmel kell ellátni. Amikor a Z8001-es hozzá akar férni ehhez a szegmenshez, akkor az MMU Szegmens Trap-ot kér. Ez jelzi, hogy biztosítani kell a háttértár elérését.
2.4.3. Az áramkör kivezetéseinek értelmezése
AD8-AD15 | Cím- / Adatbusz (ADDRESS / DATA BUS) Az MMU a logikai címet és az egyes utasításokat a címbuszon kapja, illetve az adatbuszon tud válaszolni. |
-AS | Cím kapuzójel (ADDRESS STROBE) Jelzi, hogy az AD buszon érvényes cím van, valamint az ST0-ST3, R/W és N/S vonalakon értékes jel található. |
-DS | Adat kapuzójel (DATA STROBE) Jelzi, hogy az AD buszon érvényes adat van. |
-CS | Kiválasztás (CHIP SELECT) Jelzi, hogy az MMU-hoz parancs érkezik. |
CLK | Rendszer órajel (SYSTEM CLOCK) Nem TTL szintű egyfázisú órajel bemenete. |
N/-S | Normál / System üzemmód (NORMAL / SYSTEM MODE) Jelzi, hogy a CPU vagy a DMA Normál vagy System üzemmódban dolgozik. |
R/-W | Olvasás / Írás (READ/ WRITE) Jelzi az AD buszon az adatáramlás irányát. |
-RESET | Törlés (RESET) Az MMU törlésére szolgál. |
DMASYNC | DMA / szegmensszám szinkronizálás (DMA / SEGMENT NUMBER SYNCHRONISATION STROBE) Jelzi, hogy DMA (logikai "0") vagy CPU ciklus (logikai "1") megy végbe. |
SN0/SN6 | Szegmensszám (SEGMENS NUMBER) Szegmens szám, az SN0-SN5 vezetékek, az MMU-nál definiált 64 szegmens kiválasztására szolgálnak, az SN6 az MMU kiválasztására használható. |
ST0-ST3 | Állapot (STATUS) A CPU status vonalai csatlakoznak ide. Jelentésük az ott leírtakkal megegyezik. |
-SUP | Memória figyelmeztetés (SUPRESS) Jelzi a memóriának, hogy memóriavédelem sértés történik a futó ciklusban. Ezzel a jellel tiltható a memória. |
-SEGT | Szegmens trap kérés (SEGMENT TRAP REQUEST) Ezen a vezetéken az MMU szegmens trap-ot kér a CPU-tól, amikor memóriavédelem sértést észlel, illetve amikor figyelmeztetést ad. |
A8-A23 | Memória címbusz (ADDRESS BUS) Az MMU ezeken a vonalakon adja ki a fizikai cím felső 16 bitjét. |
DECOUPLE | Visszacsatolás mentesítés (DECOUPLE) Az MMU-ban levő, negatív feszültséget előállító generátor visszacsatolását lehet az ide kapcsolt kondenzátorral megszüntetni. |
2.4.4. Programozás
Az MtdIU speciális I/O utasításokkal elérhető. Ezeket az MMU az AD8-15 vonalon kapja, mert az adatátvitelnél szokásos AD0-7 vonalak az MMU-ba nincsenek bekötve. Az MMU a válaszokat szintén az AD8-15 vonalon adja. A SAR automatikus címnövelő szolgáltatása révén a speciális I/O-k között is megtalálható blokkos átvitellel könnyen tudjuk az MMU regisztereit feltölteni, vagy kiolvasni.
A vezérlő regiszterek elérésére szolgáló utasítások (írás és olvasás):
Utasítás | Funkció |
00H | MDR (MODE regiszter) elérése |
01H | SAR (szegmens címregiszter) elérése |
20H | DSCR (szegmens leíró + címző regiszter) elérése |
A szegmens leírót ellenőrző parancsok: |
|
Utasítás | Funkció |
08H | bázis címmező elérése |
09H | lapszám mező elérése |
0AH | szegmens jellemzők mezejének elérése |
0BH | szegmens leíró minden mezejének elérése |
0CH | bázis címmező elérése (R/W); SAR növelése |
0DH | lapszám elérése (R/W); SAR növelése |
0EH | szegmens jellemzők mezejének elérése; SAR növelése |
0FH | szegmens leíró minden mezejének elérése; SAR növelése |
ezen belül csak író utasítások: | |
15H | az összes CPU Inhibit bit " 1 "-be állítása |
16H | az összes DMA Inhibit bit " 1 "-be állítása |
Állapotregisztereket csak olvasni lehet: | |
02H | (VTR) sértéstípus szerinti regiszter olvasása |
03H | (VSNR) sértésszegmens-szám regiszter olvasása |
04H | (VOFF) sértés-offszet regiszter olvasása |
05H | (BSR) busz állapotregiszter olvasása |
06H | (ISN) utasításszegmens-szám olvasása |
07H | (IOFF) utasítás-offszet olvasása |
Törlő utasítások: | |
11H | sértéstípus (VTR) regiszter törlése |
13H | SWW bit törlése a VTR regiszterben |
14H | PATL bit törlése a VTR regiszterben |
2.4.5. Rendszerbe illesztés
Az MMU áramkörök aránylag kevés segédáramkör alkalmazásával illeszthetők a központi egységhez. Az első példán (2.4.5-1. ábra) két MMU illesztés látható. A CNTL vezetékek között futó S/N vezetékkel a két MMU különválasztható: az egyik a system üzemmód esetén módosítja a logikai címeket, a másik csak a felhasználói (normál) üzemmódban. Sok felhasználós multiprogramozás esetén két MMU kevésnek bizonyulhat. A második példa több (hét) memória felügyelő egység rendszerbe illesztését mutatja. (2.4.5-2. ábra)
Végül az MMU idődiagramjait mutatjuk be a 2.4.5-3, -4, -5. ábrákon.
2.4.5-1. ábra: Két MMU rendszerbe illesztése
2.4.5-2. ábra: Több MMU rendszerbe illesztése
2.4.5-3 ábra: Memória olvasás idődiagramja
2.4.5-4. ábra: Memória írás idődiagramja
2.4.5-5. ábra: CPU-MMU kommunikáció
III. Rész: Z8
3.1. Bevezetés
A Z8 áramkör a Zilog gyár egy chipes számítógépe. A Z8 MCU-t két változatban állítják elő: Z8601 néven 40 lábú 2K-s maszk programozott MCU-t, Z8602 néven ennek 64 lábú külső program fogadására alkalmas változatát és Z8603 néven az előző kettő házasítása egy EPROM foglalattal: a 40 lábú tokon levő foglalatba a belső 2K-s maszk PROM helyett egy külső 2K-s EPROM csatlakozhat az MCU-hoz. A Z8611, Z8612, Z8613 az előzőek 3K-s változatai. A Z8681 a Z8601 ROM nélküli változata. Az 1. port a multiplexelt cím és adatbusz. Megjelenésekor hazai alkalmazására nem volt sok remény, mivel maszk programozású. Kicsi a valószínűsége, hogy pl. 1000 darabos tételben rendeljünk a Zilog cégtől maszk programozott Z8 mikrogépet. A fejlesztéshez kialakított Z8602 vagy Z8603 ("Z8 Protopack Emulator") beszerzésére sem vállalkoztak sokan. Az irodalom is igen szegényes, ami hazánkban fellelhető. Az ismertetést az indokolja, hogy az NDK-beli RFT cég a Z80 mellett a Z8-at is gyártja 40 és 64 kivezetékes változatban, illetve létezik az emuláláshoz megfelelő NDK gyártmányú eszköz.
A Z8 tervezői egy igen sokrétűen felhasználható univerzális eszközt alkottak meg, amely a már piacon levő korábbi processzorok, és egy chipes mikrogépek tapasztalatait sűríti magába. Az áramkör nem csupán egy chipes központi egységként kerül forgalomba, hanem megfelelő belső programmal ellátva periféria vezérlőként és speciális processzorként is.
Z8601 | 40 lábú, 2K maszk PROM -mal |
Z8602 | 64 lábú, 2K memória illesztővel |
Z8603 | 40 lábú, 2K-s EPROM foglalattal (2716) |
Z8611 | 40 lábú, 4K maszk PROM -mal |
Z8612 | 64 lábú, 4K memória illesztővel |
Z8613 | 40 lábú, 4K-s EPROM foglalattal (2732) |
Z8681 | 40 lábú, csak külső memóriával |
3.1.1. Általános ismertetés
Az egy chipes Z8 mikrogépbe 2/4 Kbyte ROM-ot és 144 byte RAM memóriát, 32 különféle célú I/O vonalat, két 8 bites számláló-időzítőt (melyek 6 bites előosztóval rendelkeznek) és egy duplex UART áramkört integráltak. A Z8 belső felépítését a 3.1.1-1. ábra szemlélteti.
3.1.1-1 ábra: A Z8 belső felépítése
A Z8 5V-os tápfeszültséget igényel, TTL kompatibilis. Az órajelet vagy kívülről adjuk, vagy a chipen belül levő oszcillátor állítja elő külső elem(ek), (Kvarc, RC vagy LC hálózat) segítségével. Viszonylag nagy a műveletvégzési sebessége pl. belső regiszterművelet: 1,5 mikrosec; átlagos műveletvégzés: 2,2 mikrosec és a leglassúbb utasítás végrehajtása 4,25 mikrosec; 43 féle utasítása van. Képes a Z buszra csatlakozni, valamint 62 Kbyte adat-és programmemóriát címezni. A megszakításkezelés vektoros, prioritásos, a belső illesztő, csatlakoztató áramkörök: I/O, időzítő, UART. Az I/O vonalai 4 port regiszterhez csatlakoznak. 16 állapot és vezérlő regisztere van, a többi belső regiszter, szabadon felhasználható a legkülönbözőbb célokra.
3.1.2. A Z8 kivezetéseinek értelmezése
P00-P07 P10-P17 P20-P27 P30-P37 |
I/O vonalak (I/O LINES) I/O port kivezetések. Ez a 32 vonal cím, adat és I/O-ként használható, az egyes portok programozásának függvényében. |
-AS | Cím kapuzójel (ADDRESS STROBE) Az -AS vonal jelzi, ha belső, külső beolvasási ciklus vagy külső memória művelet van. Külső program-, illetve adatmemória az -AS jel visszafutó élével mintavételezheti a címet. Az -AS-t a -DS, R/W kivezetésekkel és a P0, P1 pontokkal együtt nagy-impedanciás állapotba lehet vinni (lásd R 248 programozása). |
-DS | Adat kapuzójel (DATA STROBE) A -DS a külső memóriával végzett műveletvégzéskor (írás vagy olvasás) válik aktívvá. Ha a Z8 nincs külső memória műveletre programozva, a -DS utasítás szinkron jelként értelmezett, azaz az utasításkód beolvasás előtti belső órajel ciklusban aktív. |
-R/-W | Olvasás / Írás (READ/WRITE) A külső memóriának jelzi, hogy írás vagy olvasás történik a ciklusban. Logikai "0" szint jelenti az írást, logikai "1" szint jelenti az olvasási ciklust. |
XTAL1-2 | Órajel (CLOCK) Az óragenerátor kivezetései. Ha a Z8 beállítása olyan, hogy az "óra" oszcillátor üzemben dolgozik, akkor kristályt (soros rezonanciájú Rs <= 100 Ohm) és a külső LC, illetve RC hálózatot erre a pontra kell csatlakoztatni (fQmax=8MHz). A külső órajel-üzemben erre a pontra kell csatlakoztatni az egyfázisú órajelet. Erre példát a 3.1.2-2. ábra mutat. |
3.1.2-2. ábra: Külső órajel csatlakoztatása
-RESET | Törlés (RESET)
A törlő bemenet logikai "0"-ba állításával a Z8 alaphelyzetbe állítása történik meg, majd a -RESET jel lefutása után a belső programmemória 000CH címről indul a program futtatása. Alaphelyzet beállításakor az alábbi regiszter beállítás történik:
A -RESET-nek 18 órajel cikluson át logikai "0"-ban kell lennie bekapcsoláskor, hogy a belső óragenerátor stabilizálódjon. |
A Z8/64 (Z8602 / Z8612) további kivezetései:
-A0-A11 | Programmemória címbusz (PROGRAM MEMORY ADRESS) Az első 2K/4K program címvezetékei. Erre az A 0 -A 10 kivezetések szolgálnak a Z8602 esetében. Az A 11 -es kivezetés csak a Z8612-nél működik. |
![]() |
D0-D7 | Utasításkód (PROGRAM DATA) A külső programmemóriából az adat ezeken a vonalakon jut el a Z8/64-be. |
|
-MDS | Utasításkód kapuzójel (PROGRAM MEMORY DATA STROBE) A -MDS vonal akkor aktív, amikor a Z8/64 az utasítás olvasási ciklusban van. |
|
-SYNC | Utasítás szinkron (INSTRUCTION SYNC) Az utasítás bevételi ciklust megelőző órajelciklusban aktív a -SYNC jel. |
|
SCLK | Rendszer órajel (SYSTEM CLOCK) A belső órajel kivezetése. A belső órajel frekvenciája a külső órajel, illetve az oszcillátor frekvenciájának a fele. |
|
IACK | Megszakításkérés elfogadása (IT ACKNOWLEDGE) A megszakításkérés elfogadása utáni gépi ciklusban - megszakítási ciklus - az IACK jel aktív. |
3.1.3. Regiszterek
A Z8 belső felépítése a 3.1.1-1. ábrán látható. Az ábrából kitűnik, hogy a 144 belső regiszterből 124 egy blokkban van. További 4 a négy porthoz rendelt regiszter. Ezek címei 0-3-ig terjednek, megegyezően a port elnevezésekkel. 16 regiszter a belső egységek vezérlő és állapot regiszterei. Ezek a 240H címtől a 255H címig érhetők el a 3.1.3-1. ábra szerint.
255 | Stack mutató (0-7) |
SPL |
254 | Stack mutató (8-15) |
SPH |
253 | regiszter címző |
RP |
252 | jelző bitek |
FLAGS |
251 | Megszakítás maszk |
IMR |
250 | Megszakítás kérés |
IRQ |
249 | Megszakítások prioritása |
IPR |
248 | Port 0-1 üzemmód |
P01M |
247 | Port 3 üzemmód |
P3M |
246 | Port 2 üzemmód |
P2M |
245 | T0 előosztó |
PRE 0 |
244 | időzítő / számláló 0 |
T0 |
243 | T1 elosztó |
PRE 1 |
242 | időzítő / számláló 1 |
T1 |
241 | Időzítő üzemmód |
TMR |
240 | Sorod I/O üzemmód |
SIO |
Nincs megvalósítva |
||
127 ... 4 |
Általánosan használható regiszterek |
|
3 | PORT 3 |
P3 |
2 | PORT 2 |
P2 |
1 | PORT 1 |
P1 |
0 | PORT 0 |
P0 |
Jelzőbitek
Az R252-es regiszter tartalmazza a jelzőbiteket. A megszokott átvitel (CY), előjel (S), túlcsordulás (V), fél byte-os átvitel (H) és nulla (Z) mellett megtaláljuk a decimális helyreállítást segítő bitet (D) és két szabadon felhasználható bitet (F1, F2). Ez utóbbi két bit igen kiválóan használható fel feltételes futások esetében az egyes pontokban való elágaztatásokra.
regiszterek címzése
A regiszterek 16-os csoportokra vannak felosztva. A regisztercímző jelöli ki, hogy a felhasználó melyik regisztercsoportot érheti el a regiszter elérési üzemmódban. Ez esetben csak a 4 bithelyen kell jelölni, hogy a kiválasztott munkaregiszter-csoportnak melyik regiszterét kívánja elérni a felhasználó.
3.1.4. Memória felosztás
Mint látható a regisztereken kívül 2K/4K programmemória is található a Z8601/Z8602 chipen belül (a Z8602/Z8612 esetén ez kívülről csatlakozik az áramkörhöz, a Z8603/Z8613 esetében pedig a tok tetejére helyezhető EPROM-ban van) . Ennek a programmemória területen való elhelyezkedésére a 3.1.4-1. ábra ad felvilágosítást.
3.1.4.1. ábra: Programmemória térkép
A Z8681 esetén nincs belső programmemória, mind a 64 K , külső programmemória.
A Z8 külön definiálja a programmemóriát (max. 64K) és az adatmemóriát (max. 62K). Az adatmemória 800H-n kezdődik. (A teljes 64K címtartományból az első 2K/4K nem címezhető.) Az adatmemória kiosztása a 3.1.4-2. ábrán látható.
3.1.4-2 ábra: Adatmemória térkép
Az adatmemória és a programmemória-rész azonos területen is elhelyezkedhet. Ekkor az MCU 126K/124K memóriát címezhet (ebből 124K/120K külső memória). A kétféle memória megkülönböztetésére a -DM kivezetés szolgál. Ez egy "virtuális" kivezetés, a 3. port 4. kivezetéseként érhető el (P34), ha a portot ennek megfelelően programozzuk.
A stack két helyen lehet, a belső általános regiszter területen (R4-R127), vagy a külső adatmemória területen. Az első esetben 8 bites (R255), a második esetben 16 bites (R254, R255) a stack pointer.
Az utasítások bevételezése átfedéses módon történik. Bizonyos utasítások esetén az egymást követő utasítások nem akadályozzák az átfedéses üzemet, de az IP, RET, IRET, LDE, LDEI, LDC, LDCI, CALL és NOP utasítások esetében nem tud a Z8 átfedéses utasításvégrehajtást végezni. Az utasításokat összefoglaló táblázatban az "EXECUTION CYCLES" az utasítás teljes végrehajtásához szükséges ciklusok számát adja, a "PIPELINE CYCLES" pedig azon ciklusok számát adja, amely ciklusok alatt a következő utósítás bevételezése folyhat.
Ha az utasítás bevételezése külső programmemóriából történik, akkor programozható (R248-5), hogy az utasítás bevételezési ciklus tartalmazzon várakozó ciklust, amely lassúbb memóriák esetén szükséges (az MCU-nak nincs WAIT bemenete). Ha külső memóriaciklust (EXTENDED) állítunk be (tartalmaz WAIT ciklust), akkor a két byte-os aritmetikai és logikai utasításokat és az LD rl,Ir2 utasítást nem hajtja végre az MCU helyesen. (Természetesen, ha belső memóriából vagy normál külső memóriaciklus esetén olvassa be az MCU az utasítást, akkor helyesen hajtja végre azt.)
3.1.5. A környezet illesztése
A Z8 MM portjai akár bemeneti, akár kimeneti portként, de speciális portként is felhasználhatók. A 0, 1 és 2-es portok "handshake" logikával is rendelkeznek, melyek "handahake" jelei a 3-as porton át érhetők el.
A portok TTL kompatibilisek.
PORT 1
A port 1. egy-byte-os I/O-ként "handshake" jelekkel, vagy azok nélkül használható. Külső memória használatakor alkalmazható cím / adatbuszként. A port üzemmódját az R248-as regiszterben állíthatjuk be, és az adat az R1-ben érhető el. A Z8681 esetén a PORT 1. cím / adatbuszként definiált, I/O-ként nem használható.
Ha egy-byte-os I/O üzemmódban működik a port 1., és "handshake" jeleket is akarunk használni, akkor a port 3. P33 és P34 kivezetéseit kell igénybe venni, amit az R247-es regiszterben állíthatunk be.
Külső memóriával a cím (alsó byte), illetve az adatbuszt a port 1. valósítja meg. Ennek megfelelően értelmezettek a -DS, R/-W és -AS jelek, valamint a port 3.-on át elérhető -DM jel (P34). A port 1.-nek ebben az üzemmódjában az R1 regiszter nem érhető el. Szükség esetén a port 1. a vezérlő jelekkel (-DS, RI-W, -AS) (DMA vagy multiprocesszor üzem) nagy-impedanciás állapotba is tehető. Ha a külső buszt vezérelni akarjuk, akkor a port 3. P33 és P34-es kivezetéseit alkalmazhatjuk a BUSAK, illetve BUSREQ jelekként. A port 1. 0-256-ig tud memóriát címezni. Ha ennél nagyobb külső memóriára van igény, akkor a felső címek a port 0. kivezetéseken érhetők el.
PORT 0
A port 0. fél-byte-os (4 bit) I/O-ként vagy a külső memória felső címének kiadására használható. I/O-ként használva az R248-as regiszter fél-byte-onkénti beállításával (P00-P03 és P04-P07) kiválasztható, hogy ki- vagy bemenetként akarjuk működtetni. A magasabb helyérték (fél byte által meghatározott iránynak megfelelő "handshake" jelek (DAVO és RDYO) a port 3.-on (P32 és P35) érhetők el.
Ha olyan külső memóriát használunk, amelynek mérete 256 byte és 4K között van, akkor az alacsonyabb helyértékű fél byte-ot (P00-P03) címbuszként (A8-A11) kell alkalmaznunk. Ha ennél nagyobb a memóriánk, akkor a magasabb helyértékű (fél byte-ot is címbuszként kell programoznunk. (A12-A15) Ha a port 0.-ot (vagy a felét) címbusznak használjuk akkor a regisztereken keresztül a címvezetékekhez rendelt (fél) byte nem érhető el. A címvezetékként felhasznált (fél) port 0. nagy impedanciás állapotba is tehető (tristate) úgy, mint a port 1. (R248).
PORT 2.
A port 2.-t bitenként programozhatjuk akár bemenetként, akár kimenetként. A port 2. adata elérhető az R2-es regiszterben, ami maga a port.
A legmagasabb helyértékű bit (P27) irányának megfelelően áll rendelkezésünkre a port 3.-on két "handahake" jel. Ez a két kivezetés a P31 és P36, melyeket az R247-es regiszter segítségével programozhatunk. Ugyanezen regiszter 0-ás bitjével állíthatjuk be a port 2. kimenetét nyitott kollektorosra vagy normál kimenetre.
PORT 3.
Mint az eddigiekből kiderült a vezérlő és "handshake" jeleket a 3-as port szolgáltatja, illetve I/O portként is használhatjuk úgy, hogy a port alacsonyabb helyértékű fele bemenet (P30-P33), a magasabb helyértékű fele pedig kimenet (P34-P37).
A "handshake" jelek három porthoz hat ponton (P31-P36) kapcsolódnak. A fennmaradó két kivezetést (P30-P37) soros kimenetként használhatjuk.
Ha a port 1. cím / adat portként értelmezett, akkor a hozzá tartozó "handshake" jelek szükségtelenek, helyettük megszakításkérő bemenetet, illetve "adatmemória kiválasztás" (-DM) jelkimenetet használhatunk.
Ha a 2-es porthoz nem igényeljük a "handshake" jeleket, akkor a felszabaduló két kivezetésen az időzítő áramkört érhetjük el (TIN, TOUT).
A fenti felhasználásokon túlmenően a négy bemenet (P30-P33) megszakításkérést tud továbbítani, ha azt az R251-ben engedélyeztük.
Soros port UART (UNIVERSAL ASYNCHRONOUS RECEIVER TRANSMITTER)
A P30 és a P37 port kivezetéseken keresztül az MCU a külvilággal max. 62.5 Kbit/sec sebességű soros adatátvitelt tud létrehozni. Az UART számára a belső órajelgenerátor jelét T0-ás időzítő áramkörrel leosztják. Az UART időzítő áramkörtől kapott jelének frekvenciája az adatátviteli frekvencia 16-szorosa. Ha az órajelfrekvencia 7.3728 MHz, akkor a szabványos adatátviteli sebességeket 110 Baud és 19 200 Baud között tudjuk előállítani. Ehhez a T0 előosztóját 3-ra kell beállítani. A kivárt Baud értékek a T0 osztásarányával állíthatók be (19200 = 1; 110 = 175).
Adáskor a Z8 automatikusan állítja elő a start és a két stop bitet. Mindig nyolcbites adatot ad ki, de lehet a nyolcadik bit helyett a paritásbit (páros). Karakter kiadása IRQ 4-es megszakításkérést eredményezhet. A karakterek közti szünetben marker jelet (logikai "1") ad ki.
Vételkor nyolc adatbitet és egy stop bitet vár a P30 bemenettel kapcsolatban levő vevőáramkör. Ha paritásellenőrzés engedélyezett (R247) a legnagyobb helyértékű bitet tekinti paritásbitnek. A paritáshibát jelzőbit jelzi. Karakter vétele IRQ 3 megszakításkérést eredményezhet. A vevő kétszeresen bufferelt, felülírás ellen nem védett.
3.1.6. Számláló-időzítő részegység
Az UART időzítéséhez és egyéb feladatok ellátására két számláló-időzítő egységet tartalmaz az MCU. A két egység (T0, T1) egyenként egy 6 bites előosztóból és egy 8 bites számlálóból áll. A T0 meghajtása a belső órajelről történik, a T1-et lehet belülről, illetve kívülről vezérelni. A belső órajel az SCLK kivezetésen is megjelenő rendszer órajel negyede. A rendszer órajel a bemenő frekvencia fele. Külső órajelként a számláló-időzítő max. 1 MHz-es jelet kaphat. Programozásra az R241-es regiszter szolgál, vagyis annak segítségével engedélyezhetjük, illetve tilthatjuk az egyes számlálókat, jelezhetjük, hogy tölteni fogjuk őket, illetve a T1-es számláló környezeti csatlakozásait definiálhatjuk, azaz a P31-es bemenetet, mind órajel, mind kapuzó, vagy mind trigger bemenetet használjuk. Ez utóbbi esetben T1 számláló működhet retriggerelhetőként és egyszeres indításúként. Ugyanezen regiszterben adhatjuk meg a P36-os kimenet funkcióját is. Kapcsolhatjuk a T0-ás kimeneteként - és így sorba kapcsolható a két számláló, ha a T1-es bemeneteként definiált P31-gyel összekötjük - a T1-es kimeneteként, de a belső órajel kivezetéseként is felhasználhatjuk. Az előosztók és a számlálók feltöltésére négy regiszter szolgál (R242-245). A számlálók pillanatnyi értékei visszaolvashatók. A számlálók lefelé számolnak, amikor tartalmuk 0-ra csökken, megszakításkérést tudnak (IRQ 4 és IRQ 5) létrehozni.
3.1.7. Megszakítások kezelése
A belső egységek (UART, számlálók) és a külső források (P30-P33) kérhetnek megszakítást. Hat megszakítás engedélyezhető és tiltható az R251-es regiszter segítségével, prioritásukat az R249-es regiszterben lehet meghatározni. A beérkezett megszakításkérések az R250-es regiszterben a nekik megfelelő biteket "1"-be állítják.
Ha megszakításkérés érkezik, akkor az MCU "IT" típusú gépi ciklust hajt végre, amely tiltja a megszakításkéréseket, tárolja a programszámláló tartalmát, menti a jelzőbiteket és a megszakításnak megfelelő vektorban található címre ugrik. A megszakításokhoz rendelt vektorok a memória elején 0-B-ig találhatók, két byte-onként. Mindegyik vektor 16 bites IT rutincímet tartalmazhat.
A megszakítást kezelő rutinban EI utasítással kell engedélyezni az újabb megszakításkérések érkezését, vagy IRET utasítással kell lezárni a rutint, amely szintén elvégzi a megszakításkérések engedélyezését az állapot bitek visszatöltését, valamint visszatér a megszakított programba.
3.1.8. Z8 programozása
A Z8-as utasításkészlete az alábbi utasításokat ismeri:
3.1.8-1. ábra: A Z8 utasításkészlete
Az utasítások táblázatosan a 3.1.8-1. ábrán láthatók.
Az utasításokban az alábbi címzési módok megengedettek:
Az utasításokat részletesen az alábbiakban ismertetjük. Az ismertetésben alkalmazott rövidítések:
OP1 | = operandus 1 |
OP2 | = operandus 2 |
JB | = jelzőbitek |
IFF | = megszakítás maszkregiszter 7. bitje |
R | = regiszter |
RR | = regiszterpár |
CY | = túlcsordulást jelző bit |
ADC | OP1,OP2 |
OP1 := OP1+OP2+CY |
|
ADD | OP1,OP2 |
OP1 := OP1+OP2 |
|
AND | OP1,OP2 |
OP1 := OP1 logikai ÉS OP2 |
|
CALL | OP1 |
SP := SP-2 |
|
CCF | |
CY := -CY |
|
CLR | OP1 |
OP1 := 0 |
|
COM | OP1 |
OP1 := -OP1 |
|
CP | OP1,OP2 |
OP1-OP2 |
|
DA | OP1 |
OP1 decimális helyreállítása |
|
DEC | OP1 |
OP1 := OP1-1 |
|
DECW | OP1 |
OP1 := OP1-1 |
|
DI | |
IFF := 0 |
|
DJNZ R, | OP1 |
R := R-1 |
|
EI | |
IFF := 1 |
|
INC | OP1 |
OP1 := OP1+1 |
|
INCW | OP1 |
OP1 := OP1+1 |
|
IRET | |
JB := (SP) |
|
JP | CC,OP1 |
ha CC igaz, PC := OP1 |
|
JR | CC,OP1 |
ha CC igaz, PC := PC+OP1 |
|
LD | OP1,OP2 |
OP1 := OP2 |
|
LDC | OP1,OP2 |
OP1 := OP2 |
|
LDCI | OP1,OP2 |
OP1 := OP2 |
|
LDE | OP1,OP2 |
OP1 := OP2 |
|
LDEI | OP1,OP2 |
|
|
NOP | |
nincs műveletvégzés |
|
OR | OP1,OP2 |
OP1 := OP1 logikai VAGY OP2 |
|
POP | OP1 |
OP1 := (SP) |
|
PUSH | OP2 |
SP := SP-1 |
|
RCF | |
CY := 0 |
|
RET | |
PC := (SP) |
|
RL | OP1 |
közvetlen eltolás balra |
|
RLC | OP1 |
eltolás CY-n át balra |
|
RR | OP1 |
közvetlen eltolás jobbra |
|
RRC | OP1 |
eltolás CY-n át jobbra |
|
SBC | OP1,OP2 |
OP1 := OP1-OP2-CY |
|
SCF | |
CY := 1 |
|
SRA | OP1 |
eltolás jobbra, 7. bit marad |
|
SRP | OP2 |
RP := OP2 |
|
SUB | OP1,OP2 |
OP1 := OP1-OP2 |
|
SWAP | OP1 |
fél-byte-os csere |
|
TCM | OP1,OP2 |
(logikai NEM OP1) logikai és OP2 |
|
TM | OP1,OP2 |
OP1 logikai ÉS OP2 |
|
XOR | OP1,OP2 |
OP1 := OP1 logikai kizáró VAGY OP2 |
3.1.9. Alkalmazási példák
A 3.1.9-1. ábrán a Z8-hoz való külső memória illesztését mutatjuk be. Az MCU a példabeli esetben 6 kbyte programmemóriával és 4 kbyte adatmemóriával rendelkezik. Ezen kívül 12 ki- bemeneti vonallal, négy kimeneti és négy bemeneti vonallal csatlakozik a környezethez.
3.1.9-1. ábra: Külső memória illesztése
Két Z8 együttműködésére mutatunk példát a 3.1.9-2. ábrán. Mindkét Z8 egy kétirányú portját (P2) áldozza a kommunikáció adatátvitelére és két kivezetést a kommunikáció vezérlésére. Amelyik egység adni kíván, az jelzi, hogy az adat érvényes a -DAV vonalon (A). Az adatelvétel jelzése az RDY vonalon történik. Az adat bevétele a B pontban történik meg, ettől kezdve foglalt a másik MCU, majd az adat beolvasása után (C) jelzi, hogy újabb adat fogadására kész.
Azt, hogy melyik MCU kezdeményezhet adást elsőként, azt meg kell határozni és ennek megfelelően kell a vezérlő jelek irányát az első alkalommal definiálni. A táviratok tartalma szerint lehet az irányt váltani, ami a kijelölt vezérlőpontok étprogramozásával oldható meg, természetesen software úton.
3.2. Általános periféria illesztő UPC
(UNIVERSAL PERIPHERAL CONTROLLER)
AZ UPC áramkör a Zilog 8 bites családjának új tagja, mely tulajdonképpen a Z8 módosított változata. Utasításkészlete megegyezik a Z8-ével, felépítése is hasonló hozzá, azzal az eltéréssel, hogy a kivezetéseinek egy része kötött. Illesztését úgy alakították ki, hogy teljesen általános buszt alkalmaztak.
Belső regisztereinek tároló-kapacitása 256 byte-ra növekedett. Belső ROM-ja változatlanul 2 Kbyte-os. Külső programtárat nem tud kezelni, így hazai alkalmazása egyelőre igen kétséges. Ha a belső ROM helyett EPROM-ot fog a Zilog cég alkalmazni, akkor a hazai felhasználás szempontjából is érdekessé válhat. A 3.2-1. ábrán bemutatjuk az UPC kivezetéseit.
3.2-1 ábra: UPC kivezetései
3.3. Soros adatátvitel vezérlő
(SERIAL COMMUNICATION CONTROLLER)
A soros adatátvitel vezérlő a Z buszhoz illeszkedik, a Z-80 SIO továbbfejlesztett változata. A SIO-hoz hasonlóan aszinkron és szinkron adatátvitelre képes. Az áramkör két csatornás, mindkét csatornának saját belső órajelgenerátora van. Szinkron átvitel esetén nem szükséges az órajelet is átvinni az adat mellett, mert a vevő oldalon beépítettek egy fáziszárt hurkot (PLL), amely NRZI vagy FM kódolás esetén szinkronizálni képes. Az adó NRZ, NRZI és FM kódolással tud dolgozni.
Az SCC áramkör szabvány modemjeleket fogad, illetőleg állít elő. Ha erre nincs szükség a ki- és bemeneteket általános I/O-ként lehet felhasználni. Szükség esetén DMA-val is lehet szinkronizálni e kivezetések felhasználásával. Így az SCC-vel és a DMA-val nagysebessé (1 Mbit/sec) átvitelt is megvalósíthatunk. Az SCC kivezetéseit a 3.3-l. ábrán mutatjuk be.
3.3-1 ábra: SCC kivezetései
3.4. Számláló-időzítő és párhuzamos I/O CIO
(COUNTER/TIMER AND PARALLEL I/O UNIT)
A CIO áramkör három 16 bites időzítőt és két 8 bites bufferelt kétirányú pontot tartalmaz, melyekhez egy 4 bites speciális I/O port tartozik, és amellyel négyféle "handshake" üzemmódot tud megvalósítani. A CIO a CTC és a PIO kombinációja. Alkalmazása főleg kis méretű rendszerekben lehet előnyös.
A CIO három független 16 bites számláló regiszteréből kettő utasítással egymás után kapcsolható, így 32 bites osztót képez. A számlálók be- és kimenetei a B és C portra is rákapcsolhatók, így azok kívülről vezérelhetők és jeleik külső vezérlést adhatnak. Bemenetként léptetés, triggerelés és kapuzás áll rendelkezésünkre, kimenetként pedig a szokásos számláló-kimenet. A számlálók nem csak egy számlálási ciklusra állíthatók be, hanem folyamatos üzemre is alkalmasak automatikus újratöltéssel. A folyamatos üzem retriggerelhető. A Kimeneten háromféle jelforma jelenhet meg: impulzus, logikai szint váltás és négyszögjel.
A CIO két 8 bites portját egymástól függetlenül lehet vezérelni négyféle üzemmódban: bemenet, kimenet, kétirányú átvitel és bitenkénti I/O. A portok mellett elhelyeztek egy összehasonlító áramkört, mely megszakításkérést adhat, ha a porton az előre beállított minta megjelenik. Ezt a figyelő áramkört úgy is lehet programozni, hogy a port megszakításkérés gyűjtőként is képes működni, prioritásos megszakításkérést megvalósítva.
A C port az A és B port "handshake" vonalait adja, vagy ha erre nincs szükség a harmadik számláló külső elérhetőségét biztosítja, vagy általános célú I/O-ként használható. A C portop négyféle "handshake" üzem valósítható meg: impulzus vezérlés, kapuzójel, UPC csatolás és IEEE 488 típusú. A CIO áramkör kivezetéseit a 3.4-1., ábra mutatja.
3.4-1. ábra: CIO kivezetései
3.5. Adatátvitel illesztő FIO
(FIFO INPUT/OUTPUT INTERFACE UNIT)
A FIO alkatrészt különböző rendszerek határfelületeként lehet alkalmazni. A sebességkülönbséget a 128 byte-os FIFO hidalja át. Segítségével nem csupán két mikroproceszoros rendszert lehet illeszteni, hanem perifériát is csatlakoztathatunk vele tetszőleges CPU-hoz. Ha az adatátvitelnél nagyobb bufferelésre van szükség két vagy több FIO egymáshoz csatolható, ha pedig 16 bites rendszerben kívánjuk használni, két párhuzamos FIO-t kell alkalmaznunk. A FIO képes a Z8000 16 bites buszának alacsonyabb, illetve magasabb helyi értékű byte-ját megfelelően illeszteni. A FIO áramkör blokkvázlata a 3.5-1. ábrán látható. Ebből kitűnik, hogy az áramkör a kimeneteket tekintve nem teljesen szimmetrikus: Az A oldal Z buszhoz és tetszőleges CPU-hoz csatlakoztatható, míg a B oldal képes egyéb "handshake" portként is működni.
3.5-1. ábra: FIO blokkvázlata
Mint az ábrán látható a 128 byte-os buffer mindkét irányú adatátvitelt buffereli. A két oldalon egymástól függetlenül történhet beírás és kiolvasás, sőt egy oldalon egymás után felváltva is érkezhet írási és olvasási igény. A beírást és a kiolvasást címmutatók tartják nyilván, melyek mindkét oldalról kiolvashatók.
A FIO áramkör az adatok átvitelén kívül vezérlő jeleket is fogad, illetve ad. A tíz vezérlő kivezetés az egyes interface módok függvényében változik. A kivezetések jelentése a 3.5-2. ábrán látható. A kívánt illesztési mód 2-2 kivezetés vezérlésével választhat ki:
M1 |
M0 |
A oldal |
0 |
0 |
Z busz alacsonyabb helyértékű fele |
0 |
1 |
Z busz magasabb helyértékű fele |
1 |
0 |
Általános mikroprocesszor busz |
SL1 |
SL0 |
B oldal |
0 |
0 |
0 Z busz alacsonyabb helyértékű fele, illetve magasabb helyértékű fele, ha M1 = 0 és M 0 =1 |
0 |
1 |
Általános mikroprocesszor busz |
1 |
1 |
IEEE-488 HS |
1 |
1 |
"Interlocked" HS |
3.5-2. ábra: FIO kivezetései
A 3-5-2. ábrán A-J betűkkel jelölt kivezetések jelentése az egyes buszoknak megfelelően:
Jel |
Z-Busz af. |
Z-Busz ff. |
ált. mikrop. |
Interlocked |
IEEE-488 |
A B C D E F G H I J |
-REQ/-WT -DMASTB -DS R/-W -CS -A/S -INTACK IEO IEI -INT |
-REQ/-WT -DMASTB -DS R/-W -CS -A/S A0 A1 A2 A3 |
-REQ/-WT -DACK -RD -WR -CS C/-D -INTACK IEO IEI -INT |
RFD/-DAV -ACKIN FULL EMPTY -CLEAR DATA DIR IN0 OUT1 IN2 OUT3 |
RFD/-DAV -DAV/DAC DAC/RFD EMPTY -CLEAR DATA DIR IN0 OUT1 IN2 OUT3 |
3.6. Adatátvitel buffer FIFO
(FIRST IN FIRST OUT)
Az adatátvitel buffer a FIO adatátvitel-illesztő kiegészítő eszköze. Segítségével a FIO buffere 128 byte-tal bővíthető. Ha több FIFO-t alkalmazunk, akkor a buffer n*128 byte-tal növelhető (ahol n a FIFO-k száma). Az áramkör alkalmazása igen egyszerű, csupán az adatútba kell beilleszteni. A FIO Interlocked HS üzemmódba állítandó és az RFD/-DAV összekapcsolandó a FIFO -ACKIN bemenetével, valamint a FIFO RFD/-DAV kimenete a FIO -ACKIN bemenetével.
A FIFO kivezetései a 3.6-1. ábrán láthatók.
3.6-1. ábra: FIFO kivezetései
3.7.1. COMBO áramkör
A Mostek cég, mint a Zilog áramkörök egyik legrégebbi és legjelentősebb másodgyártója, maga is fejlesztett periféria illesztőt a Z-80 rendszerhez. A COMBO egy teljesen univerzális áramkör, mely 256 byte-os RAM-ot (ebből 64 byte kisfogyasztású), két időzítőt, soros portot és három megszakításkérőt tartalmaz.
Az áramkör 40 kivezetéses DIL tokozásban készül. A kivezetéseket a 3.7.1-1. ábra mutatja.
3.7.1-1. ábra: COMBO kivezetései
A kivezetések jelentése:
D0-D7 | Adatbusz (DATA BUS) A központi egység és a COMBO közötti adat- és vezérlőinformáció-forgalom lebonyolítására szolgál. |
A0-A7 | Címbusz (ADDRESS BUS) A 256 byte-os memória és az I/O portok címzésére szolgál. |
-M1 | Utasításkód olvasás (MACHINE CYCLE) |
-IORQ | I/O Hozzáférési igény (I/O REQUEST) |
-MREQ | Memoria-hozzáférési igény (MEMORY REQUEST) |
-RD | Olvasás (READ) |
-WR | Írás (WRITE) |
CLK | Rendszer órajel (SYSTEM CLOCK) Z-80 típusú órajel-bemenet. |
-CSM | Memória kiválasztás (CHIP SELECT RAM) |
-CSI/O | I/O kiválasztás (CHIP SELECT I/O) |
-INT | Megszakításkérés (CPU felé) ( INTERRUPT REQUEST) |
IEI, IEO | IT engedélyezés BE, IT engedélyezés KI (IT ENABLE IN, IT ENABLE OUT) Csatlakozás a daisy-chain-hez. |
-INT1, INT2 | Külső megszakításkérés (EXTERNAT INTERRUPT) Két élvezérelt bemenet, amelyek hatására a COMBO megszakítást kér. |
TCLK | Időzítő órajel (TIMER CLOCK) A két időzítő órajel bemenete. |
INTO | Külső megszakításkérés (EXTERNAL INTERRUPT) Az A időzítővel együtt impulzushossz mérésre alkalmas, de az -INT1, INT2-höz hasonlóan is használható. |
ZCA, ZCB | Időzítő kimenet (ZERO COUNT OUT) Az időzítők jelkimenete, melyen impulzust vagy négyszögjelet kaphatunk. |
-RESET | Törlés (RESET) A COMBO áramkör alaphelyzetét állítja be, illetve tiltja a RAM hozzáférést. |
SRCLK | Soros port órajel (SERIAL PORT CLOCK) Mindkét irányú soros adatátvitel órajel bemenete. |
SRIN | Soros adatbemenet (SERIAL DATA INPUT) |
SROUT | Soros adatkimenet (SERIAL DATA OUTPUT) |
+5V RAM | Kisfogyasztású RAM táp (LOW POWER STANDBY SUPPLY) A RAM 64 byte-os kisfogyasztású részére tápellátását biztosit, 3,2 - 5,6 V közötti feszültség adható rá. |
3.7.2. Kiegészítő áramkörök a Z8000-hez
A Zilog cég jelzi, hogy a Z8000-hez további áramköröket kíván forgalomba hozni:
Z8016 Memória hozzáférés vezérlő (DMA CONTROLLER)
A memória-hozzáférés vezérlő a Z8000 rendszer címzési módjaihoz igazodva 8 Mbyte-ot tud címezni, MMU esetén 16 Mbyte-ot. Az adatátviteli I/O és memória, vagy memória és memória között bonyolítható, byte-onként vagy szavanként, tud adatkeresést végezni. Multiprocesszoros rendszerben is üzemelhet.
Z8052 Képernyő vezérlő (CRT CONTROLLER)
Intelligens képernyő vezérlést tud végezni alfanumerikus vagy pontraszteres kijelzést megvalósítva. Különböző speciális kiírásokat tud megvalósítani: index írás, kitevő írás.
Z8065 Hibajavító (BURST ERROR PROCESSOR)
Előnyösen használható nagysebességű adatátvitel esetén hibák javításához.
Z8068 Adat titkosító (DATA CIPHERING PROCESSOR)
IV. Rész: Z800
4.1. Bevezetés
A Zilog cég 8 bites Z80 mikroprocesszorának eredményei alapján a szakértők világszerte figyelemmel várták a 16 bites Z8000 mikroprocesszor család megjelenését. A Z8000 mikroprocesszor típus címzési tartománya nyolcszor nagyobb mint az INTEL 8086 mikroprocesszoré és teljesítménye egy közepes miniszámítógéppel egyenértékű.
A Zilog cég bízott a sikerben és ennek megfelelően szervezte meg a Z8000 CPU gyártását, azonban nagy meglepetésre alig kapott rendeléseket, viszont a 8086 iránti érdeklődés változatlanul intenzív maradt. Első közelítésben a Zilog Z8000 lényegesen kedvezőbb tulajdonságú processzornak tűnt, mint az INTEL 8086, és a szolgáltatásait tekintve az ára is alacsonyabb. Megjelentek a Z8000 mikroprocesszor-család 16 bites periféria illesztői is. Ennek ellenére számos felhasználó továbbra is kitart a 8086 vagy a 68000 mikroprocesszor család mellett.
A felhasználók orientálódásának a vélemények szerint két lehetséges oka van. Egyik ok, hogy a vevőkör általában vagy a legelső, vagy a legjobb új típusú terméket választja. Nem a Zilog, hanem az INTEL volt ezen a területen az első és a Motorola Tűnik a legjobbnak. A Zilog számára tehát csap a maradék érdeklődés nyújt lehetőségeket.
A második ok az, hogy amíg az INTEL 8086 16 bites processzor kompatibilis az INTEL 8 bites típusainak adatbusz változataival (a 8080-al), a Z8000 nem rendelkezik 8 bites adatbusz változattal, ami a Zilog tervezőinek komoly tévedése. Ennek okáért a Zilog elhatározta, hogy egy olyan 16 bites processzort fog gyártani a Z800-at, amely 8 és 16 bites adatbusszal is rendelkezik.
Mint azt a 8 bites operáción rendszerek fejlődése is mutatja, a mikroszámítógépet sokkal bonyolultabb feladatokra kezdik használni, mint néhány évvel ezelőtt. Napjainkban a 8 bites rendszerekben általában magas szintű nyelveket használnak, és ez eleve megköveteli azt, hogy a címezhető memóriakapacitás megnövekedjék. Mivel a memóriahellyel kapcsolatos követelmények sok alkalmazási területen megnövekedtek, hátrányt jelent, hogy a 8 bites mikroprocesszorok címezhető memória-tartománya max. 64 kbyte. A 16 bites processzorok címezhető memória-kapacitása sokkal nagyobb, ugyanakkor a gyakorlatban sokszor jobban megfelelne egy 8 bites processzor. A 16 bites processzorok alkalmazása gyakran azt eredményezi, hogy a rendszer drágább lesz és a hatékonyság az árral nem nő arányosan. Ugyanakkor sokkal komolyabb problémát jelent a software inkompatibilitása. A végfelhasználó ideális megoldáshoz akkor juthatna, ha a memóriacímzési tartományt kibővíthetnénk és lehetővé tennénk, hogy használhassa azokat a software-eket, amelyek a Z80-hoz már rendelkezésre állnak. A Z8000 tervezésekor nem gondoskodtak arról, hogy kompatibilis legyen a Z80 processzorral, ez nagy hiba volt, amit a Z800-as processzornál kiküszöböltek. A Z800-as utasításkészlete a Z80 utasításkészletének egy kiegészített változata.
Napjaink felhasználói egyre nagyobb software komplexitást igényelnek és a rendszereket egyre szélesebb körben kívánják alkalmazni. Ezért növelni kell a software megbízhatóságot, a modularatást és a rendszer védelmét az illegális elérések ellen. A memóriakezelésnél igen fontos feladat, hogy a védelem minél egyszerűbb és olcsóbb legyen.
A Z800-as mikroprocesszor kialakításánál optimális lehetőségek biztosítására törekedtek, mind az előnyösebb műszaki paraméterek - a nagy végrehajtási sebesség, a kifinomult architektúra, a nagy címezhető memória-kapacitás, a magas szintű nyelvek és operációs rendszerek használata, mind pedig az alacsony ár tekintetében.
4.2. A Z800-as mikroprocesszor felépítése, összehasonlítása a Z80-as mikroprocesszorral, összefoglalás
A Z800-as mikroprocesszor a Z80-as mikroprocesszor továbbfejlesztett változata, kompatibilis a Z80-nal.
4.2.1. Architektúra
A Z800-as processzort a Z80-as mikroprocesszor "mag"-ja köré alakították ki, kibővítve azt olyan chip-be beépített funkcionális egységekkel, amelyek rugalmas alkalmazhatóságot tesznek lehetővé.
4.2.2-1. ábra: A Z800 mikroprocesszor
Hardware bővítés a Z800-ban:
4.2.2. A Z800 mikroprocesszor család
A Z800-as család a következő tagokból áll: 8 bites Z8108, Z8208 és a 16 bites Z8116, Z8216 (4.2.2-l. táblázat):
A Z800 mikroprocesszor család |
||||
Tokkivezetés |
Adatbusz illesztő bitek |
A chipbe beépített periféria kezelő egységek |
közös tulajdonságok |
|
Z8108 | 40 |
8 |
Négy 16 bites számláló-időzítő (16 bites) | Memória-kezelő Cache memória Cím-frissítő generátor Óra-oszcillátor |
Z8116 | 40 |
16 |
||
Z8208 | 64 |
8 |
Négy 16 bites számláló-időzítő (egy belső) Egy aszinkron soros port |
|
Z8216 | 64 |
16 |
A Z8108 és a Z8208 támogatja a 8 és 16 bites busz - nem multiplikált - perifériáit, a Z8116 és a Z8216 támogatja a 16 bites Z busz - multiplikált - perifériáit. A Z8108 és a Z8208 40, a Z8116 és a Z8216 64 kivezetéses tokban van.
4.2.3. A Z800-as mikroprocesszor tulajdonságai; bővítések, főbb jellemzők
4.2.4. Technológiai kérdések, NMOS
Az 5 millió utasítás/s sebességet azzal lehetett elérni, hogy 2 mikronos felbontású N-csatornás technológiát használnak az előállításhoz. A polyszilikon összeköttetéseknek két szintje van, az első az alacsony, a második a nagy-impedenciájú rétegben. Az eljárásnál négy tranzisztortípust alakítottak ki (THRESHOLD tranzisztorok) egy növekményes, egy instrinsic és két kiürítésen üzemmódú.
4.2.5. Bemenet, kimenet, buszrendszer
A Z800-as mikroprocesszor multiplexelt cím / adatbusszal rendelkezik. A Z800-as busz jelkészlete megegyezik a Z80-as jelkészletével, így a Z80-as család perifériális eszközei illesztettek. Minden a chip-ben levő periféria-áramkör szabványos Z80 I/O címkiosztású és az egyes címek a Z80 I/O utasításokkal érhetők el.
A Z800-as mikroprocesszor chip-be elhelyezett perifériakezelő egységekkel redukálják a rendszer integrált áramköri egységeinek számát, ezáltal kevésbé kell igénybe venni a külső buszt és csökken a rendszer ára. Az eszközök belső összekötésével növelték a teljesítőképességet és a gyorsaságot.
A Z800-as mikroprocesszoros rendszer kiegészítő egységei azonosak a Z80-nál ismertetettel. Ugyanakkor a rendszer átmenetet biztosít a nagyobb teljesítményű rendszerek kialakítására, a legmodernebb 16 bites perifériák használatára.
A Z800-as család el van látva egy globál / lokál busz-opcióval és egy külső busz "arbiter" (döntnök)-el abból a célból, hogy multiplikált processzorok is használhassák a rendszerbuszt.
A Z800-hoz az összes Z busszal rendelkező periféria csatlakoztatható, amely már rendelkezésre áll a Z8000,16 bites processzor családban.
4.3. Az architektura áttekintése
4.3.1. Regiszterkészlet
A Z800-as mikroprocesszoros rendszer regiszterkészlete a Z80-ashoz viszonyítottan kibővült. Ilyen bővítés például a felhasználói üzemmódhoz a verem (stack) mutató, ami a rendszerverem (stack) mutatóval együtt látja el a kettős üzemmódú működést (4.3.1-1.ábra). Tartalmaz két további busz-időzítő regisztert, a busz-időzítéshez, vezérléshez és inicializáláshoz. Ezeknek a regisztereknek az a célja, hogy WAIT állapotokat hozzanak létre a programban pl. a memória műveleteknél - különböző sebességek és műveleteknél -a különböző sebességek és műveletek összehangolására, mint pl. DAISY CHAIN időzítés. Egy további lapregiszter 8 bittel bővíti ki az I/O címmezőt, ami az I/O műveletek végrehajtásánál hozzáadódik a 16 bites kimenethez. Ezekkel az extra bitekkel a szokásos módon engedélyezik a memória lapcímzéshez az I/O címek generálását.
4.3.1-1. ábra: Z800-as CPU regiszter-konfiguráció
Az IX és az IY regiszterek index-regiszter funkciót látnak el. Rendszer üzemmódban minden regiszter úgy érhető el, mint egy 16 bites általános célú regiszter, vagy mint két, egy byte-os regiszter.
A Z800-as mikroprocesszor teljes regiszterkészlete (4.3.1-1. ábra):
4.3.2. Funkcionális egységek, időzítés
A Z800 processzor funkcionális egységei: memóriakezelő, ceche memória, négy 16 bites számláló / időzítő, egy soros PORT, négycsatornás DMA vezérlő, egy dinamikus RAM frissítésvezérlő. Mindegyik DMA csatorna 24 bites forrás és rendeltetési (cél) címet kezel. A csatornák programozhatóak lépésenkénti működésre; kötegelt (burst) és folyamatos üzemmódra. Az egyes funkcionális egységek a chip-ben levő periféria illesztőkkel szintén belül csatlakoztathatóak, ami tovább növeli az egység teljesítményét (4.3.2-1. táblázat).
Periféria t. szám |
Periféria megnevezés |
Periféria t. szám |
Periféria megnevezés |
|
Z8108 / Z8208 8 bites busz (Z80 vezérlő jelek) |
Z8116 / Z8216 16 bites busz (Z-busz vezérlő jelek) |
|||
Z8410 | DMA (Direct Memory Access Controller) Közvetlen memória-hozzáférés vezérlő |
Z8016 | DTC (Direct Memory Access Transfer Controller) közvetlen memória-hozzáférés átvitel vezérlő |
|
Z8420 | PIO (Parallel Input / Output) párhuzamos bemenet / kimenet |
Z8030 | Z-SCC (Serial Communications Controller) soros-összeköttetés vezérlő |
|
Z8430 | CTC (Counter / Timer Circuit) számláló időzítő áramkör |
Z8031 | Z-ASCC (Asynchronous Serial Communications Controller) aszinkron soros összeköttetés-vezérlő |
|
Z8440/1/2 | SIO (Serial Input / Output Controller) Soros kimenet / bemenet vezérlő |
Z8036 | Z-CIO (Counter / Timer and Parallel I/O Unit) számláló / időzítő és párhuzamos I/O egység |
|
Z8470 | DART (Dual Asynchronous Reciever / Transmitter) kettős aszinkron adó-vevő |
Z8038 | Z-FIO FIFO (Input / Output Interface Unit) bemeneti / kimeneti illesztő egység |
|
Z8516 | DTC (Direct Memory Access Transfer Controller) közvetlen memória-hozzáférés átvitel vezérlő |
Z8060 | FIFO (Buffer Unit and Z-FIO Expander) FIO bővítő |
|
Z8530 | SCC (Serial Communications Controller) soros-összeköttetés vezérlő |
Z8065 | Z-BEP (Brust Error Processor) | |
Z8531 | ASCC (Asynnchronous Serial Communications Controller) aszinkron soros-összeköttetés vezérlő |
Z8068 | Z-DCP (Data Ciphering Processor) | |
Z8536 | CIO (Counter / Timer and Parallel I/O Unit) számláló / időzítő és párhuzamos I/O egység |
Z8070 | FPP (Floating Point Processor) lebegőpontos processzor |
|
Z8038 | Z-FIO FIFO (Input / Output Interface Unit) bemeneti / kimeneti illesztő egység |
Z8090 | Z-UPC (Universal Peripherial Controller) univerzális periféria vezérlő |
|
Z8070 | FPP (Floating Point Processor) lebegőpontos processzor |
4 chip-be beépítve rendelkezésre áll egy teljesen duplex UART, különböző adatkezelési lehetőség és karakter formátum meghatározás az aszinkron soros összeköttetéshez. A Z8108 és a Z8208 négy darab 16 bites számláló / időzítőt tartalmaz a belső időzítéshez. A számláló / időzítő funkciók kívülről is vezérelhetőek kapuzott, triggerelt bemenetekkel.
Tekintet nélkül arra, hogy 8 bites vagy 16 bites buszt használunk, a felhasználó programozhatja a Z800-as mikroprocesszor család minden tagjának a busz időzítését. Alaphelyzetbe állítás után a Z800-as mikroprocesszor-rendszer időzítése programozható, ami negyede, fele vagy egyező a CPU sebességével. Az óralépték WAIT állapotban programozható. Külső hardware használata nélkül nulla-három WAIT állapot "szúrható be" (inzertálható) a memória, az I/O és a megszakítás nyugtázó tranzakciókba. Továbbá WAIT állapot specifikálható szeparált memóriaterületekhez, így különböző sebességű ROM-ok és RAM-ok használhatóak ugyanabban a rendszerben. Engedélyezett a várakozási állapot külső generálása is.
A Z800-as rendszeren az összes Z80-ra írt program akkor futtatható, ha az időzítőhurkok a Z800-as gyorsabb utasításvégrehajtási sebességének megfelelően változtathatóak.
4.3.3. Rendszer és felhasználói üzemmód
A Z800-as processzor a programokat rendszer vagy felhasználói üzemmódban hajtja végre. Rendszer üzemmódban a CPU minden regisztere elérhető.
Az utasításokkal engedélyezett felhasználói üzemmód a Z80-as processzorban nem található meg. Ez az üzemmód védi meg a rendszert a felhasználó (alkalmazói) programjától, mert programvégrehajtás közben tiltja, hogy a felhasználói program utasításai zavart okozhassanak a rendszer állapotában (pl. disable megszakítások). Ezért ebben az üzemmódban bizonyos CPU regiszterek elérése tiltott.
A Z80-ra írt programok csak rendszer üzemmódban hajthatóak végre a Z800-as rendszerben.
4.3.4. Memóriakezelő
Egy mikroprocesszoros rendszerben az egyik legnagyobb probléma a nagy program és adattartományok kezelése. Ennek problémának a megoldására hozták létre pl. a külső memóriatérkép (map) áramköröket, tértek át a 16 bites processzorok használatára.
A Z800 processzor-család tagjai chip-be beépített memóriakezelő egységet (MMU - Memory Management Unit), lap-orientált memóriakezelést és memóriavédelmet biztosítanak. A CPU maga külön tudja választani a rendszer és a felhasználói tartományokat, valamint a program kódrészt az adatreferenciáktól mindkét tartományban.
A Z800 MMU egy címfordító mechanizmust használ, amit dinamikus laprelokációnak nevezünk. A CPU logikai címet generál, amit az MMU fizikai címre fordít le, mielőtt kiküldené a címvonalakra.
4.3.5. Dinamikus memóriafrissítő vezérlő
A frissítési tranzakció programvezérléssel engedélyezhető vagy tiltható és megválasztható a felfrissítési frekvencia. Különálló busz tranzakciókat generálnak a Z800-as család tagjai a frissítéshez.
A Z800-as memóriafrissítő vezérlő, 10 bites frissítő (refresh) címet generál, amely igen nagy kapacitású dinamikus memória támogatását biztosítja.
4.3.6. Oszcillátor, óragenerátor
A chip-be beépített oszcillátor / óragenerátor egyszerűsíti a rendszertervezést, mivel nem kell gondoskodni külső MOS óragenerátorról / meghajtóról. Egy kristály közvetlenül kapcsolható a Z800 processzorhoz, vagy egy TTL külső órajel szolgáltatható. A processzor egy belső órajelet generál, ami fele a kristály bemeneti frekvenciájának. Ez tovább osztható a külső rendszer órafrekvenciájának megfelelően.
4.3.7. Megszakítás, trap
A Z80 megszakítási módjai: 0, 1, és 2, a Z800-nál egy új megszakítási mód a 3. A 3. egy szerviz megszakítási mód, célja a belső megszakítások ún. "trap"-ok kezelése. A trap - egy nem programozott feltételes ugrás egy ismert rekeszbe, amelyet a hardware automatikusan aktivál. A 3. módban a processzor megszakítás / trap vektor-táblázatban egy új programállapotnak megfelelő értéktáblázatot keres. Ez az értéktáblázat egy trap vagy egy nem vektorizált megszakítás esetében a következőkből áll: egy új programszámláló érték, egy új "master" állapot-regiszter érték. A vektoros megszakításnál a programszámláló és a master állapot-regiszter eredeti tartalma regisztrált (mentve van) és a vektor adatait a megszakító eszközből olvassák ki. Ez a módszer megengedi a megszakítás teljes regisztrálását (skatulyázását), vagyis a megszakítás-engedélyezés előtti állapotot a stack regiszterbe mentik.
A trap kondíciók számát a hardware-en belül határozzák meg a rendszer védelme érdekében, általában ezeket software-rel nem lehet hatástalanná tenni. A feltételek tartalmaznak kibővített utasítás-trapokat, amelyek jelzik a kibővített utasítások végrehajtása során, ha az architektúra a végrehajtásra képtelenné válik; osztásgátló-trap: megelőzi a nullával való osztást; egy rendszerhívás-trap gondoskodik a szabályos átvitelről a rendszer és a felhasználói üzemmód között. Ezek és egyéb trapok engedélyezik a tervezőnek és a felhasználónak, hogy könnyen hozzon létre olyan feltételeket, amelyek különbözőképpen fogják befolyásolni a programvégrehajtást vagy a rendszer műveletvégzését.
A Z800-as processzor megszakítás módjai:
Megszakítás-mód | Leírás |
0 |
A megszakítást előidéző eszköz a buszon utasítást helyez el, amelyet a rendszer úgy hajt végre, mint a megszakítás kiszolgáló rutin első utasítása. (Ez általában egy ugrás vagy egy újraindítási utasítás). |
1 |
Feltétel nélküli ugrás a 0038H címre. |
2 |
Vektor olvasás az eszközből, regiszter tartalmával mutatnak a megszakítás kiszolgáló rutin táblázatában a megfelelő rutin induló címére. |
3 |
A megszakítás előtti programállapot a verembe (stack) mentik. Az eszközből kiolvasott vektort használják az előbb említett táblázat megfelelő elemének eléréséhez. A trap vektor-táblázat segítségével elérhető az új programállapot. |
A Z800-as rendszer lehetővé teszi a megszakítások maszkolását (maszkolható és nem maszkolható megszakítások).
4.3.8. Miniszámítógép a Z800-as család elemeiből
4.3.8-1. ábra: Miniszámítógép a Z800 család elemeiből építve.
A rendszer tartalmaz egy memóriakezelő egységet, egy cache memóriát, multiplikált DMA csatornákat, multiplikált számláló / időzítőket és egy soros PORT-ot.
4.4. Címzési módok, utasításkészlet
4.4.1. Címzési módok
(4.4.1-1./a, 4.4.l-1./b. ábrák)
A Z80-as mikroprocesszor címzési módjait a következőkkel növelték meg a Z80-hoz viszonyítottan.
Az LDA (Load Address) utasítást használva a bázis-index címzési mód hatékonyan kombinálható más címzési módokkal Így kiépíthető egy ideiglenes komplex címzési mód, amely involválja az indexelés több szintjét.
A Z80-nál már használt címzési módok is nagyobb flexibilitást biztosítanak, mivel kibővült az utasításkészlet, így több utasítás használható. Ezek a bővítések teszik lehetővé, hogy a Z800 architektúrája elég hatékony és flexibilis legyen a magas szintű, valamint az assembler nyelven történő programozáshoz.
4.4.1-1./a. ábra: A Z800-as címzési módjai 1.
4.4.1-1./b. ábra: A Z800-as címzési módjai 2.
4.4.2. Z800-as processzor utasításkészlete
A Z800-as mikroprocesszor utasításkészlete a Z80-as típusú utasításkészletének bővített változata. Az új utasítások: index, bázis-index, STACK mutató és programszámláló vonatkozásúak. Ezek a Z80 lehetőségein túlmenően öt üzemmódban hajthatóak végre, úgymint: "regiszter", "azonnali", "közvetlen elérés", "nem közvetlen regiszter" és "short index" üzemmód.
4.4.2.1. Szorzás és osztás utasítások
A szorzásnak számos variációja van, pl. 8*8 bites - 16 bites eredményig, 16*16 bites - 32 bites eredményig, bármely címzési módban.
Az osztás változatai között a következők szerepelnek: 16 bit osztva 8 bittel - 8 bites hányados és maradék, 32 bit osztva 16 bittel - 16 bites hányados és maradék. Az osztás utasítás ellenőrzi a túlcsordulást és tiltja a 0-val való osztást.
Ha ezek a feltételek mégis előfordulnak trapek jönnek létre, ezek programból kezelhetőek.
4.4.2.2. Egyéb aritmetikai utasítások
A Z800-as architektúrája még további 16 bites aritmetikai lehetőségeket biztosít. Ezek az utasításon a következők:
Ezek a műveletek a HL regiszterpárt használják, mint 16 bites akkumulátort.
Az IX és IY regiszterek elérhetőek, mint 16 bites regiszterek, vagy mint 2 db 2 byte-os regiszter.
4.4.2.3. TEST és SET utasítás
A TEST és SET (beállítás) utasítás támogatja a Z800-as család alkalmazását multiprocesszoros rendszerek kialakításánál.
Multiprocesszoros rendszerhez rendelkezésre álló teszt (TEST) és beállítás (SET) utasítás, lehetőséget biztosít az osztott forrású programok közötti összekapcsolásra. A betöltést vezérlő utasításcsoporttal állítják be a regisztereket a chip-en levő források konfigurálásához és a chip állapot kiválasztásához a rendszer üzemmódban. A rendszerhívó utasítás segítségével tér át a felhasználói rendszermódba, ekkor használhatja a rendszermód lehetőségeit (pl. megszakítás engedélyezés vagy nem engedélyezés).
4.4.2.4. CPU vezérlő utasítások
A Z800-as tartalmaz néhány új utasításcsoportot a CPU vezérléshez, az új regiszterek elérésének engedélyezéséhez, valamint a rendszer és felhasználói üzemmód kezeléséhez, szétválasztásához.
4.4.2.5. Privilegizált utasítások
A Z800-as processzor privilegizált utasításai csak a rendszer üzemmódban futó programokban hajthatók végre. Privilegizált utasítások:
4.4.2.6. Rendszerhívó utasítás
Az SC rendszerhívó (System Call) utasítás egy interface-t hoz létre a felhasználói módban futó program és a rendszermódú operációs rendszer között.
4.5. Memóriakezelési technika
A Z800-as mikroprocesszoros rendszer memóriakezelő egysége a processzor chip-be van beépítve ez lehetővé teszi, hogy a mikroprocesszor 512 kbyte-ot vagy 16 Mbyte-ot címezzen az eszköz tokozásától függően. A memóriakezelő más kezelési funkciót is lehetővé tesz, pl. külső memória csatlakoztatását a rendszerhez. (Memóriakezelő egység = MMU - Memory Management Unit.)
A chip-ben levő memóriakezelő egység -Z80 programokkal- lapokra osztja a 64 kbyte logikai címtartományt. Azután ezeket a lapokat áttérképezik (lefordítják) a Z800-as szélesebb fizikai címtartományára. Attól függően lehetnek a lapok 8 vagy 4 kbyte hosszúságúak, hogy a program/adat szétválasztás engedélyezett-e. Ezzel a technikával 16 bites logikai címzéseket 24 bites fizikai címekre (Z8208, Z821)/ vagy 19 bites fizikai címekre (Z8108, Z8116) fordítanak le.
A memóriakezelési technikát a Z800-as a rendszer és felhasználói üzemmódú műveletvégzésnél, valamint a programok és az adatok szétválasztásánál használja. A címfordítás rendszer és a felhasználói üzemmódban is végbemehet, ezért az utasítás-referenciák el vannak különítve az adatreferenciáktól. Ez az elkülönítés megengedi, hogy a gépen 64 kbyte hosszú program 64 kbyte adattal dolgozzon anélkül, hogy az operációs rendszer beavatkozására lenne szükség.
A logikai és fizikai címtartomány közötti fordítás végrehajtására a memóriakezelő a 16 bites lap-deszkriptor-regiszterekből két készletet használ, egyet a rendszer, egyet a felhasználói üzemmódhoz. Minden 16 bites lap-deszkriptor-regiszter 12 bit címinformációt és 4 bit memóriavédelem információt tartalmaz (címfordítás: 4.5.-1. ábra).
4.5-1. ábra: A chip-en lévő memóriakezelő lefordít egy logikai címet fizikai címre a 16 Mbyte-os címmező kezelésének megvalósításához és a virtuális memória elrendezés teljes implementálásához.
4.5.1. Logikai-fizikai cím
A logikai cím az a cím, amelyet a mikroprocesszor memóriakezelője a különféle címzési módokkal kezel, a fizikai cím az a cím, amelyet a memória-rendszer fogad. Abban az esetben, ha a mikroprocesszoros rendszernek nincs memóriakezelő egysége, a fizikai cím megegyezik a logikai címmel (5.5.1-1/a ábra).
Abban az esetben, hogyha a mikroprocesszor rendelkezik memóriakezelő egységgel a processzor logikai címet állít elő, amit a memóriakezelő egység lefordít vagy kibővít, mielőtt a memória címvonalakra küldi mint fizikai címet (4.5.1-1./b. abra). Például a Z80-as mikroprocesszor 16 bites logikai címe egy memóriakezelő rendszerrel könnyen kibővíthető 24 bites címre.
4.5.1.1- ábra: Címtartomány bővítés memóriakezeléssel.
A. ábra: A címtartományt behatárolja a mikroprocesszor címbusza.
B. ábra: A címtartomány kibővítését a memóriakezelő egység teszi lehetővé, azzal, hogy logikai / fizikai címfordítást végez.
4.5.2. Lapozás a memóriában
A címfordítás elvégzéséhez sokféle technika használható, ilyen például a lapozás. Két laptípus létezik: a logikai lap, amely a mikroprocesszor címtartományának egy része és a lapkeret (frame), amely a fizikai memóriának egy fix hosszúságú blokkja. A lapkeret bemutatása céljából egy példát közlünk. A fizikai memóriában a lapkeret 4 k-s (4096 byte) blokkokból áll. A lapkeret minden byte-ja egyedülálló módon címezhető a 12 címbit egy kombinációjával (12 bit meghatároz 4096 byte-ot). Egy 8 bites processzor 64k logikai címtartománya 16 logikai lapot tartalmaz, ugyanakkor 16 Mbyte fizikai címtartomány 4096 (4k) lapkeretet tartalmazhat. A memóriakezelő rendszertérkép 16 logikai lapból áll, vagyis a mikroprocesszor 16-ot "lát" a 4k lapkeretből (4.5.2-1. ábra). Felosztva a fizikai memóriát, 4k-s lapkeretekre, mindkét memóriacím-tartomány bővül és a memóriavédelem könnyen megoldható.
5.5.2-1 ábra: MMU térképek a logikai memóriacímek fizikai memóriacímekké történő átalakításához. A CPU mindenkor csak 16 aktív lapkeretet lát.
4.5.3. Memóriacím-tartomány bővítés
A memóriacím-tartomány bővítése történhet úgy, hogy a mikroprocesszor által kiadott 16 bites logikai címből 24 bites fizikai címet generálunk (4.5.3-1. ábra).
4.5.3-1. ábra: Címfordítási eljárás logikairól fizikai címre. A logikai címtartomány ezzel 16 bitről 24 bitre bővül a lap-deszkriptor-regisztereken keresztül. A lap-deszkriptor-regiszterek címtartománya 12 bit lapkeret-cím és 4 jelzőbit.
A 16 bites logikai cím két mezőre van osztva: egy 12 bites eltolási (displacement) mezőre és a 4 bites index mezőre. A 4 bites index mezőt használjuk a 16 bites lap-deszkriptor-regiszterek kiválasztására. Ezek mindegyike 12 címinformációt tartalmaz, amivel 4096 lapkeretet lehet azonosítani a fizikai memóriában. A fizikai cím generálása a 12 bites lap-deszkriptior információk - amely a lap-deszkriptor-regisztertől érkezik - és a 12 bites logikai címmező összeillesztésével fejeződik be. Amikor a processzor a 16 bites logikai címet elhelyezi a címbuszon a cím alacsonyabb helyi értékű 12 bitje (A0-A11) megjelenik a fizikai memóriában az A12-A15 címbitekkel pedig kiválasztják a 16 lap-deszkriptor-regisztert. Ezután a 12 bites cím, amely a kiválasztott regiszterben van a buszra kerül azért, hogy előállítsa a fizikai cím magasabb helyi értékű 12 bitjét (A12-A23).
A 16 lap-deszkriptor-regiszter használata lehetővé teszi a felhasználónak, hogy 16 különálló lapkeretet érjen el bármely időpontban. A felhasználó 64 kbyte aktív memóriaterületet fog "látni" (16 lap * 4 kbyte/lap).
Ha szükségessé válik egy másik 64 kbyte-os memória szegmensben lévő lapkeret elérése, az egyszerűen megvalósítható az operációs rendszerrel, csak be kell tölteni egy új lapkeret értékét a megfelelő lap-deszkriptor-regiszterbe. Meg kell jegyezni, ha a lap-deszkriptor-regiszterekben 000-tól 00F-ig vannak hexadecimális számok, a címzés olyan mintha a címtartomány bővített lenne.
4.5.4. Memóriavédelem
A memóriavédelmet négy memóriavédelmi bittel (attribute bitek) valósítják meg. A lap-deszkriptor-regisztereket az A12-A15 címbitek választják ki. A cím- és a memóriavédelmi információ is arra a partikuláris lapkeretre vonatkozik, amelyet kikerestek (elértek). A memóriakezelő rendszerben a külső áramkörök négy memóriavédelmi bitet használnak arra, hogy jelezzék a lapkeret elérés típusát és hogy információt jegyezzenek le a lap-blokkokról. A memóriavédelmi bitek a következők: az érvényességi bit, a beírás elleni védelem bit, módosító bit és egy további bit, ami lehetőség egyéb célokra, pl. cache bit. A 4.5.4-1. ábrán látható a lap-deszkriptor-regiszterek bit-kiosztása.
4.5.4-1. ábra: A lap-deszkriptor-regiszter formátuma. Ezzel a logikai címtartomány A12-A23-ig 12 bittel növekedett és további 4 bit áll rendelkezésre a címtartományban egyéb funkciók ellátására.
Az érvényességi bit jelzi, hogy a lap-deszkriptor-regiszter érvényes-e. Ezt a bitet input vagy output berendezés írja be vagy olvassa ki a megyelelő lap-deszkriptor-regiszterbe (vagy regiszterből). Ha az érvényességi bit logikai "1" értékű, a memória elérhető. Ha az érvényességi bit logikai "0" értékű, a memória elérés érvénytelen. Amikor egy érvénytelen elérési kísérlet jön létre, akkor egy megszakítás generálódik, így egy megszakítás kiszolgálás rutin védelmet nyújt az érvénytelen eléréssel szemben.
A beírás elleni védelem bit csak olvasást engedélyez (read-only) a memória lapkeretében. Az érvényességi és a beírás elleni védelem bitet állíthatja a felhasználó SET vagy RESET állapotba. Ha a bit SET vagyis logikai "1" állapotban van, a memória beírás ellen védett. Ha beírási kísérlet történik, megszakítás jön létre. Amikor a beírás elleni védelem bit RESET, vagyis logikai "0", írási- és olvasási művelet is létrejöhet. Ez a bit akkor fontos, amikor a rendszerben multiplikált processzorok vannak és egy közös memórián osztoznak, vagy ahol egy működő rendszernek szüksége van vétlen beírás elleni védelemre, amit pl. egy végrehajtás alatt levő program idézhet elő.
A módosító bit indikálja a memórialap beírhatóságát. A módosító bit egy állapotbit, így ez automatikusan SET állapotba kerül, amikor egy lapkereten belüli logikai címre az írás befejeződik. RESET csak akkor lehet, amikor az alacsonyabb helyi értékű byte-ot töltik be a lap-deszkriptor-regiszterbe. A módosító bit jelzi, hogy a lapkeretbe a beírás megtörtént. A módosító bit határozza meg azt is, hogy mikor kell egy lapkeretet átmásolni egy másik tárolóba.
A cache bit jelzi, hogy egy lap betölthető-e a cache memóriába.
A módosító bit és az utasítás-megszakítási vagy újraindítási lehetőség kombinációja lehetővé teszi, hogy a processzor virtuális memória-rendszert implementáljon.
4.5.5. Betöltés a lap-deszkriptor-regiszterekbe
A lap-deszkriptor-regisztereket egyedileg el lehet érni, de arra is van lehetőség, hogy mint I/O blokkot érjék el a processzor I/O utasításaival. Mivel minden regiszter 16 bit hosszúságú, szükség van arra, hogy az olvasás a regiszterből, vagy az írás a regiszterbe minden regiszter vonatkozásában kétszer történjék meg azért, hogy a teljes regisztert elérjék. A kétszeres elérés biztosítása érdekében minden lap-deszkriptor-regiszternek két I/O cím áll rendelkezésére, egy a magasabb helyi értékű byte-hoz, egy pedig az alacsonyabb helyi értékű byte-hoz. Az I/O címek listája a 4.5.5-1. táblázatban található, I/O PORT regiszterek megnevezéssel.
I/O PORT regiszterek |
|
XX00 | rendszer vezérlő PORT |
XX03 | laphiba és rendszer állapot |
XX10 | Lap-deszkriptor-regiszter 0 (alacsonyabb helyértékű byte) |
XX11 | Lap-deszkriptor-regiszter 0 (magasabb helyértékű byte) |
XX12 | Lap-deszkriptor-regiszter 1 (alacsonyabb helyértékű byte) |
XX13 | Lap-deszkriptor-regiszter 1 (magasabb helyértékű byte) |
XX14 | Lap-deszkriptor-regiszter 2 (alacsonyabb helyértékű byte) |
XX15 | Lap-deszkriptor-regiszter 2 (magasabb helyértékű byte) |
... | |
XX2E | Lap-deszkriptor-regiszter 15 (alacsonyabb helyértékű byte) |
XX2F | Lap-deszkriptor-regiszter 15 (magasabb helyértékű byte) |
4.5.6. A memóriakezelő egység a Z80-as címtartománynak bővítésére
Ha nincs chip-be beépített memóriakezelő egység, BY PASS mechanizmust lehet alkalmazni a PASS mód engedélyezi a mikroprocesszor felé az utasítások végrehajtásának megkezdését. PASS módban a logikai cím bitjei (A12-A15-ig) átkerülnek a fizikai címtartományba A12-A15-ig, mialatt A16-A23-ig a fizikai címbitek SET állapotban vannak. Inicializálás után a mikroprocesszor lap-deszkriptor-regiszterei fordító módba kerülnek.
A memóriakezelés használatát a Z80-as mikroprocesszornál már leírtuk, az egyes áramkörök a memóriacím-tartomány bővítése céljából, a memóriavédelmi szempontból a teljesítménnyel és a megszakítás-kezeléssel kapcsolatosan kerülnek tárgyalásra. A memóriacím-tartomány bővítéshez a 74LS612 memóriatérkép áramköröket alkalmazzák. Ez tranzisztor-tranzisztor logikai áramkör, 12 bites lap-deszkriptor-regisztereket tartalmaz. Mivel a memóriatérkép-regiszterek 12 bit szélesek, ezért szükség van még 16 db 4 bites regiszterre a memóriavédelemhez. Ezeket a regisztereket 4 RAM memória 74LS219 és egy multiplexer 74S257 csatlakoztatásával lehet megvalósítani. A RAM memóriában a 4 bites regiszterek tárolják a memóriavédelmi biteket. Ezeket a regisztereket ugyanabban az időben töltik fel, mint a memóriatérkép-regisztereket. Ezzel rendelkezésre áll a 16 bites regiszterkészlet.
A memóriavédelmi funkció a lap-deszkriptor-regiszterekben levő memóriavédelmi bitekkel valósul meg. A lap-deszkriptor-regiszterek a memória-eléréskor kapcsolatban vannak a lapkerettel. A memória egy blokkjába történő beírás vagy kiolvasás nem mehet végbe, ha az érvényességi bit nincsen SET állapotban, vagy a beírás megkísérlése egy olyan memórialapra, amelynél a beírás elleni védelem bit SET állapotban van. Az érvényességi bitet minden olvasási vagy írási ciklus alatt vizsgálják, amivel biztosítják, a memóriablokk védelmét. Ha hiba lép fel, akkor egy nem maszkolt megszakítás (NMI) generálódik és a logikai cím bitjei (A12-A15) a LATCH-memóriába kerülnek. Ha a lap érvényes és írásművelet következik, a beírás elleni védelem bitet ellenőrzi, abból a célból, hogy a memórialapra lehet-e írni. Abban az esetben, ha egy nem érvényes (invalid) elérési kísérlet történik (valid=0), a rendszer egy beírás elleni védelem hibát jelez, aminek hatására is NMI jel generálódik, és a logikai cím bitjei (A12-A15) a LATCH-ba kerülnek tárolásra. Látható, hogy a logikai címbitek (A12-Al5) mindkét esetben a LATCH-ba kerültek, a megszakítás kiszolgáló rutin innen olvashatja ki ezeket a biteket, annak meghatározására, hogy melyik lap-deszkriptor-regiszter tartalmazza azokat a memóriavédelmi biteket, amelyek a hibát jelezték. Az I/O PORT a 03H kiolvasás hatására négy címbit kerül a D0-D3 adatvonalakra. A memóriakezelő áramköröknek két üzemmódja van, a PASS és a címfordító. Amikor a rendszert bekapcsoljuk az áramkör a PASS módba kerül és a rendszer úgy viselkedik mint egy módosítás nélküli Z80. A PASS módban és a megszakítás nyugtázás alatt az NMI a nem kívánt megszakítás megelőzése céljából tiltott. A címfordításmód megengedett, ha 00H-t írunk az I/O PORT-ba, ha a PASS módot akarjuk visszaállítani, akkor 01H-t kell beírni ugyanabba a PORT-ba. A rendszer üzemmódját az I/O PORT 03H 4 bitjének beolvasásával határozzuk meg.
4.6. CACHE memória
A Z800-as mikroprocesszor család minden tagja tartalmaz, cnip-be beépített buffer típusú 256 byte-os memóriát. Ez a memória konfigurálható, mint nagysebességű cache memória vagy mint fix címes helyi memória. A cache programozható csak utasítás-memóriaként, csak adatmemóriaként, valamint adat és utasítás-memóriaként. A cache memória meggyorsítja a programok futását mivel redukálja a külső busz elérési időt. A cache működés és update állapotban tartás automatikusan megy végbe. Helyi memóriának használva, a címzése programozható, RAM-nélküli rendszerben használható. Mivel a memória a chipbe van beépítve sebességi eltérés nem fordul elő.
4.6.1. Alkalmazási alapelv
A cache alkalmazásának az alapelve a következő tapasztalatokon alapul az újabban használatos utasítások vagy adatok nagyobb valószínűséggel ismétlődnek, mint a régebbiek, ezért a cache mindig a legújabban elért kódokat tartalmazza. Így az ismétlődő tételek végrehajtása sokkal gyorsabb lehet. A processzor a kívánt adatokat vagy utasításokat először a cache memóriában keresi, ha ott megtalálja, akkor nincs szükség a külső busz elérésre. A becslések szerint a Z800-as utasításvégrehajtási sebessége 2-8-szor nagyobb a cache memória alkalmazása következtében mint a Z80-as processzoré.
4.6.2. A cache memória belülről
Ha a rendszerben cache memória van, a memóriaszervezés úgy történik, hogy a 16 byte-nak 16 vezeték áll rendelkezésére (4.6.2-1. táblázat).
A Z800-as cache memóriájának szervezése |
|||
20 bit |
16 bit |
16*8 bit |
|
0 sor 1 sor 2 sor . . . 15 sor |
0 TAG
(Toldalék) 1 TAG 2 TAG . . . 15 TAG |
érvényes bitek érvényes bitek érvényes bitek . . . érvényes bitek |
cache adat cache adat cache adat . . . cache adat |
Minden vezeték összeköttetésben van két mezővel:
A címtoldalék-mező kapcsolódik a fizikai cím 20 bitjéhez, amit a CPU és a memóriakezelő generál. Ha egy kapcsolódás létrejött a 16 toldalékcím bármelyikét illetőleg fizikai cím alacsonyabb helyi értékű 4 bitjét használják a szükséges byte vagy szó kiválasztására.
Ha az érvényességi bit (SET) kiolvasása megtörtént, és cache találat jött létre, a CPU felhasználhatja azt az információt (egy byte), amit a cache-ból kiolvasott. Ha az érvényességi bit nincsen SET állapotban, a processzor elküldi a címet a külső memóriába, és onnan hozza ki az adatot. Ezt az adatot a processzor felhasználja a program végrehajtásához, ugyanakkor beírja a cache memóriába is, amelynek hatására az érvényességi bit SET állapotba kerül, minden cache memóriába írt byte vonatkozásában. Ha a 16 címtoldalékból egyik sem illeszkedik a 20 bites címhez, a cache memória "túlcsordul" (Flushed), melynek hatására a processzor az összes érvényességi bitet törli, érvényteleníti a byte-ot és a 20 bites cím egy új toldalék-címmé válik. Ezután a CPU az aktuális byte-ot vagy byte-okat a külső memóriából hozza ki. A Z8116 és a Z8216-on levő Z busz interface lehetővé teszi, hogy a processzor a cache memóriába történő betöltésnél a busz tranzakcióhoz a kötegelt "burst" módot használja. Bár a "burst" módot a 64 kbites dinamikus RAM-hoz tervezték, hogy ellássa a sorosan "adagokba" szervezett kimenetet, mégis jól használható a cache memória feltöltéséhez. Ha nincs szükség a cache memóriára, áramkörileg ki lehet kapcsolni és a memória használható mint egy 256 byte-os fix címes RAM. A cache memória használható mint csak olvasható (ROM) memória, vagy tartalmazhat egy olyan programrészt, amelyet sebességnövelés szempontjából szükségesnek tartunk a chip-ben elhelyezni, ilyen pl. a megszakítás rutin.
A cache memória működése a 4.6.2-2. táblázatban összefoglalva látható.
ciklus |
MMU - cache tiltó bit |
cache tevékenység |
memória tevékenység |
|
csak olvasás |
csak utasítás |
|||
utasítás olvasás találat | lényegtelen |
lényegtelen |
nincs változás |
nincs változás |
utasítás olvasás hiány | törlés |
lényegtelen |
frissítés |
nincs változás |
utasítás olvasás találat | beállítás |
lényegtelen |
nincs változás |
nincs változás |
adat olvasás találat | lényegtelen |
lényegtelen |
nincs változás |
nincs változás |
adat olvasás hiány | beállítás |
lényegtelen |
nincs változás |
nincs változás |
adat olvasás hiány | törlés |
beállítás |
nincs változás |
nincs változás |
adat olvasás hiány | törlés |
törlés |
frissítés |
nincs változás |
adat írás találat | lényegtelen |
lényegtelen |
frissítés |
frissítés |
adat írás hiány | lényegtelen |
lényegtelen |
nincs változás |
frissítés |
Cache memória alkalmazása a végrehajtási idő csökkentésére utasításkihozás 4.6.2-1. ábra.
Cache memória alkalmazása a végrehajtási idő csökkentésére adatelérés 4.6.2-2. ábra.
Az SCII-EBCDIC karakter átalakítás cache igénybevétellel 4.6.2-3. táblázat:
Címke | mnemonik | komment |
START | LD IX,SBUF | tárold a forrás-buffer-címet az X regiszterben |
LD IY,DBUF | tárold a cél-buffer-címet az Y regiszterben | |
LD DE,TABLE | tárold az EBCDIC táblázat címét a D-E regiszterpárban | |
LD B,"EOT" | EOT karakter | |
TXLATE | LD HL,DE | a H-L regiszterpár mutat a táblázat START-ra |
LD A,(IX+0) | karakter a forrás-bufferből | |
AND A,07F | paritásbit leválasztás | |
ADD HL,A | kalkuláld ki az indexet a táblázatban | |
LD A,(HL) | karakter lefordítása | |
LD (IY+0),A | tárold a karaktert a cél-bufferben | |
INC IX | mutass a következő karakterre a forrás-bufferben | |
INC IY | mutass a következő karakterre a cél-bufferben | |
CP A,B | utolsó karakter? | |
IR NZ,TXLATE | nem; csináld még egyszer | |
RET | igen; utolsó átalakítás |
4.7. A chip-ben levő periféria illesztők, DMA, számláló / időzítő
A Z800-as chip-be beépített periféria illesztők hatása a teljes rendszer szempontjából azt jelenti, hogy minimális helyet foglal el a nyomtatott áramköri kártyán, minimális lett az eszközök közötti összeköttetés és a komponensek száma is. Ez az árfekvés szempontjából is jelentős. A Z8208 és a Z8216 4 DMA csatornája független, nagysebességű adatátvitelt tesz lehetővé; a soros PORT, egy teljes duplex aszinkron interface lehetőséget biztosít, a sebesség 10 MHz-es órafrekvenciánál 2 Mbit/s. A DMA csatornák adatátvitele programozható. A programozásnak megfelelően adatátvitel jöhet létre: memóriából memóriába, memóriából egy I/O eszközre (oda-vissza), vagy az egyik I/O eszközről egy másik I/O eszközre. Az adatok három üzemmódban továbbíthatók: lépésenként, kötegelten "burst" vagy folyamatosan.
A lépésenkénti átviteli módban a DMA szekció mentesíti a buszt, így azt a CPU vagy egy másik DMA csatorna használhatja minden byte vagy szóátvitel között; a kötegelt "burst" átviteli módban teljesül az a lehetőség, hogy a DMA adatátvitel olyan hosszú ideig tartson, ahogy azt a periféria kérése megkívánja, vagyis a periféria "kész" jelzésig. A folyamatos mód megengedi a DMA áramkörnek, hogy átvigyen egy teljes adatblokkot anélkül, hogy mentesítené a buszt. A kontroller minden csatornája működhet "no transzfer" - nincs átvitel - módban, amikor úgy működik, mint egy számláló.
Minden DMA csatorna a következőkből áll: egy 24 bites forráscím-regiszter, egy 24 bites rendeltetés cím-regiszter, egy 16 bites számláló-regiszter és egy 16 bites átvitel deszkriptor-regiszter. Mindezek a regiszterek a CPU I/O tartományban, I/O utasításokkal érhetőek el a CPU belső buszán keresztül. Külső kapcsolatok létesítéséhez, adatátvitelhez a DMA csatornák a processzor cím, adat és vezérlő vonalait használják.
Minden csatorna rendelkezik egy olyan bemenő vezetékkel, amelyen keresztül a csatorna jelzést kap arról, ha egy külső eszköz adatátvitelt kér.
Mind a négy csatornát a master DMA kontroll-regiszter vezéreli, pl. összekötheti az egyiket a másikkal, vagy a soros I/O csatornákkal. Amikor a DMA csatornákat összekapcsolják, az egyik csatorna úgy működik, mint egy slave csatorna a master csatornába tölti be az új címet, és a deszkriptor információt. A master csatorna átvisz egy adatblokkot a rendeltetési helyére és azután addig vár, ameddig a slave csatorna a memóriából információt nem kap, az új adat (4.7-1. ábra) felfrissíti a regisztereiben levő információkat. Ezzel a struktúrával különböző típusú átvitelek valósíthatók meg, különböző memóriarekeszek iniciálhatók anélkül, hogy a CPU-t igénybe vennénk.
4.7-1. ábra: Összekapcsolt 2 csatornás DMA műveletek, Az egyik csatornába töltik be a másik csatorna-vezérlő információját, ami az időt minimalizálja, mert a vezérlő paraméterek átvitelekor a processzornak le kell állnia.
Minden processzor chip-ben négy számláló / időzítő egység van, de a Z8208 és a Z8216 típusok azt is lehetővé teszik, hogy három számláló / időzítő "külső" célokra is igénybe vehető legyen a negyedik csak belső funkciókra használható. A Z8208 és Z8216-on levő három külső igénybevehető számláló / időzítő teljes 16 bites lefelé számláló áramkör, amelyeket egymástól függetlenül lehet programozni, a külső események számlálására (számláló mód), vagy belső időzítésre (időzítő mód). A 16 bites számlálók közül kettő belül összekapcsolható, így 32 bites számláló állítható elő.
Használatban minden számláló be van töltve egy kezdeti értékkel, amelyet a számláló 16 bites időkonstans regiszterében tárolnak (latch). Amikor a számláló értéke eléri a nullát az a következő események bekövetkezését idézheti elő: megszakítás generálódik, külső impulzus generálódik, vagy a számláló töltődik be az időkonstans regiszterből, hogy újraindítsa a lefelé számlálási szekvenciát. Hogy ezek közül az események közül melyik következzék be, parancs-bit-opcióval lehet meghatározni. Minden számláló kapuzható vagy triggerelhető egy külső jellel vagy software-val, ez lehetőséget ad további vezérlésre.
A soros PORT funkcionális egység segít az időzítésben, mint egy adatátviteli (baud-rate) generátor, vagy mint egy külső óra. A soros PORT szimultán adhat és fogadhat adatokat, két DMA csatornát kapcsolhat össze az adó-vevő részben, ezzel lehetővé teszi az automatikus, nagysebességű soros adatátvitelt. A PORT mint univerzális aszinkron adó-vevő beállítja az adatformátumot, ami a következőkből áll: egy start bit, 5-8 adatbit, paritás bit (páros vagy páratlan vagy nincs paritás), egy vagy két stop bit.
A Z800-as dolgozhat ROM nélkül slave processzorként-egy "host" gazda rendszerben. Ha a Z800-ast slave processzorként használjuk egy nagyobb rendszerben a soros PORT elvégzi az adatok vagy a programok távirányított betöltését. A nagyobb távolságra történő betöltést "bootstrap" segíti, ami a processzor RESET állapotában választható ki. Választáskor ez a mód automatikusan egy DMA csatornát kapcsol a soros PORT vevő oldalához egy nem létező rendeltetési helyet (000000) programoz a DMA csatornába, beállítja a soros PORT adatformátumát és megkezdi az adat 256 byte-jának betöltését a soros csatornán keresztül a memóriába.
4.8. Multiprocesszor működés
A Z800-as processzor működhet multiprocesszoros rendszer tagjaként. A Z8208 és a Z8216 egységek rendelkeznek olyan chip-be beépített lehetőségekkel, amelyek biztosítják a multiprocesszoros rendszeren belüli összeköttetést. A 4.8.-1. ábrán látható kapcsolás kettő vagy több processzort tartalmaz, amelyek mindegyike rendelkezik egy helyi - lokális - busszal, amely néhány memória kombinációt és az I/O eszközöket látja el összeköttetéssel az osztott globális buszon keresztül összekötve a memóriablokkokkal. Ez az architektúra megkívánja, hogy a globális busz erőforrásainak allokálásához a busz-használat kiválasztása logikai áramkörökkel történjék.
4.8-1. ábra: Multiplikált Z800 processzorok komplex rendszerben. Az összekötés a globális memórián keresztül valósítható meg, a globális buszrendszer kérés / nyugtázással és a lokális címregiszter szolgáltatásaival.
A Z800-as címtartománya a globális buszon keresztül osztható ki a processzorok helyi címregisztereihez. A kapcsolás tartalmaz egy master processzort a globális busz vezérléséhez és slave processzorokat az allokálási feladatokhoz.
4.9. A Z8216 köré épített mikroszámítógép
Ha a nyomtatott áramköri kártyák méretét akarjuk csökkenteni, akkor a legjobb választás a Z8216 típus. Ez az eszköz sok olyan funkcionális egységet tartalmaz, amely a mikroszámítógépek felépítéséhez szükséges. A megszakítások kezelése és egy párhuzamos PORT a nyomtatóhoz két Z8036 számláló / időzítővel és párhuzamos I/O áramkörökkel valósítható meg. Továbbá a soros I/O-hoz egy Z8030 kettős csatornájú soros összeköttetés vezérlő köthető be a helyi (lokális) buszba (4.9.-1. ábra).
4.9-1. ábra: Mikroszámítógép rendszer. A Z8216 köré épített párhuzamos I/O és megszakítás-vezérlőként két Z8036-ot és egy Z8030-at alkalmaztunk, soros összeköttetés-vezérlőként.
A processzor saját óraoszcillátort tartalma, valamint egy órakimenetet, a beépített kristállyal az összes időzítés megvalósítható. A számláló / időzítő egyike óragenerátorként működik a belső soros PORT-okhoz, a chip-en kívüli soros összeköttetést vezérlő egy saját bit-frekvencia generátorral rendelkezik. A speciális állapot- és vezérlőjeleket a Z8216 modul szolgáltatja. Ezek egyszerűsítik a külső logikát, a busz és buffer vezérlőjelek generálásánál. Az alacsonyabb helyértékű 16 cím/adat vonal demultiplikálásához a címregisztert (latch) aktiválják a címaktiváló (strobe) vezetéken keresztül, az állapotvezetékek jelei az 1-10 vagy az 1-16 dekóderekkel dekódolhatóak. Az első 10 állapot-kimenetet olyan rendszerekben használják, amelyeknek nincs bővített processzoruk, így kisebb dekóder használható.
A dinamikus RAM (1 Mbit kapacitású) frissítésére a processzor tartalmaz egy 10 bites saját frissítő generátort. A processzor automatikusan tudja generálni a WAIT állapotot, ezzel lehetőség van arra, hogy a busz-időzítés és a memória elérési sebesség optimális legyen.
V. Rész: Z80000
5.1. A Z80000-es mikroprocesszor család bemutatása
Az egykor pontos határokat a mikro-, mini- és a központi egységet és memóriát tartalmazó nagy-számítógép architektúrák között gyorsan elmosta a VLSI áramkörök tervezésének előrehaladása. A VLSI-k egyik reprezentánsa a 32 bites Z80000 típusszámú mikroprocesszor. A másodpercenként 1,5 millió utasítást végrehajtó Z80000 CPU - a 32 bites cím- és adatformátummal megvalósítható funkcionális lehetőségen és teljesítményen kívül - egy 32 bites pipeline processzorral, - 10 MHz-es CPU órafrekvenciával - rendelkezik, amely a virtuális memóriakezeléshez a CPU-ba beépített cache memóriát tartalmaz.
A szabadon választható lehetőségek - mint pl. a szegmentált vagy a lineáris címzés, a címzési tartomány bővítése vagy szűkítése, a szervezési és a fordítási táblázatok, valamint a be/kimeneti adatvédelem módja - lehetőséget biztosítanak arra, hogy a Z80000 CPU-t speciális alkalmazások egyedi követelményeihez lehessen igazítani. A Z80000-es processzor külső illesztő egysége, olyan rendszerek kialakítását teszi lehetővé, amelyek működési tartománya a speciális célra tervezett vezérlőktől a szuper-mini számítógépekig terjed.
A Z80000 CPU a Z8000 CPU-val felülről kompatibilis. A Z8000-hez viszonyítva a Z80000-nek nagyobb a címtartománya, több a regisztere, több a címzési módja és több utasításból áll az utasításkészlete. A Z80000 32 bites logikai címzéssel képes arra, hogy közvetlenül érjen el 4 milliárd byte-ot, a négy címmező mindegyikében; a teljes címezhetőség 16 milliárd byte. Ezek a címmezők külön utasítás- és adatpartíciókat foglalnak magukba mind a rendszer, mind a felhasználói üzemmódban.
A jelző- és vezérlőszó (flag and control Word)-regiszter két bitje lehetővé teszi a programozók számára, hogy háromféle címzési mód között válasszanak; ezek: a kompakt, a szegmentált és a lineáris.
A bemenet / kimenet címzés két módja a Z80000 rugalmasságát növeli. Az egyik módszernél a CPU a memóriakezelő rendszer segítségével állítja elő az adatmemória hivatkozásokat a bemenet / kimenet PORT-okon keresztül Ez a technika a felhasználó számára védett hozzáférést biztosít a be/kimenetekhez. A második megoldás akkor hasznos, amikor a memóriakezelést kikapcsoljuk, mivel privilegizált utasításokat alkalmazunk, amelyeket külön bemenet / kimenet céljára készítettek. Bármelyik módszert használjuk, a bemenet / kimenet illesztő státust és időzítést generál a hivatkozásokhoz.
A Z80000 mikroprocesszor 9 "általános" címzési módot tesz lehetővé, melyek legtöbb utasításnál felhasználhatók. Ezek a módok a következők: regiszter-, közvetlen címzés, közvetett regiszter-, index, bázis, azonnali, bázisindex plusz eltolás, programszámláló relatív és programszámláló relatív plusz index. A legutóbbi hármat csak a szegmentált műveletnél alkalmazzuk. A többi általános címzési mód lehetővé teszi, hogy az operandusokat regiszterben, az utasításban vagy memóriában helyezzük el. Az indexben, bázisindexben, vagy relatív index címzési módban használt index-regiszter lehet egy szó vagy egy hosszú-szó. Az alkalmazástechnikában a leggyakrabban alkalmazott memóriacímzési módokat kompakt módon lehet kódolni, a legritkább esetben alkalmazunk olyan hosszú kódolásokat, amelyek a teljes címmezőt átfogják.
5.2. Regiszterek, utasítások
A Z80000 mikroprocesszornak 16 db 32 bites általános célú regisztere van. Továbbá tartalmaz egy 32 bites programszámlálót, egy 16 bites jelző-vezérlőszó- és kilenc egyéb vezérlő-regisztert is. A rugalmasságot növeli a regiszterállomány átlapolt szervezése is, mert akkumulátorként az első 16 byte-ot használja fel. A regiszter-állomány ugyanezen részét használják a nyolc egy-szavas, valamint a négy hosszúszavas általános regiszter-készletként. Ez a szervezés lehetővé teszi a byte-ok kényelmes változtatását, különösen a byte kitöltő műveleteknél, miközben a legtöbb regiszter "üres" marad, vagyis alkalmas a címek és egyéb adatok tárolására. A regiszterek közül kettő a veremtár mutató (stack pointer) (SP) és a keret mutató (frame pointer) (FP) funkcióit látja el, a CALL, ENTER, EXIT és RETURN utasításoknál.
A programszámláló, valamint a jelző- és vezérlőszó-regiszterek alkotják a programállapot-regisztereket, amelyek tartalma megszakításkor automatikusan kimentődik. A jelző- és vezérlőszó-regiszterben levő bitek jelölik ki a felhasználói oldalról igényeit üzemmódokat, a leálláshoz és a megszakításokhoz szükséges maszkokat, az aritmetikai és logikai utasításokkal beállított jelzőbiteket (flageket) és információt adnak a feldolgozás állapotáról. A többi vezérlő-regisztert a memóriakezelésnél és a rendszer konfigurálásánál használjuk.
A jelző- és vezérlőszóban van az a bit, amely kijelöli, hogy a processzor rendszer vagy felhasználói üzemmódban fut-e. Csak a rendszer üzemmódban futó programok hajthatnak végre bemeneti / kimeneti utasításokat, módosíthatják a memória kezelését végző és a megszakításokat vezérlő regiszterek tartalmát. Ez a privilegizált mód (amelyet rendszer üzemmódnak nevezünk) a veremtár-mutatóval van védve a felhasználói üzemmódtól. A memóriakezelő mechanizmus védi az operációs rendszert a felhasználói programok által okozható károsodástól, valamint védi a felhasználói programokat a többi felhasználói program által okozható károsodás ellen is. Ily módon az operációs rendszer kényes részeit általában rendszermódban használhatjuk. A felhasználói módban végrehajtott programok igényelhetik, hogy az egyes feladatok rendszermódban kerüljenek végrehajtásra a rendszerhívó és belső megszakítást kezdeményező "trap" utasítások segítségével.
A programozót közvetlenül szolgálhatja a Z80000 architektúrája, mivel annak utasításkészlete olyan programokhoz igazodik, amelyeket magas szintű nyelven írtak; pl. C-ben vagy PASCAL-ban. Az utasítások 8-16-32 bites operandusokkal dolgozva bináris, aritmetikai, logikai, előjeles és nem előjeles szorzási és osztási műveleteket kezelnek, valamint string (füzér) műveleteket, pl. eltolás, összehasonlítás, vizsgálat, keresés és konverzió. Más utasítások olyan bitmezőket változtatnak meg, amilyenek pl. a programcsomagokhoz és a videografikákhoz vannak hozzárendelve. A CALL, ENTER, EXIT és RETURN utasítások használatakor a regiszterek mentését, illetve visszaállítását is segíti a processzor, kivétel kezelést is biztosít, amellyel egy, az ADA-t támogató aszinkron belső megszakítás kezelhető.
5.3. A teljesítménynövelés eszközei
A lebegőpontos aritmetikai utasítások gyors végrehajtásához rendelkezésre áll a Z8070 aritmetikai egység (co-processzor). Amikor a co-processzor nincs beépítve a rendszerbe, akkor a lebegőpontos utasításokat a CPU software úton hajtja végre. A Z8070 binárisan kódolt decimális stringekben kezeli az aritmetikát.
A Z80000 CPU azonkívül, hogy lebegőpontos aritmetikát kezel az IEEE P754 előírások szerint, futásidő hibajelzést és software hibakeresést is lehetővé tesz. A hibakereséshez a programozók töréspont utasításokat és utasításonkénti végrehajtást is használhatnak. A lebegőpontos műveletekhez rendelkezésre állnak a következő belső okok "kivételek" miatti belső megszakítások (trap); egész szám túlcsordulás, hardware méret nem elegendő stb. Működő rendszer leállása pl. rendszerhívás, a privilegizált utasítás, a hibás memóriaelérés és a laphiba eseten nem okozhat hibát a felhasználói programok végrehajtását illetőleg.
Amikor a CPU felfedez egy "kivételt" - legyen az leállás (belső megszakítás) vagy megszakítás - a programszámláló és a jelző- vezérlőszó-regiszter tartalma kimentődik a rendszer veremtárába. Ekkor a CPU új programszámlálót, valamint jelző- és vezérlőszót hoz be egy táblázatból a memóriába.
5.4. Memóriakezelés, kész "READY" referencia
A Z80000 processzor-chip-ben van elhelyezve a memóriakezelő funkcionális egység, melynek segítségével az operációs rendszer könnyen kezeli a 4 gigabyte-os címmezőt, miközben ellátja a memóriavédelmet és a címfordítást is. A CPU ezt egy lapozó-fordító mechanizmussal hajtja végre, amely hasonló a nagy központi egységekben és a szuper-mini számítógépekben használtakhoz. A memóriakezelő mechanizmus felosztja a logikai címmezőt 1 kbyte-os lapokra, a fizikai címmezőt pedig 1 kbyte-os keretekre. Mivel a lapcímzést át lehet alakítani bármilyen fizikai keret előállítására, így a memóriakezelés egészen egyszerűvé vált. (Fizikai cím = abszolút cím)
A Z80000 CPU-val és az operációs rendszerrel a programmal generált logikai címeket olyan fizikai címekre fordítják, amelyek közvetlenül címzik a memóriarekeszeket. Az operációs rendszer megalkotja a fordítási táblázatokat a memóriákban, majd iniciálja a mutatókat, hozzárendeli a CPU vezérlő-regiszterek táblázataihoz, ezt követően a Z80000 CPU automatikusan a táblázatokra hivatkozik a címfordítás végrehajtását és az elérésvédelmet illetőleg. Az operációs rendszer segít a virtuális memória kialakításában. A CPU külön jelöli azokat a lapokat, amelyekre hivatkoztak, és azokat, amelyeket módosítottak. A programszámláló vagy más regiszterek tartalmának korrigálása nem szükséges, mivel a címfordítási művelet után a CPU automatikusan alaphelyzetbe áll, ami lehetővé teszi az utasítások végrehajtásának újraindítását.
A processzornak és a memóriakezelő funkcióknak ugyanazon chip-en történő elhelyezése lehetővé, teszi, hogy a fordítási hibákat azelőtt fedezzük fel, mielőtt az olvasás megtörtént. Ez egyszerűsíti a hibajavítást, ami növeli a teljesítményt. A memória elérése gyors, mivel a CPU fizikai címeket generál, elkerülve ily módon a "külső" memóriatérkép áramkör használatából eredő késéseket.
Egy speciális, a chip-en levő TLB buffer (Translation Lookaside Buffer) hordozza azt az információt, amely a 16, legutóbb használt lap fordításához szükséges. A címkiosztást egy logikai címzési példán mutatjuk be. Ha a logikai címzésnél a lap címéhez illesztünk egy belépést (ENTER) a TLB asszociatív-tag (toldalék) memóriában - TLB találat - a megfelelő fizikai keret címét a TLB adatmemóriából lehet kiolvasni. Ha a logikai címzésnél a lap címe nem illeszkedik egyik érvényes TLB címhez sem (TLB tévesztés), akkor a CPU úgy hajtja végre a fordítást, hogy a memóriában levő táblázatokra hivatkozik, a TLB-be való hiányzó (tévesztett) "belépést" pedig helyettesíti a legutóbb használttal.
Az 5.4-1. ábra mutatja azt a négy logikai címmezőt, amelyet a címfordító mechanizmus arra használt, hogy betöltsön egy hiányzó "belépési pont"-ot (ENTRY) a TLB-be. A fordítási eljárás a CPU-ban levő négy táblázat (-deszkriptor-) leíró regiszter kiválasztásával kezdődik, amelyek a következők: regiszter utasításmező-regiszter, rendszer adatmező-regiszter, normál utasításmező-regiszter és normál adatmező-regiszter. A táblázat leíró regiszter a memóriában levő "szint 1." táblázat kezdetére mutat.
5.4-1. ábra: Transzlátor. A logikai címben levő multiplikált mezők a különböző táblázatok belépéseire mutatnak, amikor a Z80000 egy logikai címet fizikai címmé fordít le azért, hogy a TLB-be betölthesse a lefordított programot.
A logikai cím Ll-N0-val jelölt mezője a táblázatok indexeként kerül felhasználásra, amikor a "szint 1." táblázat belépési pontját kell kiválasztani. Ez a "szint 2." táblázat belépési pontjára mutat. A PAGE-NO mezőt a logikai címben indexként használják ehhez a táblázathoz, a lap-táblázat belépési pontjának kiválasztásához. A 4 byte-os lap-táblázat belépési pontja tartalmazza a lapkeret fizikai címet és a laphoz képesti relatív címmel együtt megadja a fizikai (abszolút) címet.
A lap-táblázat ENTRY-ben levő 31 bit egy logikai 1-gyel indikálja a memóriaterület bemenetét (kimenetét /I/O). Ekkor a CPU az I/O állapotot és időzítést használja referenciának. Ily módon a címfordítási eljárás a rendszerekben lehetővé teszi, hogy a memóriaterület bemeneti / kimeneti eszközeihez a hozzáférés védett legyen.
kód |
rendszer üzemmód |
normál üzemmód |
0000 |
na |
na |
0001 |
na |
re |
0010 |
e |
re |
0011 |
re |
re |
0100 |
na |
e |
0101 |
e |
e |
0110 |
na |
r |
0111 |
r |
r |
1000 |
next |
next |
1001 |
na |
rw |
1010 |
r |
rw |
1011 |
rw |
rw |
1100 |
na |
rwe |
1101 |
e |
rwe |
1110 |
re |
rwe |
1111 |
rwe |
rwe |
5.4-1. táblázat: hozzáférési védelem
na r w e next |
= nincs hozzáférés = olvasás hozzáférés = írás hozzáférés = végrehajtás hozzáférés = a következő fordítási táblázat védelmi mezőjének használata, vagy nincs hozzáférés. |
A hozzáférés-védelmi információ egy 4 bites mezőben kódolt a fordítási eljárás minden szintjén. A fordítási eljárás az előbb említett CPU táblázatleíró regiszterek segítségével jut el a táblázatokig, majd a fenti hozzáférési védelmi kód alapján választja ki a megfelelő táblázatot. Akkor megfelelő a táblázat, ha a kód nem 100016.
A programozónak lehet tulajdonos kódja is. Ez védhető mindenfajta illetéktelen hozzáféréstől. A programoknál is, mint láttuk, adható többféle hozzáférési mód, engedélyezhető csak végrehajtás is.
Különböző választható lehetőségek révén csökkenteni lehet a szintek számát és a táblázatok nagyságát. Ha a memória címmezők nincsenek külön választva, két vagy több fordítási táblázat-deszkriptor-regiszter tölthető be ugyanazzal az értékkel, így az új címmezőkhöz a táblázatok közösek.
A táblázat-deszkriptor-regiszter azt is meghatározhatja, hogy az 1. szintű és a 2. szintű táblázatok egyike vagy mindegyike elhagyható-e a fordítási eljárás alatt. Az 1. szintű táblázatok elhagyása a 24 bites címzésnél előnyös. A 16 bites címeknél mind az 1. szintű, mind a 2. szintű táblázatokat el lehet hagyni. A táblázat méreteit úgy lehet csökkenteni, hogy 256, 512 vagy 768 byte-ot foglalunk le a fordítási táblázatok számára, a fennmaradó ENTRY-ket pedig érvénytelennek tételezzük fel. A táblázatokat hatékonyan lehet allokálni figyelembe véve a lefelé növekvő veremtárakat.
A Z80000 CPU külső interface-e olyan bővítéseket is tartalmaz, amelyek növelik a sávszélességet és egyszerűsítik a rendszertervezést. Buszrendszere kompatibilis a Zilog Z busszal. Mind a 16, mind a 32 bites memória adatutak kezelését támogatja. A memória két tartományából az adatút szélességet és a várakozó állapotok számát külön lehet programozni. Például a memória egyik része a 16 bites adatutat használja különböző várakozó állapotokkal a ROM betöltéséhez. Ugyanakkor a memória másik része a 32 bites adatutat nem várakozási állapotban a dinamikus RAM-hoz használja.
A Z80000 rendszerben buszon futó műveletek frekvenciája fele vagy negyede a CPU óra bemenetének. A szabványos, 10 MHz-es CPU általában egy 5 MHz-es buszt használ. Ennek alternatívájaként egy 20 MHz-es CPU ugyanazt a busz-időzítést használhatja, ha 1/4-es tényezőt választ az 1/2 helyett. A CPU-ban levő ("belső") cache memória segít abban, hogy a processzor működését lehetőleg "függetlenné" tegyük a memória elérési időtől.
Mivel a Z80000 68 kivezetésű tokban van, a tok 32 kivezetésén a cím és az adat idő-multiplexelt. Valamennyi tranzakció egy cím-mintavétellel kezdődik, amely igazolja a cím, a státusz (a tranzakció típusát specifikáló) az olvasás-írás és az átviendő adat méretének (8, 16 vagy 32 bit) érvényességét. A címzést követően a tranzakció adatátviteli része alatt működik az adat-strobe vonal. A slave eszköz két jelvezetéket használhat 4 lehetséges válasz kódolására; a Z80000 rendszerben:
A bemenet és kimenet engedélyező vezetékeket arra lehet használni, hogy vezéreljék a bufferek irányát a multiplikált cím és adatvonalakon.
A kötegelt (brust) adatátvitel esetén a Z80000 illesztő egységnek (interface) egyéb szolgáltatásai is vannak. Itt a tranzakció alatt a CPU multiplikált adatmintákat tud kiadni egyetlen cím-mintavételt követően. Ez megnöveli a busz tényleges sávszélességét, amikor adatokat visz át egy memóriablokk egymás után következő rekeszeibe. A kötegelt adatátvitelhez - egy tranzakció egy adatmintával és várakozó állapotok nélkül - három busz órajel szükséges. Négy adatminta és várakozó állapotok nélküli tranzakcióhoz hat busz órajel szükséges, így ennél az átviteli tranzakciónál a busz sávszélesség kétszerese az előzőnek. Az 5 MHz-es busz órajellel (10 MHz-es CPU órajel), 32 bites adatúttal és négy adatátvitellel tranzakcióként a sáv szélessége: 13,3 Mbyte/s.
Egy kéthuzalos "handshake" ( hardware összekötés ) rendszer - kötegelt ( burst - BRST ) és kötegelt -nyugtázott ( burst acknowledge - BRSTA ) - szabályozza az átvitelek számát egy kötegelt tranzakcióban. A CPU addig biztosítja a BRST-működést, amíg az kezelni tudja az adatokat, a memória pedig addig biztosítja a BRSTA-működést, amíg képes erre. Akár a CPU, akár a memória leállíthatja a kötegelt tranzakciót. Ha a memória állítja le a kötegelt átvitelt, a CPU egy másik tranzakciót kezdeményez a fennmaradt adatok átvitelére. A tervező választására van bízva, hogy a memória nyugtázza-e a kötegelt átviteleket. A köteg-átviteli-protokoll - amelyet a CPU használ -a chip cache memóriáján keresztül illeszkedik a közbülső memória-rendszerekhez, vagy az olyan memória-rendszerekhez, amelyeket "nibble" módú RAM -okkal terveztek. A 32 bites Z80000 CPU olyan multiprocesszoros konfiguráció központjaként is szolgálhat, amely co-processzorokat, slave processzorokat, szoros és lazán csatolt multiplikált CPU-kat tartalmaz. Olyan co-processzorok, mint pl. a Z8070 aritmetikai processzor, speciális hardware-rel segít a CPU-nak abban, hogy egyszerű utasításokkal komplex műveleteket hajtson végre. A Z80000 és Z8070 kombináció (10 MHz-n) képes arra, hogy 600000-nél több lebegőpontos műveletet hajtson végre másodpercenként, egyszeres pontosságú "vektoros" számítások formájában.
5.5. Pipeline
A Z80000 CPU hatfokozatú szinkron pipeline programok végrehajtására is aLxalmas (5.5-l.ábra). Az utasítások a pipeline valamennyi fokozatán szekvenciálisan haladnak át, az operandust tároló fokozat esetleges kivételével. A pipeline különböző fokozatai egyidejűleg tudnak működni, különböző utasításokat, vagy egy komplex utasítás különböző részeit tudják végrehajtani. Vagyis a pipeline időben párhuzamos, térben soros működésű.
5.5-1. ábra: Hatfokozatú pipeline programvégrehajtó
A hatfokozatú pipeline programvégrehajtó növeli a 32 bites Z80000 központi egység teljesítményét. A külső memóriához való hozzáférés ehhez a működéshez nemi lenne elég gyors, ezért a Z80000 chip cache tárolóját kell igénybe venni.
Valamennyi pipeline-fokozat egyetlen processzor-ciklusban tud működni, amely két óraciklusból áll 01 és 02. A pipeline lehetővé teszi egyszerű utasítások - mint pl. regiszterből regiszterbe töltés és memóriából regiszterbe átvitel - gyors végrehajtását, a sebesség: egy utasítás végrehajtásának befejezése minden processzor-ciklusnál, ami 10 MHz-es órafrekvenciával számolva 5 millió utasítás-végrehajtás/s. A gyakorlatban a tényleges utasítás-végrehajtási sebesség a csúcsértéknek kb. egyharmada. A késleltetésnek három forrása van: néhány utasítás túlságosan bonyolult ahhoz, hogy egyetlen ciklusban végre lehessen hajtani; interferencia lép fel az utasítások között, amely késleltetést okoz; a főmemória elérése várakozásra kényszeríti a pipeline rendszert.
A rendszer utasítás-kihozó fokozat inkrementálja (1-gyel növeli) a programszámláló tartalmát és utasítás-kihozást kezdeményez. Az utasítás-dekódoló fokozat fogadja és dekódolja az utasítást, az utasítás hosszának meghatározása és a címkiszámító fokozat-vezérlő üzembe helyezése céljából. Az utóbbi fokozat tartalmaz egy PORT-ot a regiszter-állományhoz és egy összeadót speciálisan a cím-aritmetikához. A processzorciklus alatt a cím-kiszámító fokozat készen áll egy operandus kezelésére, vagy egy operandus-cím generálására a memóriában. A címfordítás a cím-kiszámításkor megy végbe. Az operandust kihozó fokozat kezdeményezi az operandushoz a hivatkozások kihozását a memóriából és fogadja az adatoltat, melyeket egy regiszterben tárol.
Az utasítás-végrehajtás a végrehajtó fokozatban megy végbe. Ennek a fokozatnak a regiszter-állományhoz két 32 bites adatút rendszere van és tartalmaz egy 32 bites ALU-t.
A byte, szó és hosszú-szó ALU műveletek végrehajtása regiszterből regiszterbe, vagy memóriából regiszterbe a processzor-ciklus alatt megy végbe. Az ALU speciális hardware-t is tartalmaz a szorzás és osztás meggyorsítására.
Az operandus tároló fokozat beállítja a feltétel jelzőbiteket és tárolja az adatokat a memóriában. Eltérően azonban az egyéb pipeline fokozatoktól az operandus tárolása több ciklust igényel, mivel az adatok tárolásához végre kell hajtani a tárolással kapcsolatos műveleteket. Ez azonban nem csökkenti komoly mértékben a teljesítményt, mivel a legtöbb utasítás végrehajtásához nem kell az eredményeket tárolni a memóriában és a tárolási művelet végrehajtása rendszerint át tudja lapolni más utasítások végrehajtását.
5.6. Adatfolyam a CACHE memórián és a pipeline-on keresztül
A pipeline architektúrák növelik a rendszer teljesítményét, de csak akkor, ha kész adatforrás áll rendelkezésre. A Z80000 32 bites mikroprocesszor pipeline működésénél két memória kihozásra (fetch) van szükség minden egyes processzor-ciklusban: az egyikre az utasítás kihozási, a másikra az operandus kihozási művelet alatt. Mivel a főmemória hivatkozások tipikusan három processzor-ciklust igényelnek, a rendszer az idő nagy részében tétlen lesz, ha minden hivatkozásnak el kell érnie a főmemóriát. A gyors memória-elérést a Z80000 cache memóriája segíti, amelyet minden óraciklusban el lehet érni, ami buffereli a legtöbb memória-kihozást (75%).
A cache memória a legutóbb hivatkozott memória rekeszek másolatait tartalmazza. Minden egyes memória-lehíváskor a CPU megvizsgálja a cache memóriát, hogy megállapítsa, vajon ezen a címen szereplő adat megtalálható-e benne, ezt a megtalálást cache memória találatnak nevezzük. Találat esetén az adat kiolvasása a cache memóriából megy végbe, ezért nem kell az adatot külső tranzakcióval a főmemóriából kihozni. Ha nincs találat, akkor a CPU egy külső tranzakciót generál a főmemóriából történő kihozásra, az adat pedig belép a cache memóriába.
A pipeline fokozat várakozásra kényszerül mindaddig, amíg a főmemóriától a hiányzó adat be nem érkezik, illetőleg a vonatkozó művelet befejeződik, ez alatt más pipeline fokozatok folytathatják a műveletek végrehajtását.
A cache memória olyan információt tárol, amelyet a főmemóriából kap 16 byte-os blokkokban. Minden egyes blokkhoz egy 28 bites toldalék (tag) kapcsolódik, amely a blokkhoz tartozó főmemória-cím legnagyobb helyértékű bitjeit hordozza. Van egy érvényességi bit is, amely a cache memóriában levő minden egyes 16 bites szóhoz kapcsolódik. A cache memóriának 16 blokkja van, ez 256 byte bináris adat tárolását teszi lehetővé. Amikor blokkhiány lép fel, a legutóbb használt (LRU - Least Recently Used) blokkot lehet felhasználni. Amikor cache memória-hiány lép fel egy utasítás kihozásánál, a CPU behozza a hiányzó utasítást a főmemóriából és előre kihozza azokat a byte-okat, amelyek a kötegelt tranzakciót alkalmazó blokkban következnek. Ha a főmemória nem támogatja a kötegelt tranzakciót, a CPU nem hoz ki előre utasításokat a cache memóriába történő tárolásra. Amikor egy cache memóriahiány lép fel egy operandus kihozásakor a CPU csak a hiányzó adatot hozza ki a memóriából. A hiányzó operandusokat csak a string utasításokhoz hozzák ki előre. Az "előre" kihozásnak ez a szelektív alkalmazása biztosítja a főmemória leghatásosabb kihasználását.
Operandus tárhivatkozásoknál, végbemegy az adatok beírása a memóriába, ezt az eljárást átírásnak nevezzük. Ha a tárhivatkozás a cache memóriában van, akkor az adat ugyancsak oda íródik be. Ha ez a tárhivatkozás hiányzik a cache memóriában, akkor a beírás elmarad. Az átírási tárolómechanizmus biztosítja, hogy a főmemória bármely címén az érvényes adatot tárolja. Olyan esetekben, amelyekben a multiprocesszorok megoszthatják az "írható" tárolót, a címfordító táblázatok lehetővé teszik azt a jelölést, hogy egyedi oldalakat lehessen a cache memóriába tölteni A rendszer eltér a Motorola MC 68020-tól, amely csak utasításokat helyez el a cache tárulóban, a Z80000 cache memória mechanizmusa szelektíven engedélyezhető az utasítások és az operandusok elhelyezésére. A Z80000 alkalmazásoknál is választhatjuk azt, hogy csak utasításokat helyezünk el a cache memóriában, ha azonban az utasításokkal együtt az adatot is a cache memória-rendszerben kezeljük, akkor a tapasztalat szerint a teljesítmény kb. 20%-kal javul.
5.7. A Z80000 processzor értékelése
A pipeline architektúra és a cache memória növeli a 32 bites Z80000 mikroprocesszor teljesítményét, ugyanakkor nehezíti a teljesítmény mérését. A probléma legjobban úgy közelíthető meg, ha felbontjuk az utasítás kezelési-feldolgozási időt három összetevőre, ezek az utasítás-végrehajtási, pipeline műveletvégzési és a memóriával kapcsolatos műveletvégzési időtartamok.
A végrehajtási idő azon ciklusok száma, amelyek egy utasítás végrehajtásához szükségesek, ha valamennyi memória hivatkozás a cache memóriára és a TLB bufferre vonatkozik a pipeline műveletek végrehajtása során más utasításokkal nincs interferencia. Az átlagos végrehajtási idő az egyes utasítások végrehajtási idejétől, valamint az operációs kódok és címzési módok frekvencia "kiosztásától" függ.
Z80000 utasítás-végrehajtási idők |
|
Utasítás |
ciklusok száma |
hosszú-szó áttöltés, regiszterből regiszterbe hosszú-szó hozzáadás, memóriából regiszterbe szó összehasonlítás, közvetlenül a regiszterben hosszú-szó szorzás, memóriából regiszterbe hosszú-szó osztás, regiszterből regiszterbe |
1 1 2 20 36 |
Az általános utasítások végrehajtása - mint betöltés egy regiszterbe, pl. egy olyan szó-operandust, amelyet a bázisregiszter-plusz-áthelyezés címzési mód specifikál - egy processzor-ciklus (két óraciklus) alatt történik. Ugyanez a betöltési utasítás 10 ciklust igényel a Zilog Z8002-ön 12 ciklust a Motorola MC 68000-en, 17-et az INTEL 8086-on és 10-et a National NS16032-n, amikor nincsenek várakozó állapotok. A Z80000 processzor átlagos utasítás-végrehajtási ideje 1,3 processzor-ciklus.
A pipeline késleltetéseit az utasítások közötti különböző típusú függések okozzák. A legjelentékenyebb időigénye az olyan elágazási (branch) utasításoknak van, mint pl. feltétel nélküli ugrás, feltételes ugrás, visszatérés stb. Ha egy elágazás következik, szünet (gap) keletkezik az utasítás-folyamban, amíg az elágazáshoz szükséges utasítás behozása végbemegy. A feltétel nélküli elágazások megvalósítása két processzor-ciklus ideig (gap) tart. A feltételes elágazás megvalósítása három processzor-ciklus ideig (gap) tart, ha nem jön létre késleltetés. Az átlagos időszükséglet utasításonként az elágazásokhoz 0,5 processzor-ciklus.
Egy másik jelentős pipeline-ből eredő késleltetés akkor áll elő, ha egy utasítás módosítja annak a regiszternek a tartalmát, amelyet a következő két utasítás valamelyike igényel a cím kiszámításához. Ha ez fordul elő, a cím-kiszámítással várni kell egy vagy két processzor-ciklusideig, amíg a regisztertartalmat módosító utasítást végrehajtják. Az átlagos késleltetés a regiszter átírási műveletek következtében 0,2 processzor-ciklus utasításonként.
Néhány további ok következtében a pipeline működésnél a késleltetés együttesen, átlag 0,2 processzor-ciklus. Az elágazások, regiszter átírások és egyéb okok miatt előálló átlagos pipeline-késleltetés 0,9 processzor-ciklus utasításonként.
A memória műveletek miatti késleltetések okai a "hiányok" azaz, amikor a hivatkozott információ nem található meg a cache-ban, illetőleg a TLB-ben. Ennek a késleltetésnek a mértéke a CPU-hoz használt memória-rendszertől függ. Itt három olyan memória-rendszert vizsgálunk meg, amelyek a Z80000 CPU-hoz alkalmazhatóak. Az 1. memóriának 16 bites adatvezeték-rendszere van, ciklusideje három processzor-ciklusidő és nincs kötegelt adatátvitele; a 2. memóriának 32 bites adatvezeték-rendszere, három processzor-ciklus ciklusideje van és nincs kötegelt adatátvitele. A 3. memóriának 32 bites adatvezeték-rendszere, három processzor-ciklus ciklusideje és kötegelt adatátvitele van (L. táblázat).
Z80000 cache memóriájának teljesítménye |
|||
Memória konfiguráció | 1. memória |
2. memória |
3. memória |
cache memória teljesítmény | |||
találati arány (h) hiány utasításonként késleltetés utasításonként |
0,62 0,65 1,9 |
0,75 0,42 1,3 |
0,88 0,21 0,63 |
TLB buffer teljesítmény | |||
találati arány (h) hiány utasításonként késleltetés utasításonként |
0,98 0,04 0,78 |
0,98 0,04 0,56 |
0,98 0,04 0,56 |
Amikor a processzor olyan utasítást vagy operandust hoz ki, amely nincs a cache memóriában, a főmemória eléréséhez három CPU ciklusidőre van szükség. A cache memória tényleges eredményességét a "találat" arányával (h) mérjük, ami a cache memóriában talált és a főmemóriából kihozott szavak hányadosa.
Ha meg akarjuk határozni a cache hiány által létrejött átlagos késleltetést, ki kell számítani az utasításonkénti hiányok átlagát. Átlagban 1,4 utasítás-szót és 0,3 operandusszót hozunk ki végrehajtott utasításokként. A cache memória hiányok átlagos száma tehát utasításonként az u = 1,7(1-h)-ból adódik. Az utasításonkénti átlagos késleltetés cache memória hiányok miatt 3u. A TLB hiányok miatt előálló késleltetés nemcsak a memória-rendszertől, hanem a fordítási táblázatos szintjeinek számától is függ. A TLB hiány miatti késleltetés a feldolgozásban (5+T)^x*N, ahol T a processzor-ciklusok száma 32 bites memória referencia esetén, N pedig a fordítási táblázatokban szereplő szintek száma. Az átlagos TLB hiányból adódó késleltetés kiszámítása hasonló a cache memória hiányból adódó késleltetés kiszámításához, de az operandusok tárolása is okozhat TLB hiányt, mivel lap-táblázat belépésre szükség van ahhoz, hogy az operandust tárolni lehessen a "fizikai" memóriában. Átlagosan 0,15 operandus-szó tárolásra van szükség utasításonként.
Most, hogy meghatároztuk az átlagos utasítás-feldolgozási idő összetevőit, kiszámíthatjuk a teljesítményt. A számítási eredmények szerint az átlagos utasítás-feldolgozási idő 3,4-4,9 processzor-ciklusig tart, amely függ a memória-rendszertől. Ez 1,0-1,5 millió utasítás-végrehajtás másodpercenként (MIPS), 10 MHz-es CPU óra és 600 ns memória ciklusidőt feltételezve. Összehasonlításul közöljük egy Z8000 adatát - amely ugyanazt a feladatot hajtja végre ugyanazzal az órasebességgel és memóriaciklus-idővel - eredmény = 0,7 MIPS.
Zilog termék lesz ugyancsak a max. 25 MHz-es órával ellátott processzor, amelynek teljesítménye - 240 ns memóriaciklus idő esetén - 2,5-3,7 MIPS.
5.8. ZILOG master-slave mikroprocesszoros rendszerek
A slave processzorok mint pl. a Z8016 DMA - közvetlen memória hozzáférésű átvitelt vezérlő,- vagy a Z800 I/O (be / kimenet) processzor, dedikált, a CPU-val aszinkron műveleteket hajtanak végre, a CPU által vezérelt, osztott buszrendszeren keresztül. A slave processzor számára a CPU biztosítja a buszcsatlakoztatást a kétvezetékes buszkérő / busznyugtázó "handshake"-en keresztül.
A szorosan csatolt multiplikált CPU-k önálló utasításfolyamatokat, programokat hajtanak végre és osztott memórián vagy, közös buszon elhelyezett perifériákon keresztül tartanak egymással kapcsolatot. Ezeket a közös buszrendszerrel kapcsolatos vezérlési feladatokat a CPU-n kívüli funkcionális egység látja el. A CPU-ban levő vezérlő-regiszter specifikálja a közös buszrendszerhez használt fizikai címmező tartományt. Mielőtt egy tranzakció megy végbe, a közös buszrendszeren a CPU a kétvezetékes közös buszrendszer-kérő / közös buszrendszer-nyugtázó jeleket szolgáltató handshake (hardware) eszköztől nyert információk alapján léphet tovább, amelyet külső eszköz vezérel.
A lazán csatolt, multiplikált CPU-k általában egy olyan több-PORT-os egységen keresztül tartanak egymással kapcsolatot, mint pl. Z8038 - FIFO. A Z80000 CPU-k szolgáltatják a bemenet / kimenet és a megszakítások kezelését a lazán csatolt multiprocesszoros rendszerben.
5.9. A Z80000 alprogramjai
A Z80000 CPU 15 (nem szegmentált) programját, amelyet a Zilog Z8000 mikroszámítógép rendszer alkalmaz, az alábbi táblázatban soroljuk fel. Az operációs rendszer: Zilog ZEUS, amely az UNIX változata.
A Z80000 programjai |
|
Program |
Felhasználás |
C1 C2 C3 C4 CPP DIFF ED GREP LS NM OD PR SED SORT VI |
C fordító-elemző C fordító kódgenerátor C fordító optimalizáló C fordító listázó C fordító preprocesszor file összehasonlító sorszerkesztő mintakereső file (jegyzék) listázó betöltő modul névlistázó oktális kiírató (core images) formátum előállító nyomtatóhoz "folyam" (stream) szerkesztő szortírozó képernyő szerkesztő |
5.10. 32 bites mikroprocesszor típusok
A CPU chip-ben elhelyezett cache memória nemcsak a Z80000 mikroprocesszorra jellemző, hanem több cég pl. a Motorola, INTEL, Austin, Texas is teljesítménynövelő elemeket tesz a 32 bites mikroprocesszoraiba. A Zilog utasításokat és adatokat tárol a cache memóriában, a Motorola pl. csak utasításokat. A Motorola a co-processzorok széles tartományának előállítását tervezi, mint pl. az MC6881 lebegőpontos aritmetikai egységet.
A Motorola az N-csatornás CMOS technológiáktól azt várja, hogy az MC6820 típus teljesítmény disszipálását 1,5-2W-ra szorítja le, ami ugyanannyi, mint a 16 bites MC68000-es processzoré.
Az INTEL azt reméli, hogy vezetését a 16 bites mikroprocesszor kategóriában kiterjesztheti. Az INTEL mikroprocesszor típusok: a 8086/88, a 80186 és a 80286. Az INTEL 32 bites 80386 típusú mikroprocesszora várhatóan megkétszerezi a 286-os típus teljesítményét. A 16 bites 80286 mikroprocesszor szegmentált memóriakezeléssel rendelkezik, ezen túlmenően az INTEL hasonlóan a Zilog-hoz a 32 bites processzorához biztosítani fogja a lapozási lehetőséget és a CPU chip-ben történő memória kialakítást is.
A National Semiconductor - 32032 mikroprocesszorának 32 bites adatbusza és 24 bites címbusza van - ennek továbbfejlesztett változata 20 MHz-es, 32 bites 32132 mikroprocesszor. A National CMOS technológiával készülő processzoraiban integrálja a lapozásos memóriakezelést, a lebegőpontos aritmetikát, a megszakításvezérlést, amely a becslések szerint olyan eszközt eredményez, amely több mint 500000 tranzisztort fog tartalmazni.
A félvezető gyártóknak az a véleménye, hogy a 32 bites mikroprocesszorok piaca még kicsi, kb. 100000 db 1984-ben és max. 1 millió 1987-re (ezeket a számokat a Dataquest, Cupertino (California) kutatóintézet közölte).
A 32 bites mikroprocesszorok főbb alkalmazási területes ipari- robotika, grafikai-, orvosi-, irodai-rendszerek