How shouryadip-c/maze-runner-soc works
Maze Runner SoC combines ultrasonic sensing and a maze-exploration FSM with a picorv32 CPU, memory-mapped peripherals, and bare-metal firmware that reports state over UART and handles goal interrupts. The graph follows the documented top-level architecture and sampled firmware behavior; unsampled RTL internals are represented only where the README documents their connections.
Main entry points: main.c Firmware main · axi4lite_interconnect_4s.sv AXI4-Lite interconnect · maze_solver_fsm.sv Maze solver FSM · riscv_core.sv picorv32 wrapper
Components 15
Sensing
- HC-SR04 controller
rtl/sensors/hc_sr04_controller.sv - Wall detector
rtl/sensors/wall_detector.sv
Maze solving
- Maze solver FSM
rtl/maze/maze_solver_fsm.sv
SoC fabric
- Status registers
rtl/registers/status_registers_axi.sv - picorv32 wrapper
rtl/cpu/riscv_core.sv - AXI4-Lite interconnect
rtl/bus/axi4lite_interconnect_4s.sv - Program RAM
rtl/ram/prog_ram_axi.sv - UART peripheral
rtl/uart/uart_axi.sv - Timer peripheral
rtl/timer/timer_axi.sv
Firmware
- Firmware main
firmware/main.c - UART helpers
firmware/uart.c - IRQ handler
firmware/irq.S
Other components
- Ultrasonic echo
- Side wall sensors
- UART serial endpoint
Connections 22
- Ultrasonic echo → HC-SR04 controller: echo input
- HC-SR04 controller → Wall detector: distance
- Wall detector → Maze solver FSM: front wall
- Side wall sensors → Maze solver FSM: side walls
- Maze solver FSM → Status registers: state signals
- Maze solver FSM → picorv32 wrapper: goal interrupt
- picorv32 wrapper → AXI4-Lite interconnect: AXI requests
- AXI4-Lite interconnect → Status registers: addressed access
- AXI4-Lite interconnect → UART peripheral: addressed access
- AXI4-Lite interconnect → Timer peripheral: addressed access
- AXI4-Lite interconnect → Program RAM: addressed access
- Program RAM → picorv32 wrapper: instruction fetch
- picorv32 wrapper → Firmware main: executes
- Firmware main → UART helpers: calls
- Firmware main → Status registers: reads status
- Firmware main → Timer peripheral: reads counter
- Firmware main → UART peripheral: configures UART
- UART helpers → UART peripheral: writes characters
- Firmware main → IRQ handler: enables IRQ
- IRQ handler → Firmware main: calls handler
- IRQ handler → UART helpers: prints completion
- UART peripheral → UART serial endpoint: serial output