Line 10... |
Line 10... |
|
|
# The NEORV32 RISC-V Processor
|
# The NEORV32 RISC-V Processor
|
|
|
[![license](https://img.shields.io/github/license/stnolting/neorv32?longCache=true&style=flat-square)](https://github.com/stnolting/neorv32/blob/master/LICENSE)
|
[![license](https://img.shields.io/github/license/stnolting/neorv32?longCache=true&style=flat-square)](https://github.com/stnolting/neorv32/blob/master/LICENSE)
|
[![release](https://img.shields.io/github/v/release/stnolting/neorv32?longCache=true&style=flat-square&logo=GitHub)](https://github.com/stnolting/neorv32/releases)
|
[![release](https://img.shields.io/github/v/release/stnolting/neorv32?longCache=true&style=flat-square&logo=GitHub)](https://github.com/stnolting/neorv32/releases)
|
[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.5121427.svg)](https://doi.org/10.5281/zenodo.5121427)
|
[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.5018888.svg)](https://doi.org/10.5281/zenodo.5018888)
|
|
|
[![datasheet (pdf)](https://img.shields.io/badge/data%20sheet-PDF-ffbd00?longCache=true&style=flat-square&logo=asciidoctor)](https://github.com/stnolting/neorv32/releases/tag/nightly)
|
[![datasheet (pdf)](https://img.shields.io/badge/data%20sheet-PDF-ffbd00?longCache=true&style=flat-square&logo=asciidoctor)](https://github.com/stnolting/neorv32/releases/tag/nightly)
|
[![datasheet (html)](https://img.shields.io/badge/-HTML-ffbd00?longCache=true&style=flat-square)](https://stnolting.github.io/neorv32)
|
[![datasheet (html)](https://img.shields.io/badge/-HTML-ffbd00?longCache=true&style=flat-square)](https://stnolting.github.io/neorv32)
|
[![userguide (pdf)](https://img.shields.io/badge/user%20guide-PDF-ffbd00?longCache=true&style=flat-square&logo=asciidoctor)](https://github.com/stnolting/neorv32/releases/tag/nightly)
|
[![userguide (pdf)](https://img.shields.io/badge/user%20guide-PDF-ffbd00?longCache=true&style=flat-square&logo=asciidoctor)](https://github.com/stnolting/neorv32/releases/tag/nightly)
|
[![userguide (html)](https://img.shields.io/badge/-HTML-ffbd00?longCache=true&style=flat-square)](https://stnolting.github.io/neorv32/ug)
|
[![userguide (html)](https://img.shields.io/badge/-HTML-ffbd00?longCache=true&style=flat-square)](https://stnolting.github.io/neorv32/ug)
|
Line 49... |
Line 49... |
|
|
:label: The project's change log is available in [`CHANGELOG.md`](https://github.com/stnolting/neorv32/blob/master/CHANGELOG.md).
|
:label: The project's change log is available in [`CHANGELOG.md`](https://github.com/stnolting/neorv32/blob/master/CHANGELOG.md).
|
To see the changes between *official* releases visit the project's [release page](https://github.com/stnolting/neorv32/releases).
|
To see the changes between *official* releases visit the project's [release page](https://github.com/stnolting/neorv32/releases).
|
|
|
:package: The [`setups`](https://github.com/stnolting/neorv32/tree/master/setups) folder provides exemplary setups targeting
|
:package: The [`setups`](https://github.com/stnolting/neorv32/tree/master/setups) folder provides exemplary setups targeting
|
various FPGA boards and toolchains to get you started. Several example programs to be run on your setup can be found in
|
various FPGA boards and toolchains to get you started. Several example programs (including a FreeRTOS port) to be run on your setup
|
[`sw/example`](https://github.com/stnolting/neorv32/tree/master/sw/example).
|
can be found in [`sw/example`](https://github.com/stnolting/neorv32/tree/master/sw/example).
|
|
|
|
:kite: Upstream [**Zephyr RTOS**](https://docs.zephyrproject.org/latest/boards/riscv/neorv32/doc/index.html) support.
|
|
|
:spiral_notepad: Check out the [project boards](https://github.com/stnolting/neorv32/projects) for a list of current **ideas**,
|
:spiral_notepad: Check out the [project boards](https://github.com/stnolting/neorv32/projects) for a list of current **ideas**,
|
**TODOs**, features being **planned** and **work-in-progress**.
|
**TODOs**, features being **planned** and **work-in-progress**.
|
|
|
:bulb: Feel free to open a [new issue](https://github.com/stnolting/neorv32/issues) or start a
|
:bulb: Feel free to open a [new issue](https://github.com/stnolting/neorv32/issues) or start a
|
Line 70... |
Line 72... |
### Project Key Features
|
### Project Key Features
|
|
|
- [x] all-in-one: [CPU](#NEORV32-CPU-Features) plus [Processor/SoC](#NEORV32-Processor-Features) plus [Software Framework & Tooling](#Software-Framework-and-Tooling)
|
- [x] all-in-one: [CPU](#NEORV32-CPU-Features) plus [Processor/SoC](#NEORV32-Processor-Features) plus [Software Framework & Tooling](#Software-Framework-and-Tooling)
|
- [x] completely described in behavioral, platform-independent VHDL - no primitives, macros, etc.
|
- [x] completely described in behavioral, platform-independent VHDL - no primitives, macros, etc.
|
- [x] fully synchronous design, no latches, no gated clocks
|
- [x] fully synchronous design, no latches, no gated clocks
|
- [x] be as small as possible (while being as RISC-V-compliant as possible) – but with a reasonable size-performance trade-off
|
- [x] be as small as possible while being as RISC-V-compliant as possible – but with a reasonable size-performance trade-off:
|
(the processor has to fit in a Lattice iCE40 UltraPlus 5k low-power FPGA running at 22+ MHz)
|
the processor (CPU _including_ privileged architecture) fits into a Lattice iCE40 UltraPlus 5k low-power FPGA running at 24 MHz
|
- [x] from zero to `printf("hello world!");` - completely open source and documented
|
- [x] from zero to `printf("hello world!");` - completely open source and documented
|
- [x] easy to use even for FPGA/RISC-V starters – intended to work *out of the box*
|
- [x] easy to use even for FPGA/RISC-V starters – intended to work *out of the box*
|
|
|
[[back to top](#The-NEORV32-RISC-V-Processor)]
|
[[back to top](#The-NEORV32-RISC-V-Processor)]
|
|
|
Line 115... |
Line 117... |
**SoC Connectivity and Integration**
|
**SoC Connectivity and Integration**
|
|
|
* 32-bit external bus interface, Wishbone b4 compatible
|
* 32-bit external bus interface, Wishbone b4 compatible
|
([WISHBONE](https://stnolting.github.io/neorv32/#_processor_external_memory_interface_wishbone_axi4_lite))
|
([WISHBONE](https://stnolting.github.io/neorv32/#_processor_external_memory_interface_wishbone_axi4_lite))
|
* [wrapper](https://github.com/stnolting/neorv32/blob/master/rtl/system_integration/neorv32_SystemTop_axi4lite.vhd) for AXI4-Lite master interface
|
* [wrapper](https://github.com/stnolting/neorv32/blob/master/rtl/system_integration/neorv32_SystemTop_axi4lite.vhd) for AXI4-Lite master interface
|
|
* [wrapper](https://github.com/stnolting/neorv32/blob/master/rtl/system_integration/neorv32_SystemTop_AvalonMM.vhd) for Avalon-MM master interface
|
* 32-bit stream link interface with up to 8 independent RX and TX links
|
* 32-bit stream link interface with up to 8 independent RX and TX links
|
([SLINK](https://stnolting.github.io/neorv32/#_stream_link_interface_slink))
|
([SLINK](https://stnolting.github.io/neorv32/#_stream_link_interface_slink))
|
* AXI4-Stream compatible
|
* AXI4-Stream compatible
|
* external interrupt controller with up to 32 channels
|
* external interrupt controller with up to 32 channels
|
([XIRQ](https://stnolting.github.io/neorv32/#_external_interrupt_controller_xirq))
|
([XIRQ](https://stnolting.github.io/neorv32/#_external_interrupt_controller_xirq))
|
Line 272... |
Line 275... |
* [core libraries](https://github.com/stnolting/neorv32/tree/master/sw/lib) for high-level usage of the provided functions and peripherals
|
* [core libraries](https://github.com/stnolting/neorv32/tree/master/sw/lib) for high-level usage of the provided functions and peripherals
|
* application compilation based on GNU makefiles
|
* application compilation based on GNU makefiles
|
* gcc-based toolchain ([pre-compiled toolchains available](https://github.com/stnolting/riscv-gcc-prebuilt))
|
* gcc-based toolchain ([pre-compiled toolchains available](https://github.com/stnolting/riscv-gcc-prebuilt))
|
* bootloader with UART interface console
|
* bootloader with UART interface console
|
* runtime environment for handling traps
|
* runtime environment for handling traps
|
* several [example programs](https://github.com/stnolting/neorv32/tree/master/sw/example) to get started including CoreMark, FreeRTOS and *Conway's Game of Life*
|
* several [example programs](https://github.com/stnolting/neorv32/tree/master/sw/example) to get started including
|
* `doxygen`-based documentation, available on [GitHub pages](https://stnolting.github.io/neorv32/sw/files.html)
|
[CoreMark](https://github.com/stnolting/neorv32/tree/master/sw/example/coremark),
|
|
[FreeRTOS](https://github.com/stnolting/neorv32/tree/master/sw/example/demo_freeRTOS) and
|
|
[Conway's Game of Life](https://github.com/stnolting/neorv32/tree/master/sw/example/game_of_life)
|
|
* `doxygen`-based documentation, available on :books: [GitHub pages](https://stnolting.github.io/neorv32/sw/files.html)
|
* supports implementation using open source tooling (GHDL, Yosys and nextpnr; in the future Verilog-to-Routing); both, software and hardware can be
|
* supports implementation using open source tooling (GHDL, Yosys and nextpnr; in the future Verilog-to-Routing); both, software and hardware can be
|
developed and debugged with open source tooling
|
developed and debugged with open source tooling
|
* continuous Integration is available for:
|
* [continuous integration](https://github.com/stnolting/neorv32/actions) :octocat: is available for:
|
* allowing users to see the expected execution/output of the tools
|
* allowing users to see the expected execution/output of the tools
|
* ensuring specification compliance
|
* ensuring specification compliance
|
* catching regressions
|
* catching regressions
|
* providing ready-to-use and up-to-date bitstreams and documentation
|
* providing ready-to-use and up-to-date bitstreams and documentation
|
|
|