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

Subversion Repositories neorv32

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

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