| Inhaltsverzeichnis
|  | Übersicht Kapitel 2
2.1 Prinzipieller Aufbau eines Mikroprozessors |  | 2.3 Die Behandlung von Ausnahmesituationen

## 2.2 Das Steuerwerk

- 2.2.1 Funktion und Aufbau
- 2.2.2 Ein-/Ausgangssignale des Steuerwerks
- 2.2.3 Das Steuerregister

### 2.2.1 Funktion und Aufbau |

Das Steuerwerk (Control Unit CU) eines Mikroprozessors ist ein synchrones Schaltwerk. Bei einigen, insbesondere den älteren Mikroprozessortypen, wird die Erzeugung des benötigten Taktes extern in einem besonderen Baustein vorgenommen. Moderne Mikroprozessoren haben den Taktgenerator (Clock Generator) meist auf dem Chip integriert, so daß zur Stabilisierung der Frequenz extern nur noch ein Quarz zwischen zwei Anschlüsse des Prozessors gelegt werden muß (vgl. Bild 2.1-7). Im Taktgenerator wird durch einen freischwingenden Oszillator eine Rechteckschwingung mit fester Frequenz erzeugt. Heute sind Taktraten zwischen 1 und 650 MHz üblich; bis zum Jahr 2000 wird die 1-GHz-Grenze erreicht werden. Da einige Mikroprozessoren dynamische Schaltwerke sind, bei denen die Information in Kondensatoren gespeichert ist, darf bei ihnen die Taktfrequenz nicht unter einen Minimalwert fallen, sonst werden die Inhalte der internen Register nicht rechtzeitig aufgefrischt und gehen durch Leckströme verloren. Der Prozessortakt wird über einen Ausgang meist allen externen Komponenten als Systemtakt zur Verfügung gestellt, gegebenenfalls auf eine niedrigere Frequenz heruntergeteilt.
Manchmal werden im Taktgenerator noch weitere Zeitfunktionen abgeleitet. Dazu gehört z.B. die Erzeugung eines mit dem Prozessortakt synchronisierten Rücksetzsignals. Dieses Signal wird durch einen asynchron am RESET#-Eingang angelegten Impuls angestoßen und muß genaue zeitliche Spezifikationen erfüllen, um dem Prozessor eine geordnete Initialisierung zu ermöglichen. Diese wird durch ein (Mikro-)Programm des Steuerwerks durchgeführt und besteht vor allem darin, die internen Register mit bestimmten Anfangswerten zu laden. Das Rücksetzsignal wird bei einigen µP-Typen über einen RESET#-Ausgang auch allen anderen Komponenten des Systems zugeführt.

Exkurs 2.2-1: Zur Erzeugung eines RESET-Signals
Im Bild 2.2-1a ist eine kombinierte Schaltung dargestellt, die sowohl ein automatisches Rücksetzen des Prozessors nach dem Einschalten der Betriebsspannung (Power on Reset - POR) als auch ein manuelles Rücksetzen über einen Taster ermöglicht. Zur Funktion: Nach dem Einschalten der Spannungsversorgung (im Zeitpunkt t=0) steigt die Betriebsspannung +UB sehr rasch auf ihren Endwert (z.B. +5 V, s. Bild 2.2-1b). Die dabei auftretende Verzögerung ist hauptsächlich dadurch bedingt, daß zunächst alle Kapazitäten des Systems aufgeladen werden müssen. Dazu gehören insbesondere die Kondensatoren mit unterschiedlichsten Aufgaben, aber auch die Störkapazitäten der Leiterbahnen, der Gattereingänge und der Transistoren. Nachdem die Betriebsspannung ihren Endwert erreicht hat, beginnt der Oszillator mit der Ausgabe des Systemtaktes. Mit der durch die Widerstands-Kondensator-Kombination vorgegebenen Zeitkonstanten t =R C, im Beispiel t =200 ms (1 ms=10-3 Sekunden), wird der Kondensator C allmählich (exponentiell) aufgeladen. Diese Zeitkonstante t muß bei einigen µP-Typen so groß gewählt werden, daß die eben beschriebene Initialisierungsroutine im Prozessor vollständig ausgeführt werden kann. Vom Hersteller wird die benötigte Zeit tRC durch eine Mindestanzahl von Taktzyklen angegeben. Erst wenn die Kondensatorspannung (am Ausgang RESET) einen bestimmten Schwellwert US überschreitet, wird mit der nächsten Schwingung des Systemtakts (bzw. eine fest vorgegebene Anzahl von Schwingungen später) der Programmzähler (s. Bild 2.1-7) mit der Adresse des ersten auszuführenden Maschinenbefehls geladen und dadurch die Programmausführung gestartet. (Bei anderen Prozessortypen wird die Initialisierung erst nach dem Erreichen des Schwellwertes US und vor derAusführung des ersten Maschinenbefehls durchgeführt.) Wird während des laufenden Betriebs der Rücksetz-Taster betätigt, also geschlossen, so kann sich über ihn der Kondensator C gegen Masse entladen. Der Reihenwiderstand (R) sorgt dabei für eine Begrenzung des Entladestroms. Nach Lösen des Tasters können nun wiederum, wie oben beschrieben, die Initialisierungsroutine ablaufen und der Kondensator C sich über den Widerstand R erneut aufladen. Bild 2.2-1: Schaltung zum Rücksetzen des Prozessors 1 µF (Mikrofarad) = 10-6 Farad, 1 Farad = 1 As/V (Ampere x Sekunde/Volt) Der Vollständigkeit halber sei angemerkt, daß die Diode als Stromventil wirkt, das einen Strom nur dann zum UB-Anschluß fließen läßt, wenn dort ein niedrigeres Potential liegt als am RESET-Anschluß. Sie sorgt dafür, daß nach dem Abschalten der Betriebsspannung (UB=0 V) der Kondensator schnell entladen wird, und damit der RESET-Eingang des Prozessors nicht auf hohem Potential liegen bleibt.

