Intel 8087 - Intel 8087

Intel 8087
Intel C8087.jpg
Intel 8087 matematik yardımcı işlemcisi
Genel bilgi
başlatıldı 1980
Tarafından pazarlanan Intel , IBM
Tarafından dizayn edilmiştir Intel
Ortak üretici(ler)
Verim
Maks. CPU saat hızı 4 MHz ila 10 MHz
Mimari ve sınıflandırma
Min. özellik boyutu 3 mikron
Komut seti X87 ( yardımcı işlemci uzatılması x86-16 )
Fiziksel Özellikler
transistörler
Paket(ler)
Tarih
selefi 8231/8232
halef 80287

Intel 8087 1980 yılında duyurulan, ilk x87 kayan noktalı işlemci için 8086 mikroişlemcilerin hattı.

8087 amacı için hesaplamalar hızlandırmak için olan kayan noktalı gibi aritmetik, ekleme , çıkarma , çarpma , bölme ve kare kökü . Ayrıca üstel , logaritmik veya trigonometrik hesaplamalar gibi aşkın fonksiyonları hesapladı ve kayan noktanın yanı sıra büyük ikili ve ondalık tamsayılar üzerinde de çalışabilir. Performans iyileştirmeleri, özel uygulamaya bağlı olarak yaklaşık %20'den %500'ün üzerine çıktı. 8087, yaklaşık 2,4 watt kullanarak yaklaşık 50.000 FLOPS gerçekleştirebilir  . 8087'nin kurulumundan yalnızca aritmetik işlemler yararlandı; örneğin, yalnızca kelime işlem gibi uygulamalarla kullanılan bilgisayarlar, 8087'nin ekstra masrafından (yaklaşık 150 $) ve güç tüketiminden faydalanmaz.

Intel 8087'nin Ölümü

8087, dönemi için gelişmiş bir IC idi ve dönemin üretim teknolojisinin sınırlarını zorladı. İlk verimler son derece düşüktü.

8087'nin satışları, IBM , IBM PC anakartına bir yardımcı işlemci soketi eklediğinde önemli bir artış elde etti . Çip sıkıntısı nedeniyle, IBM, 8087'yi, altı ay boyunca piyasada olana kadar PC için bir seçenek olarak sunmadı. 8087'nin geliştirilmesi , kayan nokta aritmetiği için IEEE 754-1985 standardına yol açtı . Daha sonra vardı x87 (değil PC uyumlu kişisel kullanılır) 80186 için yardımcı işlemciler, 80286, 80386 ve 80386SX işlemciler. 80486 ile başlayarak, sonraki Intel x86 işlemcileri ayrı bir kayan nokta yardımcı işlemcisi kullanmadı; kayan nokta fonksiyonları işlemci ile entegre olarak sağlandı.

Dahili olarak, çip bir donanım çarpanından yoksundu ve CORDIC algoritmasını kullanarak hesaplamalar yaptı .

Tasarım ve gelişim

Intel daha önce 8231 Aritmetik işlem birimini ve 8232 Kayan Nokta İşlemcisini üretmişti . Bunlar 8080 veya benzeri işlemcilerle kullanılmak üzere tasarlanmıştı ve 8 bitlik bir veri yolu kullanıyordu. Bunlar, programlanmış G/Ç veya bir DMA denetleyicisi aracılığıyla bir ana bilgisayar sistemine arayüzlenmişti .

8087 başlangıçta Intel'de 8086 çipinin gelişimini denetleyen mühendislik müdürü Bill Pohlman tarafından tasarlandı. Bill, 8086 yongasının henüz geliştirilmemiş bir matematik yongasını destekleyebileceğinden emin olmak için adımlar attı.

1977'de Pohlman, 8087 matematik çipini tasarlamaya devam etti. Bruce Ravenel mimar olarak atandı ve John Palmer proje için ortak mimar ve matematikçi olarak işe alındı. İkisi, 64 bit mantis ve en uzun biçimli gerçek sayı için 16 bit üs, yığın mimarisi CPU'su ve hesaplama açısından zengin bir talimat seti ile sekiz 80 bit yığın kaydı ile devrim niteliğinde bir tasarımla geldi. Tasarım, sayısal hesaplama ve sayısal yazılımda bilinen birkaç sorunu çözdü: 64 bit işlenenler için yuvarlama hatası sorunları ortadan kaldırıldı ve tüm 64 bit sayılar için sayısal mod dönüşümleri çözüldü. Palmer, William Kahan'ın kayan nokta hakkındaki yazılarını tasarımlarında önemli bir etki olarak kabul etti.

