| 4.1 Systemsteuerbausteine | 4.3 Interrupt-Controller |
In den vorhergehenden Kapiteln wurde bereits mehrfach erwähnt, daß in komplexen Mikrorechner-Systemen in der Regel mehrere Komponenten existieren, die selbständig auf den Systembus zugreifen können. Sie wurden zusammenfassend als Bus Master bezeichnet. Zu ihnen gehören z.B. Coprozessoren und DMA-Controller (s. Abschnitt 4.4). In vereinfachter Form zählt dazu aber auch die Auffrischlogik eines DRAM-Controllers, der sich mit dem µP den Zugriff zum Arbeitsspeicher teilt. (Weitere Controller werden Sie in diesem und dem folgenden Kapitel kennenlernen.)
Diese Bausteine fordern vom Prozessor über das HOLD-Signal den Zugriff zum Systembus an und bekommen über das HOLDA-Signal die Bestätigung, daß der Prozessor den Bus freigegeben, d.h. seine Ausgangstreiber hochohmig geschaltet hat. Während der Busfreigabe ist der Prozessor u.U. unbeschäftigt (idle), was nur dadurch vertretbar ist, daß die Busbelegung durch die anderen Bus Master einen relativ geringen Zeitanteil benötigt. Denn charakteristisch für diese Bausteine ist, daß sie stark eingeschränkte Prozessorfunktionen besitzen und nur zeitweise auf den Bus zugreifen müssen. Zwischen ihren Zugriffen liegen stets mehr oder weniger große Pausen, die dem µP die ungestörte Benutzung des Systembusses ermöglichen.
Anders ist die Lage, wenn in einem System mehrere Prozessoren arbeiten. Ein
sehr großer Prozentsatz aller Prozessorzyklen bedingt den Zugriff zum
Systembus. Deshalb bedeutet es eine wesentliche Verminderung der Prozessorleistung,
wenn alle Prozessoren nur über den gemeinsamen Systembus Daten transportieren.
Daher besitzt ein Prozessor in einem Multiprozessor-System (Multiprocessor
System) in der Regel ein lokales Bussystem, über das er allein mit
seinem "privaten" Arbeitsspeicher und seinen individuellen Schnittstellen
Daten austauschen kann. (Genauer muß man in diesem Fall also von einem
Multimikrorechner-System sprechen.) Die Kommunikation zwischen den verschiedenen
Prozessoren des Systems geschieht über eine gemeinsame Komponente. Das
können z.B. parallele oder serielle Schnittstellen, ein gemeinsamer Bus
oder aber auch ein gemeinsamer Speicher sein. Die letztgenannte Möglichkeit
ist sicher eine der am häufigsten realisierte. Sie ist im Bild 4.2-1 beispielsweise
für acht Mikrorechner (µR ) skizziert.
Wie oben angedeutet, bestehen die Mikrocomputer (µR0,..,µR7) aus einem Mikroprozessor (µP), einem Speicher (SP) und ihren individuellen Schnittstellen (I/O). Sie werden durch Tristate-Treiber (TR) mit dem Systembus verbunden bzw. von ihm getrennt. In seinem lokalen System kann jeder Prozessor unabhängig und parallel zu den anderen Prozessoren arbeiten. Am Systembus ist der gemeinsame Speicher (Shared Memory) angeschlossen. Es können an ihm aber auch zusätzliche Schnittstellen hängen, die von allen Prozessoren gemeinsam betrieben werden.
In jedem µR existiert ein Baustein, der den Zugriff zum Systembus regelt, indem
er die Tristate-Treiber zwischen seinem lokalen Bus und dem Systembus an- oder
abschaltet. Dieser - in starker Vereinfachung - Bus
Arbiter (BA "Schiedsrichter") genannte Steuerbaustein fordert
bei Bedarf die ausschließliche Benutzung der gemeinsamen Systemkomponenten
an. Diese Anforderung kann er z.B. an einen Prioritätsdecoder, der bei
gleichzeitigen Zugriffswünschen für eine eindeutige Entscheidung sorgen
muß. Dieser Decoder kann – wie im Bild 4.2-1 - als externe, zentrale Komponente
vorgesehen oder aber dezentral in den Arbitern der Mikrorechner/Mikroprozessoren
integriert sein. Bei modernen Prozessoren ist der Arbiter (inklusive Prioritätsdecoder)
häufig auf dem Prozessorchip integriert und erlaubt die einfache Kopplung
von wenigen Prozessoren (typisch bis zu 8).
In der Regel darf ein Prozessor den Buszugriff solange behalten, bis ein Prozessor mit höherer Priorität diesen verlangt. Nach Durchführung der Datenübertragung zieht der ausgewählte µR seine Busanforderung selbständig zurück. Daraufhin kann der Buszugriff an die nächste Komponente weitergereicht werden.

Bild 4.2-1: Aufbau eines Multimikrorechner-Systems
| Selbsttestaufgabe 4.2-1: (–>Lösungsvorschlag) |
|---|
|

