/media/sda-magnetic/david/Dok-15-2023-11-27/informatik/vhdl20240110/auswendig2024-01-06f.txt


Small Skale Integration         SSI         1000 Transistoren
Medium Skale Integration        MSI
Large Skale Integration         LSI
Very Large Skale Integration    VLSI
Ultra Large Skale Integration   ULSI
Extra Large Skale Integration   ELSI
Giga Skale Integration          GSI

Befehlszähler:
    Eingang: PC (t)
    Ausgang: PC (t+1)

Befehlsspeicher
    Eingang: von Befehlszähler: PC (t)
    Ausgang: Bus - Zum Befehlsdekodierer und weiteren - 32 Bit Bus
    Datum: Der Befehl selber

Befehlsdekodierer
    Liegt an Bit 31 bis 26
    Bit Bit 31 bis 26: OpCode: 6 Bit Opcode
    Ausgang
        RegDst (1 Bit)
        RegWrite (1 Bit)
        MemToReg (1 Bit)
        MemWrite (1 Bit)
        Branch (1 Bit)
        ALUSrc (1 Bit)
    Ausgang
        ALUOp geht in Funktionsdekodierer 2 Bit - 00, 01, 10, 11

Funktionsdekodierer
    Eingang: Func Bit 5 bis Bit 0, vom Befehlswort - 100 000 - add, 100 010 - sub ...
    ALU-Op geht vom Befehlsdekodierer, wieder 2 Bit 00, 01, 10, 11 - und wenn 10 steht, dann func
    Ausgang: ALU-Operation: Das geht an die ALU - 010 - add, 110 - sub, 000 - and .. 3 Bit

Pfad vom Befehl

    Befehlszähler PC (t) -> Befehlsspeicher -> ...
    Befehlszähler PC (t) -> Addierer (1) Links Unten +4 -> Befehlszähler P(t+1)

    Befehlszähler -> Vorzeichenerweiturungseineit -> 2 Bit Shifter - Addierer (2) -> DeMultiplexer -> Befehlszähler

    Wichtig
    1.) Vorzeichenerweiturungseineit
    2.) 2 Bit Shifter
    3.) Addierer

    1.) Vorzeichenerweiturungseineit
    2.) 2 Bit Shifter
    3.) Addierer
    4.) MUX

    1.) Vorzeichenerweiturungseineit: Weil man zurückspringen kann
    2.) 2 Bit Shifter: Wahrscheinlich: Weil man das +4 macht man mit dem wahrscheinlich - 2 Bit
    3.) Addierer: Der Addierer macht bei Jump Relativ und Indirekt macht der eben die Addition zum Befehl
    4.) MUX

    Registersatz:
        rs-Feld
        rt-Feld
        rd-Feld

    Das kann man ausrechnen, weil

    OpCode: Bit 31 bis 26
    31 bis 26
    25
    20
    15
    10
    5

    31 bis 26: Opcode
    25 bis 21: RS-Register
    20 bis 16: RT-Register
    15 bis 11: RD-Register
    10 bis 6: SA - Verschiebewerte
    5 bis 0: Func

    Target Address - das ist was spezielles, während das sonst dazu addiert wird
    wird das hier ersetzt

    Wir haben den Jump Befehl - beim Intel
    Das ist hier Branch - branch wir springen immer zum Label

    Daswesen wird das ersetzt - durch Absolute Addresse

    Deswegen haben wir Target - das ist beim Computer die Symboltabelle vom Compiler zum Assemmbler
    Da wird die Target direkt in den Befehlszähler geschrieben

    Target Address: OpCode: Bit 31 bis Bit 26, der Rest Target Address

    Jetzt gibt es die I-Typ Befehle

    Das heisst, wir haben

    OpCode

    Bit 31 bis 26: Opcode
    Bit 25 bis 21: RS-Feld
    Bit 20 bis 16: RT-Feld
    Jetzt bleibt was übrig
    Bit 15 bis 0: Das sind 16 Bit - das ist der Immdiate Wert

    Das gibt es auch bei LDI

    Wenn man zum beispiel den Atmega 8 nimmt, dann gibt

    ld, lds, ldd, ldi
    ld: Load: Mit Register, indirekt
    lds: Load: s ist ein Anti D Buchstabe, und S - steht für Direkt - weil das Indirekt mit den Register - so schön dynamisch, steht gegen das S und das heisst, das D steht für indirekt
    ldd - das ist der König - das steht für: Indizieiert, Befehlszählerrelativ oder Indizieiert

    Dreiaddressformat R-Typ Befehls, rs, rt, rd - wir zwei Quelloperanden, 1 Zielopoeranden
    Zweiaddressformat: zwei address: Immidiat: Zwei Quelloparanden, oder ziel und Quelle, und einen 16 Bit Immediate wert
    Einaddressformat: Wir haben einen J-Typ - J-Typ kommt von Jump meint Branch das heisst, absolute Addresse
    Nulladdressformat: NOP ist Null address - CLC STC - 0 Address

    Jetzt gibt aber Maschinen, da gibt es keine Dreiaddressbefehle

    Der Atmega8 schreibt ld r16, X+

    Und der Witz, das ist kein syntaktischer Zucker. Der hat nur 2 Addressformat

    Und der TI9900 ist Speicher Speicherarchitektur, der hat immer noch 2 oder 3

    Es gibt aber Akkumulatorarchitektur
    Oder Stackarchitektur, da ist das anders

    ich muss machen PUSH r0, PUSH r1 - und ADD
    Und Steht für POP t1, POP t0 Add t1, t0 PUSH t1


    Mehryzyklus

I1: WB
I2: MEM
I3: EX
I4: ID
I5: IF

Einyklus alles in einem

Mehryzklus

I1:         0   IF  1   ID  2   EX  3   MEM     4   WB
I2          5   IF  6   ID  7   EX  8   MEM     9   WB

Pipeliningin:

I1:         0   IF  1   ID  2   EX  3   MEM     4   WB
I2          0   -   1   IF  2   ID  3   EX      4   MEM     5 WB

Das kann zur Datenabhängigkeit führen

weil:

WB - Write Back Mem steht für Memory Access

Hier schreibt I1 in Register
In ID liesst I2 von Register

addi    $t1, $t2, 2
add     $t4, $t1, $t3
subi    $t3, $t5, 3
subi    $t3, $t6, 3

Echte Datenabhängigkeit

I1 und I2 Weil der I2 liesst von $t1 und da schreibt I1 rein
Ausgabeabhängigkeit: I3 und I4: Weil beide Schreiben in $t3
Gegenabhängkeit: Der I2 liesst von $t3 da hat subi schon reingeschrieben