Intel 8087 | |
---|---|
procesor | |
Matematický koprocesor Intel 8087 | |
Výroba | 1980 |
Vývojář | Intel |
Výrobci | |
Frekvence CPU | 4-10 MHz |
Produkční technologie | 3 um (3 um) um |
Instrukční sady | x86 , x87 |
Počet jader | jeden |
Konektor | |
Nuclei | |
Intel 823180287 |
Intel 8087 je první matematický koprocesor pro řadu procesorů 8086 , který implementuje architekturu instrukční sady x87 a byl vydán v roce 1980 společností Intel [3] [4] .
Koprocesor 8087 byl navržen tak, aby zlepšil výkon s pohyblivou řádovou čárkou urychlením operací, jako je sčítání , odčítání , dělení a odmocnina . Dokázal také vypočítat transcendentální funkce , jako je exponenciální funkce , logaritmy a goniometrické funkce . Zisk výkonu z instalace koprocesoru se pohyboval od 20 % do 500 % v závislosti na specifikách úloh. Intel 8087 měl výkon asi 50 000 Flops [3] a spotřeboval přibližně 2,4 wattu [4] . Přínos z nastavení 8087 se projevil pouze při provádění matematických operací. Počítače používané například pro zpracování textu netěžily z dodatečných nákladů (asi 150 $ [5] ) a zvýšené spotřeby energie.
S vydáním IBM PC IBM , který měl patici pro instalaci koprocesoru, prodeje 8087 výrazně vzrostly. Příchod koprocesoru vedl k vytvoření standardu IEEE 754-1985 pro aritmetiku s pohyblivou řádovou čárkou . Pozdější procesory Intel, počínaje 80486 , mají vestavěný aritmetický koprocesor (s výjimkou 486SX - pro ně byl vydán koprocesor 487SX , který nebylo možné nainstalovat).
Dříve Intel vyráběl čipy 8231 „Arithmetic Processor“ a 8232 „Floating Point Processor“. Byly navrženy pro použití s procesorem 8080 nebo ekvivalentním a používaly 8bitovou datovou sběrnici. Hlavní procesor s nimi interagoval prostřednictvím I/O instrukcí nebo prostřednictvím řadiče DMA [6] .
První kroky ve vývoji 8087 podnikl Bill Pohlman , projektový manažer, který dohlížel na vývoj mikroprocesoru 8086 ve společnosti Intel. Poskytoval podporu pro ještě nevyvinutý matematický koprocesor z 8086.
V roce 1977 dostal Polman zelenou k vývoji matematického koprocesoru 8087. Bruce Ravenel byl jmenován architektem a John Palmer byl najat jako asistent architekta a projektový matematik . Společně vyvinuli inovativní architekturu, která zahrnovala 80bitové reálné číslo s 64bitovou mantisou a 16bitovým exponentem pro mezivýpočty, zásobníkový koprocesor s osmi 80bitovými registry a sadu instrukcí, která poskytla výpočet. velkého množství matematických funkcí. 80bitový formát vyřešil řadu známých problémů při organizaci výpočtů a vytváření softwaru pro numerické zpracování: při práci s 64bitovými reálnými operandy se výrazně snížil vliv zaokrouhlovacích chyb a přesnost výpočtů byla zajištěna pro 18- číslice BCD a 64bitové celočíselné operandy. Palmer poznamenal, že publikace Williama Kahana o výpočtech s pohyblivou řádovou čárkou [7] měly velký vliv na projekt .
Vedení Intelu v Santa Claře bylo k projektu 8087 vlažné kvůli jeho vysokým nárokům. Nakonec byl vývoj převeden do izraelské pobočky společnosti a Rafi Nef byl jmenován vedoucím odpovědným za výrobu mikroobvodu . Palmer, Revenel a Nef získali patent na architekturu koprocesoru [8] . Robert Koehler a John Bayliss získali patent na způsob přenosu instrukcí s určitým bitovým vzorem do koprocesoru [ 9] .
Koprocesor 8087 byl vydán v roce 1980 a obsahoval 45 000 tranzistorů. Byl vyroben technologií procesu 3 mikronů. Intel 8087 byl vyroben v Malajsii [4] .
Bylo zavedeno více než 60 nových instrukcí pro koprocesor , jehož název začínal na „F“, aby je bylo možné odlišit od celočíselných instrukcí Intel 8086. Například analogy instrukcí ADD/MUL/CMP v 8087 vypadal jako FADD / FMUL / FCOM. Binární kódování pro všechny nové instrukce začínalo bitovým vzorem 11011. Tento vzor odpovídá číslu 27 v desítkové soustavě, což je stejné jako ASCII kód znaku ESC, takže se mu někdy říkalo Escape kód . Kód instrukce zabírá 6 bitů ve dvou bytech počínaje zadanou kombinací:
┌────────────────────────────── │ 1101 1xxx │ mmxx xrrr │ └────────────┴─────────────┘Bitové hodnoty:
x - kód instrukce m - režim adresování r - registr operandů nebo sada registrů zapojených do výpočtu offsetu [10]Aplikace musely být speciálně napsány, aby používaly instrukce s pohyblivou řádovou čárkou. Při spouštění musel program detekovat přítomnost koprocesoru a použít jej pro tyto instrukce; jinak musely být instrukce koprocesoru emulovány softwarově [5] .
Rodina koprocesorů x87 namísto přímo adresovatelných registrů jako v architektuře x86 používá osmiúrovňový zásobník registrů [11] , přičemž je možné přistupovat k libovolnému prvku zásobníku podle indexu od st0 do st7, kde st0 je vrchol zásobník. Poloha vrcholu zásobníku je určena polem ST stavového registru. Instrukce, když jsou vykonány, vysunou operandy z horní části zásobníku a vloží výsledky do zásobníku. Instrukce se dvěma operandy jako FADD, FMUL, FCOM mohou pracovat jak s horními dvěma prvky zásobníku, tak přímo přebírat jeden z operandů z libovolné pozice zásobníku.
Při vytváření koprocesoru 8087 Intel doufal, že standardizuje formát s pohyblivou řádovou čárkou pro budoucí vývoj. Historicky význam 8087 spočívá v tom, že se stal základem pro standard IEEE 754 s pohyblivou řádovou čárkou . Vzhledem k tomu, že standard IEEE 754 byl ve vývoji až do roku 1985, koprocesor 8087 mu plně nevyhovoval, nicméně plné shody se standardem bylo dosaženo již v koprocesoru Intel 80387 . 8087 poskytoval dva základní typy dat s pohyblivou řádovou čárkou ( 32bitová jednoduchá přesnost a 64bitová dvojitá přesnost ), stejně jako rozšířený 80bitový formát pro zlepšení přesnosti velkých a složitých výpočtů. Kromě toho 8087 nabízel 80bitový/ 18místný formát BCD a také 16, 32 a 64bitové celočíselné typy [11] .
8087 zpracovává nekonečné hodnoty pomocí afinního nebo projektivního uzavření (režim vybraný pomocí stavového registru). V režimu afinního uzavření se kladné a záporné nekonečno považují za různé hodnoty. V režimu projektivního uzavření jsou obě nekonečna považována za stejná [12] . Tyto dva nekonečné režimy provozu byly navrženy v návrhu standardu IEEE 754 . Režim projektivního uzavření byl však z konečné verze normy vyloučen. Koprocesor 80287 si zachoval jako volitelný režim projektivního uzavření, zatímco koprocesory 80387 a pozdější (včetně 80187) podporovaly pouze režim afinního uzavření.
Koprocesor 8087 se od pozdějších koprocesorů Intel liší tím, že se připojuje přímo k adresové a datové sběrnici. Když procesory 8086 a 8088 najdou instrukce začínající sekvencí '11011', přenesou řízení na koprocesor. Koprocesor obsahuje stejnou instrukční frontu jako procesor (nastavení fronty pro parametry procesoru 8086 nebo 8088 se provádí analýzou signálu BHE po hardwarovém resetu). Pokud instrukce vyžaduje výměnu dat s pamětí, procesory 8088 nebo 8086 vypočítají jejich adresu a provedou fiktivní čtecí cyklus, přičemž samotná data ignorují. Vlastní čtení dat provádí koprocesor. Pokud je potřeba přečíst více než jedno slovo (bajt), koprocesor požádá o řízení sběrnice a přečte zbytek operandu, inkrementující adresu [13] .
Po odeslání instrukce do koprocesoru hlavní procesor okamžitě začne zpracovávat další. Proto mohou procesory 8086 nebo 8088 pracovat paralelně s koprocesorem 8087. To však může vést ke dvěma nežádoucím situacím:
Pro synchronizaci procesoru a koprocesoru se používá instrukce FWAIT, která zastaví práci hlavního procesoru, dokud z koprocesoru nepřijde signál, že dokončil zpracování. Překladač assembleru tuto instrukci automaticky vkládá před každou instrukci koprocesoru 8087 [10] . V pozdějších modelech koprocesorů odpadla nutnost přidávat instrukci FWAIT před každou instrukci s pohyblivou řádovou čárkou, nicméně instrukce je stále potřeba k synchronizaci procesorů, pokud přistupují ke stejným datům [15] .
Existuje riziko selhání programu, pokud instrukci nelze dekódovat koprocesorem. Pozdější modely koprocesorů Intel toto sběrnicové spojení nepoužívaly a instrukce předával koprocesoru hlavní procesor. To sice vedlo ke zpoždění při provádění instrukcí, ale zároveň se tím předešlo riziku selhání programu, protože hlavní procesor by ignoroval instrukci, kterou koprocesor nepřijal.
Koprocesory Intel 8087 byly vyrobeny v keramických pouzdrech typu CerDIP a PDIP a byly navrženy pro provoz v následujících teplotních rozsazích:
Všechny varianty 8087 byly dodávány ve 40pinových DIP balíčcích a běžely na 5 voltů, spotřebovávaly asi 2,4 wattu. Na rozdíl od pozdějších koprocesorů Intel musel 8087 běžet na stejném taktu jako hlavní procesor [5] . Přípony v označení mikroobvodů určovaly maximální taktovací frekvenci:
Hodiny 8087 [4] [11]Označení čipu | Frekvence |
---|---|
Intel 8087 | 5 MHz |
Intel 8087-1 | 10 MHz |
Intel 8087-2 | 8 MHz |
Intel 8087-3 | 4 MHz |
Intel 8087-6 | 6 MHz |
Koprocesor byl vyroben v licenci AMD pod označením AMD 8087 [1] a Cyrix pod označením Cyrix 8087 [2] . V SSSR byl vyroben analog 8087 pod označením K1810VM87 [16] .
Stejně jako u procesorů 8088 a 8086 byl koprocesor 8087 nahrazen novějšími generacemi koprocesorů Intel. Patří mezi ně 80287 , 80387 a 80187 . Počínaje 80486 již procesory Intel nevyžadovaly samostatný koprocesor s pohyblivou řádovou čárkou. Téměř všechny měly v jádru procesoru zabudovaný koprocesor. Jedinou výjimkou byl 80486SX, což byla modifikace 80486DX s deaktivovaným koprocesorem. Koprocesor 80487 byl vlastně plnohodnotný procesor i486DX , který měl navíc pin. Při instalaci deaktivoval 80486SX.
procesory Intel | |||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||||||||||||||||||
|