Funktionale Einheiten eines Prozessors

URL: ../..dic/rechnerarchitektur/funktionale_einheiten.html

Funktionale Einheiten eines Prozessors

Allgemeines link symbol

Ein Rechner besteht aus verschiedenen Komponenten, die je nach Rechnerarchitektur unterschiedlich aufgebaut sind. Allgemein kann man aber folgende Komponenten Unterscheiden:

  • Prozessorkern
  • Programm- und Datenspeicher
  • Peripherie Einheiten

Man spricht von einer Von-Neumann Architektur wenn Programme- und Datenspeicher in einem gemeinsamen Adressraum liegen. Da bei einem Befehl, der auf den Datenspeicher zugreift, insgesamt zwei Speicherzugriffe notwendig sind (Befehl selbst aus dem Speicher holen, Zugriff auf Daten), ergibt sich die Notwendigkeit, dass der Befehl mindesten zwei Takte benötigt. Dies wird auch als Von-Neumann Flaschenhals bezeichnet. Da historisch die Geschwindigkeit der Prozessoren wesentlich schneller stieg als die Geschwindigkeit der Speicherzugriffe wurde dieser Flaschenhals immer relevanter.

Ein Verbesserung bringt die Aufteilung in einen Programmspeicher und einen Datenspeicher, die unabhängig voneinander arbeiten können. Dies ist die Harvard-Architektur. Der Programmspeicher kann als Nur-Lese Speicher realisiert werden.

Datenpfad link symbol

Der Prozessorkern besteht aus einem Datenpfad und einem Steuerwerk. Der Datenpfad enthält die Register und Datenspeicher, das Rechenwerk und die Busse zwischen den einzelnen Komponenten.

Register link symbol

Bei Registern unterscheidet man zwischen Registern für einen speziellen Zweck oder sogenannten Registern zur allgemeinen Verwendung (GPR für engl. General Purpose Register).

Register mit speziellem Zweck sind unter anderem:

  • Akkumulator - enthält die Ergebnisse des Rechenwerks
  • Stackpointer - wird als Adresse auf den aktuellen Wert im Stack verwendet
  • Indexregister - ein Register, welches generell zur Adressierung verwendet wird
  • Befehlszähler - Adresse des aktuellen (bzw. meist nächsten) Befehls
  • Befehlsregister - nimmt den aktuellen Befehl auf

Rechenwerk link symbol

Das Rechenwerk dient der Manipulation von Daten. Dazu steht eine arithmetisch-logische Einheit (ALU für engl. Arithmetic Logic Unit) zur Verfügung. Diese ALU unterstützt verschiedene Rechenoperationen. Zusätzlich ist ein Register mit Statusflags vorhanden, die abhängig vom letzten Ergebnis der ALU gesetzt werden (Überlauf, Null, ...).

Typische Operationen die eine ALU durchführen kann:

  • Addition
  • Subtraktion
  • Zweierkomplement
  • Logische AND, OR, XOR Vernüpfung
  • Invertierung
  • Schiebeoperationen

Typische Statusflags sind:

  • Übertrag (C für engl. Carry): Kommt es bei einer Operation zu einem Übertrag, wird das Übertragsbit in diesem Flag gespeichert
  • Überlauf (V für engl. oVerflow): Stellt die Zahlenbereichsüberschreitung für Zweier-Komplement Operanden dar
  • Null (Z für engl. Zero): Dieses Flag wird gesetzt, wenn das Ergebnis gleich 0 ist
  • Negativ (N für engl. Negative): Bei der Zweierkomplement-Darstellung stellt das MSB das Vorzeichen dar (0: positiv, 1: negativ)

Datenspeicher link symbol

Der Datenspeicher ist meist so ausgelegt, dass während einem Takt ein Lese- oder Schreibzugriff durchgeführt werden kann. Dazu legt der Prozessor eine Adresse an und leitet einen Lese- oder Schreibzugriff ein.

Busse link symbol

Die Register und Funktionseinheiten sind über Busse miteinander verbunden. Ein Bus kann entweder als Punkt-zu-Punkt Verbindung implementiert werden. Dabei dienen Multiplexer als Schalter zwischen zwei verschiedenen Eingaben. Es gibt aber auch die Realisierung von Bussen, auf die mehrere Teilnehmer mittels Tri-State Ausgangstreiber zugreifen können.

Steuerwerk link symbol

Das Steuerwerk steuert den Ablauf im Datenpfad. Um einen Befehl Abzuarbeiten nimmt man typischerweise einen Von-Neumann-Zyklus an. Je nach Prozessorarchitektur können die 5 Teilschritte zusammengefasst werden oder auch ein Teilschritt auf mehrere Takte ausgeweitet werden.

Fetch Instruction (1) link symbol

Der aktuell vom Befehlszähler adressierte Befehl wird aus dem Befehlsspeicher in das Befehlsregister geladen. Der Befehlszähler wird erhöht, um auf den nächsten Befehl zu zeigen.

Decode (2) link symbol

Der Befehl wird durch den Instruktionsdekoder ausgewertet. Die entsprechenden Steuersignale für den Datenpfad werden gesetzt.

Fetch Operands (3) link symbol

Die Operanden für die Berechnung werden aus den Registern bzw. aus dem Speicher geholt.

Execute (4) link symbol

Die Operation wird vom Rechenwerk durchgeführt. Wenn der aktuelle Befehl ein Sprungbefehl ist, wird der Befehlszähler mit der Sprungadresse geladen.

Write Back (5) link symbol

Die Ergebnisse werden in die Register bzw. den Speicher zurückgeschrieben (sofern notwendig).

Die einzelnen Teilschritte können durch Pipelining parallelisiert werden. Dazu ist es notwendig, den einzelnen Teile im Datenpfad unabhängig zu realisieren.

Realisierung link symbol

Das Steuerwerk kann auf zwei verschiedene Arten realisiert werden:

  • Fest verdrahtet: Die Logik für die einzelnen Befehle ist beim Design mittels konkreter Logik realisiert
  • Mikrocode: Das Steuerwerk ist selbst ein kleiner Prozessor, der für jeden Befehl einen sogenannten Mikrocode hinterlegt hat, der ausgeführt wird.

Die Realisierung mittels Mikrocode ist sehr flexibel und es besteht die Möglichkeit, bei schon ausgelieferten Prozessoren nachträglich die Mikrokodierung zu verändern. Der Nachteil ist der langsamer Ablauf im Vergleich zur fest verdrahteten Logik.