Der Aufbau des Steuerwerks wurde bereits im Bild 2.1-7 skizziert. Darin kann man das Befehlsregister, den Befehlsdecod(ier)er, die eigentliche Steuerlogik sowie das Steuerregister unterscheiden. Das Steuerwerk des Mikroprozessors liefert nach einem durch ein Programm vorgegebenen Ablauf Steuersignale in festgelegter zeitlicher Reihenfolge an das Rechenwerk, an die anderen Komponenten des Prozessors und über die Prozessoranschlüsse auch an alle externen Komponenten des Mikroprozessor-Systems. Von einigen internen und externen Komponenten treffen Meldesignale ein, die vom Steuerwerk zu Entscheidungen über den weiteren Ablauf herangezogen werden. Dazu gehören insbesondere Programmverzweigungen und -unterbrechungen. (Genau genommen, liegt hier also keine Steuerung, sondern eine Regelung vor.)

Ein Programm für den Mikroprozessor besteht aus einer Folge von Maschinenbefehlen (Makrobefehle). Diese werden im Maschinencode vom Steuerwerk sukzessiv in den Prozessor geladen. (Auf den Aufbau der Makrobefehle gehen wir in Kapitel 7 ausführlich ein.) Bild 2.2-2 zeigt die Phaseneinteilung der Befehlsbearbeitung im Prozessor.

Bild 2.2-2: Phasenunterteilung der Befehlsbearbeitung

- In der Holphase (Fetch Cycle) werden die Maschinenbefehle vom Steuerwerk ins Befehlsregister geladen. Genauer gesagt, wird von jedem Maschinenbefehl der Teil übernommen, der die gewünschte Operation und die dazu benötigten Prozessorkomponenten spezifiziert. Dieser Befehlsteil wird Operationscode (OpCode) genannt. Das Befehlsregister ist häufig als Block aus mehreren Registern realisiert, da einige Prozessoren Operationscodes besitzen, die sich in der Anzahl der benutzten Wörter unterscheiden. In diesem Fall werden befehlsabhängig ein oder mehrere Register des Blocks belegt.

