FPU - Der ATARI ST bekommt Nachhilfe in Mathematik (1): Die Hardware

Seit einiger Zeit taucht verstärkt der Name MC 68881 in der Presse auf, womit der Floating Point Coprozessor der 68000-Familie von Motorola gemeint ist. Seit nunmehr einigen Wochen wird diese Erweiterung auch für den ST angeboten. Was ein Coprozessor ist, ob und wie man ihn einsetzen kann, und was er für Vorteile bringt, soll in dieser und der nächsten Ausgabe genauer erläutert werden.

In dieser Ausgabe beschäftigen wir uns vorwiegend mit der Hardware, während wir nächsten Monat auf die unterstützende Software eingehen, dabei werden auch die Programmiersprachen unter die Lupe genommen, die die FPU (Floating Point Unit) schon unterstützen. Auch die berühmten Benchmarks werden nicht fehlen.

Alle Mikrocomputersysteme sind nach einem ähnlichen Schema aufgebaut, wie es in Bild 1 zu finden ist. Dieser Mikroprozessor hat einen Taktgeber, eine Befehlsdekodierung, ein internes RAM, womit die Register des Prozessors gemeint sind, ein internes ROM, in dem das Mikroprogramm (Firmware) vorhanden ist, und eine ALU -- eine Arithmetisch Logische Einheit (Unit). Dieser Teil des Prozessors ist dem Durchführen von arithmetischen und logischen Verknüpfungen gewidmet, d. h. er hat die Aufgabe bei einfacheren Prozessoren - eine Addition oder Subtraktion oder bei komplexeren Prozessoren wie dem 68000 sogar Multiplikationen, beziehungsweise Divisionen durchzuführen. Obwohl diese Unterstützung des Prozessors im Vergleich zu älteren Prozessortypen, wie zum Beispiel dem 6502 in Bezug auf die Multiplikation schon enorm ist, darf nicht vergessen werden, daß dies nur für den Bereich der GANZEN Zahlen zutrifft!

Diese beachtenswerte Einschränkung findet ganz besonders im wissenschaftlichen Bereich (Universitäten) der Rechnernutzung wenig Zuspruch. Dort ist man ganz besonders auf schnelle Berechnungen angewiesen, wobei Kommazahlen eine überragende Bedeutung haben - man denke hier zum Beispiel an die Fourier-Analyse oder zum Beispiel an CAD, das Computer Aided Design. Die Wichtigkeit der Kommazahlen zeigt sich besonders in der Geschwindigkeitsangabe der Großrechner, die nicht mehr in normalen OPs (operations), sondern in sogenannten FLOPs angegeben werden, den FLoating Point OPerations, also Fließkomma-Operationen.

Es leuchtet sicherlich ein, daß die Verarbeitung von Kommazahlen ein größeres Maß an Mehraufwand erfordert, als die einfache Behandlung von ganzen Zahlen. Was also liegt näher, als der eigentlichen ALU des Prozessors eine Hilfe zukommen zu lassen. Dies wird durch einen sogenannten Coprozessor erreicht. Bei der INTEL-Familie der 8088, 8086 etc. findet man beispielsweise den 8087, während MOTOROLA die 68000-Familie mit ihrem MC 68881 bereichert.

Was ist ein Coprozessor?

Will man eine hohe Effizienz erreichen, so muß man versuchen, Prozessor und Coprozessor möglichst direkt miteinander kommunizieren zu lassen. Motorola hat deshalb sein Flagschiff, den MC68020, also die 32Bit-Version des MC68000, optimal auf den MC68881 abgestimmt. Die Register der FPU können direkt im MC 68020 angesprochen werden, obwohl sie sich in der Realität im Coprozessor befinden. Das bedeutet, daß sich die Zusammenarbeit von Prozessor und Coprozessor für den Programmierer dahingehend äußert, daß er das Gefühl hat, Prozessor und Coprozessor seien eine Einheit. Dabei erfolgt der Zugriff über ein bestimmtes Busprotokoll, das über den Line-F-Trap geregelt wird, den der MC68020 bezogen auf den MC68881 hardwaremäßig unterstützt. Diese Unterstützung fehlt bei den „kleineren“ Typen der 68000-Familie, so daß ein Floating Point Befehl einen TRAP-Sprung auslöst, der dann die Argumente des Befehls an den Coprozessor weiterleitet und damit den Zugriff auf den Coprozessor regelt.

Bild 1: Aufbau des Mikroprozessors

Würde man also solange wie kein Coprozessor vorhanden ist, Software-Routinen zur Berechnung von Fließkommaoperation im Betriebssystem über Line-F einbinden, könnte man mit der Änderung eines Vektors bei vorhandenem Coprozessor allen(!) Programmen die Schnelligkeit des Coprozessors zukommen lassen. So ist es beim ATARI nicht geschehen: beider wurde der Line-F-Trap nicht für das MC68881-Coprocessor-Interfacing vorgesehen, sondern für Grafikzwecke eingesetzt - so werden zum Beispiel AES-Routinen über Line-F aufgerufen. Dennoch kann die FPU verwendet werden, da sie auch als Portbaustein angesprochen werden kann und der Line-F-Trap nicht zwingend ist.

