feat(L06): add control flow and program counter card
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
# L06 · Control Flow — Jumps and Branches
|
||||
|
||||
Karta dodaje do toru RV32I decyzję oraz następny adres instrukcji. Uczeń
|
||||
porównuje argumenty dla sześciu warunków B-type, odtwarza immediate B/J i
|
||||
mierzy sekwencyjne aktualizacje `pc`.
|
||||
|
||||
## Taski
|
||||
|
||||
| Task | PASS |
|
||||
| --- | --- |
|
||||
| `task01_branch_compare` | BEQ, BNE, BLT, BGE, BLTU, BGEU oraz fail-closed illegal |
|
||||
| `task02_control_immediate` | branch `+12`, JAL `-8`, cele `0x10c` i `0x0f8` |
|
||||
| `task03_program_counter` | sekwencja `0,4,8,20,24,10,14` (hex) |
|
||||
|
||||
```bash
|
||||
stemctl card use rv32i-asm L06
|
||||
stemctl test native-amd64 rv32i-asm L06 1
|
||||
stemctl test hazard3-sim rv32i-asm L06 2
|
||||
stemctl debug hazard3-sim rv32i-asm L06 3
|
||||
```
|
||||
|
||||
Model AMD64 i RTL są niezależne. `debug` generuje VCD. Wyniki należy zapisać
|
||||
w [answers/control-flow-evidence.md](answers/control-flow-evidence.md).
|
||||
|
||||
Inwarianty:
|
||||
|
||||
- przesunięcia B/J są parzyste, więc bit 0 jest zawsze zerem;
|
||||
- dodawanie celu jest PC-relative i odbywa się na 32 bitach;
|
||||
- BLT/BGE używają signed, BLTU/BGEU unsigned;
|
||||
- `jump` ma pierwszeństwo przed `branch_taken`, a branch przed `pc+4`;
|
||||
- nieznane `funct3` nie może skierować PC do celu.
|
||||
|
||||
L07 wykorzysta ten sam sumator do tworzenia adresów i połączy rdzeń z RAM.
|
||||
Reference in New Issue
Block a user