- Moderne Mikroprozessoren führen eine mit Opcode Prefetching bezeichnete Maßnahme zur Steigerung der Verarbeitungsgeschwindigkeit aus, für die eine eigene Prefetch-Phase eingeführt wird: Während der aktuelle Befehl decodiert oder in anderen Komponenten des Prozessors bearbeitet wird, wird schon einer oder mehrere der folgenden Befehle aus dem Speicher in den Prefetch-Register-Block geladen. Im Bild 2.2-3 ist im oberen Teil der zeitliche Signalverlauf (Timing) ohne Prefetching, im unteren mit Prefetching dargestellt. Deutlich wird, daß in diesem Fall die Systembus-Bandbreite besser genutzt wird. Nachteilig ist jedoch, daß vorzeitig geladene Befehle wieder aus dem Prefetch-Register(-Block) entfernt werden müssen, wenn sich herausstellt, daß der aktuell ausgeführte Befehl zu einer Programmverzweigung führt.

  Bild 2.2-3: Zeitlicher Ablauf des Befehls-Prefetching

  Im einfachsten Fall besitzt der Prefetch-Registerblock genau einen Eintrag. Viele Prozessoren besitzen einen ganzen Block von Registern, der als Warteschlange (Opcode Prefetch Queue) realisiert ist, bei der der aktuell zu bearbeitete Befehl am Ende ausgelesen wird, jeder andere Befehl darin um eine Position weiterrückt und am Anfang ein neuer Befehl eingetragen wird. Die Befehle werden also immer in der Reihenfolge abgearbeitet, mit der sie in die Schlange eintreten. Deshalb spricht man von einem FIFO-Speicher (First in First out). (Dieser ist aus Schieberegistern relativ einfach aufzubauen.)

- In der folgenden Decodierphase (Decode Cycle) wird durch den Befehlsdecod(ier)er der Befehl entschlüsselt ("interpretiert"), d.h. es wird insbesondere festgestellt, um welche Befehlsgruppe es sich handelt, welche Prozessorkomponente für die Ausführung zuständig ist sowie ob und welche Operanden benötigt werden. (Häufig wird die Decodierphase noch zur Holphase gezählt.)

- Je nach Implementierung können in der Decodierphase auch bereits die Operanden geladen werden. In diesem Fall ist die Operanden-Ladephase (Operand Fetch Cycle) nach Bild 2.2-2 eine Teilphase der Decodier-Phase und nicht der Ausführungsphase.

- In der Ausführungsphase (Execution Cycle) wird die eigentliche "Nutzleistung" erbracht, wie sie von den Befehlen verlangt wird. Überwacht und angeleitet durch die Steuerlogik, werden die Befehle durch die vom Decoder bestimmten Prozessorkomponenten "ausgeführt". Dazu generiert die Steuerlogik die erforderlichen Steuersignale, die über den Steuerbus alle Komponenten erreichen. Durch Meldesignale (im Bild 2.2-2: MS) können die Komponenten dem Steuerwerk Zustandsinformationen liefern und dadurch auf die Befehlsausführung Einfluß nehmen. Durch die Ablage bestimmter Informationen ("Programmierung") im Steuerregister kann ebenfalls die grundlegende Arbeitsweise der Steuerlogik beeinflußt werden. Typische Vorgaben sind z.B., ob Unterbrechungsanforderungen zugelassen werden sollen (Interrupt Enable Flag, s. Abschnitt 2.3), ob die virtuelle Speicherverwaltung (Memory Management) aktiviert ist oder ob der Prozessor im Benutzer- oder Betriebssystem-Modus (User/Supervisor Mode) arbeitet. Im einfachen Prozessor nach Bild 2.1-7 geschieht die Befehlsausführung durch das Operationswerk (i.b. die ALU) und das Rechenwerk. Moderne Hochleistungsprozessoren verfügen darüber hinaus über weitere Ausführungseinheiten (Execution Units).

- Zum Ende der Ausführungsphase werden die berechneten Ergebnisse in die Register oder in den Arbeitsspeicher zurückgeschrieben. Zur Erleichterung der "Fließbandverarbeitung" (Pipelining) wird bei modernen Mikroprozessoren die Abspeicherung der Ergebnisse in einer getrennten Phase, der Rückschreib-Phase (Write-Back Phase), durchgeführt.

- Wie im Abschnitt 1.2 erwähnt, ist die Steuerung moderner Prozessoren überwiegend aus festverdrahteter Logik (Hard-wired Logic) realisiert; die Steuerlogik einfacher Mikroprozessor besteht zum großen Teil aber (immer noch) aus Mikroprogramm-Steuerwerken (MPStW). Daher wollen wir in einem kleinen Exkurs auf die Realisierung eines MPStWs eingehen.

