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

Subversion Repositories neorv32

[/] [neorv32/] [trunk/] [README.md] - Diff between revs 2 and 3

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 2 Rev 3
Line 25... Line 25...
 
 
## Introduction
## Introduction
 
 
The NEORV32 is a customizable mikrocontroller-like processor system based on a RISC-V `rv32i` or `rv32e` CPU with optional
The NEORV32 is a customizable mikrocontroller-like processor system based on a RISC-V `rv32i` or `rv32e` CPU with optional
`M`, `C` and `Zicsr` extensions. The CPU was built from scratch and is compliant to the **Unprivileged
`M`, `C` and `Zicsr` extensions. The CPU was built from scratch and is compliant to the **Unprivileged
ISA Specification Version 2.1** and the **Privileged Architecture Specification Version 1.12**. The NEORV32 is intended
ISA Specification Version 2.1** and a subset of the **Privileged Architecture Specification Version 1.12**. The NEORV32 is intended
as auxiliary processor within a larger SoC designs or as stand-alone custom microcontroller.
as auxiliary processor within a larger SoC designs or as stand-alone custom microcontroller.
 
 
The processor provides common peripherals and interfaces like input and output ports, serial interfaces for UART, I²C and SPI,
The processor provides common peripherals and interfaces like input and output ports, serial interfaces for UART, I²C and SPI,
interrupt controller, timers and embedded memories. External memories peripherals and custom IP can be attached via a
interrupt controller, timers and embedded memories. External memories peripherals and custom IP can be attached via a
Wishbone-based external memory interface. All optional features beyond the base CPU can be enabled configured via VHDL generics.
Wishbone-based external memory interface. All optional features beyond the base CPU can be enabled configured via VHDL generics.
Line 53... Line 53...
 * Clean synchronous design, no wacky combinatorial interfaces.
 * Clean synchronous design, no wacky combinatorial interfaces.
 * The processor has to fit in a Lattice iCE40 UltraPlus 5k FPGA running at 20+ MHz.
 * The processor has to fit in a Lattice iCE40 UltraPlus 5k FPGA running at 20+ MHz.
 
 
 
 
