|
Instruction Fetch (IF)
|
nimmt Befehle vom HS auf
|
|
Instruction Decode (ID)
|
decodiert Befehle & Register; schaut in Register & lädt Inhalte
|
|
Execute (EX)
|
führt Operation aus
|
|
Memory Access (MA)
|
macht L/S Befehle im HS
|
|
Write Back (WB)
|
schreibt in Register
|
|
Write after Write
|
doppelte Überschreibung
|
|
Write after Read
|
Wert, der noch gebraucht wird, wird überschrieben
|
|
Read after Write
|
falscher Wert wird gelesen
|
|
Pipeline Stalling
|
lässt Operationen einen Takt warten
|
|
Result Forwarding
|
Wert direkt weitergeben; kein Zeitverlust, geht aber nur wenn Wert erreichbar
|
|
Abacus / MIPS
|
|
|
R / R
|
3 Register
|
|
I / I
|
2 Register
|
|
S / -
|
1 Register
|
|
J / J
|
0 Register
|
|
ohne FW
|
mit FW
|
|
|
arithm.
|
2
|
0
|
|
L/S
|
2
|
1
|
|
Branch
|
3
|
1
|
|
Jump
|
3
|
0
|
|
Befehlstyp
|
%
|
mit RAW
|
CPI
|
|
Sprungbefehl
|
20%
|
20%
|
1 bei jump; 2 bei branch
|
|
Arithmetik
|
60%
|
60%
|
1
|
|
Ladebefehl
|
20%
|
0.5*20%
|
1 wenn Wert darauf nicht gelesen, 2
|
|
MAC
|
0.5*20%
|
-
|
A*20+CPIA*60+CPIL*(20-10) / 100-(20-10)
|
Datawidth
|
16 entspricht 2 Byte Wortgröße
|
|
MemSize
|
32 HS Größe
|
|
Cachesize
|
8 entspricht 4 Wörter
|
|
Blocksize
|
2 entspricht 1 Wort
|
|
SetAssoc
|
1 entsricht 1 Block pro Satz
|
|
tag | adr
|
valid
|
|
|
15 sti $1, $0, 0
|
1 in adr[0] -> 00|00
|
0 -> 1
|
|
16 sti $2, $0, 1
|
2 in adr[1] -> 00|01
|
0 -> 1
|
|
17 ldi $2, $0, 1
|
Mem[1] laden -> 00|01
|
1 -> hit
|
|
18 sti $3, $0, 2
|
||
|
19 sti $4, $0, 3
|
||
|
20 ldi $2, $0, 1
|
||
|
21 sti $5, $0, 7
|
||
|
22 sti $6, $0, 8
|
||
|
23 sti $7, $0, 9
|
7 in adr[9] -> 10|01
|
valid = 1 && tag[9] != 00 aus 16 -> miss
|
|
24 ldi $2, $0, 1
|
Mem[1] laden
|
Cachemiss
|
|
Byte
|
Block
|
N
k-set |
|
|
#index
|
log
2(Cachegr.) |
s
k |
s
k-nk |
|
#tag
|
log
2(HSGr) -#adr |
al- (s
k+b) |
al-(s
k- nk+b) |
|
#offset
|
-
|
b
|
b
|
|
#gl. tags
|
#Zeilen im Cache
|
size
k |
size
k/ Nk |
|
Sätze
|
-
|
size
k |
size
k/ Nk |
k = #Blöcke im Cachek: sizek= 2sk Blöcke; B = Blockgröße in Byte; l = Bits für Adressraumk: Nk = 2nk; Nk = #Blöcke im Satzk; tag(x) = (x div 2b) mod 2skk-nkk-nk
|
Stack
|
input
|
action
|
|
$S
|
bbabbbb$
|
expand S -> bSbb
|
|
$bbSb
|
bbabbbb$
|
match
|
|
$bbS
|
babbbb$
|
expand S -> bSbb
|
|
$bbbbSb
|
babbbb$
|
match
|
|
$bbbbS
|
abbbb$
|
expand S -> A
|
|
$bbbbA
|
abbbb$
|
expand A -> aB
|
|
$bbbbBa
|
abbbb$
|
match
|
|
$bbbbB
|
bbbb$
|
expand B ->
|
|
$bbbb
|
bbbb$
|
match
|
|
$bbb
|
bbb$
|
match
|
|
$bb
|
bb$
|
match
|
|
$b
|
b$
|
match
|
|
$
|
$
|
match
|
|
FIRST
|
FOLLOW
|
|
|
S
|
b, a
|
$, FIRST(b)\e aus FOL(S): b
|
|
A
|
a
|
FOL(S) aus FOL(A): $, b
|
|
B
|
a,
|
FOL(A) aus FOL(B): $, b
|
|
a
|
a
|
-
|
|
b
|
b
|
-
|
l->l' (Live(l') \ Write(l)), l->l'(MLive(l') \ Write(l))l'->l(U(l') ∪ Write(l))l'->l(MustU(l') ∪ Write(l))l->l'(B(l') \ Write(l))|
CISC
|
register memory architecture machinewords different length * many complex* irregular instructions
|
|
RISC
|
register register architecture as few as posible & as regulas as possible instructions * machine words same length
|
kNo comments yet.
Cheatography n. The art of mapping complex subjects into clear, instantly navigable reference guides.