Files

38 lines
1.4 KiB
Markdown

# 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.