### Status
### Status
 
 
![processor status](https://img.shields.io/badge/processor%20status-beta-orange)
![processor status](https://img.shields.io/badge/processor%20status-beta-orange)
 
 
 
The processor is synthesizable (tested with Intel Quartus Prime and Lattice Radiant/Synplify) and can successfully execute all the [provided example programs](https://github.com/stnolting/neorv32/tree/master/sw/example).
 
 
## Features
## Features
 
 
![neorv32 Overview](https://raw.githubusercontent.com/stnolting/neorv32/master/docs/figures/neorv32_overview.png)
![neorv32 Overview](https://raw.githubusercontent.com/stnolting/neorv32/master/docs/figures/neorv32_overview.png)
 
 
### Processor Features
### Processor Features
 
 
  - RISC-V-compliant `rv32i` or `rv32e` CPU with optional `C`, `E`, `M` and `Zicsr` extensions
  - RISC-V-compliant `rv32i` or `rv32e` CPU with optional `C`, `E`, `M` and `Zicsr` extensions
  - GCC-based toolchain ([pre-compiled rv32i and rv32 etoolchains available](https://github.com/stnolting/riscv_gcc_prebuilt))
  - GCC-based toolchain ([pre-compiled rv32i and rv32 etoolchains available](https://github.com/stnolting/riscv_gcc_prebuilt))
  - Application compilation based on [GNU makefiles](https://github.com/stnolting/neorv32/blob/master/sw/example/blink_led/Makefile)
  - Application compilation based on [GNU makefiles](https://github.com/stnolting/neorv32/blob/master/sw/example/blink_led/makefile)
  - [Doxygen-based](https://github.com/stnolting/neorv32/blob/master/docs/doygen_makefile_sw) documentation of the software framework
  - [Doxygen-based](https://github.com/stnolting/neorv32/blob/master/docs/doxygen_makefile_sw) documentation of the software framework
  - Completely described in behavioral, platform-independent VHDL – no primitives, macros, etc.
  - Completely described in behavioral, platform-independent VHDL – no primitives, macros, etc.
  - Fully synchronous design, no latches, no gated clocks
  - Fully synchronous design, no latches, no gated clocks
  - Small hardware footprint and high operating frequency
  - Small hardware footprint and high operating frequency
  - Highly customizable processor configuration
  - Highly customizable processor configuration
  - Optional processor-internal data and instruction memories (DMEM/IMEM)
  - Optional processor-internal data and instruction memories (DMEM/IMEM)
Line 82... Line 84...
  - Optional 32-bit external bus interface, Wishbone b4 compliant (WISHBONE)
  - Optional 32-bit external bus interface, Wishbone b4 compliant (WISHBONE)
  - Optional watchdog timer (WDT)
  - Optional watchdog timer (WDT)
  - Optional PWM controller with 4 channels and 8-bit duty cycle resolution (PWM)
  - Optional PWM controller with 4 channels and 8-bit duty cycle resolution (PWM)
  - Optional GARO-based true random number generator (TRNG)
  - Optional GARO-based true random number generator (TRNG)
  - Optional core-local interrupt controller with 8 channels (CLIC)
  - Optional core-local interrupt controller with 8 channels (CLIC)
 
  - Optional dummy device (DEVNULL) (can be used for *fast* simulation console output)
 
 
 
 
### CPU Features
### CPU Features
 
 
The CPU is compliant to the [official RISC-V specifications](https://raw.githubusercontent.com/stnolting/neorv32/master/docs/riscv-spec.pdf) including a subset of the
The CPU is compliant to the [official RISC-V specifications](https://raw.githubusercontent.com/stnolting/neorv32/master/docs/riscv-spec.pdf) including a subset of the
[RISC-V privileged architecture specifications](https://raw.githubusercontent.com/stnolting/neorv32/master/docs/riscv-spec.pdf).
[RISC-V privileged architecture specifications](https://raw.githubusercontent.com/stnolting/neorv32/master/docs/riscv-spec.pdf).
 
 
RV32I base instruction set (**`I` extension**):
**RV32I base instruction set** (`I` extension):
  * ALU instructions: `LUI` `AUIPC` `ADDI` `SLTI` `SLTIU` `XORI` `ORI` `ANDI` `SLLI` `SRLI` `SRAI` `ADD` `SUB` `SLL` `SLT` `SLTU` `XOR` `SRL` `SRA` `OR` `AND`
  * ALU instructions: `LUI` `AUIPC` `ADDI` `SLTI` `SLTIU` `XORI` `ORI` `ANDI` `SLLI` `SRLI` `SRAI` `ADD` `SUB` `SLL` `SLT` `SLTU` `XOR` `SRL` `SRA` `OR` `AND`
  * Branches instructions: `JAL` `JALR` `BEQ` `BNE` `BLT` `BGE` `BLTU` `BGEU`
  * Branches instructions: `JAL` `JALR` `BEQ` `BNE` `BLT` `BGE` `BLTU` `BGEU`
  * Memory instructions: `LB` `LH` `LW` `LBU` `LHU` `SB` `SH` `SW`
  * Memory instructions: `LB` `LH` `LW` `LBU` `LHU` `SB` `SH` `SW`
 
 
Compressed instructions (**`C` extension**):
**Compressed instructions** (`C` extension):
  * ALU instructions: `C.ADDI4SPN` `C.ADDI` `C.ADD` `C.ADDI16SP` `C.LI` `C.LUI` `C.SLLI` `C.SRLI` `C.SRAI` `C.ANDI` `C.SUB` `C.XOR` `C.OR` `C.AND` `C.MV` `C.NOP`
  * ALU instructions: `C.ADDI4SPN` `C.ADDI` `C.ADD` `C.ADDI16SP` `C.LI` `C.LUI` `C.SLLI` `C.SRLI` `C.SRAI` `C.ANDI` `C.SUB` `C.XOR` `C.OR` `C.AND` `C.MV` `C.NOP`
  * Branches instructions: `C.J` `C.JAL` `C.JR` `C.JALR` `C.BEQZ` `C.BNEZ`
  * Branches instructions: `C.J` `C.JAL` `C.JR` `C.JALR` `C.BEQZ` `C.BNEZ`
  * Memory instructions: `C.LW` `C.SW` `C.LWSP` `C.SWSP`
  * Memory instructions: `C.LW` `C.SW` `C.LWSP` `C.SWSP`
  * Misc instructions: `C.EBREAK` (only with `Zicsr` extension)
  * Misc instructions: `C.EBREAK` (only with `Zicsr` extension)
 
 
Embedded CPU version (**`E` extension**):
**Embedded CPU version** (`E` extension):
  * Reduced register file (only the 16 lowest registers)
  * Reduced register file (only the 16 lowest registers)
  * No performance counter CSRs
  * No performance counter CSRs
 
 
Integer multiplication and division hardware (**`M` extension**):
**Integer multiplication and division hardware** (`M` extension):
  * Multiplication instructions: `MUL` `MULH` `MULHSU` `MULHU`
  * Multiplication instructions: `MUL` `MULH` `MULHSU` `MULHU`
  * Division instructions: `DIV` `DIVU` `REM` `REMU`
  * Division instructions: `DIV` `DIVU` `REM` `REMU`
 
 
Privileged architecture (**`Zicsr` extension**):
**Privileged architecture** (`Zicsr` extension):
  * Privilege levels: `M-mode` (Machine mode)
  * Privilege levels: `M-mode` (Machine mode)
  * CSR access instructions: `CSRRW` `CSRRS` `CSRRC` `CSRRWI` `CSRRSI` `CSRRCI`
  * CSR access instructions: `CSRRW` `CSRRS` `CSRRC` `CSRRWI` `CSRRSI` `CSRRCI`
  * System instructions: `ECALL` `EBREAK` `MRET` `WFI`
  * System instructions: `ECALL` `EBREAK` `MRET` `WFI`
  * Counter CSRs: `cycle` `cycleh` `time` `timeh` `instret` `instreth` `mcycle` `mcycleh` `minstret` `minstreth`
  * Counter CSRs: `cycle` `cycleh` `time` `timeh` `instret` `instreth` `mcycle` `mcycleh` `minstret` `minstreth`
  * Machine CSRs: `mstatus` `misa` `mie` `mtvec` `mscratch` `mepc` `mcause` `mtval` `mip` `mtinst` `mimpid` `mhartid`
  * Machine CSRs: `mstatus` `misa` `mie` `mtvec` `mscratch` `mepc` `mcause` `mtval` `mip` `mtinst` `mimpid` `mhartid`
Line 129... Line 132...
    * Environment call from M-mode
    * Environment call from M-mode
    * Machine software instrrupt
    * Machine software instrrupt
    * Machine timer interrupt (from MTIME)
    * Machine timer interrupt (from MTIME)
    * Machine external interrupt (via CLIC)
    * Machine external interrupt (via CLIC)
 
 
General:
**General**:
  * No hardware support of unaligned accesses (except for instructions in `C` extension that still have to be aligned on 16-bit boundaries)
  * No hardware support of unaligned accesses (except for instructions in `C` extension that still have to be aligned on 16-bit boundaries)
  * Multi-cycle in-order instruction execution
  * Multi-cycle in-order instruction execution
 
 
More information including a detailed list of the available CSRs can be found in
More information including a detailed list of the available CSRs can be found in
the [![NEORV32 datasheet](https://raw.githubusercontent.com/stnolting/neorv32/master/docs/figures/PDF_32.png) NEORV32 datasheet](https://raw.githubusercontent.com/stnolting/neorv32/master/docs/NEORV32.pdf).
the [![NEORV32 datasheet](https://raw.githubusercontent.com/stnolting/neorv32/master/docs/figures/PDF_32.png) NEORV32 datasheet](https://raw.githubusercontent.com/stnolting/neorv32/master/docs/NEORV32.pdf).
Line 177... Line 180...
### Peripherals / Others
### Peripherals / Others
 
 
| Module   | Description                                     | LEs | FFs | Memory bits | DSPs |
| Module   | Description                                     | LEs | FFs | Memory bits | DSPs |
|:---------|:------------------------------------------------|:---:|:---:|:-----------:|:----:|
|:---------|:------------------------------------------------|:---:|:---:|:-----------:|:----:|
| Boot ROM | Bootloader ROM (4kB)                            |   3 |   1 |      32 768 |    0 |
| Boot ROM | Bootloader ROM (4kB)                            |   3 |   1 |      32 768 |    0 |
 
| DEVNULL  | Dummy device                                    |   2 |   1 |           0 |    0 |
| DMEM     | Processor-internal data memory (8kB)            |  12 |   2 |      65 536 |    0 |
| DMEM     | Processor-internal data memory (8kB)            |  12 |   2 |      65 536 |    0 |
| GPIO     | General purpose input/output ports              |  37 |  33 |           0 |    0 |
| GPIO     | General purpose input/output ports              |  37 |  33 |           0 |    0 |
| IMEM     | Processor-internal instruction memory (16kb)    |   7 |   2 |     131 072 |    0 |
| IMEM     | Processor-internal instruction memory (16kb)    |   7 |   2 |     131 072 |    0 |
| MTIME    | Machine system timer                            | 369 | 168 |           0 |    0 |
| MTIME    | Machine system timer                            | 369 | 168 |           0 |    0 |
| PWM      | Pulse-width modulation controller               |  77 |  69 |           0 |    0 |
| PWM      | Pulse-width modulation controller               |  77 |  69 |           0 |    0 |
Line 315... Line 319...
    IO_SPI_USE                : boolean := true;    -- implement serial peripheral interface (SPI)?
    IO_SPI_USE                : boolean := true;    -- implement serial peripheral interface (SPI)?
    IO_TWI_USE                : boolean := true;    -- implement two-wire interface (TWI)?
    IO_TWI_USE                : boolean := true;    -- implement two-wire interface (TWI)?
    IO_PWM_USE                : boolean := true;    -- implement pulse-width modulation unit (PWM)?
    IO_PWM_USE                : boolean := true;    -- implement pulse-width modulation unit (PWM)?
    IO_WDT_USE                : boolean := true;    -- implement watch dog timer (WDT)?
    IO_WDT_USE                : boolean := true;    -- implement watch dog timer (WDT)?
    IO_CLIC_USE               : boolean := true;    -- implement core local interrupt controller (CLIC)?
    IO_CLIC_USE               : boolean := true;    -- implement core local interrupt controller (CLIC)?
    IO_TRNG_USE               : boolean := false    -- implement true random number generator (TRNG)?
    IO_TRNG_USE               : boolean := false;   -- implement true random number generator (TRNG)?
 
    IO_DEVNULL_USE            : boolean := true     -- implement dummy device (DEVNULL)?
  );
  );
  port (
  port (
    -- Global control --
    -- Global control --
    clk_i        : in  std_ulogic := '0'; -- global clock, rising edge
    clk_i        : in  std_ulogic := '0'; -- global clock, rising edge
    rstn_i       : in  std_ulogic := '0'; -- global reset, low-active, async
    rstn_i       : in  std_ulogic := '0'; -- global reset, low-active, async
Line 485... Line 490...
 
 
 
 
 
 
## Contact
## Contact
 
 
If you have any questions, bug reports, ideas or if you are facing problems with the NEORV32 or want to give some kinf of feedback, open a
If you have any questions, bug reports, ideas or if you are facing problems with the NEORV32 or want to give some kind of feedback, open a
[new issue](https://github.com/stnolting/neorv32/issues) or directly drop me a line:
[new issue](https://github.com/stnolting/neorv32/issues) or directly drop me a line:
 
 
  stnolting@gmail.com
  stnolting@gmail.com
 
 
 
 

powered by: WebSVN 2.1.0

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