Befehlszähler
PC (t)
PC (t+1)
Befehlsspeicher
PC (t+1)
Wort
Befehlsdekodierer
Eingang:
OpCode
Ausgang
MemToReg
MemWrite
Branch
ALU-Src
ALU-Op
RegDst
RegWrite
Funktionsdekodierer:
Eingang:
Func
ALU-Op
Ausgang:
ALU-Operation
Opcode: Bit 31:26
rs-Feld: Bit 25:21
rt-Feld: Bit 20:16
rd-Feld: Bit 15:11
Vorzeichenerweiterungseinheit: 15:0
OpCode: 31:26 geht an Befehlsdekodierer OpCode
Bit 25:21 geht an LeseRegister1 - Registersatz
Bit 20:16 geht an LeseRegister2 - Registersatz
Bit 15:11 geht an Schreiberegister Registersatz
Aber:
20:16 und 15:11 geht an MUX1 - wegen Schreiberegister, bei I-Typ Befehlen, geht 15:0 an Vorzeichenerweiterungseinheit, 15:11 geht in Schreiberegister
Sonst geht 20:16 Leseregister-2, 15:11 Schreiberegister, R-Typ Befehle
Pfad
1.) PC (t+1) - Befehlszähler
2.) Befehlsregister
3.) Vorzeichenerweiterungseinheit
4.) 2 Bit Shifter
5.) Addierer
6.) MUX
7.) PC (t) - Befehlszähler
PC (t+1) -> Befehlsregister -> Vorzeichenerweiterungseinheit -> 2 Bit Shifter -> Addierer -> MUX -> PC (t) Befehlszähler
Das sind die I-Typ Befehle, Konstante, Datenpfade, Sprung, Vorzeichenerweiterungseinheit
31:26 - ist immer Opcode
25:21 - ist immer rs-Feld - 1. Quelloperand
20:16 - ist entweder rt-Feld - 2. Quelloperand, oder rd- Feld Zieloperand -> MUX
15:11 - ist im ersten Fall, rd-Feld, Zieloperand
Echte Datenabhängigkeit - ED
Gegenabhängigkeit - GA
Ausgabeabhängigkeit - AA
i1: addi $t1, $t2, 3
i2: add $t4, $t1, $t3
i3: subi $t3, $t5, 3
i4: subi $t3, $t6, 3
1, 2, 4, 1, 3 - addi, add, subi, subi
IF
ID
EX
MEM
WB
Mehryzklus
I1: 0 - IF 1 - ID 2 - EX 3 - MEM 4 - WB
I2: 5 - IF 6 - ID 7 - EX 8 - MEM 9 - WB
Pipelining
I1: 0 - IF 1 - ID 2 - EX 3 - MEM 4 - WB
I2: 5 6 - IF 7 - ID 8 - EX 9 - MEM 10 - WB
IF ID EX MEM WB
IF ID EX MEM WB