38 lines
1.4 KiB
Markdown
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.
|