VirtIO RISC-V SoC (VVSoC) is a general-purpose computer design that trades speed for simplicity and utilizes the VirtIO framework to simplify the implementation of peripheral devices. Although the main goal of the system is to provide a straightforward educational example of an FPGA computer design, it is fully capable of running UNIX-like operating systems and even some sophisticated applications such as Doom.
When designing a computer system from the ground up, one of the most challenging parts is implementing peripheral devices, especially if the devices utilize advanced techniques such as Direct Memory Access (DMA).
To simplify the design, VVSoC uses the VirtIO-MMIO interface for all peripheral devices and augments the system by adding a small dedicated core that implements the protocol in software. This approach reduces the hardware implementation of each supported VirtIO device to an interface consisting of a set of memory-mapped registers.
The idea is inspired by RVSoC.
Currently, VVSoC supports the following VirtIO devices:
- VirtIO console device,
- VirtIO keyboard device (via VirtIO input device),
- VirtIO GPU device.
The system can be run in simulation using Verilator or implemented on an FPGA board. At present, the only supported board is the Nexys A7.
To date, two operating systems have been successfully run on VVSoC:
VVSoC can run Doom on Linux, and the game can actually be played.
To run Linux in simulation, perform the following steps:
- Move to the
simdirectory. - Run
make. - Run
./obj_dir/Vtop.
To run Mimiker in simulation, follow the steps below:
- Move to the
simdirectory. - Run
make mimiker_imgs. - Run
make. - Run
./obj_dir/Vtop.
To run VVSoC on the Nexys A7, perform the following steps:
- Program the on-board flash with
images/flash/vivado/qspi/linux/fl_hvc.mcsorimages/flash/vivado/qspi/mimiker/fl.mcs. - Program the FPGA with
images/nexys_a7/vvsoc.bit.
Copyright © 2026, Michał Błaszczyk.
This project is licensed under the BSD 3-Clause License.