Post

MCU or FPGA, Zephyr or Linux: framing the VexRiscv question

First project of the GraphicsCourse — what linux-on-litex-vexriscv and AkiraOS actually teach about connecting (or collapsing) the MCU and FPGA worlds.

MCU or FPGA, Zephyr or Linux: framing the VexRiscv question

I started this project meaning to investigate “the MCU–FPGA connection” through two repos. The first surprise: neither repo is about wiring an MCU to an FPGA. They are the two ends of a different axis — Zephyr RTOS vs embedded Linux — and seeing that is what makes the project worth writing about.

The two repos, honestly

linux-on-litex-vexriscv runs full Linux on VexRiscv-SMP, a 32-bit RISC-V soft core synthesised into the FPGA. LiteX assembles the SoC and the peripherals (DRAM, Ethernet, SD); OpenSBI and Buildroot do the rest. There is no separate microcontroller here — the CPU is the fabric.

AkiraOS is the opposite world: Zephyr 4.3 on ordinary MCUs (ESP32-S3, nRF54L15, STM32), running sandboxed WebAssembly apps over a stable firmware base. No FPGA in sight.

The reframe

The two questions I’d been conflating are independent:

  • MCU vs FPGA — is the CPU hard silicon, or soft logic in an FPGA?
  • Zephyr vs Linux — a small real-time RTOS, or a full MMU OS?

They decouple because Zephyr ships an official litex_vexriscv board: the same VexRiscv soft core boots either Linux or Zephyr. Antmicro even ran TF Lite Micro on Zephyr/LiteX/VexRiscv.

So there are three architectures to actually compare — soft-core Linux, soft-core Zephyr, and a true hybrid where a real MCU (AkiraOS-style) drives a LiteX FPGA over SPI/Wishbone/PCIe. The last one is the literal “MCU–FPGA connection,” and it’s the one neither repo hands you.

(Draft — see README.md in this folder for the comparison table, the open questions, and where the GraphicsCourse video angle plugs in.)

This post is licensed under CC BY 4.0 by the author.