Also doch kein Coprozessor im ST!

Obwohl durch diesen schon benutzten Line-F-Trap einiges an Eleganz verloren geht, bedeutet es nicht, daß die im ST verwendete Methode langsamer ist! Vielmehr werden die Adressen direkt angesprochen, dies wird an einem späteren Beispiel näher erläutert. Diese Tatsache bedeutet nicht, daß die FPU dadurch nicht mehr als Coprozessor wirkt, sie wird aber nicht wie üblich angesprochen. Da der MC68000 nicht wie der 68020 selbständig entscheiden kann, ob die Fließkommaoperation durch Software oder durch die FPU verarbeitet werden soll, ist die erreichte Geschwindigkeitssteigerung gleich NULL, so daß vorhandene Software ohne Anpassung um keine einzige Millisekunde schneller werden. Einige Firmen sind allerdings schon dabei, ihre Programme speziell auf die FPU anzupassen, so auch einige Programmiersprachenhersteller.

Bedenkt man, daß trigonometrische Funktionen wie beispielsweise SIN und COS durch eine Reihenentwicklung (Taylor) erzeugt werden, so kann die Leistung eines Floating-Point-Coprozessors nicht unterschätzt werden. Programmiert man diese selbst, sind Zeiten von 10 Millisekunden keine Seltenheit. Nicht zu vergessen ist die sehr hohe Genauigkeit (80 Bit-Fließkomma!, das DOUBLE-Format in diversen Compilern hat 64 Bit), die der MC68881 besitzt und die trotz allem kaum die Geschwindigkeit beeinflußt. So dauert ein Sinus auf dem ST mit FPU, die mit 16 MFIz, man beachte, doppelt so hoch getaktet ist wie die CPU, circa 29 Mikrosekunden, was einer Steigerung von etwa Faktor 350(!) auf die oben erwähnten 10 Millisekunden entspräche (Dieses Beispiel ist sogar noch untertrieben, wie Sie nächsten Monat anhand der BENCHMARK-Test erkennen werden). Zieht man nicht zuletzt das vereinfachte Block-Diagramm (Bild 3) der FPU in die Betrachtungen ein, so ist es sicherlich nicht schwer zu akzeptieren, daß die FPU gar kein komplexerer Chip als die eigentliche CPU MC68000 ist!

Bild 2: Typische Coprozessor Konfiguration

Die LD-FPU

Die Firma LISCHKA DATENTECHNIK ist der erste Anbieter einer Fließkomma-Einheit, die direkt für den ST erstellt wurde. Deren Coprozessorplatine liegt uns als Exemplar vor. Der Lieferumfang des Paketes ist, was nicht unbedingt der Regel entspricht, als äußerst zufriedenstellend zu bezeichnen. Neben der eigentlichen Platine und natürlich dem Coprozessor selbst, liefert Lischka Datentechnik „mehr als ein Pfund Dokumentation“ (Zitat aus der Produktbeschreibung der Firma). Dieses Pfund besteht aus einer ausführlichen Einbaubeschreibung, sowie einer Einführung in die Programmierung des Floating Point Coprozessors. Außerdem wird das sehr gute (und nicht billige) von MOTOROLA herausgegebene USER’s MANUAL des MC68881 mitgeliefert, das auch die letzten Fragen des Programmierers und Entwicklers beantworten wird. Mehrere Libraries für Compilersprachen sind zur Nutzung des MC68881 auf einer Diskette vorhanden.

Der Einbau der LD-FPU

Der Einbau der LD-FPU ist in mehreren Varianten möglich, bei denen man aber schon ein wenig Geschick aufbringen sollte. Für diejenigen ST-Besitzer, deren Prozessor gesockelt ist, gestaltet sich der Einbau recht einfach, da sie nur den Prozessor heraushebeln, die Platine einsetzen und den Prozessor auf die Platine setzen müssen. Danach muß noch ein PIN der CPU bearbeitet werden (BERR), aber dazu unten mehr.

Ist der Prozessor gesockelt, so wird es ein wenig knifflig. Dann nämlich muß die Platine direkt auf den Prozessor gelötet werden, was handwerkliches Geschick voraussetzt, da die Lötstellen nicht zu lange erhitzt und auch keine Verbindungen zwischen den Pins hergestellt werden dürfen. Anstatt des direkten Auflötens der LD-FPU-Platine, kann auch zuerst ein Sockel auf die CPU gelötet und dann die Platine in den Sockel gesteckt werden. Der Nachteil dieser Methode ist, daß der Platz im Atari ST sehr eingeschränkt ist und beim Einbau des Abschirmblechs darauf geachtet werden muß, daß dieses den Koprozessor nicht berührt.

Auf eine Nachfrage hin, soll hier darauf hingewiesen werden. Der Steckplatz der LD-FPU sollte möglichst freigelassen werden, denn ATARI hat angekündigt, ihren Blitter im 68000er-Gehäuse auszuliefern. LD-FPU-Besitzer müßten demnach ihren Blitter dann nur noch in die Fassung einsetzen.