Exkurs 2.2-2: Grundlagen der Mikroprogramm-Steuerwerke
Wir betrachten hier einen einfachen Standardprozessor, dessen Steuerung als Mikroprogramm-Steuerwerke ausgelegt ist. Im Bild 2.2-4 ist sein MPStW skizziert. Bild 2.2-4: Aufbau eines einfachen Mikroprogramm-Steuerwerks In einem Festwertspeicher des Steuerwerks (Mikroprogramm-Speicher, Control Memory/Store) liegt für jeden Macrobefehl ein Mikroprogramm vor. (Da die Mikroprogramme vom Benutzer nicht geändert werden können, ist dieser Prozessor somit zwar mikroprogrammiert aber nicht mikroprogrammierbar; vgl. Abschnitt 1.2). Der Operationscode (OpCode) des Makrobefehls, der im Befehlsregister gespeichert ist, wird vom Befehlsdecod(ier)er (Decoder, Instruction Unit - IU) interpretiert ("entschlüsselt"). Der Decoder liefert als Ergebnis dem Mikroprogramm-Steuerwerk die Anfangsadresse eines Mikroprogramms zur Ausführung des anstehenden Befehl. Außerdem stellt der Decoder fest, wie viele Operanden der Befehl benötigt, wo sie zu finden sind und welche Register dazu benötigt werden. Ein Mikroprogramm besteht aus einer Folge von Mikrobefehlen (Micro Instructions, s. Bild 2.2-5). Die Abfolge dieser Befehle wird durch einen Takt gesteuert, der (z.B.) durch das letzte Bit der Mikrobefehle beeinflußt, d.h. gestartet und gestoppt wird. Den einzelnen Bits eines Mikrobefehls entsprechen Mikrooperationen, durch die die Auswahl- und Freigabesignale (Select, Enable) für die benötigten Komponenten bestimmt und die Datenwege im Prozessor und zu den externen Komponenten geschaltet werden. Das Steuerwort im Mikrobefehl kann in einzelne Felder unterteilt werden, deren Bits jeweils bestimmte Komponenten des Prozessors steuern, wie z.B. das Rechenwerk (s. Bild 2.2-5) Durch Verknüpfung der Signale mit dem Prozessortakt werden spezifische Steuertakte erzeugt, deren Flanken die Schaltzeitpunkte festlegen. Dadurch wird für die erforderliche zeitliche Abfolge der Komponentensteuerung gesorgt. Die Komponenten ihrerseits liefern Rückmeldesignale, aus denen über einen Multiplexer vom Steuerwort ein Signal ausgewählt und als Teiladresse an den Speicher gelegt werden kann. Auf diese Weise können, abhängig von einem bestimmten Zustand, Verzweigungen im Mikroprogramm durchgeführt werden. Schließlich meldet das Mikroprogramm-Steuerwerk dem Decoder das Ende der Befehlsausführung und fordert dadurch den nächsten Befehl an. Gleichzeitig wird der Takt des MPStW angehalten. Bild 2.2-5: Prinzipieller Aufbau eines Mikrobefehls Das letzte Feld des im Bild 2.2-5 dargestellten Mikrobefehls erzeugt die externen Signale, die an den Anschlüssen des Prozessors zur Steuerung der Peripheriebausteine abgegriffen werden müssen. Andere Signale werden von diesen Bausteinen zum Steuerwerk des Prozessors geführt und dort ausgewertet. Dazu gehören typischerweise die im Unterabschnitt 2.2.2 beschriebenen Signalgruppen.

### 2.2.2 Ein-/Ausgangssignale des Steuerwerks |

2.2.2.1 Zuteilung des Systembusses

Können in einem Mikroprozessor-System mehrere Komponenten aktiv auf den Systembus zugreifen, so benötigt man eine Technik zur Anforderung des Systembusses vom µP und zur Gewährung des Zugriffes durch den Prozessor (Bus Arbitration Control). Bei diesen Komponenten kann es sich um einen weiteren (Co-)Prozessor oder aber auch um einen Peripheriebaustein handeln (z.B. der im folgende beschriebene DMA-Controller - Direct Memory Access). Zur Regelung des Zugriffs auf den Systembus dienen die folgenden drei Signale. Die beschriebene Form der Buszuteilung wird auch als 3-Leitungs-Handshake oder Quittungsbetrieb bezeichnet.

- Durch das HOLD-Eingangssignal, auch mit BR oder BREQ (Bus Request) bezeichnet, wird dem Prozessor mitgeteilt, daß (wenigstens) eine andere Komponente des Mikroprozessor-Systems den Systembus belegen will. Der Prozessor schließt daraufhin noch die augenblicklich durchgeführte Systembus-Operation (Schreib- oder Lesezugriff) ab.

