34 lines
1.2 KiB
Markdown
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.
|