8087 tasarımı, agresif tasarımı nedeniyle başlangıçta Santa Clara'da havalı bir resepsiyonla karşılaştı. Sonunda, tasarım Intel İsrail'e atandı ve çipin uygulanmasına liderlik etmek için Rafi Nave atandı. Palmer, Ravenel ve Nave tasarım için patent aldı. Robert Koehler ve John Bayliss ayrıca, belirli bir bit desenine sahip bazı talimatların yardımcı işlemciye aktarıldığı teknik için bir patent aldı.

8087, 45.000 transistöre sahipti ve 3 μm'lik bir tükenme yükü HMOS devresi olarak üretildi . 8086 veya 8088 ile birlikte çalıştı ve yaklaşık 60 yeni talimat getirdi . Çoğu 8087 montaj anımsatıcısı , FADD, FMUL, FCOM ve benzeri gibi F ile başlar ve bu onları 8086 komutlarından kolayca ayırt edilebilir hale getirir. 8087 komutlarının tümü için ikili kodlamalar , bir baytın daha yüksek sıralı bitlerinde olmasına rağmen , ASCII karakteri ESC ile aynı olan 11011, ondalık 27 bit modeli ile başlar ; benzer talimat öneklerine bazen " kaçış kodları " da denir . Bu yardımcı işlemci yönergeleri için Intel tarafından atanan yönerge anımsatıcısı "ESC"dir.

8086 veya 8088 CPU, ESC komutunu çalıştırdığında, ikinci bayt (ModR/M baytı) bir bellek işleneni belirtirse, CPU, talimatta belirtilen bellek konumundan bir sözcük okumak için bir veri yolu döngüsü yürütür (herhangi bir 8086 kullanarak). adresleme modu), ancak okunan işleneni herhangi bir CPU kaydında saklamaz veya üzerinde herhangi bir işlem gerçekleştirmez; 8087, veri yolunu gözlemleyecek ve 8086 ile senkronize olarak talimat akışının kodunu çözecek ve kendisi için olan yardımcı işlemci talimatlarını tanıyacaktır. Bellek işlenenli bir 8087 talimatı için, talimat işlenenin okunmasını isterse, 8087 ana CPU tarafından veri yolundan okunan veri kelimesini alır. Okunacak işlenen bir kelimeden uzunsa, 8087 adresi de adres yolundan kopyalayacaktır; daha sonra, CPU tarafından yürütülen veri okuma döngüsünün tamamlanmasından sonra 8087, veri yolunun kontrolünü ele geçirmek ve işlenenin kendisinin ek baytlarını aktarmak için hemen DMA'yı kullanır. Bir bellek işleneni olan bir 8087 komutu, bu işlenenin yazılmasını isterse, 8087, veri yolundaki okunan kelimeyi yok sayar ve sadece adresi kopyalar, ardından DMA talep eder ve işlenenin tamamını, okuyacağı şekilde yazar. genişletilmiş bir işlenenin sonu. Bu şekilde, ana CPU veri yolu ve veri yolu zamanlamasının genel kontrolünü sürdürürken, 8087, 8087'nin işlenenleri okumak veya yazmak için veri yolunu devraldığı kısa DMA dönemleri dışında, yardımcı işlemci talimatlarının yürütülmesinin diğer tüm yönlerini ele aldı. kendi iç kayıtlarından. Bu tasarımın bir sonucu olarak, 8087 yalnızca bellekten veya kendi kayıtlarından alınan işlenenler üzerinde çalışabilir ve 8087 ile 8086 veya 8088 arasındaki herhangi bir veri alışverişi yalnızca RAM aracılığıyla yapılırdı.