- Sobald der Prozessor den Systembus nicht mehr benötigt, schaltet er alle seine Systembus-Ausgänge in einen hochohmigen Zustand (Tristate, vgl. Abschnitt 2.7). Davon unterrichtet er jede anfordernde Komponente über das Ausgangssignal HOLDA (Hold Acknowledge), auch BG oder BGRT (Bus Grant) genannt. Während der Freigabe des Systembusses kann der Prozessor gegebenenfalls weitere Befehle in seinem Befehls-Prefetch-Block (s.o., oder dem internen Cache-Speicher) bearbeiten, solange dazu nicht der Systembus benötigt wird.

- Bewerben sich gleichzeitig mehrere Komponenten um das Bussystem, so muß nach irgendeinem Verfahren durch einen "Schiedsrichter" ((Bus Hold) Arbiter) genau eine von ihnen zum neuen Bus Master bestimmt werden. Diese kann nun z.B. über das Signal BGA (Bus Grant Acknowledge) allen anderen Mitbewerbern mitteilen, daß sie die Buskontrolle übernommen hat. (Im Abschnitt 2.7 werden Sie mit dem Independent Request-Verfahren eines dieser Entscheidungsverfahren, im folgenden einen Spezialbaustein zur Durchführung dieser Entscheidung kennenlernen.)

2.2.2.2 Unterbrechungsanforderungen

- Durch die Interrupteingänge IRQ (Interrupt Request; auch mit INT, INTR bezeichnet) und NMI (Non-Maskable Interrupt) kann ein laufendes Programm durch eine Systemkomponente unterbrochen und die Abarbeitung einer "Interruptroutine" im Prozessor angestoßen werden. (Wegen der großen Bedeutung der Programmunterbrechungen wird in einem eigenen Abschnitt 2.3 darauf ausführlich eingegangen. Dort wird der im Bild 2.1-7 mit Unterbrechungslogik bezeichnete Teil des Steuerwerks beschrieben.)

- Durch die oft bidirektional ausgeführte HALT-Leitung, benutzt als Eingang, kann der Prozessor aufgefordert werden, nach der Beendigung der laufenden Aktivität auf dem Systembus zu stoppen, d.h. er stellt jegliche Programmabarbeitung ein, also insbesondere auch die interne Bearbeitung seiner Befehlswarteschlange. Er signalisiert den angeschlossenen Komponenten über die gleiche HALT-Leitung, benutzt als Ausgang, oder seine Statussignale (s. Abschnitt 2.2.2.4), daß er im Halt-Zustand ist. Dabei schaltet er alle seine Ausgänge, also die Systembus-Ausgänge und alle anderen Steuerausgänge in den hochohmigen Zustand. Aus diesem Zustand kann er meist nur durch einen Interrupt oder ein Rücksetzen (RESET) "aufgeweckt" werden. Von dieser Möglichkeit des Abbruchs jeder Programmbearbeitung wird insbesondere dann Gebrauch gemacht, wenn ein Fehler aufgetreten ist, der nicht vom µP selbst behoben werden kann.

Selbsttestaufgabe S2.2-1: (–> Lösungsvorschlag)
Versuchen Sie, die wesentlichen Unterschiede zwischen den Signalen HOLD und HALT anzugeben.

2.2.2.3 Fehlermeldung

Durch die Fehlermeldung BERR (Bus Error) wird dem Prozessor von bestimmten Komponenten mitgeteilt, daß bei der augenblicklich auf dem Systembus ablaufenden Aktion ein Fehler festgestellt wurde. Beispiele dafür sind ein Zugriff auf einen geschützten Speicherbereich, das Ausbleiben eines Quittungssignals von einer Systemkomponente oder aber auch ein festgestellter Übertragungsfehler.

2.2.2.4 Statusinformationen

Durch eine Anzahl von Prozessor-Statussignalen, die beispielsweise mit FC1,..,FCn (Function Code) oder ST1,..,STn (Status) bezeichnet sind, kann der Prozessor den angeschlossenen Komponenten seinen Zustand bzw. den Typ der augenblicklich ausgeführten Operation mitteilen. Dazu gehören z.B., ob der Prozessor:

- ein Benutzerprogramm, eine Betriebssystemroutine oder eine Interruptroutine ausführt,
- im Halt-Zustand ist bzw. auf eine Unterbrechung wartet,
- Daten von einem Coprozessor erwartet oder zu diesem übertragen will,
- eine Lese- oder Schreiboperation ausführt,
- Daten oder OpCodes überträgt,
- auf den Arbeitsspeicher oder einen Peripheriebaustein zugreift.

