DLX-Prozessor
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
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:
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
- DLX-Architektur, Entwicklung und Funktionsweise (Memento vom 9. März 2014 im Internet Archive) (PDF-Datei; 444 kB) – Datei verfügbar als (Memento vom 9. März 2014 im Internet Archive)
- WinDLX, DLX-Simulator für Windows ab Version 3.1 (Memento vom 7. Juli 2007 im Internet Archive) – Seite verfügbar als (Memento vom 7. Juli 2007 im Internet Archive), Programm hier
- DLX-Befehlsübersicht (PDF-Dateien), DLX-Simulator für Linux (Memento vom 24. April 2009 im Internet Archive) mit Quellcode – Seite verfügbar als (Memento vom 24. April 2009 im Internet Archive)
- 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
- 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.