Politechnika Częstochowska
Wydział Inżynierii Mechanicznej i Informatyki
Koprocesory
Opracowały:
Ewa Wolna
Marzena Bąk
Gr. III
Częstochowa, 2000/2002
Koprocesor to układ zajmujący się obliczeniami w zbiorze liczb całkowitych
i rzeczywistych (zmiennoprzecinkowych), które mogą być zapisane w różnych formatach.
Początkowe układy - 8087, 80287, 80387 nie były zadziwiająco szybkie. Współczesne
procesory (np. z linii Pentium) posiadają bardzo szybki koprocesor, szybszy w obliczeniach
od samego procesora. Przykładowo obliczenie 5,123456 * 3,123456 zajmie mniej czasu na
koprocesorze niż obliczenie 5 * 3 za pomocą procesora.
Starsze modele procesorów firmy Intel mogą współpracować z koprocesorem, a od
momentu zaprezentowania przez firmę Intel procesor 486DX z wbudowanym
koprocesorem arytmetycznym, wszystkie procesowy Intela (a także AMD i Cyrix) mają
wbudowany taki układ. Koprocesory realizują sprzętowo operacje zmiennoprzecinkowe,
które bez nich nadmiernie obciążałyby procesor. Układy te przyśpieszają pracę komputera,
jednak tylko wtedy, kiedy korzystamy z oprogramowania wykorzystującego ich zalety.
Koprocesor może wykonywać operacje matematyczne wysokiego poziomu - np.
dzielenia długich liczb, funkcje trygonometryczne, pierwiastkowanie i logarytmy – od 10
do 100 razy szybciej niż procesor główny. Jednostka arytmetyczno – logiczna procesora
operuje na liczbach całkowitych, wykonując na nich operacje dodawania, odejmowania i
mnożenia. Mikroprocesor jest przystosowany do wykonywania takich operacji, dlatego nie
obciążają one niepotrzebnie koprocesora arytmetycznego.
Zbiór instrukcji koprocesora arytmetycznego różni się od listy rozkazów zwykłego
procesora. Do programu należy wykrycie obecności koprocesora i tylko wówczas jest
możliwe wykonywanie specjalnych instrukcji koprocesora, w przeciwnym wypadku
koprocesor zużywa tylko prąd i nie robi nic więcej. Na szczęście większość współczesnych
programów korzystających z koprocesora potrafi go prawidłowo wykryć i obsłużyć.
Do programów takich zaliczają się zwykle zaawansowane programy matematyczne:
arkusze kalkulacyjne, systemy zarządzania bazą danych, programy statystyczne i graficzne
oraz programy wspomagające projektowanie (ang. Computer-aided design, CAD). Edytory
tekstu nie współpracuję z koprocesorem.
2
Koprocesor 8087
Firma Iintel zaprezentowała swój procesor 8086 w roku 1976. Koprocesor
arytmetyczny 8087, współpracujący z 8086, określony był jako numeric data processor
(procesor numeryczny), math coprocessor (koprocesor arytmetyczny) albo po prostu math
chip. Podzielony jest funkcjonalnie na dwa mogące pracować niezależnie bloki:
-
blok rozkazów sterujących i współpracy z magistralą
-
blok rozkazów numerycznych
Blok rozkazów sterujących i współpracy z magistralą zapewnia pobieranie rozkazów
I argumentów, wysyłanie wyników do pamięci, a także pozwala wysyłać do pamięci stan
układu i go odtwarzać. Wykonuje także rozkazy sterujące, często niezależnie od tego, czy
blok rozkazów numerycznych jest zajęty wykonywaniem obliczeń czy też nie.
blok rozkazów numerycznych wykonuje operacje na argumentach, które są
umieszczone w bloku rejestrów zorganizowanym w stos. Rejestry stosowe są rejestrami
80-bitowymi. Duża szerokość szyn wewnętrznych i układów arytmetycznych pozwala
uzyskać dużą szybkość przy zachowaniu bardzo dobrej precyzji obliczeń. Szesnastobitowy
rejestr znaczników (ang. Tag register) składa się z ośmiu dwubitowych pól, w których
umieszczona jest syntetyczna informacja dotycząca zawartości rejestrów stosu.
Lista rozkazów układu 8086 zawiera dwubajtowy rozkaz esc (ang.. Escape) umożliwiający
rozszerzenie listy rozkazów o rozkazy realizowane w koprocesorze.
Układ 8087 został przystosowany do wykonywania operacji matematycznych wysokiego
poziomu, z szybkością i dokładnością wielokrotnie przewyższającą procesor główny.
Podstawową korzyścią płynącą ze stosowania koprocesora jest wzrost szybkości w
programach wykonujących intensywne obliczenia, np. w arkuszach kalkulacyjnych.
Korzystanie z koprocesora pociągało jednak za sobą kilka niedogodności, m.in.
konieczność obsługi układu przez aplikacje, dodatkowy koszt, zwiększony pobór energii
i większe wydzielenie ciepła.
Podstawową niedogodnością związaną z używaniem koprocesora jest to, że wzrost
szybkości zauważymy tylko w programach napisanych specjalnie z uwzględnieniem
koprocesora – i to nie w przypadku wszystkich operacji. Tylko programy wykonujące
intensywne obliczenia – arkusze kalkulacyjne, programy statystyczne, programy CAD
i programy inżynierskie obsługują koprocesor. Nawet wówczas osiągnięte efekty mogą
zależeć od konkretnej aplikacji i obsługa koprocesora jest ograniczona do niektórych
dziedzin. Np. wersje programu Lotus 1-2-3 wykorzystujące koprocesor nie używają go do
3
zwykłych operacji, takich jak dodawanie, odejmowanie, mnożenie i dzielenie. Aplikacje ,
które z reguły nie wykorzystują koprocesora, to edytory tekstów, programy komunikacyjne
i programy zarządzające bazą danych.
rys.1 Architektura koprocesora
4
Koprocesor 80287
Koprocesor 80287 ma strukturę wewnętrzną identyczną z układem 8087, ma jednak
identyczne rozmieszczenie wyprowadzeń. Zarówno koprocesor 80287, jak i 8087 pracują
tak, jakby były identycznymi układami.W większości procesor 80286 dokonuje podziału
częstotliwości zegara przez dwa. Koprocesor 80287 dzieli zewnętrzna częstotliwość przez
3. Z tego powodu w większości komputerów at koprocesor 80287 pracuje z częstotliwością
trzy razy mniejszą od częstotliwości zegara systemowego, a równą dwóm trzecim
częstotliwości procesora 80286. Ponieważ układy 80286 i 80287 pracują asynchronicznie,
nie współpracują ze sobą w sposób tak wydajny jak 8088 i 8087. Koprocesory 8087 i
80282 pracują przy określonej częstotliwości z z jednakowa wydajnością. Układ 80287 nie
przewyższa pod żadnym względem koprocesora 8087, inaczej niż procesor 80286, który
stanowi krok naprzód w stosunku do procesorów 8086 i 8088. W większości komputerów
at wzrost wydajności uzyskany na skutek dodania koprocesora arytmetycznego jest mniej
zauważalny niż dodanie koprocesora w komputerze pc lub xt albo 80386.
Porównując schemat ze schematem koprocesora 8087, można zauważyć, że układ
adresowy układu 8087 został zastąpiony przez układ współpracy z magistralą. Także
sygnały współpracy z magistralą lokalną zostały zmienione. Dotyczy to zwłaszcza szyny
danych DO-D15 koprocesora 80287. W układzie 8087 jest to multipleksowana szyna
adresów
i
danych.
Blok
rozkazów
numerycznych
nie
został
zmieniony.
Multipleksowana szyna danych umożliwia zwiększenie przepustowości magistrali, ale
powoduje konieczność zmiany zasad współpracy z koprocesorem 80287. Utrzymanie
zasady obserwacji adresów i aktywnego oddziaływania koprocesora na linie adresowe nie
byłoby, racjonalne ze względu na konieczność znacznego zwiększenia liczby
wyprowadzeń sygnałów z obudowy.
5
Rys.2 Architektura koprocesora 80287
Koprocesor 80387
Koprocesor 80387 pracuje asynchronicznie w stosunku do procesora, jednak
komputery 386 są zaprojektowane w ten sposób, że koprocesor pracuje z częstotliwością
procesowa głównego. W przeciwieństwie do koprocesora 80287, który różni się od 8087
jedynie rozmieszczeniem końcówek. 80387 jest układem o wysokiej wydajności,
przystosowanym specjalnie do współpracy z procesorem 386.
6
Wszystkie układy 387 są wykonywane w technologii Cmos, charakteryzującej się niskim
poborem mocy. Są dwie wersie układu387: koprocesor 80387dx, przeznaczony do
współpracy z procesorem 386dx, i koprocesor 387sx współpracujący z procesorami 386sx,
Sl i Slc.
Firma Intel oferowała początkowo koprocesor 387dx w wersjach pracujących a różnymi
częstotliwościami zegara. Jednak kiedy została opracowana wersja 33mhz, to trzeba było
zmniejszyć maskę fotograficzna układu. Zaowocowało to wzrostem wydajności
koprocesora o około 20 procent.
Architektura koprocesora 80387
Koprocesor 80387 umożliwia szybką realizację obliczeń numerycznych na tej samej
zasadzie co koprocesory 8087 i 80287. Ze względu na to, że mikroprocesor 80386 ma 32bitową szynę danych, uzasadnione było opracowanie koprocesora, który mógłby
współpracować z mikroprocesorem 80386 właśnie przy użyciu przesłań 32-bitowych.
Protokół współpracy układów 80386 i 80387 jest podobny do protokołu zastosowanego
w układach 80286 i 80287. Dzięki temu możliwa jest realizacja współpracy w układzie:
mikroprocesor 80386 i koprocesor 80287. Układ 80386 w czasie trwania sygnału Reset
bada sygnały Error# i Busy#. Na podstawie sygnału Busy# stwierdza, czy jest dołączony
koprocesorów. Natomiast na podstawie poziomu sygnału Error# może określić typ
koprocesora. Sygnał ten dla koprocesora 80387 w czasie zerowania systemu jest zerem.
Po rozpoznaniu typu koprocesora mikroprocesor 80386 realizuje odpowiedni tryb
współpracy. Koprocesor 80387 ma wielokrotnie większą moc obliczeniową niż koprocesor
8087. Wynika to ze zwiększenia częstotliwości sygnału zegara, skrócenia czasu wymiany
danych z pamięcią ze względu na zastosowanie 32-bitowej szyny danych oraz w wielu
przypadkach ze zmniejszenia liczby taktów niezbędnych do wykonywania poszczególnych
rozkazów. Wprowadzono także siedem nowych rozkazów, które umożliwiają skrócenie
procedur numerycznych.
7
Rys.3 Architektura koprocesora 80387
W tabeli zebrano modele koprocesorów i współpracujące z nimi procesory rodziny Intel
Lp.
Procesor
Koprocesor
1.
8086
8087
2.
8088
8087
3.
80286
80287
4.
80386SX
80387SX
5.
8038SL
80387SX
6.
80383SLC
80387SX
7.
80486SLC
80387SX
8.
80486SLC
80387SX
9.
80386DX
80387DX
10.
80486SX
80387SX DX2/OverDrive*
11.
80487SX*
Wbudowane FPU
12.
80486SX2
DX2/OverDrive**
13.
80486DX
Wbudowane FPU
8
14.
80486DX2
Wbudowane FPU
15.
80486DX4
Wbudowane FPU
16.
Pentium/Pentium-MMX
Wbudowane FPU
17.
Pentium Pro
Wbudowane FPU
18.
Pentium II
Wbudowane FPU
FPU Floating Point Unit (jednostka zmiennoprzecinkowa)
*Procesor 487SX jest procesorem 486DX ze zmienionym rozmieszczeniem końcówek i wyłączonym
koprocesorem. Włożenie układu 487SX do gniazda powoduje wyłączeni głównego procesora 486SX.
Od tej chwili za przetwarzanie odpowiedzialny jest 487SX.
**Procesor DX2/OverDrive odpowiada funkcjonalnie procesorowi SX2 z dodatkową jednostką FPU
W obrębie każdej grupy 8087 koprocesory różnią się miedzy sobą częstotliwością pracy.
Cyfra przyrostka po głównym numerze procesora, tak jak to przedstawia tabela oznacza
maksymalna częstotliwość pracy komputera.
Maksymalne częstotliwości koprocesorów arytmetycznych
Układ
Częstotliwość
Układ
Częstotliwość
8087
5MHz
80287
6MHz
8087-3
5MHz
80287-6
6MHz
8087-2
8MHz
80287-8
8MHz
8087-1
10MHz
80287-10
10MHz
Oznaczenie koprocesora arytmetycznego 387, jako przyrostek w nazwie układu, zawsze
wskazuje maksymalną częstotliwość pracy, podobnie jak w przypadku procesorów 486,
487 i Pentium. Np. układ 486DX2-66 jest przeznaczony do pracy z częstotliwością 66MHz.
Niektóre procesory posiadają układ mnożący częstotliwość zewnętrzną, dzięki czemu mogą
pracować z częstotliwościami różnymi od częstotliwości płyty głównej.
Większość komputerów z procesorem 386 lub starszym jest wyposażona w gniazdo
koprocesora, jednak komputery te nie są standardowo wyposażone w koprocesor. Kilka
modeli komputerów nie miało gniazda koprocesora z powodu obniżenia kosztów albo do
zaoszczędzenia miejsca w obudowie. Są to zazwyczaj tańsze wersje komputerów
biurkowych lub komputery przenośne PCjr.
9
Download

Koprocesor 8087 - Politechnika Częstochowska