Bild 4.2-2: Daisy Chain aus Busarbitern
Das Daisy-Chain-Verfahren braucht erheblich mehr Zeit zur Buszuteilung als das Independent-Request-Verfahren, da das Bestätigungssignal alle Arbiter durchlaufen muß und in jedem verzögert wird. Außerdem ist die Zuteilungszeit dadurch von der Lage des anfordernden Arbiters in der Kette abhängig.
Gemeinsam ist beiden beschriebenen Verfahren, daß jeder Arbiter des Systems
über einen (bidirektionalen) Ein-/Ausgang an einer Steuerleitung
hängt. Diese zeigt an, ob aktuell auf den Systembus zugegriffen wird oder
nicht. Jeder ausgewählte Mikrorechner greift erst dann auf den Bus zu,
wenn er durch ein H-Signal auf der
-Leitung
feststellt, daß dieser nicht mehr benutzt wird. Dadurch ist der zuletzt
aktive Systembus-Master in jedem Fall in der Lage, einen augenblicklich durchgeführten
Datentransfer korrekt zu Ende zu führen, auch wenn er danach durch einen
anderen Arbiter vom Systembus verdrängt wird. Der "neue" zugriffsberechtigte
Arbiter legt nun selbst die
-Leitung
auf L-Potential und zeigt dadurch allen anderen µRn die Belegung des Busses
an. Somit ist gewährleistet, daß es nicht zu Zugriffskonflikten auf
dem Systembus kommen kann.
Im Bild 4.2-3 ist der Aufbau eines Busarbiters und seine Einbindung zwischen lokalem Bus und Systembus grob skizziert.
Der Arbiter besteht im wesentlichen aus zwei synchronen Schaltwerken, die unabhängig voneinander vom Takt des lokalen Busses bzw. des Systembusses getrieben werden. Der letztgenannte Takt hat die Aufgabe, im Gesamtsystem aus asynchron arbeitenden µCs für exakt definierte Zeitabläufe zu sorgen.
Für jeden µP erscheinen die Zugriffe auf den Systembus wie gewöhnliche Zugriffe auf seinen lokalen Bus, d.h. insbesondere, daß es keine speziellen Steuersignale zur Unterscheidung beider Zugriffsziele gibt. Durch einen Adreßdecoder wird anhand der vom µP ausgegebenen Adresse untersucht, wo das Ziel (bzw. die Quelle) des eingeleiteten Buszyklus liegt. Wird ein Ziel außerhalb des µRs erkannt, wird über das Anforderungssignal
des Adreßdecoders die µP-Schnittstelle des Arbiters angesprochen.
Im Extremfall, bei dem ein Prozessor des Systems über keine lokalen Komponenten verfügt, muß der
-Eingang seines Arbiters konstant auf L-Potential gelegt werden. Hier führt dann jeder Buszyklus zu einer Anforderung des Systembusses.
Die µP-Schnittstelle reicht die Anforderung an die Komponente des Arbiters weiter, deren Aufgabe die Erzeugung der Systembussteuersignale ist. Wie oben beschrieben, wird nun in Abhängigkeit vom gewählten Verfahren der Zugriff zum Systembus angefordert bzw. gewährt und zwar über die Signale:

Bild 4.2-3: Aufbau eines Busarbiters
Sobald der Arbiter über das Signal
die Freigabe des Busses feststellt, werden durch das Signal EN (Enable) die Treiber zum lokalen Bus aktiviert. Diese sind für die Steuerleitungen und den Adreßbus unidirektional, für den Datenbus bidirektional ausgelegt. Die Richtungssteuerung für den Datenbus wird durch das Signal DIR (Direction) vorgenommen, das aus dem Lese-/Schreibsignal R/
in der µP-Schnittstelle abgeleitet wird.
Während der Wartezeit auf die Systembuszuteilung (, die u.U. relativ lange dauern kann,) und der Beendigung der Datenübertragung der Prozessor bzw. seine Systembus-Schnittstelle diee ausgegebene Adresse konstant auf dem lokalen Bus zur Verfügung. Dazu fügt er/sie gegebenenfalls fortlaufend Wartezyklen ein. Durch das
-Signal der angesprochenen Systembuskomponente, das über einen der Steuerbus-Treiber übertragen wird, erfährt der Prozessor von der Ausführung des Datentransfers. Einfache Prozessoren können erst danach ihre Arbeit fortsetzen, komplexere können natürlich intern gespeicherte Befehle und Daten während der Wartezeit weiter verarbeiten. Obwohl also der Systembus einen eigenen Takt zur Synchronisation seiner spezifischen Steuersignale besitzt, wird der eigentliche Datentransfer von jedem Prozessor autonom durchgeführt, synchronisiert durch seinen eigenen Takt.
| 4.1 Systemsteuerbausteine | 4.3 Interrupt-Controller |