Der DLX-Mikroprozessor 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. Der DLX-Prozessor wird mit einem RISC-Befehlssatz (Reduced Instruction Set Computing) angesteuert und besitzt 32 Register, wobei R0 immer fest verdrahtet mit 0 ist. Der Hauptspeicherzugriff erfolgt byteweise. Weiterhin erfolgt der Speicherzugriff aligned und im Big Endian-Modus. Die Befehlswortlänge beim DLX beträgt 32 Bit; es gibt drei Befehlsformate (I-, R- und J-Format).
Inhaltsverzeichnis |
Für die Herkunft der Bezeichnung "DLX "gibt es mehrere mögliche historische Erklärungen:
Die Befehlsformate definieren die Aufteilung des 32-Bit-Befehls in Felder. Bei allen drei Formaten sind die ersten 6 Bit immer der Opcode.
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.
0 5 6 10 11 15 16 31 ========================================== | opcode | rs1 | rd | immediate | ==========================================
Beispielbefehle: LW, SW, ADD, JALR
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.
0 5 6 10 11 15 16 20 21 31 ========================================== | opcode | rs1 | rs2 | rd | func | ==========================================
Beispielbefehl: SLT
Befehle dieses Formates sind Sprungbefehle. Die (dist)anz wird einfach auf den Befehlszähler hinzuaddiert.
0 5 6 31 ========================================== | opcode | dist | ==========================================
Beispielbefehle: J, JAL
Dies ist ein 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