OpenCores
URL https://opencores.org/ocsvn/neorv32/neorv32/trunk

Subversion Repositories neorv32

[/] [neorv32/] [trunk/] [README.md] - Blame information for rev 65

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 59 zero_gravi
[![GitHub Pages](https://img.shields.io/website.svg?label=stnolting.github.io%2Fneorv32&longCache=true&style=flat-square&url=http%3A%2F%2Fstnolting.github.io%2Fneorv32%2Findex.html&logo=GitHub)](https://stnolting.github.io/neorv32)
2 61 zero_gravi
[![Documentation](https://img.shields.io/github/workflow/status/stnolting/neorv32/Documentation/master?longCache=true&style=flat-square&label=Documentation&logo=Github%20Actions&logoColor=fff)](https://github.com/stnolting/neorv32/actions?query=workflow%3ADocumentation)
3 62 zero_gravi
\
4 61 zero_gravi
[![riscv-arch-test](https://img.shields.io/github/workflow/status/stnolting/neorv32/riscv-arch-test/master?longCache=true&style=flat-square&label=riscv-arch-test&logo=Github%20Actions&logoColor=fff)](https://github.com/stnolting/neorv32/actions?query=workflow%3Ariscv-arch-test)
5 59 zero_gravi
[![Processor](https://img.shields.io/github/workflow/status/stnolting/neorv32/Processor/master?longCache=true&style=flat-square&label=Processor&logo=Github%20Actions&logoColor=fff)](https://github.com/stnolting/neorv32/actions?query=workflow%3AProcessor)
6
[![Implementation](https://img.shields.io/github/workflow/status/stnolting/neorv32/Implementation/master?longCache=true&style=flat-square&label=Implementation&logo=Github%20Actions&logoColor=fff)](https://github.com/stnolting/neorv32/actions?query=workflow%3AImplementation)
7 61 zero_gravi
[![Windows](https://img.shields.io/github/workflow/status/stnolting/neorv32/Windows/master?longCache=true&style=flat-square&label=Windows&logo=Github%20Actions&logoColor=fff)](https://github.com/stnolting/neorv32/actions?query=workflow%3AWindows)
8 59 zero_gravi
 
9 50 zero_gravi
[![NEORV32](https://raw.githubusercontent.com/stnolting/neorv32/master/docs/figures/neorv32_logo_dark.png)](https://github.com/stnolting/neorv32)
10 2 zero_gravi
 
11 37 zero_gravi
# The NEORV32 RISC-V Processor
12
 
13 59 zero_gravi
[![license](https://img.shields.io/github/license/stnolting/neorv32?longCache=true&style=flat-square)](https://github.com/stnolting/neorv32/blob/master/LICENSE)
14
[![release](https://img.shields.io/github/v/release/stnolting/neorv32?longCache=true&style=flat-square&logo=GitHub)](https://github.com/stnolting/neorv32/releases)
15 65 zero_gravi
[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.5018888.svg)](https://doi.org/10.5281/zenodo.5018888)
16 62 zero_gravi
 
17 59 zero_gravi
[![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)
18 60 zero_gravi
[![datasheet (html)](https://img.shields.io/badge/-HTML-ffbd00?longCache=true&style=flat-square)](https://stnolting.github.io/neorv32)
19
[![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)
20
[![userguide (html)](https://img.shields.io/badge/-HTML-ffbd00?longCache=true&style=flat-square)](https://stnolting.github.io/neorv32/ug)
21 59 zero_gravi
[![doxygen](https://img.shields.io/badge/doxygen-HTML-ffbd00?longCache=true&style=flat-square&logo=Doxygen)](https://stnolting.github.io/neorv32/sw/files.html)
22 2 zero_gravi
 
23 64 zero_gravi
1. [Overview](#1-Overview)
24
   1. [Key Features](#Project-Key-Features)
25
2. [Processor/SoC Features](#2-NEORV32-Processor-Features)
26
   1. [FPGA Implementation Results](#FPGA-Implementation-Results---Processor)
27
3. [CPU Features](#3-NEORV32-CPU-Features)
28
   1. [Available ISA Extensions](#Available-ISA-Extensions)
29
   2. [FPGA Implementation Results](#FPGA-Implementation-Results---CPU)
30
   3. [Performance](#Performance)
31
4. [Software Framework & Tooling](#4-Software-Framework-and-Tooling)
32
5. [**Getting Started**](#5-Getting-Started) :rocket:
33 2 zero_gravi
 
34
 
35 60 zero_gravi
 
36 64 zero_gravi
## 1. Overview
37 2 zero_gravi
 
38 54 zero_gravi
![neorv32 Overview](https://raw.githubusercontent.com/stnolting/neorv32/master/docs/figures/neorv32_processor.png)
39
 
40 59 zero_gravi
The NEORV32 Processor is a customizable microcontroller-like system on chip (SoC) that is based on the RISC-V NEORV32 CPU.
41
The project is intended as auxiliary processor in larger SoC designs or as *ready-to-go* stand-alone
42
custom / customizable microcontroller.
43 2 zero_gravi
 
44 61 zero_gravi
:information_source: Want to know more? Check out the [project's rationale](https://stnolting.github.io/neorv32/#_rationale).
45
 
46 60 zero_gravi
:books: For detailed information take a look at the [NEORV32 documentation (online at GitHub-pages)](https://stnolting.github.io/neorv32/).
47 59 zero_gravi
The *doxygen*-based documentation of the *software framework* is also available online
48
at [GitHub-pages](https://stnolting.github.io/neorv32/sw/files.html).
49 45 zero_gravi
 
50 59 zero_gravi
:label: The project's change log is available in [`CHANGELOG.md`](https://github.com/stnolting/neorv32/blob/master/CHANGELOG.md).
51
To see the changes between *official* releases visit the project's [release page](https://github.com/stnolting/neorv32/releases).
52 11 zero_gravi
 
53 61 zero_gravi
:package: The [`setups`](https://github.com/stnolting/neorv32/tree/master/setups) folder provides exemplary setups targeting
54 65 zero_gravi
various FPGA boards and toolchains to get you started. Several example programs (including a FreeRTOS port) to be run on your setup
55
can be found in [`sw/example`](https://github.com/stnolting/neorv32/tree/master/sw/example).
56 56 zero_gravi
 
57 65 zero_gravi
:kite: Upstream [**Zephyr RTOS**](https://docs.zephyrproject.org/latest/boards/riscv/neorv32/doc/index.html) support.
58
 
59 52 zero_gravi
:spiral_notepad: Check out the [project boards](https://github.com/stnolting/neorv32/projects) for a list of current **ideas**,
60
**TODOs**, features being **planned** and **work-in-progress**.
61 40 zero_gravi
 
62 59 zero_gravi
:bulb: Feel free to open a [new issue](https://github.com/stnolting/neorv32/issues) or start a
63 62 zero_gravi
[new discussion](https://github.com/stnolting/neorv32/discussions) if you have questions, comments, ideas or if something is
64
not working as expected.
65 59 zero_gravi
Check out how to contribute in [`CONTRIBUTE.md`](https://github.com/stnolting/neorv32/blob/master/CONTRIBUTING.md).
66 47 zero_gravi
 
67 60 zero_gravi
:rocket: Check out the [quick links below](#Getting-Started) or directly jump to the
68
[*User Guide*](https://stnolting.github.io/neorv32/ug/) to get started
69 59 zero_gravi
setting up your NEORV32 setup!
70 51 zero_gravi
 
71 2 zero_gravi
 
72 59 zero_gravi
### Project Key Features
73 15 zero_gravi
 
74 64 zero_gravi
- [x] all-in-one: [CPU](#NEORV32-CPU-Features) plus [Processor/SoC](#NEORV32-Processor-Features) plus [Software Framework & Tooling](#Software-Framework-and-Tooling)
75
- [x] completely described in behavioral, platform-independent VHDL - no primitives, macros, etc.
76
- [x] fully synchronous design, no latches, no gated clocks
77 65 zero_gravi
- [x] be as small as possible while being as RISC-V-compliant as possible – but with a reasonable size-performance trade-off:
78
the processor (CPU _including_ privileged architecture) fits into a Lattice iCE40 UltraPlus 5k low-power FPGA running at 24 MHz
79 64 zero_gravi
- [x] from zero to `printf("hello world!");` - completely open source and documented
80
- [x] easy to use even for FPGA/RISC-V starters – intended to work *out of the box*
81 22 zero_gravi
 
82 59 zero_gravi
[[back to top](#The-NEORV32-RISC-V-Processor)]
83 2 zero_gravi
 
84
 
85
 
86 64 zero_gravi
## 2. NEORV32 Processor Features
87 3 zero_gravi
 
88 60 zero_gravi
The NEORV32 Processor (top entity: [`rtl/core/neorv32_top.vhd`](https://github.com/stnolting/neorv32/blob/master/rtl/core/neorv32_top.vhd))
89
provides a full-featured SoC build around the NEORV32 CPU. It is highly configurable via generics
90
to allow a flexible customization according to your needs. Note that all modules listed below are _optional_.
91
In-depth detailed information regarding the processor/SoC can be found in the :books:
92
[online documentation - _"NEORV32 Processors (SoC)"_](https://stnolting.github.io/neorv32/#_neorv32_processor_soc).
93 2 zero_gravi
 
94 60 zero_gravi
**Memory**
95 2 zero_gravi
 
96 60 zero_gravi
* processor-internal data and instruction memories ([DMEM](https://stnolting.github.io/neorv32/#_data_memory_dmem) /
97
[IMEM](https://stnolting.github.io/neorv32/#_instruction_memory_imem)) &
98
cache ([iCACHE](https://stnolting.github.io/neorv32/#_processor_internal_instruction_cache_icache))
99
* bootloader ([BOOTLDROM](https://stnolting.github.io/neorv32/#_bootloader_rom_bootrom)) with serial user interface
100
  * supports boot via UART or from external SPI flash
101 11 zero_gravi
 
102 60 zero_gravi
**Timers**
103 11 zero_gravi
 
104 60 zero_gravi
* machine system timer ([MTIME](https://stnolting.github.io/neorv32/#_machine_system_timer_mtime)), RISC-V spec. compatible
105
* watchdog timer ([WDT](https://stnolting.github.io/neorv32/#_watchdog_timer_wdt))
106 11 zero_gravi
 
107 60 zero_gravi
**IO**
108 56 zero_gravi
 
109 60 zero_gravi
* standard serial interfaces
110
([UART](https://stnolting.github.io/neorv32/#_primary_universal_asynchronous_receiver_and_transmitter_uart0),
111
[SPI](https://stnolting.github.io/neorv32/#_serial_peripheral_interface_controller_spi),
112
[TWI / I²C](https://stnolting.github.io/neorv32/#_two_wire_serial_interface_controller_twi))
113
* general purpose [GPIO](https://stnolting.github.io/neorv32/#_general_purpose_input_and_output_port_gpio) and
114
[PWM](https://stnolting.github.io/neorv32/#_pulse_width_modulation_controller_pwm)
115
* smart LED interface ([NEOLED](https://stnolting.github.io/neorv32/#_smart_led_interface_neoled)) to directly drive _NeoPixel(TM)_ LEDs
116 2 zero_gravi
 
117 60 zero_gravi
**SoC Connectivity and Integration**
118 47 zero_gravi
 
119 59 zero_gravi
* 32-bit external bus interface, Wishbone b4 compatible
120
([WISHBONE](https://stnolting.github.io/neorv32/#_processor_external_memory_interface_wishbone_axi4_lite))
121 63 zero_gravi
  * [wrapper](https://github.com/stnolting/neorv32/blob/master/rtl/system_integration/neorv32_SystemTop_axi4lite.vhd) for AXI4-Lite master interface
122 65 zero_gravi
  * [wrapper](https://github.com/stnolting/neorv32/blob/master/rtl/system_integration/neorv32_SystemTop_AvalonMM.vhd) for Avalon-MM master interface
123 64 zero_gravi
* 32-bit stream link interface with up to 8 independent RX and TX links
124 61 zero_gravi
([SLINK](https://stnolting.github.io/neorv32/#_stream_link_interface_slink))
125
  * AXI4-Stream compatible
126
* external interrupt controller with up to 32 channels
127
([XIRQ](https://stnolting.github.io/neorv32/#_external_interrupt_controller_xirq))
128 59 zero_gravi
* custom functions subsystem ([CFS](https://stnolting.github.io/neorv32/#_custom_functions_subsystem_cfs))
129
for tightly-coupled custom co-processor extensions
130 60 zero_gravi
 
131
**Advanced**
132
 
133
* _true random_ number generator ([TRNG](https://stnolting.github.io/neorv32/#_true_random_number_generator_trng))
134
* on-chip debugger ([OCD](https://stnolting.github.io/neorv32/#_on_chip_debugger_ocd)) via JTGA - implementing
135 59 zero_gravi
the [*Minimal RISC-V Debug Specification Version 0.13.2*](https://github.com/riscv/riscv-debug-spec)
136 61 zero_gravi
and compatible with *OpenOCD* and *gdb*
137 47 zero_gravi
 
138 61 zero_gravi
:information_source: It is recommended to use the processor setup even if you want to **use the CPU in stand-alone mode**.
139
Just disable all optional processor-internal modules via the according generics and you will get a "CPU wrapper" that
140
provides a minimal CPU environment and an external memory interface (like AXI4). This minimal setup allows to further use
141
the default bootloader and software framework. From this base you can start building your own processor system.
142 60 zero_gravi
 
143 56 zero_gravi
[[back to top](#The-NEORV32-RISC-V-Processor)]
144 47 zero_gravi
 
145 56 zero_gravi
 
146 60 zero_gravi
### FPGA Implementation Results - Processor
147 47 zero_gravi
 
148 64 zero_gravi
The hardware resources used by a specific processor setup is defined by the implemented CPU extensions
149 61 zero_gravi
([see below](#FPGA-Implementation-Results---CPU)), the configuration of the peripheral modules and some "glue logic".
150 62 zero_gravi
Section [_"FPGA Implementation Results - Processor Modules"_](https://stnolting.github.io/neorv32/#_processor_modules)
151 64 zero_gravi
of the online datasheet shows the resource utilization of each optional processor module to allow an
152 62 zero_gravi
estimation of the actual setup's hardware requirements.
153 2 zero_gravi
 
154 61 zero_gravi
:information_source: The [`setups`](https://github.com/stnolting/neorv32/tree/master/setups) folder provides exemplary FPGA
155 64 zero_gravi
setups targeting various FPGA boards and toolchains. These setups also provide resource utilization reports for different
156 61 zero_gravi
SoC configurations
157 56 zero_gravi
 
158
[[back to top](#The-NEORV32-RISC-V-Processor)]
159 47 zero_gravi
 
160 56 zero_gravi
 
161 47 zero_gravi
 
162 64 zero_gravi
## 3. NEORV32 CPU Features
163 47 zero_gravi
 
164 60 zero_gravi
:books: In-depth detailed information regarding the CPU can be found in the
165
[online documentation - _"NEORV32 Central Processing Unit"_](https://stnolting.github.io/neorv32/#_neorv32_central_processing_unit_cpu).
166 47 zero_gravi
 
167 60 zero_gravi
The CPU (top entity: [`rtl/core/neorv32_cpu.vhd`](https://github.com/stnolting/neorv32/blob/master/rtl/core/neorv32_cpu.vhd))
168 64 zero_gravi
implements the RISC-V 32-bit `rv32` ISA with optional extensions (see below). It is compatible to subsets of the
169 60 zero_gravi
*Unprivileged ISA Specification* [(Version 2.2)](https://github.com/stnolting/neorv32/blob/master/docs/references/riscv-spec.pdf)
170 64 zero_gravi
and the *Privileged Architecture Specification* [(Version 1.12-draft)](https://github.com/stnolting/neorv32/blob/master/docs/references/riscv-privileged.pdf).
171
Compatibility is checked by passing the [official RISC-V architecture tests](https://github.com/riscv/riscv-arch-test)
172 62 zero_gravi
(see [`sim/README`](sim/README.md)).
173 56 zero_gravi
 
174 64 zero_gravi
The core implements a little-endian Von-Neumann architecture using two pipeline stages, where each stage can operate in a multi-cycle processing
175
scheme. The CPU supports three privilege levels (`machine` and optional `user` and `debug_mode`), the three standard RISC-V machine
176
interrupts (`MTI`, `MEI`, `MSI`) plus 16 _fast interrupt requests_ as custom extensions.
177 61 zero_gravi
It also supports **all** standard RISC-V exceptions (instruction/load/store misaligned address & bus access fault, illegal
178 64 zero_gravi
instruction, breakpoint, environment calls). See :books: [_"Full Virtualization"_](https://stnolting.github.io/neorv32/#_full_virtualization)
179
for more information.
180 23 zero_gravi
 
181 2 zero_gravi
 
182 60 zero_gravi
### Available ISA Extensions
183 2 zero_gravi
 
184 60 zero_gravi
Currently, the following _optional_ RISC-V-compatible ISA extensions are implemented (linked to the according
185
documentation section). Note that the `X` extension is always enabled.
186 2 zero_gravi
 
187 60 zero_gravi
**RV32
188
[[`I`](https://stnolting.github.io/neorv32/#_i_base_integer_isa)/
189
[`E`](https://stnolting.github.io/neorv32/#_e_embedded_cpu)]
190
[[`A`](https://stnolting.github.io/neorv32/#_a_atomic_memory_access)]
191
[[`C`](https://stnolting.github.io/neorv32/#_c_compressed_instructions)]
192
[[`M`](https://stnolting.github.io/neorv32/#_m_integer_multiplication_and_division)]
193
[[`U`](https://stnolting.github.io/neorv32/#_u_less_privileged_user_mode)]
194
[[`X`](https://stnolting.github.io/neorv32/#_x_neorv32_specific_custom_extensions)]
195 63 zero_gravi
[[`Zbb`](https://stnolting.github.io/neorv32/#_zbb_basic_bit_manipulation_operations)]
196 60 zero_gravi
[[`Zfinx`](https://stnolting.github.io/neorv32/#_zfinx_single_precision_floating_point_operations)]
197
[[`Zicsr`](https://stnolting.github.io/neorv32/#_zicsr_control_and_status_register_access_privileged_architecture)]
198
[[`Zifencei`](https://stnolting.github.io/neorv32/#_zifencei_instruction_stream_synchronization)]
199 61 zero_gravi
[[`Zmmul`](https://stnolting.github.io/neorv32/#_zmmul_integer_multiplication)]
200 60 zero_gravi
[[`PMP`](https://stnolting.github.io/neorv32/#_pmp_physical_memory_protection)]
201 63 zero_gravi
[[`HPM`](https://stnolting.github.io/neorv32/#_hpm_hardware_performance_monitors)]
202
[[`DEBUG`](https://stnolting.github.io/neorv32/#_cpu_debug_mode)]**
203 60 zero_gravi
 
204 63 zero_gravi
:warning: The `Zbb`, `Zfinx` and `Zmmul` RISC-V extensions are frozen but not officially ratified yet. Hence, there is no
205 64 zero_gravi
upstream gcc support. To circumvent this, the NEORV32 software framework provides _intrinsic_ libraries for these extensions.
206 60 zero_gravi
 
207 56 zero_gravi
[[back to top](#The-NEORV32-RISC-V-Processor)]
208 39 zero_gravi
 
209 56 zero_gravi
 
210 60 zero_gravi
### FPGA Implementation Results - CPU
211 23 zero_gravi
 
212 62 zero_gravi
Implementation results for _exemplary_ CPU configuration generated for an **Intel Cyclone IV EP4CE22F17C6N FPGA**
213 60 zero_gravi
using **Intel Quartus Prime Lite 20.1** ("balanced implementation"). The timing information is derived
214
from the Timing Analyzer / Slow 1200mV 0C Model. No constraints were used at all.
215 2 zero_gravi
 
216 62 zero_gravi
Results generated for hardware version [`1.5.7.10`](https://github.com/stnolting/neorv32/blob/master/CHANGELOG.md).
217 2 zero_gravi
 
218 60 zero_gravi
| CPU Configuration                                 | LEs  | FFs  | Memory bits | DSPs (9-bit) | f_max   |
219
|:--------------------------------------------------|:----:|:----:|:-----------:|:------------:|:-------:|
220 62 zero_gravi
| `rv32i`                                           |  806 |  359 |        1024 |            0 | 125 MHz |
221
| `rv32i_Zicsr`                                     | 1729 |  813 |        1024 |            0 | 124 MHz |
222
| `rv32imac_Zicsr`                                  | 2511 | 1074 |        1024 |            0 | 124 MHz |
223 6 zero_gravi
 
224 64 zero_gravi
:information_source: An incremental list of CPU extension's hardware utilization can found in
225 62 zero_gravi
[online documentation - _"FPGA Implementation Results - CPU"_](https://stnolting.github.io/neorv32/#_cpu).
226
 
227
:information_source: The CPU provides options to further reduce the footprint (for example by constraining
228
the CPU-internal counters). See the [online data](https://stnolting.github.io/neorv32) sheet for more information.
229
 
230 56 zero_gravi
[[back to top](#The-NEORV32-RISC-V-Processor)]
231 22 zero_gravi
 
232
 
233 60 zero_gravi
### Performance
234 56 zero_gravi
 
235 64 zero_gravi
The NEORV32 CPU is based on a two-stages pipelined architecture. Since both stage use a multi-cycle processing scheme,
236 61 zero_gravi
each instruction requires several clock cycles to execute (2 cycles for ALU operations, up to 40 cycles for divisions).
237
The average CPI (cycles per instruction) depends on the instruction mix of a specific applications and also on the
238
available CPU extensions.
239 2 zero_gravi
 
240 62 zero_gravi
The following table shows the performance results (relative CoreMark score and average cycles per instruction) for
241
_exemplary_ CPU configuration running 2000 iterations of the [CoreMark CPU benchmark](https://www.eembc.org/coremark).
242
The source files are available in [`sw/example/coremark`](https://github.com/stnolting/neorv32/blob/master/sw/example/coremark).
243 2 zero_gravi
 
244 63 zero_gravi
:information_source: A _simple_ port of the **Dhrystone** benchmark is also available:
245
[`sw/example/dhrystone`](https://github.com/stnolting/neorv32/blob/master/sw/example/dhrystone)
246
 
247 2 zero_gravi
~~~
248 59 zero_gravi
**CoreMark Setup**
249 56 zero_gravi
Hardware:       32kB IMEM, 8kB DMEM, no caches, 100MHz clock
250 38 zero_gravi
CoreMark:       2000 iterations, MEM_METHOD is MEM_STACK
251
Compiler:       RISCV32-GCC 10.1.0 (rv32i toolchain)
252 60 zero_gravi
Compiler flags: default, see makefile; optimization -O3
253 2 zero_gravi
~~~
254
 
255 62 zero_gravi
Results generated for hardware version [`1.5.7.10`](https://github.com/stnolting/neorv32/blob/master/CHANGELOG.md).
256 42 zero_gravi
 
257 62 zero_gravi
| CPU Configuration                              | CoreMark Score | CoreMarks/MHz | Average CPI |
258
|:-----------------------------------------------|:--------------:|:-------------:|:-----------:|
259
| _small_ (`rv32i_Zicsr`)                        |          33.89 | **0.3389**    | **4.04**    |
260
| _medium_ (`rv32imc_Zicsr`)                     |          62.50 | **0.6250**    | **5.34**    |
261
| _performance_(`rv32imc_Zicsr` + perf. options) |          95.23 | **0.9523**    | **3.54**    |
262 2 zero_gravi
 
263 62 zero_gravi
:information_source: More information regarding the CPU performance can be found in the
264
[online documentation - _"CPU Performance"_](https://stnolting.github.io/neorv32/#_cpu_performance).
265 2 zero_gravi
 
266 56 zero_gravi
[[back to top](#The-NEORV32-RISC-V-Processor)]
267 34 zero_gravi
 
268 56 zero_gravi
 
269 2 zero_gravi
 
270 64 zero_gravi
## 4. Software Framework and Tooling
271 60 zero_gravi
 
272
:books: In-depth detailed information regarding the software framework can be found in the
273
[online documentation - _"Software Framework"_](https://stnolting.github.io/neorv32/#_software_framework).
274
 
275
* [core libraries](https://github.com/stnolting/neorv32/tree/master/sw/lib) for high-level usage of the provided functions and peripherals
276
* application compilation based on GNU makefiles
277
* gcc-based toolchain ([pre-compiled toolchains available](https://github.com/stnolting/riscv-gcc-prebuilt))
278
* bootloader with UART interface console
279
* runtime environment for handling traps
280 65 zero_gravi
* several [example programs](https://github.com/stnolting/neorv32/tree/master/sw/example) to get started including
281
[CoreMark](https://github.com/stnolting/neorv32/tree/master/sw/example/coremark),
282
[FreeRTOS](https://github.com/stnolting/neorv32/tree/master/sw/example/demo_freeRTOS) and
283
[Conway's Game of Life](https://github.com/stnolting/neorv32/tree/master/sw/example/game_of_life)
284
* `doxygen`-based documentation, available on :books: [GitHub pages](https://stnolting.github.io/neorv32/sw/files.html)
285 60 zero_gravi
* supports implementation using open source tooling (GHDL, Yosys and nextpnr; in the future Verilog-to-Routing); both, software and hardware can be
286
developed and debugged with open source tooling
287 65 zero_gravi
* [continuous integration](https://github.com/stnolting/neorv32/actions) :octocat: is available for:
288 60 zero_gravi
  * allowing users to see the expected execution/output of the tools
289
  * ensuring specification compliance
290
  * catching regressions
291
  * providing ready-to-use and up-to-date bitstreams and documentation
292
 
293
[[back to top](#The-NEORV32-RISC-V-Processor)]
294
 
295
 
296
 
297 64 zero_gravi
## 5. Getting Started
298 2 zero_gravi
 
299 60 zero_gravi
This overview provides some *quick links* to the most important sections of the
300 61 zero_gravi
[online Data Sheet](https://stnolting.github.io/neorv32) and the
301 60 zero_gravi
[online User Guide](https://stnolting.github.io/neorv32/ug).
302 2 zero_gravi
 
303 59 zero_gravi
### :electric_plug: Hardware Overview
304 2 zero_gravi
 
305 61 zero_gravi
* [Rationale](https://stnolting.github.io/neorv32/#_rationale) - NEORV32: why, how come, what for
306
 
307 59 zero_gravi
* [NEORV32 Processor](https://stnolting.github.io/neorv32/#_neorv32_processor_soc) - the SoC
308
  * [Top Entity - Signals](https://stnolting.github.io/neorv32/#_processor_top_entity_signals) - how to connect to the processor
309
  * [Top Entity - Generics](https://stnolting.github.io/neorv32/#_processor_top_entity_generics) - configuration options
310 61 zero_gravi
  * [Address Space](https://stnolting.github.io/neorv32/#_address_space) - memory layout and boot configuration
311 59 zero_gravi
  * [SoC Modules](https://stnolting.github.io/neorv32/#_processor_internal_modules) - available IO/peripheral modules and memories
312 61 zero_gravi
  * [On-Chip Debugger](https://stnolting.github.io/neorv32/#_on_chip_debugger_ocd) - online & in-system debugging of the processor via JTAG
313 2 zero_gravi
 
314 63 zero_gravi
* [NEORV32 CPU](https://stnolting.github.io/neorv32/#_neorv32_central_processing_unit_cpu) - the CPU
315 59 zero_gravi
  * [RISC-V compatibility](https://stnolting.github.io/neorv32/#_risc_v_compatibility) - what is compatible to the specs. and what is not
316
  * [ISA and Extensions](https://stnolting.github.io/neorv32/#_instruction_sets_and_extensions) - available RISC-V ISA extensions
317
  * [CSRs](https://stnolting.github.io/neorv32/#_control_and_status_registers_csrs) - control and status registers
318
  * [Traps](https://stnolting.github.io/neorv32/#_traps_exceptions_and_interrupts) - interrupts and exceptions
319 34 zero_gravi
 
320 59 zero_gravi
### :floppy_disk: Software Overview
321 12 zero_gravi
 
322 59 zero_gravi
* [Core Libraries](https://stnolting.github.io/neorv32/#_core_libraries) - high-level functions for accessing the processor's peripherals
323
  * [Software Framework Documentation](https://stnolting.github.io/neorv32/sw/files.html) - `doxygen`-based documentation
324
* [Application Makefiles](https://stnolting.github.io/neorv32/#_application_makefile) - turning your application into an executable
325
* [Bootloader](https://stnolting.github.io/neorv32/#_bootloader) - the build-in NEORV32 bootloader
326 22 zero_gravi
 
327 60 zero_gravi
### :rocket: User Guides (see full [User Guide](https://stnolting.github.io/neorv32/ug/))
328 31 zero_gravi
 
329 60 zero_gravi
* [Toolchain Setup](https://stnolting.github.io/neorv32/ug/#_toolchain_setup) - install and setup RISC-V gcc
330
* [General Hardware Setup](https://stnolting.github.io/neorv32/ug/#_general_hardware_setup) - setup a new NEORV32 EDA project
331
* [General Software Setup](https://stnolting.github.io/neorv32/ug/#_general_software_framework_setup) - configure the software framework
332
* [Application Compilation](https://stnolting.github.io/neorv32/ug/#_application_program_compilation) - compile an application using `make`
333
* [Upload via Bootloader](https://stnolting.github.io/neorv32/ug/#_uploading_and_starting_of_a_binary_executable_image_via_uart) - upload and execute executables
334 63 zero_gravi
* [Application-Specific Processor Configuration](https://stnolting.github.io/neorv32/ug/#_application_specific_processor_configuration) - tailor the processor to your needs
335 64 zero_gravi
* [Adding Custom Hardware Modules](https://stnolting.github.io/neorv32/ug/#_adding_custom_hardware_modules) - add _your_ custom hardware
336 60 zero_gravi
* [Debugging via the On-Chip Debugger](https://stnolting.github.io/neorv32/ug/#_debugging_using_the_on_chip_debugger) - step through code *online* and *in-system*
337 63 zero_gravi
* [Simulation](https://stnolting.github.io/neorv32/ug/#_simulating_the_processor) - simulate the whole SoC
338
  * [Hello World!](https://stnolting.github.io/neorv32/ug/index.html#_hello_world) - run a quick _"hello world"_ simulation
339 56 zero_gravi
 
340 60 zero_gravi
### :copyright: Legal
341
 
342
* [Overview](https://stnolting.github.io/neorv32/#_legal) - license, disclaimer, proprietary notice, ...
343 61 zero_gravi
* [Citing](https://stnolting.github.io/neorv32/#_citing) - citing information (DOI)
344
* [Impressum](https://github.com/stnolting/neorv32/blob/master/docs/impressum.md) - imprint (:de:)
345 60 zero_gravi
 
346 56 zero_gravi
[[back to top](#The-NEORV32-RISC-V-Processor)]
347 36 zero_gravi
 
348 56 zero_gravi
 
349 22 zero_gravi
 
350 59 zero_gravi
## Acknowledgements
351 2 zero_gravi
 
352 59 zero_gravi
**A big shoutout to all [contributors](https://github.com/stnolting/neorv32/graphs/contributors), who helped improving this project! :heart:**
353 35 zero_gravi
 
354 59 zero_gravi
[RISC-V](https://riscv.org/) - Instruction Sets Want To Be Free!
355 35 zero_gravi
 
356 59 zero_gravi
Continous integration provided by [:octocat: GitHub Actions](https://github.com/features/actions) and powered by [GHDL](https://github.com/ghdl/ghdl).
357 35 zero_gravi
 
358 32 zero_gravi
--------
359 2 zero_gravi
 
360 64 zero_gravi
Made with :coffee: in Hanover, Germany :eu:

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.