2.2.2.5 Kommunikation mit einem Coprozessor

Über einige weitere Signale korrespondiert der Prozessor mit einem eventuell im System vorhandenen Coprozessor. Diese Signale werden im Rahmen dieses Kurses nicht weiter behandelt.

2.2.2.6 Systembus-Steuersignale

Durch diese Signale werden insbesondere die Richtung des Datentransfers auf dem Systembus, das Einfügen von Wartezyklen beim Buszugriff sowie die Art der selektierten Komponente (Arbeitsspeicher oder Peripheriebaustein) festgelegt. Sie werden neben weiteren Signalen im Abschnitt 2.7 beschrieben.

Exkurs 2.2-3: Open-Collector- und Open-Drain-Eigenschaft
Zum Abschluß dieses Abschnitts soll noch einmal auf die Eingangssignale des Steuerwerks eingegangen werden. Als Beispiel werde das oben beschriebene HOLD#-Signal herangezogen. In der Regel gibt es in einem komplexen Mikrorechner-System mehr als eine Komponente, die vom µP den Zugriff zum Systembus verlangen kann. Nun ist es nicht ohne weiteres möglich, die HOLD#-Ausgänge aller dieser Komponenten einfach zu verbinden und zusammen auf den HOLD#-Eingang des Prozessors zu legen, da dadurch ein elektrischer Kurzschluß entstehen würde. Diese direkte Verbindung ist nur bei Gattern möglich, die sogenannte Open-Collector-Ausgänge (bzw. Open-Drain-Ausgänge) besitzen. (Weiter unten werden Sie die elektronischen Hintergründe für diese Bezeichnungen kennenlernen.) Im Bild 2.2-6 ist das Prinzip skizziert, nach dem mehrere Open-Collector-Ausgänge mit einem Eingang verbunden werden können. Das kreisförmige Symbol in den Komponenten K1 und K2 stellt einen bipolaren Transistor, in der Komponente Kn einen MOS-Transistor (Metal-Oxid Semiconductor) dar. Ihre Funktion werden wir weiter unten genauer beschreiben. Hier reicht es zu wissen, daß diese Transistoren "leiten", wenn am zugehörigen Eingang Ei ein H-Pegel liegt. In diesem Fall wird der Komponenten-Ausgang Ai gegen Masse kurzgeschlossen. Bild 2.2-6: Anschluß mehrerer Komponenten am HOLD-Eingang des Prozessors Liegt hingegen an Ei ein L-Pegel, so "sperrt" der Transistor, der Ausgang ist dann hochohmig gegen Masse. Alle Ausgänge Ai sind über einen gemeinsamen Widerstand R mit der positiven Betriebsspannung +UB verbunden. Dieser sorgt hauptsächlich dafür, daß der HOLD#-Eingang auf H-Potential liegt, wenn alle Ausgänge Ai hochohmig gegen Masse geschaltet sind. Um den HOLD#-Eingang des Prozessors auf L-Potential herunterzuziehen und dadurch den Systembus anzufordern, reicht es nun stets, daß wenigstens ein Ausgang Ai auf Masse heruntergezogen wird, oder gleichbedeutend damit, daß wenigstens ein Steuereingang Ei auf H-Pegel liegt. Wie im Bild angedeutet, stellt daher die direkte Verbindung der Open-Collector-Ausgänge eine logische UND-Verknüpfung der (negierten) Signale Ai bzw. eine NOR-Verknüpfung der Signale Ei dar. In der Regel sind alle Ausgänge von Systembausteinen, die zur Ansteuerung gemeinsam benutzter Prozessor-Eingänge dienen, als Open-Collector- bzw. Open-Drain-Ausgänge realisiert.

### 2.2.3 Das Steuerregister |

Mit Hilfe des Steuerregisters (Control Register) kann die aktuelle Arbeitsweise des Prozessors beeinflußt werden. Dazu wird während des Programmlaufes ein spezifisches Steuerwort in dieses Register geschrieben. Die einzelnen Bits des Steuerregisters besitzen eine von Prozessor zu Prozessor verschiedene Funktion. Im folgenden werden nur einige Beispiele für diese Steuerbits angegeben.

- Das Interrupt (Enable) Bit/Flag (IE, IF) bestimmt, ob einer Unterbrechungsanforderung am INT-Eingang (s.o.) des Prozessors stattgegeben werden soll oder nicht. Auf dieses Bit wird im Abschnitt 2.3 ausführlich eingegangen. Durch weitere Bits, die z.B. mit IPLi (Interrupt Privilege Level, i=0-3) bzw. IOPLi (Input/Output Privilege Level, i=0-2) bezeichnet werden, kann festgelegt werden, welche Priorität eine Unterbrechungsanforderung bzw. eine Ein-/Ausgaberoutine momentan besitzen muß, um ausgeführt zu werden.

- Mit dem User/System Bit kann zwischen zwei Betriebsarten des Prozessors gewählt werden. In der Betriebsart Benutzermodus (User Mode) ist nur eine eingeschränkte Teilmenge der Prozessorbefehle ausführbar. In der Betriebsart Systemmodus (System Mode) können dagegen alle Befehle benutzt werden. Diese Betriebsart ist in der Regel für das Betriebssystem reserviert (deshalb auch: Supervisor Mode).

- Mit den Bits Paging Enable (PG) bzw. Protection Enable (PE) können eine bestimmte Art der virtuellen Speicherverwaltung bzw. Mechanismen zum Speicherschutz gegen unerlaubte Zugriffe aktiviert oder deaktiviert werden.

- Das Trace Bit (auch Trap Bit genannt) erlaubt eine Abarbeitung des Programms im Einzelschritt-Modus (Single Step Mode), bei dem nach jeder Ausführung eines Befehls eine Unterbrechungsroutine aufgerufen wird. Diese Betriebsart dient zum Testen von Programmen in der Entwurfsphase und zur Überprüfung fehlerhaft ablaufender Programme (Debugging).

- Das Decimal Bit veranlaßt die ALU, im Dezimalmodus zu arbeiten, d.h. die Operanden als BCD-Zahlen (Binary Coded Decimals) aufzufassen und als solche zu verarbeiten.

In den nun folgenden Fallstudien zu den Steuerwerken realer Mikroprozessoren werden einige weitere, sehr spezielle Steuerbits beschrieben. Leider wird in den Datenblättern der Mikroprozessor-Hersteller das Steuerwerk meist sehr knapp abgehandelt. Deshalb können einige Punkte bei der folgenden Beschreibung zweier Mikroprogramm-Steuerwerke nur sehr pauschal dargestellt werden.

Fallstudie 2.2-1: Das Steuerwerk des Motorola MC68000
In der Literatur konnten wir eine genauere Beschreibung des MPStWs nur für den Prozessor 68000 der Firma Motorola finden, die glücklicherweise auch Aussagen über die exakte Organisation des Mikroprogrammspeichers macht. Das Steuerwerk ist in Bild 2.2-7 skizziert. (Interne Steuersignale des Steuerwerks sind darin zur Vereinfachung nicht eingezeichnet.) Über den internen Bus gelangen die Operationscodes (OpCodes) in das Befehlsregister. Dort werden sie vom Befehlsdecoder ausgewertet, der daraus eine 10-bit-Startadresse für das Mikroprogramm ermittelt und diese an den Mikrobefehlszähler des MPStWs übergibt. Außerdem kann der Decoder bereits die Steuersignale aktivieren, die während der Ausführungsphase konstant bleiben. Dazu gehören z.B. die Auswahlsignale eines bestimmten Registers oder der ALU. Alle anderen Steuersignale, die zur zeitgerechten Aktivierung der Prozessorkomponenten oder der anderen Systembausteine dienen, werden dann vom MPStW erzeugt. Ein OpCode-Prefetch-Verfahren findet in der oben beschriebenen einfachen Form statt, daß während der Decodier- oder Ausführungsphase eines Befehles schon ein weiterer OpCode in das Befehlsregister geladen werden kann. Das MPStW ist zweistufig mikroprogrammiert, d.h. der Mikrocodespeicher enthält nicht die Steuerwörter selbst, sondern nur deren Adresse im Steuerwortspeicher (Nanocodespeicher). Dadurch wird sehr viel Speicherplatz gespart, denn sich häufig wiederholende Steuerwörter brauchen jeweils nur ein einziges Mal im Speicher abgelegt zu werden. So sind für den gesamten Befehlsvorrat des Prozessors ca. 640 Mikrobefehle im Mikrocodespeicher nötig, die jeweils nur 10 bit lang sind. Eines dieser 10 Bits liefert ein Rückmeldesignal zum Befehlsdecoder und meldet z.B. das Ende eines Mikroprogramms. Der Nanocodespeicher enthält ungefähr 280 Steuerwörter mit jeweils ca. 70 Bits. Insgesamt umfaßt der Mikroprogrammspeicher also ungefähr 26 kbit. Berechnungen haben gezeigt, daß dieser bei einer einstufigen Organisation fast doppelt so groß geworden wäre. Bild 2.2-7: Das Steuerwerk des MC68000 von Motorola Die Komponenten des Mikroprozessors benötigen näherungsweise 200 Steuersignale, die hauptsächlich vom Nanocodespeicher erzeugt werden müssen. Durch die nachfolgende Demultiplexerlogik werden die 70 Signale des Nanocodespeichers selektiv auf ca. 180 Steuerleitungen der Komponenten geschaltet. Es reicht dabei, jedes Bit des Steuerwortes über den Demultiplexer mit maximal 2 bis 3 Steuerleitungen zu verbinden. Durch die mit Zeitsteuerung bezeichnete Komponente werden die Signale des Steuerwortes mit dem Systemtakt so verknüpft, daß sie die einzelnen Komponenten zeitgerecht ansteuern.

