Files
lab-rv32i-asm-load-store/README.md
T

34 lines
1.2 KiB
Markdown

# L09 · Load and Store Semantics
Karta domyka tor pamięci RV32I. Uczeń tworzy maski linii bajtowych dla
`SB/SH/SW`, wykonuje sign/zero extension dla `LB/LH/LW/LBU/LHU`, a na końcu
łączy obie ścieżki w jednostce load/store z małym RAM.
## Taski
| Task | PASS |
| --- | --- |
| `task01_store_lanes` | maski `1000`, `1100`, `1111` i fault dla niewyrównanego SH |
| `task02_load_extend` | poprawne LB/LBU oraz LH/LHU z jednego słowa |
| `task03_load_store_unit` | po `SW` i `SB +1`: słowo `1122aa44`, LB/LBU i fault LW +2 |
```bash
stemctl card use rv32i-asm L09
stemctl test native-amd64 rv32i-asm L09 1
stemctl test hazard3-sim rv32i-asm L09 2
stemctl debug hazard3-sim rv32i-asm L09 3
```
Model AMD64 i RTL są niezależne. `debug` generuje VCD. Wyniki należy zapisać
w [answers/load-store-evidence.md](answers/load-store-evidence.md).
Inwarianty:
- RV32I jest little-endian: offset 0 wskazuje bity 7:0 słowa;
- `SB` zmienia jedną linię bajtową, `SH` dwie, `SW` cztery;
- load signed replikuje bit znaku, load unsigned wstawia zera;
- halfword wymaga adresu parzystego, word adresu podzielnego przez cztery;
- fault zeruje maskę zapisu i nie modyfikuje RAM.
Po L09 uczeń ma wszystkie bloki potrzebne do spięcia minimalnego toru RV32I.