Motorola 68881
A Motorola 68881 és Motorola 68882 – lebegőpontos koprocesszor (FPU) áramkörök, amelyeket általában Motorola 68020 vagy Motorola 68030 CPU-kat alapuló rendszerekben használtak a lebegőpontos számítások felgyorsítására. Egy ilyen áramkörrel való bővítés költséges volt, de az egység hozzáadása jelentős mértékben felgyorsította a lebegőpontos számításokat, amiket ennek hiányában szoftveresen oldottak meg, aminek a sebessége messze elmarad a hardver-úton valő végrehajtástól. A lebegőpontos számítások gyorsításának főleg a tudományos és mérnöki célú szoftverekben volt nagy jelentősége. A 68881, 68882 koprocesszorok kb. 1983 végén jelentek meg,[1][2] tervezőik Clayton Huntsman, Duane Cawthron és John Boney voltak a Motorolánál.[3]
Áttekintés
szerkesztésA 68020 és 68030 CPU-kat kifejezetten a külső 68881-es csippel való együttműködést szem előtt tartva tervezték. Utasításkészletükben egy utasításkód-csoport, az "F sorozat" – tehát azok az utasítások, amelynek kódja hexadecimális "F"-fel kezdődik – "csapda"-ként lett megvalósítva, tehát ha a processzorhoz egy ilyen utasításkód kerül végrehajtásra, akkor a processzor megszakítást generál, amely átadja a vezérlést az operációs rendszer valamelyik kiszolgálórutinjának. Ha a rendszerben jelen van egy 68881-es egység, akkor a CPU lehetővé teszi, hogy az hajtsa végre a szóban forgó utasítást. Ha nem, akkor az operációs rendszer meghív egy FPU-emulátort, amely a 68020 egészértékű (nem lebegőpontos) utasításain alapuló szoftverrel hajtja végre az utasítást, vagy visszaad egy hibakódot a programnak.
Felépítés
szerkesztésA 68881-es teljes mértékben megfelel az IEEE 754 lebegőpontos szabványnak, az előírásokat és javaslatokat is beleértve.[4]
A 68881-es nyolc 80 bites (belsőleg 96 bit) adatregiszterrel rendelkezik. Hét különböző számábrázolási mód – adattípus – használatát engedi meg, ezek a következők: egészek: bájt, szó (16 bites), hosszúszó (32 bites), valós számok: 32 bites egyszeres pontosságú (single-precision), 64 bites kétszeres pontosságú (double-precision) és kiterjesztett pontosságú (extended-precision), pakolt binárisan kódolt decimális (BCD) string számok. A különböző formátumban található számokat betöltéskor egységesen a belső kiterjesztett pontosságú formátumára konvertálja és ebben a belső formátumban végzi el a műveleteket.[5] A kiterjesztett pontosságú ábrázolást az IEEE 754 szabvány nem definiálja bit-szintre lebontva, így ebben a koprocesszorban a kiterjesztett pontosságú számok 80 bitesek, a koprocesszor memóriaformátuma azonban 96 bites (3 hosszúszó), az extra 16 bitet a lebegőpontos struktúrák memóriaigazításához használja fel és fenntartja a jövőbeli kiterjesztés számára.[4]
Az egység speciálisan a lebegőpontos matematikai műveletek elvégzésére lett tervezve, és nem általános célú CPU. Például ha egy utasításban bármilyen címszámításra van szükség, akkor azt a CPU végzi el, mielőtt a 68881 megkapná a vezérlést.
A koprocesszor memóriába leképzett módon csatlakozik a főprocesszorhoz, így nem függ annak órajelétől.[5] A CPU/FPU páros úgy van tervezve, hogy a két processzor egyidőben működjön. Amikor a fő processzor egy 68881-es utasítással találkozik, átadja az FPU-nak az utasítást és az összes operandust, ezután az FPU továbbengedi a CPU-t, tehát a CPU elkezdi végrehajtani a következő utasítást.
68882
szerkesztésA 68882 nem más, mint egy javított felépítésű 68881-es verzió. Ebbe jobb utasítás-futószalag került, és magasabb órajelű modellek is készültek. Utasításkészlete pontosan ugyanaz, mint a 68881-nek. A Motorola marketinganyagaiban azt állítja, hogy a 68882-es bizonyos utasításokat 40%-kal gyorsabban végez el, mint az azonos órajelű 68881-es, de ez nem tükrözi a tipikus teljesítményt, ami jóval szerényebb növekedést jelent, ahogy az alábbi táblázatokon látható. A 68882 lábkompatibilis a 68881-essel és közvetlenül felválthatja azt a legtöbb rendszerben.
Felhasználás
szerkesztésNevezetesebb, 68881 vagy 68882 FPU-t tartalmazó számítógépek a következők: a Sun Microsystems Sun 3 modellje, az Apple Computer Macintosh II sorozata, a NeXT Computer, bizonyos modellek az Atari gépcsaládból (Mega STE, TT és Falcon030) és a Commodore Amiga 3000. Néhány harmadik féltől származó Amiga és Atari termékben is előfordul 68881 vagy 68882, ilyen pl. a memóriába leképzett perifériaegység a Motorola 68000-hez.
A később megjelent Motorola 68040 processzor már beépítve tartalmazta a lebegőpontos egységet. A 68881 legtöbb lebegőpontos utasítása és számábrázolási módja ebben hardveresen támogatott, de néhány utasítás nem volt hardveresen megvalósítva, ezekhez szoftveres emulációra volt szükség: a 68040 lebegőpontos egységéből hiányoztak a transzcendentális függvények, amiket a Motorola lebegőpontos támogatócsomagjában (floating point support package, FPSP) lévő szoftverrel lehetett végezni.
Válogatott statisztika
szerkesztés68881
szerkesztés- 155 000 tranzisztor a lapkán
- 16 MHz verzió, teljesítménye 160 kFLOPS
- 20 MHz verzió, teljesítménye 192 kFLOPS
- 25 MHz verzió, teljesítménye 240 kFLOPS
68882
szerkesztés- 176 000 tranzisztor a lapkán
- 25 MHz verzió, teljesítménye 264 kFLOPS
- 33 MHz verzió, teljesítménye 352 kFLOPS
- 40 MHz verzió, teljesítménye 422 kFLOPS
- 50 MHz verzió, teljesítménye 528 kFLOPS
68040
szerkesztés- 25 MHz FPU, teljesítménye 3,500 MFLOPS
- 33 MHz FPU, teljesítménye 4,662 MFLOPS
- 40 MHz FPU, teljesítménye 5,600 MFLOPS
A statisztikák forrása a comp.sys.m68k FAQ. Nincs idézve a 16 MHz-es és 20 MHz-es 68882-re vonatkozó statisztika, bár tényleg készültek ilyen csipek.
Jegyzetek
szerkesztés- ↑ Clayton Huntsman, Duane Cawthron: The MC68881 Floating-point Coprocessor (angol nyelven). ACM, 1983. november 1. (Hozzáférés: 2013)
- ↑ An Interview with the Old Man of Floating-Point (angol nyelven). EECS Berkeley, 1998. február 20. (Hozzáférés: 2013) "... Motorola was represented by Joel Boney who then led their project in Austin, Texas, to build what later ( 1984 ) became the MC68881/2 coprocessors."
- ↑ Joel Boney: Goals and tradeoffs in the design of the MC68881 floating point coprocessor (angol nyelven). ACM, 1984. (Hozzáférés: 2013)
- ↑ a b MC68881 / Technical Summary / HCMOS Floating-Point Coprocessor (angol nyelven) (pdf) pp. 1–49. Motorola. (Hozzáférés: 2013)
- ↑ a b Gennadiy Shvets: Motorola 68881 FPU family (angol nyelven). CPU-World, 2003, 2010. (Hozzáférés: 2013)
Fordítás
szerkesztésEz a szócikk részben vagy egészben a Motorola 68881 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- freescale.com - Motorola MC68000 Family Programmer's Reference Manual Archiválva 2015. szeptember 24-i dátummal a Wayback Machine-ben
- faqs.org - comp.sys.m68k FAQ
- MC68881/MC68882 Floating-point Coprocessor User's Manual (380 oldalas kézikönyv, Motorola, 1987)