Intel 8087 | |
---|---|
prosessori | |
Intel 8087 matemaattinen apuprosessori | |
Tuotanto | 1980 |
Kehittäjä | Intel |
Valmistajat | |
CPU- taajuus | 4-10 MHz |
Tuotantoteknologia | 3 µm (3 µm) µm |
Ohjesarjat | x86 , x87 |
Ydinten lukumäärä | yksi |
Liitin | |
Nuclei | |
Intel 823180287 |
Intel 8087 on ensimmäinen matemaattinen apuprosessori 8086 - prosessorisarjalle , joka toteuttaa x87 - käskysarjaarkkitehtuurin, ja Intel julkaisi sen vuonna 1980 [3] [4] .
8087 - apuprosessori on suunniteltu parantamaan liukulukujen suorituskykyä nopeuttamalla toimintoja , kuten yhteen - , vähennys - , jako - ja neliöjuuren laskentaa . Hän pystyi myös laskemaan transsendenttisia funktioita , kuten eksponentiaalifunktiota , logaritmeja ja trigonometrisiä toimintoja . Apuprosessorin asennuksesta saatu suorituskykyhyöty vaihteli 20–500 % tehtävien erityispiirteistä riippuen. Intel 8087:n suorituskyky oli noin 50 000 floppia [3] ja se kulutti noin 2,4 wattia [4] . Asetuksen 8087 hyöty näkyi vain matemaattisia operaatioita suoritettaessa. Esimerkiksi tekstinkäsittelyyn käytetyt tietokoneet eivät hyötyneet lisäkustannuksista (noin $ 150 [5] ) ja lisääntyneestä virrankulutuksesta.
Kun IBM julkaisi IBM PC :n , jossa oli liitäntä apuprosessorin asentamista varten, 8087:n myynti kasvoi merkittävästi. Apuprosessorin tulo johti IEEE 754-1985 - standardin luomiseen liukulukuaritmetiikkaa varten . Myöhemmissä Intel-prosessoreissa, alkaen numerosta 80486 , on sisäänrakennettu aritmeettinen apuprosessori (paitsi 486SX - niille julkaistiin apuprosessori 487SX , jota ei voitu asentaa).
Aiemmin Intel tuotti 8231 "aritmeettisen prosessorin" ja 8232 "liukupisteprosessorin" siruja. Ne on suunniteltu käytettäviksi 8080-prosessorin tai vastaavan kanssa, ja niissä käytettiin 8-bittistä dataväylää. Pääprosessori oli vuorovaikutuksessa niiden kanssa I/O-ohjeiden tai DMA -ohjaimen kautta [6] .
Ensimmäiset askeleet 8087:n kehityksessä otti Bill Pohlman , projektipäällikkö , joka valvoi 8086-mikroprosessorin kehitystä Intelillä. Se tarjosi tukea vielä kehittelemättömälle matemaattiselle apuprosessorille 8086:sta.
Vuonna 1977 Polman sai vihreän valon kehittää matemaattinen apuprosessori 8087. Bruce Ravenel nimitettiin arkkitehdiksi ja John Palmer palkattiin apulaisarkkitehdiksi ja projektimatemaatikoksi . Yhdessä he kehittivät innovatiivisen arkkitehtuurin, joka sisälsi 80-bittisen reaaliluvun ja 64-bittisen mantissan ja 16-bittisen eksponentin välilaskutoimituksia varten, pinopohjaisen apuprosessorin kahdeksalla 80-bittisellä rekisterillä ja käskyjoukon, joka tarjosi laskennan. lukuisista matemaattisista funktioista. 80-bittinen muoto ratkaisi useita tunnettuja ongelmia laskelmien organisoinnissa ja numeerisen käsittelyn ohjelmistojen luomisessa: pyöristysvirheiden vaikutus väheni merkittävästi 64-bittisten reaalioperandien kanssa työskennellessä ja laskelmien tarkkuus varmistettiin 18-bittisille operandeille. numero BCD ja 64-bittiset kokonaislukuoperandit. Palmer huomautti, että William Kahanin julkaisuilla liukulukulaskelmista [7] oli suuri vaikutus projektiin .
Intelin johto Santa Clarassa oli haalea 8087-projektin suhteen sen korkeiden vaatimusten vuoksi. Lopulta kehitys siirtyi yhtiön Israelin sivuliikkeelle ja mikropiirin valmistuksesta vastaavaksi johtajaksi nimitettiin Rafi Nef . Palmer, Revenel ja Nef saivat patentin yhteisprosessoriarkkitehtuurille [8] . Robert Koehler ja John Bayliss saivat patentin menetelmälle siirtää käskyjä tietyllä bittikuviolla apuprosessorille [ 9] .
8087-apuprosessori julkaistiin vuonna 1980, ja se sisälsi 45 000 transistoria. Se on valmistettu 3 mikronin prosessitekniikalla. Intel 8087 valmistettiin Malesiassa [4] .
Apuprosessorille otettiin käyttöön yli 60 uutta ohjetta , joiden nimi alkoi "F":llä, jotta ne voitaisiin erottaa Intel 8086:n kokonaislukukäskyistä. Esimerkiksi 8087:n ADD / MUL / CMP -käskyjen analogit. näytti FADD / FMUL / FCOM. Kaikkien uusien käskyjen binäärikoodaukset alkoivat bittikuviolla 11011. Tämä kuvio vastaa desimaalilukua 27, joka on sama kuin ESC-merkin ASCII -koodi , joten sitä kutsuttiin joskus Escape-koodiksi . Käskykoodi vie 6 bittiä kahdessa tavussa alkaen määritetystä yhdistelmästä:
┌───────────────────────────── │ 1101 1xxx │ mmxx xrrr │ └────────────┴─────────────┘Bittiarvot:
x - ohjekoodi m - osoitetila r - offset-laskennassa mukana oleva operandirekisteri tai joukko rekistereitä [10]Hakemukset oli kirjoitettava erityisesti käyttämään liukulukuohjeita. Käynnistyksen aikana ohjelman piti havaita apuprosessorin läsnäolo ja käyttää sitä näiden ohjeiden antamiseen; muutoin apuprosessorin käskyjä oli emuloitava ohjelmistossa [5] .
Apuprosessoriperhe x87 käyttää suoraan osoitettavien rekistereiden sijaan, kuten x86-arkkitehtuurissa, kahdeksantasoista rekisteripinoa [11] , kun taas on mahdollista päästä mihin tahansa pinoelementtiin indeksillä st0:sta st7:ään, jossa st0 on pino. Pinon yläosan sijainti määritellään tilarekisterin ST-kentällä. Ohjeet, kun ne suoritetaan, pop operandit pinon yläosasta ja työnnä tulokset pinoon. Ohjeet kahdella operandilla, kuten FADD, FMUL, FCOM, voivat toimia molempien pinon kahden ylimmän elementin kanssa ja ottaa suoraan yhden operandeista mielivaltaisesta pinopaikasta.
Luodessaan 8087-apuprosessoria Intel toivoi standardisoivansa liukulukumuodon tulevaa kehitystä varten. Historiallisesti 8087:n merkitys on ollut se, että siitä tuli IEEE 754 -liukulukustandardin perusta . Koska IEEE 754 -standardia kehitettiin vuoteen 1985 asti, 8087-apuprosessori ei täysin noudattanut sitä, mutta täysi standardinmukaisuus saavutettiin jo Intel 80387 -apuprosessorissa. 8087 tarjosi kaksi perusliukulukutietotyyppiä ( 32-bittinen yksittäinen tarkkuus ja 64-bittinen kaksinkertainen tarkkuus ) sekä laajennetun 80-bittisen muodon parantaakseen suurten ja monimutkaisten laskelmien tarkkuutta. Lisäksi 8087 tarjosi 80-bitin/18-numeroisen BCD - muodon sekä 16-, 32- ja 64-bittiset kokonaislukutyypit [11] .
8087 käsittelee äärettömyyden arvoja affiinin tai projektiivisen sulkemisen kautta (tila valitaan tilarekisterin kautta). Affiinissa sulkemistilassa positiivista ja negatiivista ääretöntä käsitellään eri arvoina. Projektiivisessa sulkeutumistilassa molemmat äärettömät katsotaan yhtäläisiksi [12] . Näitä kahta ääretöntä toimintatapaa ehdotettiin IEEE 754 - standardiluonnoksessa . Projektiivinen sulkemistila jätettiin kuitenkin pois standardin lopullisesta versiosta. Apuprosessori 80287 säilytti projektiivisen sulkemistilan valinnaisena, kun taas 80387 ja uudemmat apuprosessorit (mukaan lukien 80187) tukivat vain affinista sulkemistilaa.
8087-apuprosessori eroaa myöhemmistä Intel-apuprosessoreista siinä, että se kytkeytyy suoraan osoite- ja tietoväyliin. 8086- ja 8088-prosessorit, kun he löytävät sekvenssillä '11011' alkavat käskyt, siirtävät ohjauksen apuprosessorille. Apuprosessori sisältää saman käskyjonon kuin prosessori (jonon asettaminen 8086- tai 8088-prosessorin parametreille tehdään analysoimalla BHE -signaali laitteiston nollauksen jälkeen). Jos käsky vaatii tietojen vaihtamista muistin kanssa, 8088- tai 8086-prosessorit laskevat osoitteensa ja suorittavat valelukujakson jättäen itse tiedot huomioimatta. Varsinaisen tietojen lukemisen suorittaa apuprosessori. Jos useampi kuin yksi sana (tavu) on luettava, apuprosessori pyytää väyläohjausta ja lukee loput operandista, lisäämällä osoitetta [13] .
Lähetettyään käskyn apuprosessorille, pääprosessori aloittaa välittömästi seuraavan käsittelyn. Siksi 8086- tai 8088-prosessorit voivat toimia rinnakkain 8087-apuprosessorin kanssa. Tämä voi kuitenkin johtaa kahteen ei-toivottuun tilanteeseen:
Prosessorin ja apuprosessorin synkronointiin käytetään FWAIT-käskyä, joka pysäyttää pääprosessorin työn, kunnes apuprosessorilta vastaanotetaan signaali, että se on suorittanut käsittelyn. Kokoonpanokielen kääntäjä lisää tämän käskyn automaattisesti ennen jokaista 8087-apuprosessorin käskyä [10] . Myöhemmissä rinnakkaisprosessorimalleissa tarve lisätä FWAIT-käsky ennen jokaista liukulukukäskyä on kadonnut, mutta käskyä tarvitaan edelleen prosessorien synkronointiin, jos ne käyttävät samaa dataa [15] .
On olemassa riski, että ohjelma epäonnistuu, jos apuprosessori ei pysty purkamaan käskyä. Myöhemmät Intelin rinnakkaissuorittimien mallit eivät käyttäneet tätä väyläyhteyttä, ja pääprosessori välitti ohjeet apuprosessorille. Vaikka tämä johti viiveeseen käskyjen suorittamisessa, samalla vältyttiin ohjelman epäonnistumiselta, koska pääprosessori jättäisi huomiotta käskyn, jota apuprosessori ei hyväksynyt.
Intel 8087 -apuprosessorit valmistettiin CerDIP- ja PDIP-tyyppisissä keraamisissa pakkauksissa, ja ne on suunniteltu toimimaan seuraavilla lämpötila-alueilla:
Kaikki 8087:n versiot toimitettiin 40-nastaisissa DIP - paketeissa ja käyttivät 5 voltin jännitteellä, mikä kulutti noin 2,4 wattia. Toisin kuin myöhemmät Intelin apuprosessorit, 8087:n piti toimia samalla kellotaajuudella kuin pääprosessorin [5] . Mikropiirien nimeämisessä olevat jälkiliitteet määrittelivät maksimikellotaajuuden:
Sirun nimitys | Taajuus |
---|---|
Intel 8087 | 5 MHz |
Intel 8087-1 | 10 MHz |
Intel 8087-2 | 8 MHz |
Intel 8087-3 | 4 MHz |
Intel 8087-6 | 6 MHz |
Apuprosessori valmistettiin AMD:n lisenssillä nimellä AMD 8087 [1] ja Cyrixin nimellä Cyrix 8087 [2] . Neuvostoliitossa 8087:n analogia valmistettiin nimellä K1810VM87 [ 16] .
Kuten 8088- ja 8086-suorittimissa, 8087-apuprosessori on korvattu uudempien sukupolvien Intel-apuprosessoreilla. Näitä ovat 80287 , 80387 ja 80187 . 80486:sta alkaen Intel-prosessorit eivät enää tarvinneet erillistä liukulukuprosessoria. Lähes kaikissa niissä oli prosessori sisäänrakennettuna prosessorin ytimeen. Ainoa poikkeus oli 80486SX, joka oli muunnos 80486DX:stä ilman apuprosessoria. 80487 - apuprosessori oli itse asiassa täysimittainen i486DX - prosessori , jossa oli ylimääräinen nasta. Asennettuna se poisti 80486SX:n käytöstä.
Intelin prosessorit | |||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||||||||||||||||||
|