# Mikroprogrammsteuerwerk

Ein Mikroprogrammsteuerwerk ist der Teil mikroprogrammierter Prozessoren, der die Ausführung eines Befehls im Prozessor steuert. Das Steuerwerk hat Zugriff auf Mikroprogramme, die in einem Speicher abgelegt sind. Die Mikroprogramme steuern das Zusammenspiel von Prozessoreinheiten wie zum Beispiel der ALU oder den Registern. Bei manchen Prozessoren können die Mikroprogramme auch nachträglich mittels Mikrocodeprogrammierung geändert werden. Man kann Mikroprogramme auch als Firmware der CPU auffassen.

## Funktionsweise

Maschinencodes müssen in einem Prozessor mittels sogenannter Mikrobefehle in Steuersignale für die einzelnen Funktionseinheiten umgesetzt werden. Unter Umständen müssen dazu mehrere aufeinander folgende Verarbeitungsschritte ausgelöst werden, um die Funktion des Maschinencodes in Form einer Mikrobefehlssequenz zu realisieren.
Nehmen wir als Beispiel den Befehl ADD A,B eines fiktiven Prozessors, der die Inhalte der Register A und B addieren und das Ergebnis in das Register A zurückschreiben soll. Es könnte folgender Steuerablauf im Prozessor ablaufen:
* Die ALU wird für eine Addition konfiguriert.
* Der Inhalt von Register A wird an den ersten Eingang der ALU angelegt.
* Der Inhalt von Register B wird an den zweiten Eingang der ALU angelegt.
* Nach Ablauf der Durchlaufzeit für das Auslesen der Register A und B sowie der benötigten Zeit für die Ausführung der Addition in der ALU wird das Ergebnis in ein Zwischenregister abgelegt.
* Der Inhalt von Register A wird mit dem Wert aus dem Zwischenregister überschrieben.
* Der nächste Befehl wird aus dem Speicher gelesen.
Denkbar wäre, die Schritte (1, 2, 3) und (5, 6) in jeweils einem Zeitintervall zusammengefasst ablaufen zu lassen.
Um diesen Ablauf zu steuern, ist es möglich, eine Logik aufzubauen, die direkt diese Steuerung vornimmt. Der Nachteil bei dieser „festen Verdrahtung“ der Befehle ist die Komplexität der notwendigen Logik und die geringe Flexibilität bei notwendigen Veränderungen.
Im Falle der Mikroprogrammierung wird eine solche Ablaufsteuerung über die in einem Speicher abgelegten Mikroprogramme realisiert. Der Maschinencode aktiviert dabei jeweils eines der Mikroprogramme, das in mehreren Schritten dann jeweils alle notwendigen Steuersignale für die benötigten Funktionseinheiten erzeugt. Im einfachsten Falle ist das Mikroprogrammsteuerwerk aufgebaut aus einem Befehlsregister, das den gerade ausgeführten Maschinencode enthält, einem Zähler für die Mikroprogrammschritte und einem Speicher, der die einzelnen Schritte enthält. Das Befehlsregister und der Zähler zusammen ergeben dann die Adresse für den Mikroprogrammspeicher. Es sind aber auch komplexere Mikroprogrammsteuerwerke möglich, die Sprungbefehle und Verzweigungen ausführen können, um komplexere Befehle zu ermöglichen. Die Bedeutung eines Mikroprogrammsteuerwerks als Leitwerk für die Steuerung eines virtuellen Rechenwerks wird mit dem Mikrocodesimulator MikroSim auf didaktische Weise vermittelt.

## Entwicklung

Frühe Prozessoren waren typischerweise mit fest verdrahteter Logik aufgebaut, später wurden dann vermehrt Mikroprogrammsteuerwerke eingesetzt. Diese Entwicklung hat sich bei den Mainframe-Computern wie auch später bei den Mikroprozessoren abgespielt. Mit der Entwicklung zu immer höheren Taktfrequenzen und zu RISC-Prozessoren ging dann allerdings der Trend wieder zu fest verdrahteter Logik. Aktuelle Prozessoren verwenden oft eine Mischform, bei der häufig verwendete Befehle oder Befehlsteile mit fest verdrahteter Logik ausgeführt werden, und komplexe oder nicht so zeitkritische Befehle ganz oder teilweise mit Mikrocode.
Einige Prozessoren können ihre Mikroprogrammierung auch selbst dynamisch (d. h. während des Betriebs) ändern, zum Beispiel um einen anderen Befehlssatz zu erlauben oder die Ausführung zu optimieren. In einigen Fällen kann ein Teil des fest in einem Prozessor verankerten Mikrocodes durch nachgeladenen Mikrocode dauerhaft ersetzt werden, etwa um Fehler im Prozessor zu kompensieren oder neue Befehle zu implementieren.
Mikroprogrammsteuerwerke sind eine Form von speicherprogrammierbaren Steuerungen. Ihr Einsatz ist nicht auf Prozessoren begrenzt.