| Inhaltsverzeichnis | |||||
| Übersicht Kapitel 2 | |||||
| |||||
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:
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.
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.
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 |
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.)
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. |
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.
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:
Über einige weitere Signale korrespondiert der Prozessor mit einem eventuell im System vorhandenen Coprozessor. Diese Signale werden im Rahmen dieses Kurses nicht weiter behandelt.
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.
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-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.
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 | |||||
| |||||