DLX-Prozessor
# DLX-Prozessor

Der DLX-Mikroprozessor (Aussprache: Deluxe) ist eine hypothetische Prozessorarchitektur, die von John L. Hennessy und David A. Patterson (den ursprünglichen Designern der MIPS- und Berkeley-RISC-Architektur) entwickelt wurde. Er wurde in dem – von beiden gemeinsam verfassten – Buch Computer Architecture: A Quantitative Approach vorgestellt. Der DLX-Prozessor wird mit einem RISC-Befehlssatz angesteuert und besitzt 32 Register. Es gibt DLX-Simulatoren, die die unterschiedlichen Pipelinestufen grafisch darstellen und Assembler-Befehle interpretieren. Solche werden an einigen Hochschulen in Vorlesungen zur hardwarenahen Programmierung benutzt.

## Pipeline

Die Pipeline des DLX-Prozessors besteht aus fünf Stufen:

* Instruction Fetch (IF): Laden des Befehls in den Befehlspuffer, Erhöhung des Befehlszählers.
* Instruction Decode (ID): Erzeugung der prozessorinternen Steuersignale, Bereitstellung der Operanden aus den Registern.
* Execute (EX): ALU führt Operation aus, Berechnung der effektiven Adresse bei Lade-/Speicherbefehlen.
* Memory Access (MEM oder MA): Durchführung des Speicherzugriffs bei Lade-/Speicherbefehlen. Andere Befehle durchlaufen diese Phase passiv.
* Write Back (WB): Schreiben des Operationsergebnisses in ein Register. Befehle ohne Ergebnis durchlaufen diese Phase passiv.

Das Design der DLX-Pipeline verhindert das Auftreten von Schreibe-nach-Lese- (write after read) und Schreibe-nach-Schreibe-Konflikten (write after write). Lese-nach-Schreibe-Konflikte (read after write) werden jedoch nicht verhindert.

## Registerbedeutungen

* R0 null; unveränderlich
* R1 reserviert für den Assembler
* R2-R3 Funktionsrückgabewerte
* R4-R7 Funktionsparameter
* R8-R15 beliebig
* R16-R23 Registervariablen
* R24-R25 beliebig
* R26-R27 reserviert für das Betriebssystem
* R28 Globaler Pointer
* R29 Stackpointer
* R30 Registervariable
* R31 Rücksprungadresse

## Befehlsformate

Ein DLX-Befehl ist immer 32 Bit lang. Die unterschiedlichen Befehlsformate definieren die Aufteilung des 32-Bit-Befehls in Felder. Bei allen drei Formaten sind die ersten 6 Bit immer der Opcode.

### I-Format (Immediate)

Befehle dieses Formates sind Load/Store Instruktionen, arithmetische Befehle oder bedingte/unbedingte Sprünge. Die Instruktion besteht aus einem Quellregister rs1 und einem Zielregister rd, zusätzlich sind 16 Bit für den Immediate-Wert vorgesehen, die je nach Befehlstyp benutzt werden.

Beispielbefehle: LW, SW, JALR

### R-Format (Register)

Dieses Format wird benutzt um Operationen auf Registern durchzuführen, dabei werden die Quellregister rs1 und rs2 mit der Register-ALU Operation func ausgeführt, und das Ergebnis auf das rd-Register abgelegt.

Beispielbefehl: SLT, ADD, SUB

### J-Format (Jump)

Befehle dieses Formates sind Sprungbefehle. Die (dist)anz wird einfach auf den Befehlszähler hinzuaddiert.

Beispielbefehle: J, JAL

## Befehlssatz

Auszug aus dem DLX-Befehlssatz ohne Floating-Point-Befehle:

