DLX-Prozessor – Wikipedia

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.

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

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

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 
  • 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.

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.