DLX-Prozessor

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen

Der DLX-Mikroprozessor (Aussprache: Deluxe[1]) 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[Bearbeiten | Quelltext bearbeiten]

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

  1. Instruction Fetch (IF): Laden des Befehls in den Befehlspuffer, Erhöhung des Befehlszählers.
  2. Instruction Decode (ID): Erzeugung der prozessorinternen Steuersignale, Bereitstellung der Operanden aus den Registern.
  3. Execute (EX): ALU führt Operation aus, Berechnung der effektiven Adresse bei Lade-/Speicherbefehlen.
  4. Memory Access (MEM oder MA): Durchführung des Speicherzugriffs bei Lade-/Speicherbefehlen. Andere Befehle durchlaufen diese Phase passiv.
  5. 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[Bearbeiten | Quelltext bearbeiten]

  • 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[Bearbeiten | Quelltext bearbeiten]

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)[Bearbeiten | Quelltext bearbeiten]

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.

Befehlsformat der DLX Architektur, Typ I

Beispielbefehle: LW, SW, JALR

R-Format (Register)[Bearbeiten | Quelltext bearbeiten]

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.

Befehlsformat der DLX Architektur, Typ R

Beispielbefehl: SLT, ADD, SUB

J-Format (Jump)[Bearbeiten | Quelltext bearbeiten]

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

Befehlsformat der DLX Architektur, Typ J

Beispielbefehle: J, JAL

Befehlssatz[Bearbeiten | Quelltext bearbeiten]

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

Instruction                       Instruction meaning
LB / LH / LW         R1,val(R2)   Load byte / load half word / load word
LBU / LHU            R1,val(R2)   Load byte unsigned / load half word unsigned
SB / SH / SW         val(R2),R1   Store byte / store half word / store word
LHI                  R1,#val      Load high immediate
ADD / SUB            R1,R2,R3     Add / subtract
ADDU / SUBU          R1,R2,R3     Add unsigned / subtract unsigned
ADDI / SUBI          R1,R2,#val   Add immediate / subtract immediate
ADDUI / SUBUI        R1,R2,#val   Add immediate unsigned / subtract immediate unsigned
AND / OR / XOR       R1,R2,R3     And / or / exclusive or
ANDI / ORI / XORI    R1,R2,#val   And immediate / or immediate / exclusive or immediate
SLL / SRL / SRA      R1,R2,R3     Shift left logical / shift right logical / shift right arithmetic
SLLI / SRLI / SRAI   R1,R2,#val   Shift- left log. / right log. / right arithmetic -immediate
SLT / SLE / SEQ      R1,R2,R3     Set- less than / less or equal than / equal
SLTI / SLEI / SEQI   R1,R2,#val   Set- less than / less or equal than / equal -immediate
SGT / SGE / SNE      R1,R2,R3     Set- greater than / greater equal than / not equal
SGTI / SGEI / SNEI   R1,R2,#val   Set- greater than / greater equal / not equal -immediate
BEQZ / BNEZ          R4,name      Branch equal zero / branch not equal zero
J                    name         Jump
JR                   R5           Jump register
JAL                  name         Jump and link (save return address in R31)
JALR                 R5           Jump and link register (save return address in R31)
val:  16 Bit Wert als Adress-Offset oder Immediate-Wert
name: 16 oder 26 Bit Adress-Distanz

Literatur[Bearbeiten | Quelltext bearbeiten]

  • Philip Sailer, David Kaeli: The DLX Instruction Set Architecture Handbook., Morgan Kaufmann, San Francisco 1996, ISBN 1-55860-371-9. (engl.)
  • John Hennessy, David Patterson: Computer Architecture. A Quantitative Approach., 3. Ausgabe, Morgan Kaufmann, San Francisco 2003, ISBN 1-55860-724-2 (engl.)
  • Uwe Brinkschulte, Theo Ungerer: Mikrocontroller und Mikroprozessoren, Springer-Verlag, Berlin 2007, ISBN 978-3-540-46801-1, Seite 49.

Weblinks[Bearbeiten | Quelltext bearbeiten]

Einzelnachweise[Bearbeiten | Quelltext bearbeiten]

  1. Jurij Silc, Borut Robic, Theo Ungere: Processor Architecture: From Dataflow to Superscalar and Beyond. Hrsg.: Springer Science & Business Media. 2012, ISBN 3-642-58589-2, S. 19.