Intel 8087

lebegőpontos koprocesszor

Az 1980-ban bejelentett Intel 8087 volt az első x87 lebegőpontos koprocesszor (társprocesszor) az Intel 8086 processzorcsaládhoz.[3][4]

Intel 8087
Intel 8087 matematikai koprocesszor
Intel 8087 matematikai koprocesszor

Gyártás1980 –
TervezőIntel
GyártóIntel, AMD,[1] Cyrix[2]
Max CPU órajel4 MHz – 10 MHz
FSB sebességek4 MHz – 10 MHz
Gyártás technológia méret3 μm
Utasításkészletx86-16, x87
Magok száma1
L1 gyorsítótárnincs
Tokozás40-pin DIP
Tranzisztorok száma45 000
Alkalmazásaasztali
ElődIntel 8231
UtódIntel 80287
A Wikimédia Commons tartalmaz Intel 8087 témájú médiaállományokat.

A 8087-es célja a lebegőpontos számítások, nevezetesen a lebegőpontos összeadás, kivonás, szorzás, osztás és négyzetgyökvonás műveletek felgyorsítása volt. Ezeken felül olyan transzcendens függvények számítására is képes volt, mint az exponenciális, logaritmikus és trigonometrikus függvények.

A társprocesszor használatával, az adott alkalmazástól függően 20%-tól akár 500% fölötti teljesítménynövekedés érhető el. A 8087-es teljesítménye kb. 50 000 FLOPS (lebegőpontos művelet másodpercenként)[3] 2,4 wattos fogyasztás mellett.[4] A koprocesszor csak a lebegőpontos ill. matematikai (számtani, algebrai) műveleteket gyorsítja, azok az alkalmazások, amelyek nem használnak ilyen számításokat, pl. a szövegszerkesztők, nem gyorsulnak fel tőle. A koprocesszor kis mértékben növelte a gép fogyasztását és árát (kb. 100 – 150 USD, a 90-es évek elején[5]).

Az eladásokat nagyban növelte az a tény, hogy az IBM koprocesszor-foglalattal ellátott IBM PC alaplapokat kezdett gyártani. A 8087-es kifejlesztése vezetett az IEEE 754-1985 szabványhoz, amely a lebegőpontos számábrázolást és számításokat definiálja. A későbbi fejlődés eredményeképpen a modernebb (486DX utáni) Intel processzorok már beépítve tartalmazzák a lebegőpontos egységet.

Tervezés és fejlesztés szerkesztés

Az Intel már korábban is gyártotta az Intel 8231 jelű aritmetikai feldolgozóegységet (Arithmetic Processing Unit) és az Intel 8232 jelű lebegőpontos processzort (Floating Point Processor). Ezeket az Intel 8080 és hasonló felépítésű, 8 bites adatsínnel rendelkező processzorokkal történő használatra tervezték. Ezek az áramkörök programozható be- és kimeneti rendszeren keresztül, vagy DMA-vezérlőn keresztül csatlakoztak és kommunikáltak a főrendszerrel.[6]

A 8087-est 1980-ban bocsátották ki, és 45 000 tranzisztort tartalmazott. Az áramkör 3 μm-es kiürítéses terhelésű (depletion load) HMOS technológiával készült. A 8087-es áramkörök gyártása Malajziában történt.[4]

A koprocesszor kb. 60 új lebegőpontos utasítást vezetett be, ezek jelölései (mnemonikjai) "F" betűvel kezdődnek az assembly nyelvekben, jelezve, hogy a lebegőpontos (floating point) koprocesszor utasításai, és megkülönböztetve ezeket a többi 8086-os (aritmetikai) utasítástól. Például, az egészértékű ADD/MUL/CMP utasításokhoz hasonlóan, a 8087 lehetővé teszi a lebegőpontos FADD/FMUL/FCMP utasítások használatát. Az összes új utasítás gépi kódja a bináris "0001 1011" (a tízes számrendszerben 27) bitmintával kezdődik, ami megfelel az ESC karakter ASCII kódjának, emiatt ezekre az utasításkódokra gyakran escape-kódokként hivatkoznak.