Fallstudie 2.2-2: Das Steuerwerk des Intel 80486
Bild 2.2-8 zeigt den groben Aufbau des Steuerwerks beim Intel 80486. Der 80486 besitzt einen Befehlsregister-Block, der in Form eines FIFO-Speichers mit 32 byte ausgelegt ist. Die Prefetch-Steuerung sorgt dafür, daß dieser Speicher immer so weit wie möglich gefüllt ist. Das Füllen geschieht dabei mit großer Wahrscheinlichkeit aus dem Chip-internen Cache über einen 128 bit breiten Datenpfad, über den der FIFO-Speicher in nur zwei Taktzyklen vollständig neu geladen werden kann. Müssen jedoch Daten oder Befehle aus dem Arbeitsspeicher geholt werden, so haben diese Zugriffe höhere Priorität als eventuelle Schreibzugriffe des Prozessors auf den externen Datenbus. Die auszugebenden Daten (und ihre Zieladressen) werden in diesem Fall in den vier Schreibpuffern (Write Buffer) zwischengelagert. Liegt in einem Schreibpuffer eine neuere Version des zu ladenden Datums, so wird das von der Steuerung erkannt und das Datum nicht aus dem Speicher, sondern aus dem Puffer geladen. Es werden ganze Befehle, bestehend aus OpCodes und Operanden in die Warteschlange übertragen. (Dabei verhindert die FIFO-Steuerung, daß Befehle aus Speicherbereichen entnommen werden, die durch die Speicherverwaltung nicht dem aktuell ausgeführten Programm zugeteilt sind.) Aus der Warteschlange gelangt jeder Befehl zum Befehls-Vordecoder (Instruction Predecode). Hier werden einerseits die unmittelbar im Befehl angegebenen Operanden ("unmittelbare Daten") oder ihre Adreßdistanzen (Offset) zu bestimmten Basisadressen abgezweigt und in einem separaten Speicher abgelegt. Andererseits wird der OpCode soweit vorverarbeitet, daß dem nachfolgenden Decoder alle wesentlichen Informationen über die Art der Operation, die benutzten Register usw. zur Verfügung gestellt werden. Die vordecodierten Befehle werden in eine weitere FIFO-Warteschlange eingefügt, die maximal drei Befehle aufnehmen kann. Nach jeder Befehlsausführung entnimmt der Decoder den nächsten vordecodierten Befehl aus dieser Warteschlange und ermittelt für die Mikrobefehlssteuerung die Startadresse des erforderlichen Mikroprogramms. Bild 2.2-8: Das Steuerwerk des 80486 von Intel Die Signale des Mikroprogramm-Speichers werden in der Komponente Zeitsteuerung mit Hilfe des Taktes zu den Steuersignalen der Komponenten verknüpft. Die gestrichelte Linie soll auch hier andeuten, daß einige der Steuersignale auch direkt vom Decoder geliefert werden können.

| Inhaltsverzeichnis
|  | Übersicht Kapitel 2
2.1 Prinzipieller Aufbau eines Mikroprozessors |  | 2.3 Die Behandlung von Ausnahmesituationen