Intel 8087

Intel 8087
CPU

Coprocesor matematic Intel 8087
Productie 1980
Dezvoltator Intel
Producătorii
frecvența procesorului 4-10  MHz
Tehnologia de producție 3 um (3 um)  um
Seturi de instrucțiuni x86 , x87
Numărul de nuclee unu
Conector
Nuclei
Intel 823180287

Intel 8087  este primul coprocesor matematic pentru linia de procesoare 8086 care implementează arhitectura setului de instrucțiuni x87 și a fost lansat în 1980 de Intel [3] [4] .

Coprocesorul 8087 a fost proiectat pentru a îmbunătăți performanța în virgulă mobilă prin accelerarea operațiunilor precum adunarea , scăderea , împărțirea și rădăcina pătrată . El a putut calcula , de asemenea, funcții transcendentale , cum ar fi funcția exponențială , logaritmii și funcțiile trigonometrice . Câștigul de performanță din instalarea unui coprocesor a variat între 20% și 500%, în funcție de specificul sarcinilor. Intel 8087 a avut o performanță de aproximativ 50.000 de flopi [3] și a consumat aproximativ 2,4 wați [4] . Beneficiul setarii 8087 s-a manifestat doar la efectuarea operatiilor matematice. Calculatoarele folosite, de exemplu, pentru procesarea textului , nu au beneficiat de costuri suplimentare (aproximativ 150 USD [5] ) și de un consum de energie crescut.

Odată cu lansarea de către IBM a PC-ului IBM , care avea un soclu pentru instalarea unui coprocesor, vânzările de 8087 au crescut semnificativ. Apariția coprocesorului a dus la crearea standardului IEEE 754-1985 pentru aritmetica în virgulă mobilă . Procesoarele Intel târzii, începând cu 80486 , au un coprocesor aritmetic încorporat (cu excepția lui 486SX  - un coprocesor a fost lansat pentru ele 487SX , care nu a putut fi instalat).

Istoricul creației și dispozitivului

Anterior, Intel a produs cipurile 8231 „Arithmetic Processor” și 8232 „Floating Point Processor”. Au fost proiectate pentru a fi utilizate cu procesorul 8080 sau echivalent și au folosit o magistrală de date pe 8 biți. Procesorul principal a interacționat cu ei prin instrucțiuni I/O, sau prin controlerul DMA [6] .

Primii pași în dezvoltarea lui 8087 au fost făcuți de Bill Pohlman ,  managerul de proiect care a supravegheat dezvoltarea microprocesorului 8086 la Intel. Acesta a oferit suport pentru un coprocesor matematic de la 8086, care nu a fost încă dezvoltat.

În 1977, Polman a primit undă verde pentru a dezvolta coprocesorul matematic 8087. Bruce  Ravenel a fost numit arhitect, iar John Palmer a fost angajat ca arhitect asistent și matematician de proiect .  Împreună au dezvoltat o arhitectură inovatoare care includea un număr real de 80 de biți cu o mantisă de 64 de biți și un exponent de 16 biți pentru calcule intermediare, un coprocesor bazat pe stivă cu opt registre de 80 de biți și un set de instrucțiuni care a furnizat calculul. a unui număr mare de funcţii matematice. Formatul de 80 de biți a rezolvat o serie de probleme binecunoscute în organizarea calculelor și crearea de software pentru procesarea numerică: influența erorilor de rotunjire a fost redusă semnificativ atunci când se lucrează cu operanzi reali pe 64 de biți, iar acuratețea calculelor a fost asigurată pentru 18- cifre BCD și operanzi întregi pe 64 de biți.numerele. Palmer a remarcat că publicațiile lui William Kahan despre calculele în virgulă mobilă [7] au avut o mare influență asupra proiectului .

Managementul Intel din Santa Clara a fost călduț cu privire la proiectul 8087 din cauza cerințelor sale mari. În cele din urmă, dezvoltarea a fost transferată în filiala israeliană a companiei, iar Rafi Nef a fost numit șeful responsabil cu fabricarea microcircuitului .  Palmer, Revenel și Nef au primit un brevet pentru arhitectura coprocesorului [8] . Robert Koehler și John Bayliss au primit un brevet pentru o metodă de transfer de instrucțiuni cu un anumit model de biți către un coprocesor [ 9] .   

Coprocesorul 8087 a fost lansat în 1980 și conținea 45.000 de tranzistori. A fost fabricat folosind o tehnologie de proces de 3 microni. Intel 8087 a fost fabricat în Malaezia [4] .

Pentru coprocesor au fost introduse peste 60 de instrucțiuni noi , al căror nume începea cu „F”, pentru a le distinge de instrucțiunile întregi ale Intel 8086. De exemplu, analogii instrucțiunilor ADD / MUL / CMP în 8087 arăta ca FADD / FMUL / FCOM. Codificările binare pentru toate instrucțiunile noi au început cu modelul de biți 11011. Acest model corespunde cu numărul 27 în zecimală, care este același cu codul ASCII al caracterului ESC, așa că uneori a fost numit codul de evacuare . Codul de instrucțiune ocupă 6 biți în doi octeți începând cu combinația specificată:

┌─────────────────────────────┐ │ 1101 1xxx │ mmxx xrrr │ └────────────┴─────────────┘

Valori de biți:

x - codul de instrucțiuni m - modul de adresare r - registru operand sau set de registre implicate în calculul offset [10]

Aplicațiile trebuiau scrise special pentru a utiliza instrucțiuni în virgulă mobilă. În timpul pornirii, programul trebuia să detecteze prezența unui coprocesor și să-l folosească pentru aceste instrucțiuni; în caz contrar, instrucțiunile coprocesorului trebuiau emulate în software [5] .

Registre

Familia de coprocesoare x87, în loc de registre direct adresabile ca în arhitectura x86, utilizează o stivă de registre cu opt niveluri [11] , în timp ce este posibil să accesați orice element de stivă prin index de la st0 la st7, unde st0 este partea de sus a teancul. Poziția vârfului stivei este specificată de câmpul ST al registrului de stare. Instrucțiunile, când sunt executate, pop operanzi din partea de sus a stivei și împinge rezultatele pe stivă. Instrucțiunile cu doi operanzi precum FADD, FMUL, FCOM pot opera ambele cu primele două elemente ale stivei și pot prelua direct unul dintre operanzi dintr-o poziție arbitrară a stivei.

Standardul IEEE pentru numere în virgulă mobilă

Când a creat coprocesorul 8087, Intel a sperat să standardizeze formatul în virgulă mobilă pentru evoluțiile viitoare. Din punct de vedere istoric, importanța 8087 este că a devenit baza standardului IEEE 754 în virgulă mobilă . Deoarece standardul IEEE 754 a fost în dezvoltare până în 1985, coprocesorul 8087 nu l-a respectat pe deplin, cu toate acestea, conformitatea deplină cu standardul a fost deja atinsă în coprocesorul Intel 80387 . 8087 a furnizat două tipuri de date de bază în virgulă mobilă ( precizie simplă de 32 de biți și precizie dublă de 64 de biți ), precum și un format extins de 80 de biți pentru a îmbunătăți acuratețea calculelor mari și complexe. În plus, 8087 a oferit un format BCD de 80 de biți/18 cifre , precum și tipuri de numere întregi pe 16, 32 și 64 de biți [11] .

Control infinit

8087 gestionează valori infinit prin închidere afină sau proiectivă (mod selectat prin registrul de stare). În modul de închidere afină, infinitul pozitiv și negativ sunt tratate ca valori diferite. În modul de închidere proiectivă, ambele infinitate sunt considerate egale [12] . Aceste două moduri de operare infinite au fost propuse în proiectul standardului IEEE 754 . Cu toate acestea, modul de închidere proiectivă a fost exclus din versiunea finală a standardului. Coprocesorul 80287 a păstrat modul de închidere proiectivă ca opțiune, în timp ce coprocesoarele 80387 și mai târziu (inclusiv 80187) au acceptat doar modul de închidere afine.

Conectarea unui coprocesor

Coprocesorul 8087 diferă de coprocesoarele Intel ulterioare prin faptul că se conectează direct la magistralele de adrese și de date. Procesoarele 8086 și 8088, când găsesc instrucțiuni care încep cu secvența „11011”, transferă controlul către coprocesor. Coprocesorul conține aceeași coadă de instrucțiuni ca și procesorul (setarea cozii pentru parametrii procesorului 8086 sau 8088 se face prin analiza semnalului BHE după o resetare hardware). Dacă o instrucțiune necesită ca datele să fie schimbate cu memoria, procesoarele 8088 sau 8086 își calculează adresa și efectuează un ciclu de citire inactiv, ignorând datele în sine. Citirea efectivă a datelor se face de către coprocesor. Dacă mai mult de un cuvânt (octet) trebuie citit, coprocesorul solicită controlul magistralei și citește restul operandului, incrementând adresa [13] .

După trimiterea unei instrucțiuni către coprocesor, procesorul principal începe imediat procesarea următoarei. Prin urmare, procesoarele 8086 sau 8088 pot funcționa în paralel cu un coprocesor 8087. Cu toate acestea, acest lucru poate duce la două situații nedorite:

Pentru a sincroniza procesorul și coprocesorul, se folosește instrucțiunea FWAIT, care oprește activitatea procesorului principal până când este primit un semnal de la coprocesor că acesta a finalizat procesarea. Traducătorul de limbaj de asamblare inserează automat această instrucțiune înainte de fiecare instrucțiune a coprocesorului 8087 [10] . În modelele ulterioare de coprocesoare, necesitatea de a adăuga instrucțiunea FWAIT înainte de fiecare instrucțiune în virgulă mobilă a dispărut, cu toate acestea, instrucțiunea este încă necesară pentru a sincroniza procesoarele dacă accesează aceleași date [15] .

