# 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.