feat(L09): add load and store semantics card
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user