M68K
A HupWiki-ből...
Tartalomjegyzék |
Bevezető
A Motorola 68000 egy CISC mikroprocesszor, az első tagja egy sikeres processzor családnak, amely 1979-ben jelent meg.
Az 1980-as években rendkívül népszerűek voltak: többek között Amiga, Atari, Apple Macintosh, NeXT, Sega Genesis/MegaDrive gépek és az első SUN munkaállomások processzoraként szolgáltak. Hadászati felhasználásuk is jelentős volt, hiszen a családot használó gépek nem véletlenül kerültek fel a COCOM listára - többek között az amerikai Parsing rakétákat is M68K processzorok vezérelték. Később a sorozat utolsó tagjai, a Dragonball és a ColdFire, kisebb, beágyazott rendszerek processzoraiként szolgáltak, mint például a Palm PDA-k, CISCO routerek, vagy egyes lézernyomtatók. A jelenlegi ColdFire széria már nem igazi M68K, csak részben kompatibilis ezzel a családdal, fejlesztése önálló vonalat képvisel. A család egyes tagjainak élete igen hosszúra nyúlt. A Motorola csak 2000-ben hagyott fel az eredeti 68000 gyártásával, de más gyártók, pl. a Hitachi, licensz alapján, 2001 óta ismét gyártják.
Architektúra
Az M68K architektúra sok szempontból megelőzte a korát, már első példánya is olyan jellemzőket mutatott, amely más architektúrákon csak egy évtizeddel később jelent meg, vagy kezdődött el széleskörű használata. Ilyen például a privilégiumszintek vagy a kivételkezelés. Az M68K egy 32 bites architektúra, amelyet azonban úgy alakítottak ki, hogy a korra jellemző 16 bites rendszerekhez igen könnyen illeszthető legyen.
Regiszterkészlet
Az M68K processzorcsaládnak más CISC architektúráktól eltérően sok regisztere van.
- 8db 32 bites integer adatregiszter, nevük d0, d1, d2 ... d7-ig
- 8db 32 bites címregiszter, nevük a0, a1, a2 ... a7-ig
- Az a7 regiszter egyben a stackpointer (sp) is, ilyen néven is hivatkozhatunk rá
- 1db PC, azaz Program Counter, programszámláló, az éppen végrehajtott utasítás címét tartalmazza
- 1db CCR, azaz Condition Code Register, amely a kiértékelt feltételek végeredményét jelző biteket tartalmazza.
Fejlettebb típusokon más regiszterek is találhatóak, mint pl. a VBR, Vector Base Register, amely a különféle megszakítás és kivételvektorok ugrótáblájának kezdőcímét adja meg. Amennyiben lebegőpontos egységet, FPU-t is csatlakoztatunk a processzorhoz, vagy olyan típust használunk amiben ez beépítve megtalálható, akkor a következő regiszterek is rendelkezésre állnak:
- 8db 80 bites lebegőpontos regiszter, nevük fp0, fp1, fp2 ... fp7-ig, lineáris szervezésben
- 1db FPCR, azaz Floating-Point Control Register, amelyben az FPU működését befolyásoló kapcsolóbitek találhatók
- 1db FPSR, azaz Floating-Point Status Register, amelyben az FPU által kiértékelt műveletek végeredményét jelző biteket tartalmazza. Ebben találhatók az FPU kivétel jelzőbitjei is.
- 1db FPIAR, azaz Floating-Point Instruction Address Register, FPU kivétel esetén a kivételt okozó lebegőpontos utasítás címét tartalmazza
Egyéb jellemzők
Az M68K egyik jellemzője a sok, igen bonyolult címzésmód, amely azonban kiválóan használható bizonyos feladatok optimalizálására. További jellemző - a specifikus regiszterek hiányához hasonlóan - a specifikus utasítások hiánya is. Például a processzornak nincsenek külön veremkezelő utasításai, az általános adatmozgatásra használt move utasítás, megfelelő operandusokkal történő használata nyújtja a megoldást a feladatra. Például az x86 architektúra PUSH <regiszternév> utasításának itt a move.l <regiszternév>, -(sp) utasítás felel meg, amely csökkenti a veremmutatót a mozgatott adat mennyiségével, majd a veremmutatóban tárolt címre mozgatja a megadott regiszter tartalmát. A példánkban 4 byte adatot mozgatunk, ezt jelzi az utasítás neve mögé fűzött '.l', ami értelemszerűen a long megfelelője. Hasonlóan használhatnánk '.w' (word) vagy '.b' (byte) méretű mozgatást is. Ez az ún. pre-decrement címzésmód természetesen bármely címregiszter esetén alkalmazható, nem csak a veremmutató esetében. M68K esetén a minimális utasításhossz 2 byte, valamint a további displacementek is mérete is osztható kettővel. Még nem került említésre, de az M68K az egyik legjellegzetesebb big endian architektúra, azaz az egy word/dwordben tárolt byteok logikai és fizikai sorrendje megegyezik, hasonlóan a network byte orderhez.
Az M68K architektúrán ismeretlen a hagyományos értelemben vett szegmentálás mint fogalom, hiszen szegmens regiszterek nincsenek, a címregiszterek pedig 32 bitesek, így a processzor lineárisan kezelheti a címtartományt. Ennek ellenére bizonyos operációs rendszereken, a kor konvencióinak követése miatt mesterséges szegmentálást valósítottak meg, ilyen volt pl. az Atari TOS, vagy a Mac OS korai verziói, és a Palm OS is, egészen a közelmúltig. Természetesen az M68K család újabb tagjait már felszerelték MMU-val, így képesek a címtartomány virtualizálására, valamint a virtuális memória kezelésére is. Az architektúra a kezdetektől két privilégiumszintet különböztetett meg, az User és a Supervisor szintet. A Supervisor szint az operációs rendszer számára van fenttartva. Ezen a szinten a család tagjai között viszonylag nagy eltérések mutatkoznak, amelyek áthidalása az operációs rendszer feladata. Az User szinten a felhasznalói programok futnak, és megfelelő rendszertámogatással ebben az üzemmódban a kompatibilitás gyakorlatilag 100%-os.
Az M68K család tagjai
68000
A család első tagja, 1979-ben jelent meg. 32 bites belső felépítéssel, de 16 bites külső adat és 24 bites külső címbusszal rendelkezett. Rengeteg variációban és tokozásban készült az évek során, fontosabb variációi a 68008, amely 8 bites külső adatbusszal rendelkezett (pl. a 8 bites Sinclair QL-ben használták), valamint a 68010, amelyet - bár külső MMU segítségével - de felkészítettek a virtuális memória kezelésére is.
68020
A család második generációjának első tagja, a 68020, 1982-ben jelent meg. Ez már teljes értékű 32 bites CPU volt, valamint új címzésmódokkal és új utasításokkal is kibővítették. A 68851-es külső MMU és a 68881-es külső FPU segítségével teljes értékű modern rendszer építésére volt alkalmas. Legfontosabb variációja a 68EC020, amelyet 24 bites adatbuszával olcsóbb rendszerekbe szántak. A 68020 biztosította először a több processzoros működés lehetőségét. Összesen 8db egységet lehet csatlakoztatni a buszra, amelyek közül bármelyik lehet FPU és CPU is, de csak 1db MMU lehet. Az architektúra aszinkron, vagyis a buszon található eszközöknek nem szükséges azonos órajelen üzemelni. A 68020 tartalmazott 256 byte utasítás cache-t is. A 68020 egy pipeline szervezésű processzor, három lépcsővel.
68030
A harmadik generáció nem hozott a korábbiakhoz mérhető változást, sokan nem is tartják külön generációnak, csak a 68020 felújított változatának. Az MMU bekerült a processzorba, valamint megjelent a 68882-s FPU, amely azonos órajelen csaknem kétszeres teljesítményt biztosít a 68881-s FPU-hoz képest. A processzorban helyet kapott 1 kilobyte utasítás- és adatcache is. Legfontosabb változata a 68EC030, amely nem tartalmazott MMU-t.
68040
A következő generációt képviselő, 1989-ben megjelent 68040 volt az első M68K processzor amely egy tokon belül tartalmazott FPU-t és MMU-t. Az adat- és az utasításcache egyaránt 4 kilobyte. Sajnos azonban az órajeléhez képest igen nagy teljesítményű, hat lépcsős pipeline-t tartalmazó processzor mellé már nem fért a tokba egy teljes értékű 6888x FPU, így a Motorola egy hibrid, szoftveresen-támogatott FPU mellett döntött, amely az utasítások egy részét a processzorhoz szállított, operációs rendszerbe integrált ún. FPSP csomag segítségével emulálta. A 68040 processzor, bár még ezzel a megoldással is minden téren jelentősen gyorsabb volt elsőszámú riválisánál, az Intel 486-nál, amennyiben az azonos órajelen nyújtott teljesítményt hasonlítjuk össze, folyamatosan melegedési problémákkal küzdött, így a maximális órajele mindössze 40Mhz. Főbb változatai a 68LC040, amely nem tartalmazott FPU-t, és a 68EC040, amely sem MMU-t, sem FPU-t nem tartalmazott.
68060
Az 1994-ben megjelent, 68060 volt az utolsó általános felhasználásra tervezett M68K processzor. Nem a korábbi 68040 továbbfejlesztése, hanem egy teljesen új tervezés. Superscalar dualpipeline-os processzor. 8KB adat- és 8KB utasitáscache-t tartalmaz, ezen felül igen fejlett branch prediction egységgel is ellátták. Sajnos azonban - bár sokat gyorsult a korábbi generációhoz képest - az FPU a 68040-hez hasonlóan nem pipelineos, szoftverből támogatott, és ezért meglehetősen lassú, viszont az integer egység órajelhez viszonyított sebessége kárpótol ezért. A 68040-re jellemző melegedési problémákat kiküszöbölték, a 68060 legtöbb esetben még passzív hűtést sem igényel. A kezdeti 50Mhz-s modelleket később 60, 66 és 75Mhz-s változatok is követték, de ezek meglehetősen ritkák, hiszen a Motorola ekkor már a PowerPC szériára koncentrált. Az 68LC060 variáns ez esetben is az FPU nélküli, a 68EC060 pedig az FPU és MMU nélküli változatot jelenti. Az EC és LC változatot egészen 100Mhz-ig skálázták.
CPU32 (68330)
A CPU32 egy mikrokontroller család, amely M68K kompatibilis magra épül, de nem támogatja a 68020+ utasításokat. A CPU magját úgy tervezték, hogy minimális tranzisztorszám mellett maximális teljesítményt nyújtson. E mag köré tervezték a különböző egységeket, amelyek közös tokban kaptak helyet. A CPU32 tulajdonképpen a manapság divatos system-on-chip rendszerek egyik első képviselője.
Dragonball
A Dragonball az M68K család utóéletének egyik képviselője. Az M68K mag köré tervezett chipet beágyazott rendszerekbe és PDA-kba szánták elsősorban. Nem támogatja a 68020+ utasítások legnagyobb részét. FPU-t nem, és csak minimális képességű MMU-t tartalmaz. Korai változatai cache-sel sem rendelkeztek, később kisméretű utasítás és adatcache-t is integráltak. A Palm PDA-kat is ilyen processzor hajtotta Palm OS 5 előtti korszakban.
ColdFire
A ColdFire az M68K család koncepcióját újragondoló, de azzal részben kompatibilis, elsősorban beágyazott rendszerkbe szánt processzorcsalád. A ColdFire, bár az alap utasításkészlet kompatibilis (tehát készíthető olyan bináris, amely M68K-n és ColdFire-n is működik), már nem valódi CISC processzor, hanem igen erős RISC vonásokat is hordoz. A Motorola 'variable-length RISC'-nek nevezi a ColdFire architektúrát. Az utasítások 16, 32 vagy 48 bit hosszúak lehetnek, ez pedig azt jelenti, hogy az M68K-ra jellemző címzésmódok nagy részét a ColdFire nem támogatja. Bár eleinte igen kis teljesítményűek voltak, a mai ColdFire V4 és V4e típusjelű processzorok már több száz Mhz-n működnek, ráadásul az alap processzormag mellett FPU-t, MMU-t, egyszerű SIMD egységet és jelentős számú perifériát is tartalmaznak, ezért igen hamar kedveltek lettek a barkácsolók körében. A hivatalos fejlesztések mellett egyre több garázsproject tűnik fel, amelyek a régi M68K alapú gépekbe (pl. Atari, Amiga) szánt ColdFire alapú kártyát, vagy a régi gépekkel kompatibilis új ColdFire processzorra épülő alaplapot szeretne készíteni. A ColdFire-höz igen jó fejlesztőeszközöket adnak, amivel az M68K-ra írt programok egyszerűen konvertálhatók ColdFire programokká, valamint létezik a 68040 és 68060 processzorok FPU emulációját támogató csomaghoz hasonló szoftver is, amely M68K programok módosítás nélküli futtatását teszi lehetővé ColdFire processzoron.
Összegzés
Az M68K család sokáig tervezési etalont képviselt a processzorok között, és az IBM kompatibilis PC-ken kívül gyakorlatilag mindenféle számítógépben és eszközben, a merevlemez-elektronikától az Unix-workstationökig megtalálhatók voltak. Könnyű programozhatósága, rugalmas felépítése kedvelté tette a tervezők között. Bár a fejlesztés élvonalát ma már más processzorok képviselik, desktop felhasználásban pedig felváltották őket a PowerPC-k, az M68K család öröksége ma is él, többek között a ColdFire processzorokban, és azokban az alternatív gépekben, amelyeket egy-egy M68K alapú rendszer eleganciája, tiszta, átlátható felépítése ihletett.