42 lines
1.7 KiB
Markdown
42 lines
1.7 KiB
Markdown
# L04 · The RISC-V ISA and Instruction Decoder
|
|
|
|
Karta zamienia 32-bitowe słowo instrukcji w jawny kontrakt sterowania rdzenia.
|
|
Uczeń dekoduje pola RV32I, rozpoznaje klasę opcode i buduje bank 32 rejestrów,
|
|
w którym `x0` zawsze zwraca zero.
|
|
|
|
## Taski i mierzalne wyniki
|
|
|
|
| Task | Zakres | PASS |
|
|
| --- | --- | --- |
|
|
| `task01_instruction_fields` | pola instrukcji I-type oraz sign extension | `ffc30293 → opcode=13 rd=5 rs1=6 imm=-4` |
|
|
| `task02_opcode_decoder` | OP-IMM, OP, LOAD, STORE, BRANCH, JAL/JALR | dokładnie jedna klasa dla legalnego opcode, `illegal=1` dla `0x7f` |
|
|
| `task03_register_file` | dwa porty odczytu, jeden zapisu, rejestr `x0` | zapis/odczyt `x5=12345678`, zapis `x0` zignorowany |
|
|
|
|
## Uruchomienie
|
|
|
|
```bash
|
|
stemctl card use rv32i-asm L04
|
|
stemctl tasks list
|
|
stemctl test native-amd64 rv32i-asm L04 1
|
|
stemctl test hazard3-sim rv32i-asm L04 1
|
|
stemctl debug hazard3-sim rv32i-asm L04 3
|
|
```
|
|
|
|
Model AMD64 oblicza pola niezależnie od RTL. Właściwy pomiar SystemVerilog
|
|
wykonuje Verilator w profilu `hazard3-sim`. Akcja `debug` zapisuje VCD w
|
|
`.stem/artifacts`; karta nie przedstawia oczekiwanej liczby jako zmierzonej.
|
|
|
|
Uczeń najpierw uzupełnia [answers/decoder-evidence.md](answers/decoder-evidence.md).
|
|
Pełna mechaniczna kolejność znajduje się w [lesson-flow.yaml](lesson-flow.yaml).
|
|
|
|
## Inwarianty
|
|
|
|
- sign extension kopiuje bit `instr[31]` do starszych 20 bitów;
|
|
- legalny opcode wybiera dokładnie jedną klasę sterowania;
|
|
- nieznany opcode nie włącza żadnej operacji i ustawia `illegal`;
|
|
- zapis następuje na zboczu, odczyt jest kombinacyjny;
|
|
- `x0` nie ma przechowywanego, modyfikowalnego stanu.
|
|
|
|
Te inwarianty są wejściem L05: ALU dostanie operandy z banku rejestrów oraz
|
|
rodzaj operacji wyznaczony przez dekoder.
|