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.
700px|Befehlsformat der DLX Architektur, Typ I
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.
700px|Befehlsformat der DLX Architektur, Typ R
Beispielbefehl: SLT, ADD, SUB
J-Format (Jump) Befehle dieses Formates sind Sprungbefehle. Die (dist)anz wird einfach auf den Befehlszähler hinzuaddiert.
700px|Befehlsformat der DLX Architektur, Typ J
Beispielbefehle: J, JAL
Befehlssatz 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 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 (PDF-Datei; 444 kB) – Datei – Seite , Programm hier mit Quellcode – Seite WinDLX-Seite, mit Tutorial (PDF) und ausführlicher Befehlssatz-Beschreibung (engl.) Foliensatz zur Übung DLX (Komponenten & Architekturen) openDLX, Open Source DLX-Simulator in Java; Github-Seite (engl.) The DLX Processor, Einführung (engl.)
Einzelnachweise
Kategorie:Rechnerarchitektur