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