The NEORV32 RISC-V Processor

An easy-to-use, customizable, lightweight and open-source 32-bit RISC-V rv32imc microcontroller/CPU written in platform-independent VHDL.

Public Chat
Similar projects worth following
This is my attempt of creating a soft-core RISC-V-compatible CPU/processor system.

<< This page is still under construction >>

The NEORV32 Processor is a customizable microcontroller-like system based on a RISC-V-compliant CPU.

It is intended as auxiliary processor within larger SoC designs or as stand-alone custom microcontroller. The processor provides common peripherals like GPIO, aerial interfaces, timers, external bus interface and embedded memories. All features beyond the base CPU are optional and can be configured via VHDL generics. Most of the peripherals are recycled from the NEO430 processor.

The project comes with a complete software ecosystem that features core libraries for high-level usage of the provided functions and peripherals, application makefiles , a run-time environment and several example programs.

The project is intended to work "out of the box " - just synthesize the provided test setup, upload it to the FPGA board of choice and start playing with the NEORV32.

The project is hosted on GitHub and OpenCores.

Key Features

  • RISC-V-compliant rv32i CPU with optional C, E, M, U, Zicsr,
    Zifencei and PMP (physical memory protection) extensions
  • Passes the official RISC-V compliance tests
  • GCC-based toolchain (pre-compiled rv32i and rv32e toolchains available)
  • Application compilation based on GNU makefiles
  • Doxygen-based documentation of the software framework; deployed on GitHub pages
  • Full-blown datasheet (pdf)
  • Completely written in behavioral, platform-independent VHDL – no primitives, macros, etc.
  • Fully synchronous design, no latches, no gated clocks
  • Small hardware footprint and short critical path for easing timing closure
  • Highly configurable CPU and processor setup
  • Tested on Xilinx, Intel and Lattice FPGAs

Design Principles

  • From zero to main(): Completely open source and documented.
  • Plain VHDL without technology-specific parts like attributes, macros or primitives.
  • Easy to use – working out of the box.
  • Clean synchronous design, no wacky combinatorial interfaces.
  • Be as small as possible – but with a reasonable size-speed trade-off.
  • The processor has to fit in a Lattice iCE40 UltraPlus 5k FPGA running at 20+ MHz.

  • 1
    Get the NEORV32 Processor from GitHub

    Use git clone from your console:

    git clone

    Alternatively, you can download the repository as *.zip archive or download a specific release.

  • 2
    Get the toolchain

    You can either build the toolchain by yourself using the official RISC-V-GNU-Toolchain repository or you can download the toolchain(s) I am using as pre-built binaries.

    Note: My riscv_gcc_prebuilt repository uses git lfs - make sure it is installed when cloning the repository. Alternatively, you can download the pre-built binaries as packed release.

  • 3
    Start playing

    Follow the guides in the NEORV32 datasheet for:

    • installing the toolchain
    • creating and synthesizing a new HDL project
    • communicating with the NEORV32 bootloader
    • compiling an example application
    • uploading and running it on the processor

View all 3 instructions

Enjoy this project?



Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates