Befehlszähler:
Eingang: PC (t)
Ausgang: PC (t+1)
Befehlslspeicher
Eingang von Befehlszähler, Addresse
Ausgang, zum Beispiel an Befehlsdekodierer, Funktionsdekodierer, ...
Befehlsdeskodierer
Eingang: OpCode: Bit 31 bis 26, von Befehlsspeicher
Ausgang, bitweise
MemToReg
MemWrite
Branch
ALU-Src
RegDst
RegWrite
Ausgang: Mehr - an Funtkionsdekodierer: ALU-OP
Funktionsdekodierer
Eingang:
Func von Befehlsspeicher: Bit 5 bis Bit 0
ALU-Op von Funktionsdekodierer
Ausgang:
ALU-Operation, an ALU
Datenpfade, typisch
1.) Befehlszähler PC (t+1)
2.) Befehlsspeicher
3.) Vorzeichenerweiterungseinheit
4.) 2 Bit Shifter
5.) Addierer
6.) DeMultiplexer
7.) Befehlszähler PC (t)
Wichtig:
1.) Vorzeichenerweiterungseinheit
2.) 2 Bit Shifter
3.) Addierer
Addierer: 2x
1.) Weiter im Westen +4, typischer PC (t) inkrementiere für den nächsten, ohne Sprung
1.) PC (t+1), Befehlszähller
2.) Addierer +4
3.) PC (t) Befehlszähler
2.) Weiter hinten
Für die nicht target Address Bit 25 bis Bit 0 Befehle, ersetzen, sondenr
immidiiate dazu addieren
Befehl
IF
ID
EX
MEM
WB
I1: WB
I2: MEM
I3: EX
I4: ID
I5: IF
Einzyklus: Gar nicht
Mehrzyklus: IF, ID, EX, MEM, WB - aber Befehl, nach Befehl
Pipelining: Überlappend
I1: IF,0 ID,1 EX,2 MEM,3 WB,4
I2: IF,5 ID,6 EX,7 MEM,8 WB,9
So, Befehl schreibt in Register, was anderer liesst, echte Datenabhängigkeit ED
Beispiel
I1: addi $t1, $t2, 2
I2: add $t3, $t1, $t4
I3: subi $t3, $t5, 3
I4: subi $t3, $t6, 3
Echte Datenabhängigkeit auch bei ASM-Diagrammen - bei ASM-Diagrammen in RTL Notation können
- Register linke Seite: Variable
- Ausdruck Rechte Seite: Schaltnetz
in einem Zustand erledigt werden, nicht bei echter Datenabhängigkeit
RAW - Read after write
Zwischen i2 und i1024 besteht echte Datenabhängigkeit
...
i2: addi $t1, $t2, 2
...
i1024: add $t3, $t1, $t4
spielt aber beim Pipelining keine Rolle, also
I1: IF,0 ID,1 EX,2 MEM,3 WB,4, schreibt Ergebnis
I2: IF,5 ID,6, liesst Ergebnis EX,7 MEM,8 WB,9
ID: Instruction Decode / Register Fetch - Operandenbereitstellungsphase: IF - Befehlsbereitstellungsphase, danach Operanden
WB: Write Back, hier wird Ergebnis geschrieben
Pipelining:
I1: IF,0 ID,1 EX,2 MEM,3 WB,4
I2: IF,1 ID,2 EX,3 MEM,4 WB,5
Jetzt
I1: IF,0 ID,1 EX,2 MEM,3 WB,4, schreibt $t1
I2: IF,1 ID,2, liesst $t1 EX,3 MEM,4 WB,5
Lösung, Interlocking, Pipeline Sperreung, Staling
I1: IF ID EX MEM WB
IF ID EX MEM WB