1.2 KiB
1.2 KiB
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) |
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.
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;
jumpma pierwszeństwo przedbranch_taken, a branch przedpc+4;- nieznane
funct3nie może skierować PC do celu.
L07 wykorzysta ten sam sumator do tworzenia adresów i połączy rdzeń z RAM.