Motorola 68000 processzorcsalád
A Motorola 680x0/m68000/68000 ill. m68k egy 32 bites CISC processzorcsalád. Ezek a processzorok igen népszerűek voltak az 1980-as években és az 1990-es évek elején a személyi számítógépek és a munkaállomások körében, a sorozat egy ideig az Intel x86 processzorcsaládjának legerősebb konkurense volt. Korai személyi számítógépekben, Unix munkaállomásokban, videójáték-konzolokban használták, származtatott változataikat PDA-kban, beágyazott rendszerekben és vezérlőegységekben továbbra is használják (ld. Felhasználás).
A család tagjai
[szerkesztés]- Első generáció (belsőleg 16/32 bites, 8, 16 és 32 bites interfészekkel szerelve)
- Második generáció (teljesen 32 bites)
- Harmadik generáció (utasítás-futószalaggal)
- Negyedik generáció (szuperskalár)
- Egyebek
- Freescale 683XX (CPU32 másként 68330, 68360 ill. QUICC)
- Freescale ColdFire
- Freescale DragonBall
A fejlesztés állomásai
[szerkesztés]1979-ben jelent meg, az m68k sorozat első tagja. Eredetileg HMOS technológiával készült. „16/32 bitesként” emlegetik: belsőleg 32 bites, külső adatbusza 16 bites, címbusza 24 bites, 1979-től 1982-ig 4, 6, 8, 10, 12,5 és 16,67 MHz órajelű változatai készültek. Jellemzői:
- 8 32 bites adatregiszter, 9 32 bites címregiszter, 32 bites programszámláló, 16 bites állapotregiszter.
- 2 privilegizációs szint (felhasználói és szupervizor mód)
- 7 szintű megszakítási rendszer
- 256 megszakítási vektor, kivételkezelés, csapda (trap) utasítások
- I/O portok: nincsenek
1982-ben jelent meg; az eredeti 68000-es változata, azzal teljesen tárgykód-kompatibilis, de lábkiosztása más (nem pin-kompatibilis). 32 bites processzor, 8 bites külső adatbusszal, címbusza 20 vagy 22 bites az egyes változatokban.[1] Mivel az adatbusz fele olyan széles, mint a 68000-ben, az utasításlehívás több ciklust igényelt, ezért ez a processzor azonos órajelen lassabb volt, mint a 68000. A 8 bites Sinclair QL mikrogépben használták.
- max. órajel: 16,67 MHz
- max. memória: 4 MiB RAM
- I/O portok: nincsenek
1982-ben jelent meg,[2] 32 bites CPU, 16 bites adatbusszal. A 68000 javított változata, azzal lábkompatibilis. A magot és a mikrokódot optimalizálták, azonos órajelen 10-20%-kal gyorsabb a 68000-nál. Felkészítették a virtuális memória kezelésére is, a "MOVE from SR" utasítás privilegizált lett, új utasításokat is kapott, így nem 100%-ban tárgykód-kompatibilis az eredeti 68000-rel.[3]
- Max. órajel: 16 MHz
- Virtuális memória támogatás (újraindítható utasítások).
- 'ciklikus mód' (loop mode) a gyorsabb string és memória könyvtári primitíveknek.
- Új Vector Base Register (VBR): a megszakítási vektor táblázat bárhol lehet a memóriában.
- Új blokk-adatmozgató utasítás: MOVES + SFC, DFC regiszterek.
A Motorola 68012 (MC68012) egy 68010-kompatibilis processzor, 31 bitesre kiterjesztett címbusszal, virtuálismemória- és multiprocesszoros támogatással. 1982 és 1984 között jelent meg.[4] A 68010 és a 68020 között áll.
- 31 bites címbusz, közvetlenül címezhető memóriaterület: 2 GiB
- RMC buszvezérlő vezérlő kimenet a virtuális memória és multiprocesszoros működés támogatásához
- Órajel: 8 - 12,5 MHz között.
1984-ben jelent meg,[5] a processzorcsalád második generációjának első tagja. Kompatibilis a család korábbi tagjaival. Címbuszát 32 bitesre bővítették, így 4 GiB memóriát címezhetett. Az adatbusza is 32 bites, de képes 8 és 16 bites adatbuszt használó módban is működni. Új utasításokkal és címzési módokkal bővítették. Megjelent benne a Motorola 68881 és 68882 matematikai koprocesszorok és a MC68851 PMMU (lapozó memóriakezelő) hardveres támogatása, a multiprocesszoros támogatás, a magba futószalag és utasítás-cache került. Multiprocesszoros konfigurációban összesen 8 db egység csatlakozhat a buszra, ezek közül bármelyik lehet FPU vagy CPU, de csak egyetlen MMU lehet; a processzorok a rendszerben aszinkron módon működnek.
- 32 bites címbusz és ALU.
- 3 fokozatú futószalag.
- 256 byte-os utasítás-gyorsítótár.
- Korlátozás nélküli szó és hosszúszó adathozzáférés (nem kell adatstruktúra-igazítás).
- 8-szoros multiprocesszálás lehetőség.
- Szélesebb szorzó (32×32 → 64 bit) és osztó (64÷32 → 32 bites hányados és 32 bites maradék) és bitmezőkezelő utasítások
- Új címzési módok: skálázott indexelt, újabb indirekt memóriacímzés, nagyobb eltolások.
- Az olcsóbb 'EC' jelű (pl. MC68EC020) chipek 24 bites címbusszal rendelkeztek.[6]
1987-ben jelent meg, a második generációs 68020 felújított változata. Újítások: belső 256 bájtos utasítás-cache és 256 bájtos adat-cache; chipre integrált MMU; 68881 és a gyorsabb 68882 használható külső matematikai koprocesszorként.
- Elválasztott utasítás- és adat-cache, mindkettő 256 byte-os.
- Chipre integrált MMU (68851).
- Az olcsóbb 'EC' jelű chipekben nincs MMU.
1989-ben jelent meg a Motorola 68040, a harmadik generáció indító tagja. Chipre integrált MMU-t és beépített FPU-t is tartalmazott. Az adat- és az utasításcache méretét 4 KiB-ra növelték, 6 fokozatú futószalag került bele. A beépített FPU nem teljes értékű, bizonyos utasítások hiányoznak belőle, ezeket szoftveresen emulálják (operációs rendszerbe integrált integrált FPSP csomag). A 68040 ugyan jelentősen gyorsabb volt riválisánál, az Intel 486-nál, azonban melegedési problémákkal küzdött, ezért órajelét 40 MHz-en maximálták.
- Az adat- és az utasításcache mérete egyaránt 4 KiB.
- 6 fokozatú futószalag (pipeline).
- Az FPU-ból hiányoznak az IEEE transzcendens függvények lehetőségei.
- Az FPU emuláció a 2E71M és későbbi chip-revíziókban működik.
- Olcsó LC jelű chipek (68LC040): nincs beépített FPU.
- Olcsó EC jelű chipek (68EC040): nincs beépített FPU és MMU.
1994-ben jelent meg a Motorola 68060 (MC68060) processzor, amit a 68040 utódjaként mutattak be. Ez volt a m68k család utolsó tagja. Sok hasonlóságot mutat az Intel Pentium / P5 mikroarchitektúrával: mindkettő sorrendi (in-order) végrehajtású szuperskalár, kettős futószalagot tartalmazó konfiguráció, utasítás-dekóderrel (ami az utasításokat egyszerűbb részutasításokra konvertálja a végrehajtás előtt). A 68060-ban az utasítás- és adatcache méretét 8 KiB-ra növelték, fejlett elágazás-előrejelző (branch prediction) egységgel látták el, belső utasítás-végrehajtó egysége RISC típusú.[7] A 68060 FPU nem futószalagos, részleges, a hiányzó utasításokat emulációval pótolják: ezek miatt a lebegőpontos végrehajtás 3-szoros időigényű a Pentiuméhoz képest, más téren azonban gyorsabb, optimalizált utasításainak köszönhetően. 50-től 75 MHz-ig terjedő órajelű változatai készültek.
- Adat- és az utasításcache mérete: egyaránt 8 KiB
- Órajel: 50, 60, 66, 75 MHz
- Kettős 4 fokozatú futószalag
- Kétciklusos integer szorzóegység
- Elágazás-előrejelzés (branch prediction)
- Kettős utasítás-futószalag
- Utasítások a címszámító egységben (address generation unit, AGU), az ALU előtt két ciklussal szolgáltatják az eredményt.
- Olcsó LC jelű chipek: nincs beépített FPU.
- Olcsó EC jelű chipek: nincs beépített FPU és MMU.
68050 és 68070
[szerkesztés]Nem létezett 68050 számú változat, bár volt ilyen projekt a Motorolánál. A 680x0 sorozatban a páratlan-x számú verziók mindig az előző páros-x verziókban jelentkezett hibák javítására jöttek létre, tehát várható volt, hogy a 68050-ben csökken a 68040-eshez képest az áramfelvétel és hőtermelés, javul a kivételkezelés az FPU-ban, csökken a csíkszélesség, és az utasítások mikrokódja jobb optimalizálást kap. A várakozások közül sok javítás belekerült a 68060-as processzorba, ezek a tervezési célok között szerepeltek. A 68050 tervezését megszakították, olyan okok miatt, mint pl. már tervezés alatt volt a 68060-as processzor; az Intel 80486 nem haladt olyan ütemben, ahogy azt a Motorola elképzelte; vagy akár az, hogy a 68060-as többet ígérő tervezet volt.
A fentiekhez hasonlóan nem volt a 68060-at követő revízió sem, mivel ekkor a Motorola már feladni készült a 68k és 88k processzorsorozatait az újabb PowerPC üzletág érdekében, így 68070-es sohasem készült.
A Motorola páros tízeseket használt a CPU magok főbb kiadásaihoz, így a 68000, 68020, 68040 és 68060 verziókhoz. A 68010 az előző 68000 egy javított változata volt, kisebb változtatásokkal a magban, és hasonlóan a 68030 is egy felújított 68020 volt néhány javított tulajdonsággal; egyik sem hozott jelentős változást a magban.
Létezett ugyan egy 68070 jelű processzor, a 16/32 bites 68000 egy licencelt változata; valamivel lassúbb volt, egyszerű DMA vezérlőt, I²C hostot és chipre integrált soros portot tartalmazott. A Philips CD-i fő processzoraként alkalmazták. Ezt a processzort a Philips gyártotta és nem tartozott a Motorola 680x0 sorozatába.
Az utolsó generáció
[szerkesztés]A negyedik generációs 68060 magán viseli az Intel Pentium P5 architektúra több jellemzőjét. A továbbfejlesztés valószínűleg egy Intel P6 mikroarchitektúrára hasonlító processzort eredményezett volna.
Egyéb változatok
[szerkesztés]A 68000-es processzorsorozat letűnése után a processzorcsaládot bizonyos fokig tovább használták mikrovezérlőkben és beágyazott mikroprocesszor-verziókban. Ezek a felsorolásban az „egyebek” alatt szereplő processzorok: a CPU32, azaz a 68330, a ColdFire, a QUICC és a DragonBall. További felhasználási mód volt a mind a Motorolától, mind a Commodore-tól független gyártó által készített ún. "Amiga gyorsító" (accelerator) kártyákban történő felhasználás is, melyhez újabban a Apollo 68080 processzorokat használják előszeretettel.[8]
CPU32 (683xx)
[szerkesztés]A Freescale 683xx (ill. korábban Motorola 683xx) egy kompatibilis mikrokontroller család, amely a Freescale 68000-alapú magra épül. A családban két magot használnak, az egyik a 68EC000, a másik a CPU32.
A CPU32 utasításkészlete hasonlít a 68020 utasításkészletére, de hiányoznak belőle a "bit field" (BFxxx) utasítások, a CALLM, RTM, CAS, CAS2, cpxxx (koprocesszor-) és PACK, UNPK BCD utasítások; ezek helyett a processzor trap utasításokat hajt végre, lehetővé téve az emulációt.[9] Speciális kiegészítő utasításokat is tartalmaz. A mag teljesen statikus, azaz képes változó órajelen működni, a teljes leállástól a maximális órajelig (25 vagy 33 MHz); tervezési szempontja a minimális tranzisztorszám melletti maximális teljesítmény volt. A mag mellett egyéb kiegészítő egységeket is tartalmazhat, akár hálózati interfész-processzort v. Ethernet-vezérlőt, az egylapkás rendszerekhez (SoC) hasonlóan.
Az 1995-ben megjelent Motorola/Freescale Semiconductor DragonBall avagy MC68328 egy 68000-alapú 32 bites mikrovezérlő, ill. minden szükséges elemet tartalmazó egychipes számítógép. Adat- és címbusza 32 bites, bár a címbuszt egyes modellekben 24 bitesre korlátozták. Kis fogyasztású beágyazott rendszerekbe és PDA-kba szánták, pl. a korai Palm PDA-k ilyen chipekre épültek, míg a Palm OS 5-től kezdve kiszorította azokat az ARM-alapú Texas és Intel processzorok támogatása. Nem támogatja a 68020+ utasítások többségét. FPU-t nem, és csak minimális képességű MMU-t tartalmaz. Korai változataiban nem volt cache, a későbbi modellekbe kisméretű utasítás- és adatcache-t is integráltak.
Az 1994-ben indult Freescale ColdFire processzorcsalád alapjait szintén a Motorola 68000 processzorcsalád ill. architektúra képezi. A ColdFire chipek beágyazott rendszerekhez készülő mikrovezérlők, tárgykód szinten nem kompatibilisek a 68000 processzorral, a gyártó szerint a ColdFire utasításkészlet „assembly forrás” szintjén kompatibilis azzal. Az eredeti m68k utasításkészlettel összehasonlítva hiányzik belőle pl. a BCD támogatás, több ritkábban használt utasítás és sok utasítás kevesebb címzési módot támogat. A lebegőpontos adatformátum 64 bites, nem pedig 80, mint a 68881/68882 koprocesszoroknál. Az utasítások 16, 32, vagy 48 bitesek lehetnek. A ColdFire architektúrája erős RISC vonásokat mutat, amit a Motorola „változó hosszúságú RISC”-nek (variable-length RISC) nevezett. A processzorok eleinte kis teljesítményűek voltak: az MCF5102 16,67 – 33 MHz órajelű processzor 20 MHz-en 22 MIPS teljesítményt produkált,[10] ez azonban mára megváltozott, a chipek több száz MHz-es órajeleken működnek és belső szerkezetük is sokkal nagyobb teljesítményt biztosít (pl. a 4. generációtól kezdve szuperskalár felépítéssel rendelkeznek). Kiegészítők változatos készletével kaphatók, az architektúrához változatos fejlesztőeszközök érhetők el.
Apollo 68080
[szerkesztés]Az Apollo által gyártott 68080-as processzor utasításkészlete 100%-ban kompatibilis a Motorola 68000-as processzorcsalád tagjaival, ugyanakkor számos tervezésbeli hiba, hiányosság javításra került és az évek során megjelent újításokat, fejlesztéseket is tartalmazza. A processzor FPGA tokozást kapott, így ennek az architektúrának minden előnyével rendelkezik.[11] A Motorola által gyártott utolsó 68060-as processzor alkalmazásai is gond nélkül futnak rajta. Felhasználása főként a szintén az Apollo által kifejlesztett Vampire gyorsító kártyákban történik, melyek Amiga 500/600/2000/1200 típusokhoz készülnek és pl. egy Amiga 500 esetén a meglévő 68000 processzor eltávolítása után, annak foglalatába csatlakoztathatók.[8] Az Apollo 68080 néhány alapvető jellemzője: Utasítás-futószalag, szuperskalár, elágazásbecslés, optimalizált gyorsítótár felhasználás, beépített FPU, 64bit támogatás.[12]
Architektúra
[szerkesztés]A 68000-es család felépítése nagymértékben hasonlít a PDP-11 és VAX architektúrákhoz, hasonlóságok pl. az utasításkészlet ortogonalitása és a címzési módok hasonló volta. Egy jelentős eltérés az általános célú regiszterek adat- és címregiszterekre való bontása a 68000-nél.
Az utasításkészlet ortogonalitása lehetővé teszi az utasítások és az operandusok tetszőleges kombinációját, ellentétben pl. az Intel korabeli (8080) és későbbi (x86 család) processzorainál. Ez a tulajdonság megkönnyíti az emberi programozást és egyszerűbbé teszi a kódgenerátorok írását a fordítóprogramokhoz.
A 68000-es utasításkészlet nagy általánosságban a következő csoportokra osztható:
- Adatmozgató utasítás: MOVE – univerzális adatmozgatás, minden adattípus szinte minden címzési móddal
- Veremkezelés: ezt az adatmozgató utasítások végzik (nincs pl. "push", "pop"), pl: MOVE.L D0,-(A7) / kivéve a PEA utasítást (push effective address)
- Aritmetikai utasítások: ADD, SUB, CMP, ADDX, SUBX, MULS, MULU, DIVS, DIVU, NEG, NEGX, EXT, CLR, TST
- Bitmozgató/léptető utasítások: logikai, aritmetikai léptetések, körkörös léptetés (rotáció, ROR, ROL, ROXL, ROXR), jobbra v. balra
- Logikai műveletek: AND, OR, NOT, EOR
- Típuskonverziós utasítások: byte–word oda-vissza konverzió
- Feltétlen és feltételes elágazások: BRA, BCS, BEQ, BNE, BHI, BLO, BMI, BPL stb.
- Szubrutinhívás és visszatérés: BSR, RTS
- Megszakításkezelő utasítások
- Kivételkezelés
- Nincs az x86 architektúráéhoz hasonló CPUID utasítás, amely a CPU / MMU / FPU jelenlétét és típusát mutatja.
A 68000 processzor architektúráját részletesebben tárgyalja a cikk.
A versenytársak
[szerkesztés]Desktop piac
[szerkesztés]Az 1980-as években és az 1990-es évek elején a 68000-est széles körben használták asztali gépekben, ekkor főleg az Intel x86-os architektúrával versengett, amely mára néhány kisebb kivételtől eltekintve (mint a Transmeta VLIW processzorai) szinte egyeduralkodóvá vált az asztali PC piacon. Az első generációs 68000 CPU-k a 16 bites 8086/8088 és 80286 processzorokkal versenyeztek. A második generáció versenytársa a 80386, az első 32 bites x86 processzor volt, a harmadik generációnak a 80486.
A negyedik generáció a Pentium sorozat P5 felépítésével versenyzett, de a negyedik generációs (68060-as) chipeket már messze nem használták olyan széles körben, mint elődeiket, mivel a korábbi 68k piac ekkorra szinte teljesen megszűnt, ahogy az Atari vagy a Next; vagy éppen újabb felépítésre váltott, ahogy a Macintosh és Amiga PowerPC platformra, a Sun SPARC, az SGI pedig MIPS platformra.
Beágyazott rendszerek
[szerkesztés]Jelenleg több tucat sikeres processzor-architektúra létezik a beágyazott rendszerek piacán. Néhány ezek közül a 68000-nél egyszerűbb, kisebb és olcsóbb mikrovezérlő, azonban bonyolultabbak is akadnak, amelyek összetett programok futtatására képesek. A beágyazott 68k alapú kontrollerek kihívói többek között a PowerPC, ARM, MIPS és SuperH architektúrákon alapuló processzorok.
Felhasználás
[szerkesztés]A 68000 processzorcsaládot eszközök sokaságában használták, a csúcsteljesítményű Texas Instruments számológépektől (mint pl. a TI-89, TI-92, Voyage 200 típusok) kezdve a Palm Pilot sorozat Palm OS 1.x-től 4.x verziót használó gépeiig, vagy a Space Shuttle sugárzásvédett kritikus vezérlőrendszereiig bezárólag. Jelen voltak az asztali számítógépes felhasználás terén is, pl. Apple Macintosh, Commodore Amiga, Sinclair QL, Atari ST és egyéb gépekben. A 68000-es volt 1980-ban a Sun Microsystems, a NeXT és a Silicon Graphics Unix munkaállomásainak és szervereinek processzora. Létezett CP/M verzió is a 68000-hez, a CP/M-68K, ám ez szinte észrevétlen maradt.
Felhasználásra került lézernyomtatókban, mivel az Adobe PostScript-értelmezőjének első verziói 68000 alapúak voltak; használták az Apple LaserWriter nyomtatók különböző verzióiban és Linotronic fényszedőgépekben. Később az Adobe inkább a RISC processzorokat kezdte preferálni.
Napjainkban az m68k processzorokat használó gépek elértek életciklusuk végére (mint pl. az Atari), vagy más processzorokat használnak (ilyenek pl. a Macintosh, Amiga, Sun és SGI). Ezek a gépek a legnagyobb piaci részesedésüket az 1980-as években érték el, így az operációs rendszerek gyártói nem támogatják ezt a processzortípust. A Linux, NetBSD és OpenBSD rendszerek azonban továbbra is tartalmazzák a 68000 processzortámogatást.
A m68k processzorok videójáték-konzolokban is megtalálhatók, pl. a Sega Mega Drive/Sega Genesis és SNK Neo Geo konzolok CPU-jaként, vagy Sega Saturn konzolokban audio- és I/O-processzor szerepében, vagy az Atari Jaguar konzolban vegyes szerepkörben. Játéktermi játékgép-alaplapok is gyakran 68000-alapúak, pl. a Capcom, SNK és Sega gyártott ilyeneket.
A 68000-ből származtatott mikrovezérlőket használnak az autóiparban, pl. CPU32 és ColdFire mikrovezérlők milliói találhatók autókban motorvezérlőként beépítve.
Összegzés
[szerkeszté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-munkaállomásokig megtalálhatók voltak. Könnyű programozhatósága, rugalmas felépítése kedveltté tette a tervezők között. Bár a fejlesztés élvonalát ma már más processzorok képviselik, asztali 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.
Jegyzetek
[szerkesztés]- ↑ Motorola 68008 microprocessor family (angol nyelven). cpu-world.com, 2003-2010. (Hozzáférés: 2012)
- ↑ CPU World
- ↑ Motorola 68010 (MC68010) family (angol nyelven). cpu-world.com, 2003-2010. (Hozzáférés: 2012)
- ↑ a 68010 1982-es és a 68020 1984-es megjelenése között
- ↑ Motorola 68020 (angol nyelven). cpu-collection.de, 2003. (Hozzáférés: 2012)
- ↑ http://www.freescale.com/files/32bit/doc/ref_manual/MC68020UM.pdf Archiválva 2011. augusztus 6-i dátummal a Wayback Machine-ben MC68020 MC68EC020 MICROPROCESSORS USER’S MANUAL, Freescale Semiconductor, Inc., pdf
- ↑ http://www.physics.ucdavis.edu/Classes/Physics116/68060d.pdf Archiválva 2012. december 7-i dátummal a Wayback Machine-ben, pg. 2.; "Fixed format instructions are dispatched to dual four-stage pipelined RISC operand execution engines ..."
- ↑ a b Commodore Amiga 500 with 68080 is More than meets the Eye (angol nyelven). amitopia.com , 2018. március 3. [2019. január 21-i dátummal az eredetiből archiválva]. (Hozzáférés: 2019. december 1.)
- ↑ MOTOROLA, INC., 1990, 1996: CPU32 Reference Manual (angol nyelven) (pdf) pp. 1-4. Freescale, 1997. február 4. [2015. szeptember 24-i dátummal az eredetiből archiválva]. (Hozzáférés: 2012)
- ↑ Archivált másolat. [2016. március 10-i dátummal az eredetiből archiválva]. (Hozzáférés: 2012. augusztus 25.)
- ↑ Apollo 68080 overview (angol nyelven). apollo-core.com . (Hozzáférés: 2019. december 1.)
- ↑ Apollo 68080 features (angol nyelven). apollo-core.com . (Hozzáférés: 2019. december 1.)
Fordítás
[szerkesztés]- Ez a szócikk részben vagy egészben a Motorola 68000 family című angol Wikipédia-szócikk ezen változatának fordításán alapul. Az eredeti cikk szerkesztőit annak laptörténete sorolja fel. Ez a jelzés csupán a megfogalmazás eredetét és a szerzői jogokat jelzi, nem szolgál a cikkben szereplő információk forrásmegjelöléseként.
Források
[szerkesztés]- Howe, Dennis, ed. (1983). Free On-Line Dictionary of Computing. Imperial College, London. http://foldoc.org. Hozzáférés ideje: September 4, 2007.