8087 bir talimat yürütürken ana CPU programı çalışmaya devam etti; Ana 8086 veya 8088 CPU perspektifinden, bir yardımcı işlemci talimatı, yalnızca işlem kodunun işlenmesi ve herhangi bir bellek işleneni döngüsü kadar sürdü (işlenensiz 2 saat döngüsü, 8 saat döngüsü artı EA hesaplama süresi [5 ila 12 saat döngüler] bir bellek işleneni için [artı 8088'de 4 saat döngüsü daha], işlenen sözcüğün ikinci baytını aktarmak için), ardından CPU programın bir sonraki talimatını yürütmeye başlar. Böylece, 8087'ye sahip bir sistem, ana CPU'nun tamsayı ALU'sunda bir işlem gerçekleştirirken aynı zamanda 8087 yardımcı işlemcisinde bir kayan nokta işlemi gerçekleştirerek gerçek paralel işleme yeteneğine sahipti. 8086 veya 8088 münhasıran talimat akışını ve zamanlamasını kontrol ettiğinden ve 8087'nin dahili durumuna doğrudan erişime sahip olmadığından ve 8087 aynı anda yalnızca bir talimat yürütebildiğinden, kombine 8086/8087 veya 8088/8087 sistemi için programlar 8087'nin, başka bir talimat verilmeden önce kendisine verilen son talimatı tamamlamak için zamana sahip olmasını sağlamak zorundaydı. WAIT talimatı (ana CPU'nun) bu amaç için sağlandı ve çoğu montajcı, çoğu kayan nokta yardımcı işlemci talimatının her örneğinden önce örtük olarak bir WAIT talimatı verdi. (Eğer program, zamana duyarlı 8087 talimatlarının verilmesi arasında yeterli süre geçmesini sağlamak için başka yollar kullanıyorsa, 8087 işleminden önce bir WAIT talimatının kullanılması gerekli değildir, böylece 8087, bir öncekini tamamlamadan böyle bir talimatı asla alamaz. Bir WAIT kullanılıyorsa, sonraki 8087 komutundan hemen önce gelmesi de gerekli değildir.) WAIT komutu, 8086/8088'in −TEST giriş pininin onaylanmasını (düşük) bekledi ve bu pin 8087'ye sahip tüm sistemlerde 8087'nin BUSY pinine bağlı (bu nedenle BUSY devre dışı bırakıldığında TEST yapıldı).

8086 ve 8088'in talimat ön getirme kuyrukları, bir talimatın yürütülme zamanını her zaman getirilme zamanıyla aynı olmadığı için, 8087 gibi bir yardımcı işlemci, bir talimatın ne zaman bir sonraki talimatın tamamen yürütüleceğini belirleyemez. CPU veri yolunu izleyerek. 8086 ve 8088, CPU'nun önceden getirme kuyruğundan talimatların yürütülmesinin dahili zamanlamasını senkronize etmesine izin vermek için yardımcı işlemciye bağlı iki kuyruk durumu sinyaline sahiptir. 8087, gerçekte yürüttüğü yardımcı işlemci işlem kodlarını okuduğu kendi özdeş ön getirme kuyruğunu korur. 8086 ve 8088 ön getirme kuyrukları farklı boyutlara ve farklı yönetim algoritmalarına sahip olduğundan, 8087, sistem sıfırlandığında belirli bir CPU veri yolu hattını gözlemleyerek hangi tip CPU'ya bağlı olduğunu belirler ve 8087, dahili talimat sırasını buna göre ayarlar. Ön getirme kuyruğu donanımının CPU ve yardımcı işlemcide yedekli olarak çoğaltılması, güç kullanımı ve toplam kalıp alanı açısından verimsizdir, ancak yardımcı işlemci arabiriminin çok az sayıda özel IC pini kullanmasına izin verdi ki bu önemliydi. Yardımcı işlemci arayüzünü tanımlayan 8086 piyasaya sürüldüğünde, 40'tan fazla pimli IC paketleri nadirdi, pahalıydı ve sinyal hızları için önemli bir sınırlayıcı faktör olan aşırı uç kapasitansı gibi sorunlarla boğuşuyordu.

Yardımcı işlemci işlem kodları, kaçış dizisinden başlayarak 2 bayt boyunca 6 bit olarak kodlanmıştır:

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

İlk üç "x" biti, kayan nokta işlem kodunun ilk üç bitidir. Sonra iki "m" biti, ardından kayan nokta işlem kodunun son yarısı üç biti, ardından üç "r" biti. "m" ve "r" bitleri, adresleme modu bilgisini belirtir.

Özel kayan nokta komutlarından yararlanmak için uygulama programlarının yazılması gerekiyordu. Çalışma zamanında, yazılım yardımcı işlemciyi algılayabilir ve onu kayan nokta işlemleri için kullanabilir. Eksik tespit edildiğinde, benzer kayan nokta fonksiyonlarının yazılımda hesaplanması gerekiyordu veya daha kesin sayısal uyumluluk için tüm yardımcı işlemci yazılımda taklit edilebilirdi.

Kayıtlar

Basitleştirilmiş 8087 mikromimarisi

x87 ailesi , x86 işlemcilerinin ana kayıtları gibi doğrudan adreslenebilir bir kayıt seti kullanmaz ; bunun yerine, x87 kayıtları, st0'ın en üstte olduğu st0 ile st7 arasında değişen sekiz seviyeli bir derin yığın yapısı oluşturur. x87 komutları, bu yığındaki değerleri iterek, hesaplayarak ve patlatarak çalışır. Ancak, FADD, FMUL, FCMP ve benzeri gibi ikili işlemler , en üstteki st0 ve st1'i örtük olarak kullanabilir veya açık bir bellek işleneni veya kaydı ile birlikte st0'ı kullanabilir ; st0 kaydı böylece bir akümülatör olarak kullanılabilir (yani birleşik hedef ve sol işlenen olarak) ve ayrıca FXCH st X (kodlar D9C8–D9CF h ) adı verilen bir komut kullanılarak sekiz yığın kaydından herhangi biri ile değiştirilebilir . Bu, x87 yığınını yedi serbestçe adreslenebilir kayıt artı bir akümülatör olarak kullanılabilir hale getirir. Bu, özellikle bu değişim talimatlarının sıfır saat cezasına kadar optimize edildiği süperskalar x86 işlemciler ( Pentium 1993 ve sonrası) için geçerlidir.

IEEE kayan nokta standardı

Intel, 8087'yi tasarlarken, gelecekteki tasarımlar için standart bir kayan nokta formatı oluşturmayı amaçladı. 8087'nin tarihsel bir perspektiften önemli bir yönü, IEEE 754 kayan nokta standardının temeli haline gelmesiydi . 8087, IEEE 754 standardını tüm ayrıntılarıyla uygulamadı, çünkü standart 1985'e kadar bitmedi, ancak 80387 yaptı. 8087 , büyük ve karmaşık hesaplamalar üzerinde doğruluğu artırmak için iki temel 32 / 64 bit kayan nokta veri türü ve ek bir genişletilmiş 80 bit dahili geçici biçim (bellekte de saklanabilir) sağladı. Bunun dışında 8087, 80-bit/18-basamaklı paketlenmiş BCD ( ikili kodlu ondalık ) formatı ve 16-, 32- ve 64-bit tamsayı veri türleri sundu .

8087 veri türleri
7 9 ... 7 1 ... 6 7 ... 6 3 ... 5 0 ... 3 1 ... 2 2 ... 1 5 ... 0 0 (bit konumu)
± Üs kesir 80 bit genişletilmiş hassas gerçek
± Üs kesir 64-bit çift duyarlıklı gerçek
± Üs kesir 32 bit tek duyarlıklı gerçek
± BCD Tamsayı 18 basamaklı ondalık tam sayı
± tamsayı 64 bit ikili tam sayı
± tamsayı 32 bit ikili tam sayı
± tamsayı 16 bitlik ikili tam sayı

Sonsuzluk

8087, sonsuzluk değerlerini afin kapatma veya yansıtmalı kapatma (durum kaydı tarafından seçilir) ile işler . Afin kapatma ile pozitif ve negatif sonsuzluklar farklı değerler olarak kabul edilir. Projektif kapatma ile sonsuzluk, çok küçük veya çok büyük sayılar için işaretsiz bir temsil olarak ele alınır. Sonsuzluğu ele almanın bu iki yöntemi, IEEE 754 kayan nokta standardının taslak versiyonuna dahil edildi . Ancak, yansıtmalı kapatma ( yansımalı olarak genişletilmiş gerçek sayı sistemi ), IEEE 754-1985'in sonraki resmi sayısından çıkarıldı. 80287, bir seçenek olarak yansıtmalı kapatmayı korudu, ancak 80387 ve sonraki kayan nokta işlemcileri (80187 dahil) yalnızca afin kapatmayı destekledi.

yardımcı işlemci arayüzü

8087, sonraki Intel yardımcı işlemcilerinden, doğrudan adres ve veri yollarına bağlı olması bakımından farklılık gösteriyordu. 8087, "11011" dizisiyle başlayan ve bunlara göre hareket eden, bir kelimeden (16 bit) daha uzun bellek işlenenlerine erişmek için gerektiği şekilde ana CPU'dan DMA talep eden ve ardından veri yolu kontrolünü hemen ana CPU'ya geri bırakan talimatları aradı. . Yardımcı işlemci vermedi işlemci talimatı tamamlanmıştı ve program açıkça iki işlemci senkronize etmek zorunda kaldı dek olduğu gibi, programın yürütülmesini tutmak ( "yukarıda açıklandığı Tasarım ve geliştirme " bölümünde). Yardımcı işlemci talimatının, yardımcı işlemcinin anladığı bir şekilde kodunu çözememesi durumunda olası bir kilitlenme sorunu vardı. Intel'in sonraki yardımcı işlemcileri, veri yollarına aynı şekilde bağlanmadılar, ancak ana işlemci G/Ç bağlantı noktaları aracılığıyla talimatlar aldılar. Bu, yürütme süresi cezası verdi, ancak yardımcı işlemci kabul etmeyi reddederse ana işlemci talimatı görmezden geleceği için olası kilitlenme sorunu önlendi. 8087, sıfırlama döngüsü sırasında veri yolunu izleyerek 8088'e mi yoksa 8086'ya mı bağlı olduğunu tespit edebildi.

8087, teorik olarak, 8086/8 ek talimatları işlerken eşzamanlı olarak çalışabiliyordu. Uygulamada, yardımcı işlemci, sonuncusu tamamlanmadan önce yeni bir talimat yayınladıysa, programın başarısız olma olasılığı vardı. Montajcı, her yardımcı işlemci işlem kodundan sonra otomatik olarak bir FWAIT talimatı ekleyecek ve 8086/8'i 8087 bittiğini bildirene kadar yürütmeyi durdurmaya zorlayacaktır. Bu sınırlama daha sonraki tasarımlardan kaldırıldı.

Modeller ve ikinci kaynaklar

Intel 8087 matematik yardımcı işlemci pin çıkışı

Intel 8087 yardımcı işlemcileri iki varyantta üretildi: biri seramik yandan sertleştirilmiş DIP (CerDIP) ve diğeri hermetik DIP (PDIP) ile ve aşağıdaki sıcaklık aralıklarında çalışmak üzere tasarlandı:

  • C, D, QC ve QD önekleri: 0 °C ila +70 °C (ticari kullanım).
  • LC, LD, TC ve TD önekleri: -40 °C ila +85 °C (endüstriyel kullanım).
  • MC ve MD önekleri: −55 °C ila +125 °C (askeri kullanım).

8087'nin tüm modellerinde 40 pinli bir DIP paketi vardı ve 5 voltta çalışıyordu ve yaklaşık 2,4 watt tüketiyordu. Daha sonraki Intel yardımcı işlemcilerinin aksine, 8087'nin ana işlemciyle aynı saat hızında çalışması gerekiyordu. Parça numarasındaki son ekler saat hızını tanımladı:

8087 saat hızları
Model numarası Sıklık
Intel 8087 5 MHz
Intel 8087-1 10 MHz
Intel 8087-2 8 MHz
Intel 8087-3 4 MHz
Intel 8087-6 6 MHz

Parça, AMD tarafından AMD 8087 olarak ve Cyrix tarafından Cyrix 8087 olarak ikinci olarak tedarik edildi. 8087'nin K1810WM87 klonu Sovyetler Birliği'nde üretildi .

halefler

8088 ve 8086 işlemcilerin yerini sonraki parçalar aldığı gibi, 8087 de yerini aldı. Diğer Intel yardımcı işlemcileri 80287 , 80387 ve 80187 idi . 80486 ile başlayarak, sonraki Intel işlemcileri ayrı bir kayan nokta yardımcı işlemcisi kullanmadı; FPU'nun devre dışı bırakıldığı değiştirilmiş bir 80486DX olan 80486SX hariç, neredeyse tamamı ana işlemci kalıbına dahil edildi. 80487 aslında tam gelişmiş olduğu 80486DX ekstra pin ile yongası. Kurulduğunda, 80486SX CPU'yu devre dışı bıraktı. 80486DX , Pentium ve daha sonra işlemci: işlemci üzerinde kayan nokta işlevleri içerir.

Referanslar

bibliyografya

  • Sanchez, Julio; Kanton, Maria P. (2007). Mühendisler ve Bilim Adamları için Yazılım Çözümleri . CRC Basın. ISBN'si 1-4200-4302-1.

Dış bağlantılar