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