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

Subversion Repositories neorv32

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

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