A koprocesszor használata nem átlátszó a felhasználói programok számára, azokat külön fel kell készíteni a lebegőpontos utasítások használatára, esetleg már a forráskódban, vagy magasabb szintű nyelveknél a fordítás során. Futási időben a szoftver képes detektálni a koprocesszor meglétét és használni a koprocesszor-utasításokat, egyébként pedig a koprocesszor szoftveresen emulálható.[5]

A regiszterek szerkesztés

 
A 8087 mikroarchitektúrájának egyszerű vázlata

Az x87-es processzorcsalád nem használ közvetlenül hozzáférhető processzor-regisztereket, mint amilyenek pl. az x86-os processzoroknál találhatóak; ehelyett az x87 regiszterei egy 8-szintű veremtár-struktúrát (stack) alkotnak[7] és a regiszterek elnevezése st0st7, ahol az st0 jelöli a verem tetejét. Az x87 utasítások behelyezik az értékeket a verembe (push), a műveleteket a veremtár elemeivel végzik, majd az eredményt kiemelik abból (pop). Bár a FADD, FMUL, FCMP és hasonló dinamikus műveletek beleértett módon használhatját a felső st0 és st1 regisztereket, használhatók még explicit memória- vagy regisztercímzéssel is, ahol az egyik operandus a memóriában vagy egy regiszterben van; az st0 regiszter ekkor akkumulátorként működik (tehát mint első operandus és eredmény egyben), emellett felcserélhető tetszőleges másik veremregiszterrel (az FXCH st# utasítással). Ezáltal az x87-es verem lehetővé teszi hét szabadon elérhető regiszter és egy akkumulátor használatát. Ez nagyon jól alkalmazható a szuperskalár x86 processzoroknál, így az 1993-as és későbbi Pentiumoknál, ahol ezeket a cserélő utasításokat egészen nulla órajel alatt végrehajthatóvá optimalizálták.

Az IEEE lebegőpontos szabvány szerkesztés

Az Intel a 8087 tervezésekor a jövőbeni kialakításokban használható szabványos lebegőpontos formátumot igyekezett kialakítani. A 8087 abból a szempontból is nagy jelentőségű fejlesztés, hogy ez szolgált az IEEE 754 lebegőpontos szabvány alapjául. A 8087-esben nem valósították meg teljes mértékben a végleges IEEE 754 szabvány minden részletét, mivel a szabvány csak 1985-ben készült el, de az Intel 80387-es koprocesszorban már igen. A 8087 két alapvető adattípust kínált, egy 32 bites egyszeres pontosságú (single precision) és egy 64 bites kétszeres pontosságú (double precision) adatformátumot, valamint egy kiegészítő 80 bites kiterjesztett pontosságú (extended precision) belső átmeneti formátumot (amit azonban ki is lehet írni a memóriába), ezzel növelve a pontosságot a nagy és összetett számításokban. Ezen felül a 8087 még rendelkezett egy 80 bites 18 számjegyet tartalmazó csomagolt BCD számábrázzolással is, valamint 16-, 32- és 64 bites egész adattípusokkal.[7]

A koprocesszor-interfész szerkesztés

A 8087-es abban is különbözött a korábbi Intel-féle koprocesszoroktól, hogy közvetlenül csatlakozott a cím- és adatsínekhez. A 8088/86 processzor az utasításfeldolgozás folyamán figyeli a "11011" szekvenciával kezdődő utasításokat, és ha ilyet talál, akkor átadja a vezérlést a koprocesszornak. A koprocesszor visszaadja a vezérlést, amint végetért a koprocesszor-utasítások sorozata. Itt egy rejtett hibalehetőség adódik, hogyha a koprocesszor-utasítást nem képes értelmezni a koprocesszor (pl. az nem létező kód). Az Intel a későbbi koprocesszorokban úgy javította ezt a helyzetet, hogy a koprocesszorok másként csatlakoznak a sínhez és a főprocesszor adja nekik az utasításokat. Ez megnöveli a végrehajtási időt, de a lehetséges összeomlás elkerülhető, mert a főprocesszor figyelmen kívül hagyhatja az utasítást, ha azt a koprocesszor nem fogadja el. Maga a 8087-es képes érzékelni, hogy 8088-as vagy 8086-os processzorhoz csatlakozik, az adatbusz megfigyelésével a reset ciklus ideje alatt.

Modellek és alternatív gyártók szerkesztés

 
Az Intel 8087 matematikai koprocesszor kivezetései

Az Intel 8087 koprocesszorokat két változatban gyártották: oldalcsatlakozós kerámia DIP tokozásban (CerDIP), valamint hermetikus DIP (PDIP) tokozással; a változatokat a következő hőmérsékleti viszonyok közötti működésre tervezték:

  • C, D, QC és QD prefixek: 0 °C – +70 °C (kereskedelmi felhasználás).
  • LC, LD, TC és TD prefixek: -40 – +85 °C (ipari felhasználás).
  • MC és MD prefixek: -55 °C – +125 °C (katonai felhasználás).

A 8087-es összes modellje 40-kivezetéses DIP tokozásban készült és 5 volt feszültségen működött, fogyasztása kb. 2,4 watt. Az Intel későbbi koprocesszoraival ellentétben, a 8087-esnek a főprocesszorral megegyező órajelen kell működnie.[5] A modellszámok utótagjai különböző órajeleket jelölnek:

8087 órajelek[4][7]
modellszám órajel
Intel 8087 5 MHz
Intel 8087-1 10 MHz
Intel 8087-2 8 MHz
Intel 8087-3 4 MHz
Intel 8087-6 6 MHz

Az alaptermék gyártási jogát alternatív szállítóként megkapta az AMD és a Cyrix is, így ezek AMD 8087[1] és Cyrix 8087[2] néven forgalmazták ezeket. A 8087-es klónját a Szovjetunióban is gyártották,[8] КМ1810ВМ87 (KM1810VM87) jelöléssel.

Utódai szerkesztés

A 8088 és 8086 processzorokhoz hasonlóan a 8087-est is újabb modellek váltották fel. Az Intel következő modelljei a 80287, 80387, és a 80187 voltak. A 80487 valójában egy teljes kiépítésű i486DX csip volt egy újabb kivezetéssel ellátva. A 80486DX, Pentium és későbbi processzorok már a processzormagba integrált, beépített lebegőpontos funkcionalitással rendelkeztek, ezeknél már nem beszélhetünk koprocesszorról.

Jegyzetek szerkesztés

  1. a b Shvets, Gennadiy: AMD 8087 floating-point unit. CPU World, 2011. október 8. (Hozzáférés: 2011. december 1.)
  2. a b Shvets, Gennadiy: Cyrix 8087 floating-point unit. CPU World, 2011. október 8. (Hozzáférés: 2011. december 1.)
  3. a b 8087. Coprocessor Dot Info, 2007. [2011. szeptember 30-i dátummal az eredetiből archiválva]. (Hozzáférés: 2011. december 1.)
  4. a b c d Intel FPU. cpu-collection.de, 2011. (Hozzáférés: 2011. december 1.)
  5. a b c Scott Mueller, Upgrading and repairing PCs, second edition, Que Books, 1992 ISBN 0-88022-856-3, pages 395-403
  6. Intel Component Data Catalog 1980, Intel catalog no. C-864/280/150K/CP, pages 8-21, 8-28
  7. a b c Shvets, Gennadiy: Intel 8087 family. CPU World, 2011. október 8. (Hozzáférés: 2011. december 1.)
  8. Frolov, Sergej: USSR-made i8087 clone. CPU World, 2006. október 10. (Hozzáférés: 2011. december 1.)

Fordítás szerkesztés

Ez a szócikk részben vagy egészben az Intel 8087 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