Motorola 68881

lebegőpontos koprocesszor

A Motorola 68881 és Motorola 68882lebegő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]

A Motorola 68881 FPU

Áttekintés szerkesztés

 
A Motorola 68882 FPU

A 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és

A 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és

A 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és

Nevezetesebb, 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és

68881 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

  1. Clayton Huntsman, Duane Cawthron: The MC68881 Floating-point Coprocessor (angol nyelven). ACM, 1983. november 1. (Hozzáférés: 2013)
  2. 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."
  3. Joel Boney: Goals and tradeoffs in the design of the MC68881 floating point coprocessor (angol nyelven). ACM, 1984. (Hozzáférés: 2013)
  4. a b MC68881 / Technical Summary / HCMOS Floating-Point Coprocessor (angol nyelven) (pdf) pp. 1–49. Motorola. (Hozzáférés: 2013)
  5. a b Gennadiy Shvets: Motorola 68881 FPU family (angol nyelven). CPU-World, 2003, 2010. (Hozzáférés: 2013)

Fordítás szerkesztés

Ez 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

További információk szerkesztés

Kapcsolódó szócikkek szerkesztés