Elf Bilder, die zeigen, wie es in der Hardware wirklich aussieht. Bei den meisten Bildern steht zuerst eine Frage. Tipp deine Antwort, bevor du auf Abspielen drückst. Unten steht eine Checkliste mit allen Kernpunkten der Folien.
Jede Reihe besteht aus 32 Flip-Flops, also XLEN = 32 Bit (RV64: 64 Bit). Die ABI-Namen kleben nur darauf. Zieh die Aufkleber ab, dann siehst du, was die Hardware sieht.
Mit Aufklebern ist das die ABI-Sicht. Compiler und Betriebssystem halten sich an diese Rollen, damit separat übersetzter Code zusammenpasst (mehr in Kapitel 6).
Links wählt der Decoder anhand von rd genau eine Write-Enable-Leitung (WE) aus. Nur wo WE ankommt, übernimmt das Register beim Takt den Wert vom Write-Bus. Bei x0 ist der WE-Eingang fest mit Masse (GND, 0 V) verbunden.
Wähle einen Befehl und schau, welche Leitungen aufleuchten.
x5 = 0x12345678, x10 = 0x1000. Die Farbe bleibt am Byte, so siehst du, wohin es wandert.
Der Datenbus ist 32 Bit breit, er holt also immer eine Reihe aus 4 Bytes, die an einer durch 4 teilbaren Adresse beginnt. Schieb das Fenster und schau, wie viele Reihen es braucht.
Ein strikter Core soll lw x5, 1(x10) mit x10 = 0x1000 ausführen. Er kann es nicht und springt in den Trap-Handler. Spiel den Handler Zeile für Zeile durch. Rot umrandet sind die 4 Bytes, die eigentlich gemeint sind.
Strikter Core, jedes Kästchen ist ein Takt:
Advanced Core: Die Hardware teilt den Zugriff selbst in zwei Cache-Zugriffe auf.
Im SoC hängen Speicher und Hardware am selben Bus. Der Interconnect (AXI, TileLink) schaut auf die oberen Adressbits und schaltet genau eine Chip-Select-Leitung frei. Gib eine Adresse ein oder wähle eine.
Das Programm schreibt zweimal 'A' an das UART-Datenregister. Für die CPU ist das ein ganz normales sw. Einen eigenen I/O-Befehl wie bei Port-Mapped I/O gibt es nicht.
x5 = 0xDEADBEEF, x6 = 0x2000. Nach sw x5, 0(x6): Welches Byte steht bei 0x2000, 0x2001, 0x2002 und 0x2003? Was lädt danach lbu x7, 1(x6)?
Dafür brauchst du Bild 4 und Bild 5.
Dort steht lw x5, 0(x2000). In der Klammer muss aber ein Register stehen. Gemeint ist ein Register, in dem 0x2000 steht. Die Ergebniswerte auf der Folie stimmen.
Hak einen Punkt erst ab, wenn du ihn ohne Hilfe erklären kannst. Die Häkchen merkt sich nur dieser Browser.