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

Subversion Repositories neorv32

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

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
[![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)
3
[![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)
4
[![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)
5
[![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)
6
 
7 50 zero_gravi
[![NEORV32](https://raw.githubusercontent.com/stnolting/neorv32/master/docs/figures/neorv32_logo_dark.png)](https://github.com/stnolting/neorv32)
8 2 zero_gravi
 
9 37 zero_gravi
# The NEORV32 RISC-V Processor
10
 
11 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)
12
[![release](https://img.shields.io/github/v/release/stnolting/neorv32?longCache=true&style=flat-square&logo=GitHub)](https://github.com/stnolting/neorv32/releases)
13
[![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)
14 60 zero_gravi
[![datasheet (html)](https://img.shields.io/badge/-HTML-ffbd00?longCache=true&style=flat-square)](https://stnolting.github.io/neorv32)
15
[![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)
16
[![userguide (html)](https://img.shields.io/badge/-HTML-ffbd00?longCache=true&style=flat-square)](https://stnolting.github.io/neorv32/ug)
17 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)
18 2 zero_gravi
 
19 32 zero_gravi
* [Overview](#Overview)
20 60 zero_gravi
* [Processor/SoC Features](#NEORV32-Processor-Features)
21
  * [FPGA Implementation Results](#FPGA-Implementation-Results---Processor)
22 59 zero_gravi
* [CPU Features](#NEORV32-CPU-Features)
23 60 zero_gravi
  * [Available ISA Extensions](#Available-ISA-Extensions)
24
  * [FPGA Implementation Results](#FPGA-Implementation-Results---CPU)
25
  * [Performance](#Performance)
26
* [Software Framework & Tooling](#Software-Framework-and-Tooling)
27
* [**Getting Started**](#Getting-Started) :rocket:
28 2 zero_gravi
 
29
 
30 60 zero_gravi
 
31 32 zero_gravi
## Overview
32 2 zero_gravi
 
33 54 zero_gravi
![neorv32 Overview](https://raw.githubusercontent.com/stnolting/neorv32/master/docs/figures/neorv32_processor.png)
34
 
35 59 zero_gravi
The NEORV32 Processor is a customizable microcontroller-like system on chip (SoC) that is based on the RISC-V NEORV32 CPU.
36
The project is intended as auxiliary processor in larger SoC designs or as *ready-to-go* stand-alone
37
custom / customizable microcontroller.
38 2 zero_gravi
 
39 60 zero_gravi
:books: For detailed information take a look at the [NEORV32 documentation (online at GitHub-pages)](https://stnolting.github.io/neorv32/).
40 59 zero_gravi
The *doxygen*-based documentation of the *software framework* is also available online
41
at [GitHub-pages](https://stnolting.github.io/neorv32/sw/files.html).
42 45 zero_gravi
 
43 59 zero_gravi
:label: The project's change log is available in [`CHANGELOG.md`](https://github.com/stnolting/neorv32/blob/master/CHANGELOG.md).
44
To see the changes between *official* releases visit the project's [release page](https://github.com/stnolting/neorv32/releases).
45 11 zero_gravi
 
46 59 zero_gravi
:package: The [`boards`](https://github.com/stnolting/neorv32/tree/master/boards) folder provides exemplary EDA setups targeting
47
various FPGA boards to get you started.
48 56 zero_gravi
 
49 52 zero_gravi
:spiral_notepad: Check out the [project boards](https://github.com/stnolting/neorv32/projects) for a list of current **ideas**,
50
**TODOs**, features being **planned** and **work-in-progress**.
51 40 zero_gravi
 
52 59 zero_gravi
:bulb: Feel free to open a [new issue](https://github.com/stnolting/neorv32/issues) or start a
53
[new discussion](https://github.com/stnolting/neorv32/discussions) if you have questions, comments, ideas or bug-fixes.
54
Check out how to contribute in [`CONTRIBUTE.md`](https://github.com/stnolting/neorv32/blob/master/CONTRIBUTING.md).
55 47 zero_gravi
 
56 60 zero_gravi
:rocket: Check out the [quick links below](#Getting-Started) or directly jump to the
57
[*User Guide*](https://stnolting.github.io/neorv32/ug/) to get started
58 59 zero_gravi
setting up your NEORV32 setup!
59 51 zero_gravi
 
60 2 zero_gravi
 
61 59 zero_gravi
### Project Key Features
62 15 zero_gravi
 
63 60 zero_gravi
* [CPU](#NEORV32-CPU-Features) plus [Processor/SoC](#NEORV32-Processor-Features) plus [Software Framework & Tooling](#Software-Framework-and-Tooling)
64 59 zero_gravi
* completely described in behavioral, platform-independent VHDL - no primitives, macros, etc.
65
* fully synchronous design, no latches, no gated clocks
66
* be as small as possible (while being as RISC-V-compliant as possible) – but with a reasonable size-performance trade-off
67
(the processor has to fit in a Lattice iCE40 UltraPlus 5k low-power FPGA running at 22+ MHz)
68
* from zero to `printf("hello world!");` - completely open source and documented
69
* easy to use even for FPGA/RISC-V starters – intended to work *out of the box*
70 22 zero_gravi
 
71 59 zero_gravi
[[back to top](#The-NEORV32-RISC-V-Processor)]
72 2 zero_gravi
 
73
 
74
 
75 60 zero_gravi
## NEORV32 Processor Features
76 3 zero_gravi
 
77 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))
78
provides a full-featured SoC build around the NEORV32 CPU. It is highly configurable via generics
79
to allow a flexible customization according to your needs. Note that all modules listed below are _optional_.
80
In-depth detailed information regarding the processor/SoC can be found in the :books:
81
[online documentation - _"NEORV32 Processors (SoC)"_](https://stnolting.github.io/neorv32/#_neorv32_processor_soc).
82 2 zero_gravi
 
83 60 zero_gravi
**Memory**
84 2 zero_gravi
 
85 60 zero_gravi
* processor-internal data and instruction memories ([DMEM](https://stnolting.github.io/neorv32/#_data_memory_dmem) /
86
[IMEM](https://stnolting.github.io/neorv32/#_instruction_memory_imem)) &
87
cache ([iCACHE](https://stnolting.github.io/neorv32/#_processor_internal_instruction_cache_icache))
88
* bootloader ([BOOTLDROM](https://stnolting.github.io/neorv32/#_bootloader_rom_bootrom)) with serial user interface
89
  * supports boot via UART or from external SPI flash
90 11 zero_gravi
 
91 60 zero_gravi
**Timers**
92 11 zero_gravi
 
93 60 zero_gravi
* machine system timer ([MTIME](https://stnolting.github.io/neorv32/#_machine_system_timer_mtime)), RISC-V spec. compatible
94
* watchdog timer ([WDT](https://stnolting.github.io/neorv32/#_watchdog_timer_wdt))
95 11 zero_gravi
 
96 60 zero_gravi
**IO**
97 56 zero_gravi
 
98 60 zero_gravi
* standard serial interfaces
99
([UART](https://stnolting.github.io/neorv32/#_primary_universal_asynchronous_receiver_and_transmitter_uart0),
100
[SPI](https://stnolting.github.io/neorv32/#_serial_peripheral_interface_controller_spi),
101
[TWI / I²C](https://stnolting.github.io/neorv32/#_two_wire_serial_interface_controller_twi))
102
* general purpose [GPIO](https://stnolting.github.io/neorv32/#_general_purpose_input_and_output_port_gpio) and
103
[PWM](https://stnolting.github.io/neorv32/#_pulse_width_modulation_controller_pwm)
104
* smart LED interface ([NEOLED](https://stnolting.github.io/neorv32/#_smart_led_interface_neoled)) to directly drive _NeoPixel(TM)_ LEDs
105 2 zero_gravi
 
106 60 zero_gravi
**SoC Connectivity and Integration**
107 47 zero_gravi
 
108 59 zero_gravi
* 32-bit external bus interface, Wishbone b4 compatible
109
([WISHBONE](https://stnolting.github.io/neorv32/#_processor_external_memory_interface_wishbone_axi4_lite))
110 60 zero_gravi
  * [wrapper](https://github.com/stnolting/neorv32/blob/master/rtl/top_templates/neorv32_top_axi4lite.vhd) for AXI4-Lite master interface
111
* alternative [top entities/wrappers](https://github.com/stnolting/neorv32/blob/master/rtl/top_templates) providing
112
simplified and/or resolved top entity ports for easy system inegration
113 59 zero_gravi
* custom functions subsystem ([CFS](https://stnolting.github.io/neorv32/#_custom_functions_subsystem_cfs))
114
for tightly-coupled custom co-processor extensions
115 60 zero_gravi
 
116
**Advanced**
117
 
118
* _true random_ number generator ([TRNG](https://stnolting.github.io/neorv32/#_true_random_number_generator_trng))
119 59 zero_gravi
* numerically-controlled oscillator ([NCO](https://stnolting.github.io/neorv32/#_numerically_controlled_oscillator_nco))
120 60 zero_gravi
* on-chip debugger ([OCD](https://stnolting.github.io/neorv32/#_on_chip_debugger_ocd)) via JTGA - implementing
121 59 zero_gravi
the [*Minimal RISC-V Debug Specification Version 0.13.2*](https://github.com/riscv/riscv-debug-spec)
122
and compatible with the *OpenOCD* and *gdb*
123 47 zero_gravi
 
124 60 zero_gravi
 
125 59 zero_gravi
:information_source: It is recommended to use the processor setup even if you want to **use the CPU in stand-alone mode**. Simply disable all the processor-internal
126
modules via the generics and you will get a "CPU wrapper" that already provides a minimal CPU environment and an external memory interface (like AXI4).
127
This setup also allows to further use the default bootloader and software framework. From this base you can start building your own processor system.
128 47 zero_gravi
 
129 56 zero_gravi
[[back to top](#The-NEORV32-RISC-V-Processor)]
130 47 zero_gravi
 
131 56 zero_gravi
 
132 60 zero_gravi
### FPGA Implementation Results - Processor
133 47 zero_gravi
 
134 60 zero_gravi
:information_source: Check out the [`boards`](https://github.com/stnolting/neorv32/tree/master/boards)
135
folder for exemplary setups targeting various FPGA boards.
136 2 zero_gravi
 
137 60 zero_gravi
:information_source: The hardware resources used by the processor-internal IO/peripheral modules andmemories is also available in the
138
[online documentation - _"NEORV32 Central Processing Unit"_](https://stnolting.github.io/neorv32/#_neorv32_central_processing_unit_cpu).
139 56 zero_gravi
 
140 60 zero_gravi
Results generated for hardware version [`1.4.9.0`](https://github.com/stnolting/neorv32/blob/master/CHANGELOG.md).
141
If not otherwise note, the setups use *the default configuration* (like no *TRNG*),
142
no external memory interface and only internal instruction and data memories
143
(IMEM uses 16kB and DMEM uses 8kB memory space).
144 56 zero_gravi
 
145 60 zero_gravi
| Vendor  | FPGA                              | Board            | Toolchain                  | CPU Configuration                 | LUT / LE   | FF / REG   | DSP (9-bit) | Memory Bits  | BRAM / EBR | SPRAM    | Frequency     |
146
|:--------|:----------------------------------|:-----------------|:---------------------------|:----------------------------------|:-----------|:-----------|:------------|:-------------|:-----------|:---------|--------------:|
147
| Intel   | Cyclone IV `EP4CE22F17C6N`        | Terasic DE0-Nano | Quartus Prime Lite 20.1    | `rv32imcu_Zicsr_Zifencei`         | 3813 (17%) | 1904  (8%) | 0 (0%)      | 231424 (38%) |          - |        - |       119 MHz |
148
| Lattice | iCE40 UltraPlus `iCE40UP5K-SG48I` | [`boards/UPduino_v3`](https://github.com/stnolting/neorv32/tree/master/boards/UPduino_v3) | Radiant 2.1 (LSE) | `rv32imac_Zicsr` | 5123 (97%) | 1972 (37%) | 0 (0%) | - |   12 (40%) | 4 (100%) | *c* 24 MHz |
149
| Xilinx  | Artix-7 `XC7A35TICSG324-1L`       | Arty A7-35T      | Vivado 2019.2              | `rv32imcu_Zicsr_Zifencei` + `PMP` | 2465 (12%) | 1912  (5%) | 0 (0%)      |            - |    8 (16%) |        - |   *c* 100 MHz |
150
 
151 56 zero_gravi
[[back to top](#The-NEORV32-RISC-V-Processor)]
152 47 zero_gravi
 
153 56 zero_gravi
 
154 47 zero_gravi
 
155 60 zero_gravi
## NEORV32 CPU Features
156 47 zero_gravi
 
157 60 zero_gravi
:books: In-depth detailed information regarding the CPU can be found in the
158
[online documentation - _"NEORV32 Central Processing Unit"_](https://stnolting.github.io/neorv32/#_neorv32_central_processing_unit_cpu).
159 47 zero_gravi
 
160 60 zero_gravi
The CPU (top entity: [`rtl/core/neorv32_cpu.vhd`](https://github.com/stnolting/neorv32/blob/master/rtl/core/neorv32_cpu.vhd))
161
implements the RISC-V 32-bit `rv32` ISA with optional extensions. It is compatible to a subset of the
162
*Unprivileged ISA Specification* [(Version 2.2)](https://github.com/stnolting/neorv32/blob/master/docs/references/riscv-spec.pdf)
163
and a subset of the *Privileged Architecture Specification* [(Version 1.12-draft)](https://github.com/stnolting/neorv32/blob/master/docs/references/riscv-privileged.pdf).
164
The CPU _passes_ the [official RISC-V architecture tests](https://github.com/riscv/riscv-arch-test)
165
(see [`riscv-arch-test/README`](https://github.com/stnolting/neorv32/blob/master/riscv-arch-test/README.md)).
166 56 zero_gravi
 
167 60 zero_gravi
NEORV32 is an official (see [architecture ID](https://github.com/riscv/riscv-isa-manual/blob/master/marchid.md)) little-endian
168
two-stage (+ multi-cycle) RISC-V CPU with independent instruction/data bus interfaces, and multiple supported operating
169
modes / privilege levels: `machine` and optional `user` and `debug_mode`.
170 23 zero_gravi
 
171 60 zero_gravi
It supports the _standard_ RISC-V machine interrupts (`MTI`, `MEI`, `MSI`) and 1 non-maskable interrupt as well as 16
172
_fast interrupt requests_ as custom extensions. The CPU also supports **all** standard RISC-V exceptions
173
(instruction/load/store misaligned address & bus access fault, illegal instruction, breakpoint, environment call).
174
As a special "execution safety" extension, _all_ invalid, reserved or malformed instructions will raise an illegal
175
instruction exception.
176 2 zero_gravi
 
177
 
178 60 zero_gravi
### Available ISA Extensions
179 2 zero_gravi
 
180 60 zero_gravi
Currently, the following _optional_ RISC-V-compatible ISA extensions are implemented (linked to the according
181
documentation section). Note that the `X` extension is always enabled.
182 2 zero_gravi
 
183 60 zero_gravi
**RV32
184
[[`I`](https://stnolting.github.io/neorv32/#_i_base_integer_isa)/
185
[`E`](https://stnolting.github.io/neorv32/#_e_embedded_cpu)]
186
[[`A`](https://stnolting.github.io/neorv32/#_a_atomic_memory_access)]
187
[[`C`](https://stnolting.github.io/neorv32/#_c_compressed_instructions)]
188
[[`M`](https://stnolting.github.io/neorv32/#_m_integer_multiplication_and_division)]
189
[[`U`](https://stnolting.github.io/neorv32/#_u_less_privileged_user_mode)]
190
[[`X`](https://stnolting.github.io/neorv32/#_x_neorv32_specific_custom_extensions)]
191
[[`Zfinx`](https://stnolting.github.io/neorv32/#_zfinx_single_precision_floating_point_operations)]
192
[[`Zicsr`](https://stnolting.github.io/neorv32/#_zicsr_control_and_status_register_access_privileged_architecture)]
193
[[`Zifencei`](https://stnolting.github.io/neorv32/#_zifencei_instruction_stream_synchronization)]
194
[[`PMP`](https://stnolting.github.io/neorv32/#_pmp_physical_memory_protection)]
195
[[`HPM`](https://stnolting.github.io/neorv32/#_hpm_hardware_performance_monitors)]**
196
 
197
:information_source: The `B` ISA extension has been temporarily removed from the processor.
198
See [B ISA Extension](https://github.com/stnolting/neorv32/projects/7) project board.
199
 
200 56 zero_gravi
[[back to top](#The-NEORV32-RISC-V-Processor)]
201 39 zero_gravi
 
202 56 zero_gravi
 
203 60 zero_gravi
### FPGA Implementation Results - CPU
204 23 zero_gravi
 
205 60 zero_gravi
:books: More details regarding exemplary FPGA setups including a listing of resource utilization by each SoC module can be found in the
206
[online documentation - _"FPGA Implementation Results"_](https://stnolting.github.io/neorv32/#_fpga_implementation_results).
207 11 zero_gravi
 
208 60 zero_gravi
Implementation results for exemplary CPU configuration generated for an **Intel Cyclone IV EP4CE22F17C6N FPGA**
209
using **Intel Quartus Prime Lite 20.1** ("balanced implementation"). The timing information is derived
210
from the Timing Analyzer / Slow 1200mV 0C Model. No constraints were used at all.
211 2 zero_gravi
 
212 60 zero_gravi
Results generated for hardware version [`1.5.3.2`](https://github.com/stnolting/neorv32/blob/master/CHANGELOG.md).
213 2 zero_gravi
 
214 60 zero_gravi
| CPU Configuration                                 | LEs  | FFs  | Memory bits | DSPs (9-bit) | f_max   |
215
|:--------------------------------------------------|:----:|:----:|:-----------:|:------------:|:-------:|
216
| `rv32i`                                           |  980 |  409 |        1024 |            0 | 123 MHz |
217
| `rv32i`    + `Zicsr`                              | 1835 |  856 |        1024 |            0 | 124 MHz |
218
| `rv32imac` + `Zicsr`                              | 2685 | 1156 |        1024 |            0 | 124 MHz |
219
| `rv32imac` + `Zicsr` + `u` + `Zifencei` + `Zfinx` | 4004 | 1812 |        1024 |            7 | 121 MHz |
220 6 zero_gravi
 
221 56 zero_gravi
[[back to top](#The-NEORV32-RISC-V-Processor)]
222 22 zero_gravi
 
223
 
224 60 zero_gravi
### Performance
225 56 zero_gravi
 
226 59 zero_gravi
The NEORV32 CPU is based on a two-stages pipelined architecutre. Each stage uses a multi-cycle processing scheme.
227
Hence, each instruction requires several clock cycles to execute (2 cycles for ALU operations, and up to 40 cycles for divisions).
228
*By default* the CPU-internal shifter as well as the multiplier and divider of the `M` extension use a bit-serial approach
229
and require several cycles for completion. The average CPI (cycles per instruction) depends on the instruction mix of a
230
specific applications and also on the available CPU extensions.
231 2 zero_gravi
 
232 59 zero_gravi
The following table shows the performance results(relative CoreMark score and average cycles per instruction) for successfully
233
running 2000 iterations of the [CoreMark CPU benchmark](https://www.eembc.org/coremark), which reflects a pretty good "real-life" work load.
234
The source files are available in [sw/example/coremark](https://github.com/stnolting/neorv32/blob/master/sw/example/coremark).
235 2 zero_gravi
 
236
~~~
237 59 zero_gravi
**CoreMark Setup**
238 56 zero_gravi
Hardware:       32kB IMEM, 8kB DMEM, no caches, 100MHz clock
239 38 zero_gravi
CoreMark:       2000 iterations, MEM_METHOD is MEM_STACK
240
Compiler:       RISCV32-GCC 10.1.0 (rv32i toolchain)
241 60 zero_gravi
Compiler flags: default, see makefile; optimization -O3
242 2 zero_gravi
~~~
243
 
244 42 zero_gravi
Results generated for hardware version [`1.4.9.8`](https://github.com/stnolting/neorv32/blob/master/CHANGELOG.md).
245
 
246 59 zero_gravi
| CPU (including `Zicsr` extension)           | Executable Size | CoreMark Score | CoreMarks/MHz | Total Clock Cycles | Executed Instructions | Average CPI |
247
|:--------------------------------------------|:---------------:|:--------------:|:-------------:|-------------------:|----------------------:|:-----------:|
248
| `rv32i`                                     |    28 756 bytes |          36.36 |    **0.3636** |         5595750503 |            1466028607 |    **3.82** |
249
| `rv32imc`                                   |    22 008 bytes |          68.97 |    **0.6897** |         2981786734 |             611814918 |    **4.87** |
250
| `rv32imc` + `FAST_MUL_EN` + `FAST_SHIFT_EN` |    22 008 bytes |          90.91 |    **0.9091** |         2265135174 |             611814948 |    **3.70** |
251 2 zero_gravi
 
252 60 zero_gravi
:information_source: The `FAST_MUL_EN` configuration uses DSPs for the multiplier of the `M` extension.
253
The `FAST_SHIFT_EN` configuration uses a barrel shifter for CPU shift operations.
254 2 zero_gravi
 
255 56 zero_gravi
[[back to top](#The-NEORV32-RISC-V-Processor)]
256 34 zero_gravi
 
257 56 zero_gravi
 
258 2 zero_gravi
 
259 60 zero_gravi
## Software Framework and Tooling
260
 
261
:books: In-depth detailed information regarding the software framework can be found in the
262
[online documentation - _"Software Framework"_](https://stnolting.github.io/neorv32/#_software_framework).
263
 
264
* [core libraries](https://github.com/stnolting/neorv32/tree/master/sw/lib) for high-level usage of the provided functions and peripherals
265
* application compilation based on GNU makefiles
266
* gcc-based toolchain ([pre-compiled toolchains available](https://github.com/stnolting/riscv-gcc-prebuilt))
267
* bootloader with UART interface console
268
* runtime environment for handling traps
269
* several [example programs](https://github.com/stnolting/neorv32/tree/master/sw/example) to get started including CoreMark, FreeRTOS and *Conway's Game of Life*
270
* `doxygen`-based documentation, available on [GitHub pages](https://stnolting.github.io/neorv32/sw/files.html)
271
* supports implementation using open source tooling (GHDL, Yosys and nextpnr; in the future Verilog-to-Routing); both, software and hardware can be
272
developed and debugged with open source tooling
273
* continuous Integration is available for:
274
  * allowing users to see the expected execution/output of the tools
275
  * ensuring specification compliance
276
  * catching regressions
277
  * providing ready-to-use and up-to-date bitstreams and documentation
278
 
279
[[back to top](#The-NEORV32-RISC-V-Processor)]
280
 
281
 
282
 
283 59 zero_gravi
## Getting Started
284 2 zero_gravi
 
285 60 zero_gravi
This overview provides some *quick links* to the most important sections of the
286
[online Data Sheet](https://stnolting.github.io/neorv32) and the
287
[online User Guide](https://stnolting.github.io/neorv32/ug).
288 2 zero_gravi
 
289 59 zero_gravi
### :electric_plug: Hardware Overview
290 2 zero_gravi
 
291 59 zero_gravi
* [NEORV32 Processor](https://stnolting.github.io/neorv32/#_neorv32_processor_soc) - the SoC
292
  * [Top Entity - Signals](https://stnolting.github.io/neorv32/#_processor_top_entity_signals) - how to connect to the processor
293
  * [Top Entity - Generics](https://stnolting.github.io/neorv32/#_processor_top_entity_generics) - configuration options
294
  * [Address Space](https://stnolting.github.io/neorv32/#_address_space) - memory space and memory-mapped IO
295
  * [SoC Modules](https://stnolting.github.io/neorv32/#_processor_internal_modules) - available IO/peripheral modules and memories
296
  * [On-Chip Debugger](https://stnolting.github.io/neorv32/#_on_chip_debugger_ocd) - online debugging of the processor via JTAG
297 2 zero_gravi
 
298 59 zero_gravi
* [NEORV32 CPU](https://stnolting.github.io/neorv32/#_neorv32_central_processing_unit_cpu) - the RISC-V core
299
  * [RISC-V compatibility](https://stnolting.github.io/neorv32/#_risc_v_compatibility) - what is compatible to the specs. and what is not
300
  * [ISA and Extensions](https://stnolting.github.io/neorv32/#_instruction_sets_and_extensions) - available RISC-V ISA extensions
301
  * [CSRs](https://stnolting.github.io/neorv32/#_control_and_status_registers_csrs) - control and status registers
302
  * [Traps](https://stnolting.github.io/neorv32/#_traps_exceptions_and_interrupts) - interrupts and exceptions
303 34 zero_gravi
 
304 59 zero_gravi
### :floppy_disk: Software Overview
305 12 zero_gravi
 
306 59 zero_gravi
* [Core Libraries](https://stnolting.github.io/neorv32/#_core_libraries) - high-level functions for accessing the processor's peripherals
307
  * [Software Framework Documentation](https://stnolting.github.io/neorv32/sw/files.html) - `doxygen`-based documentation
308
* [Application Makefiles](https://stnolting.github.io/neorv32/#_application_makefile) - turning your application into an executable
309
* [Bootloader](https://stnolting.github.io/neorv32/#_bootloader) - the build-in NEORV32 bootloader
310 22 zero_gravi
 
311 60 zero_gravi
### :rocket: User Guides (see full [User Guide](https://stnolting.github.io/neorv32/ug/))
312 31 zero_gravi
 
313 60 zero_gravi
* [Toolchain Setup](https://stnolting.github.io/neorv32/ug/#_toolchain_setup) - install and setup RISC-V gcc
314
* [General Hardware Setup](https://stnolting.github.io/neorv32/ug/#_general_hardware_setup) - setup a new NEORV32 EDA project
315
* [General Software Setup](https://stnolting.github.io/neorv32/ug/#_general_software_framework_setup) - configure the software framework
316
* [Application Compilation](https://stnolting.github.io/neorv32/ug/#_application_program_compilation) - compile an application using `make`
317
* [Upload via Bootloader](https://stnolting.github.io/neorv32/ug/#_uploading_and_starting_of_a_binary_executable_image_via_uart) - upload and execute executables
318
* [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*
319 56 zero_gravi
 
320 60 zero_gravi
### :copyright: Legal
321
 
322
* [Overview](https://stnolting.github.io/neorv32/#_legal) - license, disclaimer, proprietary notice, ...
323
* [Citing](https://stnolting.github.io/neorv32/#_citing) - citing information
324
 
325 56 zero_gravi
[[back to top](#The-NEORV32-RISC-V-Processor)]
326 36 zero_gravi
 
327 56 zero_gravi
 
328 22 zero_gravi
 
329 59 zero_gravi
## Acknowledgements
330 2 zero_gravi
 
331 59 zero_gravi
**A big shoutout to all [contributors](https://github.com/stnolting/neorv32/graphs/contributors), who helped improving this project! :heart:**
332 35 zero_gravi
 
333 59 zero_gravi
[RISC-V](https://riscv.org/) - Instruction Sets Want To Be Free!
334 35 zero_gravi
 
335 59 zero_gravi
Continous integration provided by [:octocat: GitHub Actions](https://github.com/features/actions) and powered by [GHDL](https://github.com/ghdl/ghdl).
336 35 zero_gravi
 
337 32 zero_gravi
--------
338 2 zero_gravi
 
339 36 zero_gravi
Made with :coffee: in Hannover, Germany :eu:

powered by: WebSVN 2.1.0

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