Außer dem Einbauen der eigentlichen LD-FPU-Platine muß noch ein weiterer Arbeitsgang durchgeführt werden. Dieser betrifft PIN 22 der CPU. Der PIN 22 entspricht dem BUS-Error-Signal und muß, aufgrund des neugenutzten Speicherbereiches, über die FPU-Platine und dann an die CPU geführt werden. Die BERR-Leitung gibt genau dann eine Meldung aus, wenn Zugriffe auf Speicherbereiche, die gesperrt oder nicht vorhanden sind, stattfinden. Die FPU befindet sich aber nicht im normal verfügbaren Adressraum, so daß der GLUE-Chip dies bemerkt und eine Fehlermeldung über die BERR-Leitung an die CPU weitergibt. Da diese Leitung bei Umgestaltung aber nun über die FPU-Platine führt, wird die Bus-Error-Meldung nur dann weitergegeben, wenn sie sich nicht auf die FPU bezieht.

Der Test der ganzen Einheit wird schließlich durch fertige, mitgelieferte Test- und Demoprogramme erleichtert, so daß der Käufer sicher sein kann, daß der Einbau erfolgreich verlaufen ist.

Der professionelle Einbau ist recht preiswert

Sicherlich mag dieser Arbeitsaufwand einigen Käufern zu hoch sein, aber man hat für Abhilfe gesorgt: LD bietet dem Kunden einen kompletten Einbau inclusive Versand für nur DM 69,- Aufpreis - eine preislich interessante Alternative.

Bild 3: Der vereinfachte Aufbau der FPU MC 68881

Die Ablösung für den MC 68881 ist der MC 68882

Zum Schluß dieses Artikels möchte ich noch auf einen Leckerbissen hin-weisen, den Motorola für das 1. Quartal 1988 angekündigt hat: den MC68882. Dieser Floating Point Processor wird PIN- und Funktionskompatibel zum MC68881 sein, so daß er einfach austauschbar ist! Er ist von Hause aus um einiges schneller als sein kleinerer Bruder, was unter anderem an der verbesserten und erweiterten internen Parallelverarbeitung liegt. Eine Nachfrage bei Lischka Datentechnik ergab, daß die neue FPU auch für den ST erhältlich sein wird sobald Stückzahl, und Preis akzeptiert werden können.

Ganz aktuell:. Ab sofort muß die BERR-Leitung nicht mehr bearbeitet werden, da ATARI CORP. die Leitung des GLUE als OPEN-COLLECTOR beschrieben hat. Dadurch entfällt ein weiterer Arbeitsgang beim Einbau der LD-FPU, der dadurch noch einfacher wird!

Eine weitere brandaktuelle Meldung ist, daß der Blitter tatsächlich im Gehäuse von der gleichen Größe des 68000 in Zusammenhang mit neuen ROMs ausgeliefert wird, wobei uns als Datum etwa Mitte November mitgeteilt wurde — LD-FPU-Besitzer müssen diesen dann nur auf die FPU-Platine aufstecken.

Bezugsquelle:

[1] LD-FPU DM 729,-

incl. reichhaltiger Dokumentation u. a. [2] und Libraries für verschiedene Compiler

Lischka Datentechnik Hochstraße 22 4173 Kerken 2

Literatur:

[2] MC 68881 Floating Point Coprocessor User’s Manual MOTOROLA
[3] MC 68020 Microprozessor User’s Manual MOTOROLA

Übersicht 1: Die vom MC 68881 unterstützten arithmetischen Funktionen und Befehle

   
FABS Absolutbetrag
FCOS Cosinus
FACOS Arcus Cosinus
FCOSH Cosinus Hyperbolicus
FSIN Sinus
FSINH Sinus Hyperbolicus
FASIN Arcus Sinus
FTAN Tangens
FTANH Tangens Hyperbolicus
FATAN Arcus Tangens
FATANH Arcus Tangens Hyperbolicus
FSINCOS gleichzeitiger Sinus und Cosinus!
FTENTOX 10*
FET OX,FET OXM1 Exponentialfunktion, minus 1
FLOGN,FLOG2,FLOG 10 Natürlicher-, Zweier-, Zehnerlogarithmus
FADD Addition
FSUB Subtraktion
FMUL Multiplikation
FDIV Division
FSQRT Quadratwurzel
FMOD Modulo-Funktion
FNEG Negieren
FTWOTOX 2*
FSCALE 2* mit Integer
FBcc, FDBcc Bedingter Sprungbefehl, mit Dekrement
FTRABcc Bedingter TRAP
FCMP Fließkommazahl-Vergleich
FGETEXP Ermitteln des Exponenten
FGETMAN Ermitteln der Mantisse
FINT, FINTRZ Ermitteln der Ganzzahl, gerundet

und andere...
Im FPU-ROM enthaltene Konstanten: PI, LOG10(2), e, LOGj(e), LOG10(e), 0.0, LN(2), LN(10) mohioHoqoMO^iO64,



Aus: ST-Computer 11 / 1987, Seite 18

Links

Copyright-Bestimmungen: siehe Über diese Seite