/media/sda-magnetic/david/Dok-15-2023-11-27/informatik/vhdl-2024-01-16/auswendig20240112h.txt


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