Există riscul eșecului programului dacă instrucțiunea nu poate fi decodificată de coprocesor. Modelele ulterioare de coprocesoare Intel nu au folosit această conexiune de magistrală, iar instrucțiunile au fost transmise coprocesorului de către procesorul principal. În timp ce acest lucru a dus la o întârziere în execuția instrucțiunilor, în același timp, a evitat riscul unei eșecuri a programului, deoarece procesorul principal ar ignora o instrucțiune pe care coprocesorul nu a acceptat-o.

Versiuni și analogi

Coprocesoarele Intel 8087 au fost produse în pachete ceramice de tipuri CerDIP și PDIP și au fost proiectate să funcționeze în următoarele intervale de temperatură:

Toate variantele de 8087 au venit în pachete DIP cu 40 de pini și au funcționat la 5 volți, consumând aproximativ 2,4 wați. Spre deosebire de coprocesoarele Intel de mai târziu, 8087 trebuia să ruleze la aceeași viteză de ceas ca procesorul principal [5] . Sufixele în desemnarea microcircuitelor au determinat frecvența maximă de ceas:

Frecvențe de ceas 8087 [4] [11]
Desemnarea cipului Frecvență
Intel 8087 5 MHz
Intel 8087-1 10 MHz
Intel 8087-2 8 MHz
Intel 8087-3 4 MHz
Intel 8087-6 6 MHz

Coprocesorul a fost produs sub licență de către AMD sub denumirea AMD 8087 [1] și Cyrix sub denumirea Cyrix 8087 [2] . În URSS , un analog de 8087 a fost produs sub denumirea K1810VM87 [16] .

Alte generații de coprocesoare

Ca și în cazul procesoarelor 8088 și 8086, coprocesorul 8087 a fost înlocuit de generațiile mai noi de coprocesoare Intel. Acestea includ 80287 , 80387 și 80187 . Începând cu 80486, procesoarele Intel nu mai necesitau un coprocesor separat în virgulă mobilă. Aproape toate aveau un coprocesor încorporat în nucleul procesorului. Singura excepție a fost 80486SX, care a fost o modificare a 80486DX cu coprocesorul dezactivat. Coprocesorul 80487 era de fapt un procesor i486DX cu drepturi depline care avea un pin suplimentar. Când a fost instalat, a dezactivat 80486SX.

Note

  1. 1 2 Shvets, Gennadiy AMD 8087 unitate în virgulă mobilă (link indisponibil) . CPU World (8 octombrie 2011). Preluat la 1 decembrie 2011. Arhivat din original la 25 ianuarie 2013. 
  2. 1 2 Shvets, Gennadiy Cyrix 8087 unitate în virgulă mobilă (link indisponibil) . CPU World (8 octombrie 2011). Preluat la 1 decembrie 2011. Arhivat din original la 25 ianuarie 2013. 
  3. 1 2 8087 (link indisponibil) . Coprocesor Dot Info (2007). Consultat la 1 decembrie 2011. Arhivat din original pe 7 iunie 2008. 
  4. 1 2 3 4 Intel FPU (link indisponibil) . cpu-collection.de (2011). Preluat la 1 decembrie 2011. Arhivat din original la 25 ianuarie 2013. 
  5. 1 2 3 Scott Mueller. Actualizarea și repararea computerelor, ediția a doua . - Que Books, 1992. - S.  395 -403. - ISBN 0-88022-856-3 .
  6. Intel Component Data Catalog 1980 , catalog Intel nr. C-864/280/150K/CP, paginile 8-21, 8-28
  7. Sanchez, Canton, 2007 , p. 96.
  8. Brevetul SUA nr. 4484259
  9. Brevetul SUA #4270167
  10. 1 2 Karen A. Lemone. Limbajul de asamblare și programarea sistemelor pentru PC-urile IBM și compatibile . - Little, Brown and Comp., 1985. - P.  300 . - ISBN 0-316-52069-1 .
  11. 1 2 3 Shvets, familia Gennadiy Intel 8087 (link indisponibil) . CPU World (8 octombrie 2011). Consultat la 1 decembrie 2011. Arhivat din original la 1 septembrie 2013. 
  12. Sanchez, Canton, 2007 , p. 110.
  13. Mihail Guk. Procesoare Intel: de la 8086 la Pentium II. - Sankt Petersburg. : Peter, 1997. - S. 24. - 224 p. — ISBN 5-88782-398-4 .
  14. M. Krishna Kumar. Microprocesoare și microcontrolere/Coprocesor Note de curs (link nu este disponibil) . Preluat la 21 august 2016. Arhivat din original la 28 mai 2016. 
  15. Mors S.P., Albert D.D. Arhitectura microprocesorului 80286 = Arhitectura 80286. - M . : Radio şi comunicare, 1990. - S.  160 . — 304 p. — ISBN 5-256-00466-2 .
  16. Nefedov A.V. Circuite integrate și analogii lor străini: un manual .. - M . : IP RadioSoft, 2001. - T. 11. - S. 500. - 512 p. — ISBN 5-93037-049-4 .

Literatură

Link -uri