feat(L05): add ALU assembler and execute card

This commit is contained in:
user
2026-07-21 16:59:44 +02:00
commit ba7346f3e5
42 changed files with 7188 additions and 0 deletions
+37
View File
@@ -0,0 +1,37 @@
# L05 · ALU and the Verilog Assembler
Karta łączy operacje arytmetyczno-logiczne z rzeczywistym kodowaniem RV32I.
Uczeń najpierw weryfikuje ALU, następnie składa słowa instrukcji R/I, a na
końcu wykonuje czteroinstrukcyjny program przez prosty etap execute.
## Taski
| Task | Wynik |
| --- | --- |
| `task01_alu_core` | 10 operacji: ADD, SUB, AND, OR, XOR, SLL, SRL, SRA, SLT, SLTU |
| `task02_verilog_assembler` | `ADD x3,x1,x2 = 002081b3`, `ADDI x5,x6,-4 = ffc30293` |
| `task03_execute_stage` | program kończy się `x1=7 x2=5 x3=12 x4=7` |
## Uruchomienie
```bash
stemctl card use rv32i-asm L05
stemctl tasks list
stemctl test native-amd64 rv32i-asm L05 1
stemctl test hazard3-sim rv32i-asm L05 2
stemctl debug hazard3-sim rv32i-asm L05 3
```
AMD64 jest niezależnym modelem bitowym. Verilator wykonuje self-checking RTL,
a `debug` zapisuje VCD. Przewidywania i ścieżki artefaktów wpisuje się do
[answers/alu-evidence.md](answers/alu-evidence.md).
## Inwarianty
- przesunięcie używa wyłącznie pięciu młodszych bitów drugiego argumentu;
- `SRA` zachowuje znak, `SRL` zawsze wstawia zera;
- `SLT` interpretuje argumenty jako signed, `SLTU` jako unsigned;
- nieobsługiwane `funct3/funct7` ustawia `illegal` i blokuje writeback;
- enkoder nie zgaduje pól: format R oraz I są wybierane jawnie.
L06 doda do tego toru następny PC, warunki gałęzi i skoki.