2026-07-21 17:09:25 +02:00

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;
  • 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.

S
Description
No description provided
Readme 457 KiB
Languages
JavaScript 89.2%
Shell 5.1%
SystemVerilog 4.1%
Python 1%
HTML 0.4%
Other 0.2%