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

Subversion Repositories neorv32

[/] [neorv32/] [trunk/] [docs/] [datasheet/] [overview.adoc] - Blame information for rev 70

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

Line No. Rev Author Line
1 60 zero_gravi
:sectnums:
2
== Overview
3
 
4
The NEORV32footnote:[Pronounced "neo-R-V-thirty-two" or "neo-risc-five-thirty-two" in its long form.] is an open-source
5
RISC-V compatible processor system that is intended as *ready-to-go* auxiliary processor within a larger SoC
6
designs or as stand-alone custom / customizable microcontroller.
7
 
8
The system is highly configurable and provides optional common peripherals like embedded memories,
9
timers, serial interfaces, general purpose IO ports and an external bus interface to connect custom IP like
10
memories, NoCs and other peripherals. On-line and in-system debugging is supported by an OpenOCD/gdb
11
compatible on-chip debugger accessible via JTAG.
12
 
13 66 zero_gravi
Special focus is paid on **execution safety** to provide defined and predictable behavior at any time.
14
Therefore, the CPU ensures that all memory access are acknowledged and no invalid/malformed instructions
15
are executed. Whenever an unexpected situation occurs, the application code is informed via hardware exceptions.
16
 
17 60 zero_gravi
The software framework of the processor comes with application makefiles, software libraries for all CPU
18 65 zero_gravi
and processor features, a bootloader, a runtime environment and several example programs - including a port
19 60 zero_gravi
of the CoreMark MCU benchmark and the official RISC-V architecture test suite. RISC-V GCC is used as
20
default toolchain (https://github.com/stnolting/riscv-gcc-prebuilt[prebuilt toolchains are also provided]).
21
 
22
[TIP]
23 61 zero_gravi
Check out the processor's **https://stnolting.github.io/neorv32/ug[online User Guide]**
24 70 zero_gravi
that provides hands-on tutorials to get you started.
25 60 zero_gravi
The project's change log is available in https://github.com/stnolting/neorv32/blob/master/CHANGELOG.md[CHANGELOG.md]
26
in the root directory of the NEORV32 repository. Please also check out the <<_legal>> section.
27
 
28
 
29 61 zero_gravi
**Structure**
30 60 zero_gravi
 
31 65 zero_gravi
[start=2]
32 64 zero_gravi
. <<_neorv32_processor_soc>>
33
. <<_neorv32_central_processing_unit_cpu>>
34 65 zero_gravi
. <<_software_framework>>
35 64 zero_gravi
. <<_on_chip_debugger_ocd>>
36 60 zero_gravi
 
37
 
38
 
39 61 zero_gravi
<<<
40
// ####################################################################################################################
41
:sectnums:
42
=== Rationale
43 60 zero_gravi
 
44 61 zero_gravi
**Why did you make this?**
45 60 zero_gravi
 
46 61 zero_gravi
I am fascinated by processor and CPU architecture design: it is the magic frontier where software meets hardware.
47
This project has started as something like a _journey_ into this magic realm to understand how things actually work
48
down on this very low level.
49 60 zero_gravi
 
50 61 zero_gravi
But there is more! When I started to dive into the emerging RISC-V ecosystem I felt overwhelmed by the complexity.
51
As a beginner it is hard to get an overview - especially when you want to setup a minimal platform to tinker with:
52
Which core to use? How to get the right toolchain? What features do I need? How does the booting work? How do I
53
create an actual executable? How to get that into the hardware? How to customize things? **_Where to start???_**
54 60 zero_gravi
 
55 61 zero_gravi
So this project aims to provides a _simple to understand_ and _easy to use_ yet _powerful_ and _flexible_ platform
56
that targets FPGA and RISC-V beginners as well as advanced users. Join me and us on this journey! 🙃
57 60 zero_gravi
 
58
 
59 61 zero_gravi
**Why a _soft_-core processor?**
60 60 zero_gravi
 
61 61 zero_gravi
As a matter of fact soft-core processors _cannot_ compete with discrete or FPGA hard-macro processors in terms
62
of performance, energy and size. But they do fill a niche in FPGA design space. For example, soft-core processors
63
allow to implement the _control flow part_ of certain applications (like communication protocol handling) using
64
software like plain C. This provides high flexibility as software can be easily changed, re-compiled and
65
re-uploaded again.
66 60 zero_gravi
 
67 61 zero_gravi
Furthermore, the concept of flexibility applies to all aspects of a soft-core processor. The user can add
68
_exactly_ the features that are required by the application: additional memories, custom interfaces, specialized
69
IP and even user-defined instructions.
70 60 zero_gravi
 
71
 
72 61 zero_gravi
**Why RISC-V?**
73
 
74
[quote, RISC-V International, https://riscv.org/about/]
75
____
76
RISC-V is a free and open ISA enabling a new era of processor innovation through open standard collaboration.
77
____
78
 
79
I love the idea of open-source. **Knowledge can help best if it is freely available.**
80
While open-source has already become quite popular in _software_, hardware projects still need to catch up.
81
Admittedly, there has been quite a development, but mainly in terms of _platforms_ and _applications_ (so
82
schematics, PCBs, etc.). Although processors and CPUs are the heart of almost every digital system, having a true
83
open-source silicon is still a rarity. RISC-V aims to change that. Even it is _just one approach_, it helps paving
84
the road for future development.
85
 
86
Furthermore, I welcome the community aspect of RISC-V. The ISA and everything beyond is developed with direct
87
contact to the community: this includes businesses and professionals but also hobbyist, amateurs and people
88
that are just curious. Everyone can join discussions and contribute to RISC-V in their very own way.
89
 
90
Finally, I really like the RISC-V ISA itself. It aims to be a clean, orthogonal and "intuitive" ISA that
91
resembles with the basic concepts of _RISC_: simple yet effective.
92
 
93
 
94
**Yet another RISC-V core? What makes it special?**
95
 
96
The NEORV32 is not based on another RISC-V core. It was build entirely from ground up (just following the official
97
ISA specs) having a different design goal in mind. The project does not intend to replace certain RISC-V cores or
98
just beat existing ones like https://github.com/SpinalHDL/VexRiscv[VexRISC] in terms of performance or
99
https://github.com/olofk/serv[SERV] in terms of size.
100
 
101
The project aims to provide _another option_ in the RISC-V / soft-core design space with a different performance
102
vs. size trade-off and a different focus: _embrace_ concepts like documentation, platform-independence / portability,
103
RISC-V compatibility, _customization_ and _ease of use_. See the <<_project_key_features>> below.
104
 
105 68 zero_gravi
Furthermore, the NEORV32 pays special focus on _execution safety_ using <<_full_virtualization>>. The CPU aims to
106
provide fall-backs for _everything that could go wrong_. This includes malformed instruction words, privilege escalations
107
and even memory accesses that are checked for address space holes and deterministic response times from memory-mapped
108
devices. Precise exceptions allow a defined and fully-synchronized state of the CPU at every time.
109 61 zero_gravi
 
110 68 zero_gravi
 
111
 
112 60 zero_gravi
// ####################################################################################################################
113
:sectnums:
114
=== Project Key Features
115
 
116 61 zero_gravi
* open-source and documented; including user guides to get started
117
* completely described in behavioral, platform-independent VHDL (yet platform-optimized modules are provided)
118
* fully synchronous design, no latches, no gated clocks
119
* small hardware footprint and high operating frequency for easy integration
120
* **NEORV32 CPU**: 32-bit `rv32i` RISC-V CPU
121
** RISC-V compatibility: passes the official architecture tests
122
** base architecture + privileged architecture (optional) + ISA extensions (optional)
123
** rich set of customization options (ISA extensions, design goal: performance / area (/ energy), ...)
124 62 zero_gravi
** aims to support <<_full_virtualization>> capabilities (CPU _and_ SoC) to increase execution safety
125 61 zero_gravi
** official https://github.com/riscv/riscv-isa-manual/blob/master/marchid.md[RISC-V open source architecture ID]
126
* **NEORV32 Processor (SoC)**: highly-configurable full-scale microcontroller-like processor system
127
** based on the NEORV32 CPU
128
** optional serial interfaces (UARTs, TWI, SPI)
129
** optional timers and counters (WDT, MTIME)
130
** optional general purpose IO and PWM and native NeoPixel (c) compatible smart LED interface
131
** optional embedded memories / caches for data, instructions and bootloader
132
** optional external memory interface (Wishbone / AXI4-Lite) and stream link interface (AXI4-Stream) for custom connectivity
133 70 zero_gravi
** optional execute in place (XIP) module
134 61 zero_gravi
** on-chip debugger compatible with OpenOCD and gdb
135 60 zero_gravi
* **Software framework**
136
** GCC-based toolchain - prebuilt toolchains available; application compilation based on GNU makefiles
137
** internal bootloader with serial user interface
138
** core libraries for high-level usage of the provided functions and peripherals
139
** runtime environment and several example programs
140
** doxygen-based documentation of the software framework; a deployed version is available at https://stnolting.github.io/neorv32/sw/files.html
141
** FreeRTOS port + demos available
142
 
143 61 zero_gravi
[TIP]
144
For more in-depth details regarding the feature provided by he hardware see the according sections:
145
<<_neorv32_central_processing_unit_cpu>> and <<_neorv32_processor_soc>>.
146 60 zero_gravi
 
147 61 zero_gravi
 
148 60 zero_gravi
<<<
149
// ####################################################################################################################
150
:sectnums:
151
=== Project Folder Structure
152
 
153
...................................
154 63 zero_gravi
neorv32                - Project home folder
155 62 zero_gravi
156 63 zero_gravi
├docs                  - Project documentation
157 66 zero_gravi
│├datasheet            - AsciiDoc sources for the NEORV32 data sheet
158 63 zero_gravi
│├figures              - Figures and logos
159
│├icons                - Misc. symbols
160
│├references           - Data sheets and RISC-V specs.
161 66 zero_gravi
│└userguide            - AsciiDoc sources for the NEORV32 user guide
162 62 zero_gravi
163 63 zero_gravi
├rtl                   - VHDL sources
164
│├core                 - Core sources of the CPU & SoC
165 64 zero_gravi
││└mem                 - SoC-internal memories (default architectures)
166 63 zero_gravi
│├processor_templates  - Pre-configured SoC wrappers
167
│├system_integration   - System wrappers for advanced connectivity
168
│└test_setups          - Minimal test setup "SoCs" used in the User Guide
169 62 zero_gravi
170 63 zero_gravi
├setups                - Example setups for various FPGAs, boards and toolchains
171 61 zero_gravi
│└...
172 62 zero_gravi
173 63 zero_gravi
├sim                   - Simulation files (see User Guide)
174 62 zero_gravi
175 63 zero_gravi
└sw                    - Software framework
176 66 zero_gravi
 ├bootloader           - Sources of the processor-internal bootloader
177
 ├common               - Linker script, crt0.S start-up code and central makefile
178 63 zero_gravi
 ├example              - Various example programs
179 60 zero_gravi
 │└...
180 69 zero_gravi
 ├lib                  - Processor core library
181
 │├include             - Header files (*.h)
182
 │└source              - Source files (*.c)
183
 ├image_gen            - Helper program to generate NEORV32 executables
184 62 zero_gravi
 ├isa-test
185 63 zero_gravi
 │├riscv-arch-test     - RISC-V spec. compatibility test framework (submodule)
186
 │└port-neorv32        - Port files for the official RISC-V architecture tests
187 66 zero_gravi
 ├ocd_firmware         - Source code for on-chip debugger's "park loop"
188 63 zero_gravi
 ├openocd              - OpenOCD on-chip debugger configuration files
189 69 zero_gravi
 └svd                  - Processor system view description file (CMSIS-SVD)
190 60 zero_gravi
...................................
191
 
192
 
193
 
194
<<<
195
// ####################################################################################################################
196
:sectnums:
197
=== VHDL File Hierarchy
198
 
199 68 zero_gravi
All necessary VHDL hardware description files are located in the project's `rtl/core` folder. The top entity
200 60 zero_gravi
of the entire processor including all the required configuration generics is **`neorv32_top.vhd`**.
201
 
202
[IMPORTANT]
203
All core VHDL files from the list below have to be assigned to a new design library named **`neorv32`**. Additional
204
files, like alternative top entities, can be assigned to any library.
205
 
206
...................................
207 61 zero_gravi
neorv32_top.vhd                  - NEORV32 Processor top entity
208
209
├neorv32_fifo.vhd                - General purpose FIFO component
210
├neorv32_package.vhd             - Processor/CPU main VHDL package file
211
212
├neorv32_cpu.vhd                 - NEORV32 CPU top entity
213
│├neorv32_cpu_alu.vhd            - Arithmetic/logic unit
214 63 zero_gravi
││├neorv32_cpu_cp_bitmanip.vhd   - Bit-manipulation co-processor (B ext.)
215 61 zero_gravi
││├neorv32_cpu_cp_fpu.vhd        - Floating-point co-processor (Zfinx ext.)
216
││├neorv32_cpu_cp_muldiv.vhd     - Mul/Div co-processor (M extension)
217
││└neorv32_cpu_cp_shifter.vhd    - Bit-shift co-processor
218
│├neorv32_cpu_bus.vhd            - Bus interface + physical memory protection
219
│├neorv32_cpu_control.vhd        - CPU control, exception/IRQ system and CSRs
220
││└neorv32_cpu_decompressor.vhd  - Compressed instructions decoder
221
│└neorv32_cpu_regfile.vhd        - Data register file
222
223
├neorv32_boot_rom.vhd            - Bootloader ROM
224
│└neorv32_bootloader_image.vhd   - Bootloader boot ROM memory image
225
├neorv32_busswitch.vhd           - Processor bus switch for CPU buses (I&D)
226
├neorv32_bus_keeper.vhd          - Processor-internal bus monitor
227
├neorv32_cfs.vhd                 - Custom functions subsystem
228
├neorv32_debug_dm.vhd            - on-chip debugger: debug module
229
├neorv32_debug_dtm.vhd           - on-chip debugger: debug transfer module
230 64 zero_gravi
├neorv32_dmem.entity.vhd         - Processor-internal data memory (entity-only!)
231 61 zero_gravi
├neorv32_gpio.vhd                - General purpose input/output port unit
232 67 zero_gravi
├neorv32_gptmr.vhd               - General purpose 32-bit timer
233 62 zero_gravi
├neorv32_icache.vhd              - Processor-internal instruction cache
234 64 zero_gravi
├neorv32_imem.entity.vhd         - Processor-internal instruction memory (entity-only!)
235 61 zero_gravi
│└neor32_application_image.vhd   - IMEM application initialization image
236
├neorv32_mtime.vhd               - Machine system timer
237
├neorv32_neoled.vhd              - NeoPixel (TM) compatible smart LED interface
238
├neorv32_pwm.vhd                 - Pulse-width modulation controller
239 67 zero_gravi
├neorv32_slink.vhd               - Stream link controller
240 61 zero_gravi
├neorv32_spi.vhd                 - Serial peripheral interface controller
241
├neorv32_sysinfo.vhd             - System configuration information memory
242
├neorv32_trng.vhd                - True random number generator
243
├neorv32_twi.vhd                 - Two wire serial interface controller
244
├neorv32_uart.vhd                - Universal async. receiver/transmitter
245
├neorv32_wdt.vhd                 - Watchdog timer
246
├neorv32_wishbone.vhd            - External (Wishbone) bus interface
247 70 zero_gravi
├neorv32_xip.vhd                 - Execute in place module
248 67 zero_gravi
├neorv32_xirq.vhd                - External interrupt controller
249 64 zero_gravi
250 68 zero_gravi
├mem/neorv32_dmem.default.vhd    - _Default_ data memory (architecture-only)
251
└mem/neorv32_imem.default.vhd    - _Default_ instruction memory (architecture-only)
252 60 zero_gravi
...................................
253
 
254 64 zero_gravi
[NOTE]
255
The processor-internal instruction and data memories (IMEM and DMEM) are split into two design files each:
256
a plain entity definition (`neorv32_*mem.entity.vhd`) and the actual architecture definition
257 68 zero_gravi
(`mem/neorv32_*mem.default.vhd`). The `*.default.vhd` architecture definitions from `rtl/core/mem` provide a _generic_ and
258 64 zero_gravi
_platform independent_ memory design that (should) infers embedded memory blocks. You can replace/modify the architecture
259
source file in order to use platform-specific features (like advanced memory resources) or to improve technology mapping
260
and/or timing.
261 60 zero_gravi
 
262 64 zero_gravi
 
263 60 zero_gravi
<<<
264
// ####################################################################################################################
265
:sectnums:
266
=== FPGA Implementation Results
267
 
268 62 zero_gravi
This chapter shows _exemplary_ implementation results of the NEORV32 CPU and NEORV32 Processor.
269 60 zero_gravi
 
270
:sectnums:
271
==== CPU
272
 
273
[cols="<2,<8"]
274
[grid="topbot"]
275
|=======================
276 70 zero_gravi
| Top entity: | `rtl/core/neorv32_cpu.vhd`
277
| FPGA:       | Intel Cyclone IV E `EP4CE22F17C6`
278
| Toolchain:  | Quartus Prime 20.1.0
279 60 zero_gravi
|=======================
280
 
281
[cols="<5,>1,>1,>1,>1,>1"]
282
[options="header",grid="rows"]
283
|=======================
284 66 zero_gravi
| CPU                                               | LEs  | FFs  | MEM bits | DSPs | _f~max~_
285
| `rv32i`                                           |  806 |  359 |     1024 |    0 | 125 MHz
286
| `rv32i_Zicsr_Zicntr`                              | 1729 |  813 |     1024 |    0 | 124 MHz
287
| `rv32im_Zicsr_Zicntr`                             | 2269 | 1055 |     1024 |    0 | 124 MHz
288
| `rv32imc_Zicsr_Zicntr`                            | 2501 | 1070 |     1024 |    0 | 124 MHz
289
| `rv32imac_Zicsr_Zicntr`                           | 2511 | 1074 |     1024 |    0 | 124 MHz
290
| `rv32imacu_Zicsr_Zicntr`                          | 2521 | 1079 |     1024 |    0 | 124 MHz
291
| `rv32imacu_Zicsr_Zicntr_Zifencei`                 | 2522 | 1079 |     1024 |    0 | 122 MHz
292
| `rv32imacu_Zicsr_Zicntr_Zifencei_Zfinx`           | 3807 | 1731 |     1024 |    7 | 116 MHz
293
| `rv32imacu_Zicsr_Zicntr_Zifencei_Zfinx_DebugMode` | 3974 | 1815 |     1024 |    7 | 116 MHz
294 60 zero_gravi
|=======================
295
 
296 62 zero_gravi
[TIP]
297
The CPU provides further options to reduce the area footprint (for example by constraining the CPU-internal
298
counter sizes) or to increase performance (for example by using a barrel-shifter; at cost of extra hardware).
299 63 zero_gravi
See section <<_processor_top_entity_generics>> for more information. Also, take a look at the User Guide section
300
https://stnolting.github.io/neorv32/ug/#_application_specific_processor_configuration[Application-Specific Processor Configuration].
301 62 zero_gravi
 
302
 
303 60 zero_gravi
:sectnums:
304
==== Processor Modules
305
 
306
[cols="<2,<8"]
307
[grid="topbot"]
308
|=======================
309 70 zero_gravi
| Top entity: | `rtl/core/neorv32_top.vhd`
310
| FPGA:       | Intel Cyclone IV E `EP4CE22F17C6`
311
| Toolchain:  | Quartus Prime 20.1.0
312 60 zero_gravi
|=======================
313
 
314
.Hardware utilization by the processor modules (mandatory core modules in **bold**)
315
[cols="<2,<8,>1,>1,>2,>1"]
316
[options="header",grid="rows"]
317
|=======================
318 62 zero_gravi
| Module        | Description                                           | LEs | FFs | MEM bits | DSPs
319
| Boot ROM      | Bootloader ROM (4kB)                                  |   2 |   1 |    32768 |    0
320
| **BUSKEEPER** | Processor-internal bus monitor                        |   9 |   6 |        0 |    0
321 70 zero_gravi
| **BUSSWITCH** | Bus multiplexer for CPU instr. and data interface     |  63 |   8 |        0 |    0
322 61 zero_gravi
| CFS           | Custom functions subsystemfootnote:[Resource utilization depends on actually implemented custom functionality.] | - | - | - | -
323 62 zero_gravi
| DMEM          | Processor-internal data memory (8kB)                  |  19 |   2 |    65536 |    0
324
| DM            | On-chip debugger - debug module                       | 493 | 240 |        0 |    0
325
| DTM           | On-chip debugger - debug transfer module (JTAG)       | 254 | 218 |        0 |    0
326
| GPIO          | General purpose input/output ports                    | 134 | 161 |        0 |    0
327
| iCACHE        | Instruction cache (1x4 blocks, 256 bytes per block)   | 2 21| 156 |     8192 |    0
328
| IMEM          | Processor-internal instruction memory (16kB)          |  13 |   2 |   131072 |    0
329
| MTIME         | Machine system timer                                  | 319 | 167 |        0 |    0
330
| NEOLED        | Smart LED Interface (NeoPixel/WS28128) [FIFO_depth=1] | 226 | 182 |        0 |    0
331
| SLINK         | Stream link interface (2xRX, 2xTX, FIFO_depth=1)      | 208 | 181 |        0 |    0
332
| PWM           | Pulse_width modulation controller (4 channels)        |  71 |  69 |        0 |    0
333
| SPI           | Serial peripheral interface                           | 148 | 127 |        0 |    0
334
| **SYSINFO**   | System configuration information memory               |  14 |  11 |        0 |    0
335
| TRNG          | True random number generator                          |  89 |  76 |        0 |    0
336
| TWI           | Two-wire interface                                    |  77 |  43 |        0 |    0
337
| UART0/1       | Universal asynchronous receiver/transmitter 0/1       | 183 | 132 |        0 |    0
338
| WDT           | Watchdog timer                                        |  53 |  43 |        0 |    0
339
| WISHBONE      | External memory interface                             | 114 | 110 |        0 |    0
340
| XIRQ          | External interrupt controller (32 channels)           | 241 | 201 |        0 |    0
341 67 zero_gravi
| GPTMR         | General Purpose Timer                                 | 153 | 107 |        0 |    0
342 70 zero_gravi
| XIP           | Execute in place module                               | 305 | 243 |        0 |    0
343 60 zero_gravi
|=======================
344
 
345
 
346
<<<
347
:sectnums:
348
==== Exemplary Setups
349
 
350 61 zero_gravi
Check out the `setups` folder (@GitHub: https://github.com/stnolting/neorv32/tree/master/setups),
351
which provides several demo setups for various FPGA boards and toolchains.
352 60 zero_gravi
 
353
 
354
<<<
355
// ####################################################################################################################
356
:sectnums:
357
=== CPU Performance
358
 
359 62 zero_gravi
The performance of the NEORV32 was tested and evaluated using the https://www.eembc.org/coremark/[Core Mark CPU benchmark].
360
This benchmark focuses on testing the capabilities of the CPU core itself rather than the performance of the whole
361
system. The according sources can be found in the `sw/example/coremark` folder.
362 60 zero_gravi
 
363 63 zero_gravi
.Dhrystone
364
[TIP]
365
A _simple_ port of the Dhrystone benchmark is also available in `sw/example/dhrystone`.
366
 
367 60 zero_gravi
The resulting CoreMark score is defined as CoreMark iterations per second.
368
The execution time is determined via the RISC-V `[m]cycle[h]` CSRs. The relative CoreMark score is
369
defined as CoreMark score divided by the CPU's clock frequency in MHz.
370
 
371 62 zero_gravi
.Configuration
372 60 zero_gravi
[cols="<2,<8"]
373
[grid="topbot"]
374
|=======================
375 62 zero_gravi
| HW version:     | `1.5.7.10`
376
| Hardware:       | 32kB int. IMEM, 16kB int. DMEM, no caches, 100MHz clock
377
| CoreMark:       | 2000 iterations, MEM_METHOD is MEM_STACK
378
| Compiler:       | RISCV32-GCC 10.2.0
379
| Compiler flags: | default, see makefile
380 60 zero_gravi
|=======================
381
 
382
.CoreMark results
383 62 zero_gravi
[cols="<4,^1,^1,^1"]
384 60 zero_gravi
[options="header",grid="rows"]
385
|=======================
386 66 zero_gravi
| CPU                                             | CoreMark Score | CoreMarks/MHz | Average CPI
387
| _small_ (`rv32i_Zicsr`)                         |          33.89 | **0.3389**    | **4.04**
388
| _medium_ (`rv32imc_Zicsr`)                      |          62.50 | **0.6250**    | **5.34**
389
| _performance_ (`rv32imc_Zicsr` + perf. options) |          95.23 | **0.9523**    | **3.54**
390 60 zero_gravi
|=======================
391
 
392
[NOTE]
393 62 zero_gravi
The "_performance_" CPU configuration uses the <<_fast_mul_en>> and <<_fast_shift_en>> options.
394 60 zero_gravi
 
395 62 zero_gravi
[NOTE]
396 60 zero_gravi
The NEORV32 CPU is based on a multi-cycle architecture. Each instruction is executed in a sequence of
397 62 zero_gravi
several consecutive micro operations.
398 60 zero_gravi
 
399 62 zero_gravi
[NOTE]
400 60 zero_gravi
The average CPI (cycles per instruction) depends on the instruction mix of a specific applications and also on
401 62 zero_gravi
the available CPU extensions. The average CPI is computed by dividing the total number of required clock cycles
402
(only the timed core to avoid distortion due to IO wait cycles) by the number of executed instructions
403
(`[m]instret[h]` CSRs).
404 60 zero_gravi
 
405
[TIP]
406
More information regarding the execution time of each implemented instruction can be found in
407
chapter <<_instruction_timing>>.

powered by: WebSVN 2.1.0

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