Home

Awesome

RISC-V Core

Github: http://github.com/ultraembedded/riscv

A 32-bit RISC-V core written in Verilog and an instruction set simulator supporting RV32IM.
This core has been tested against a co-simulation model and exercised on FPGA.

For a higher performance dual issue CPU with branch prediction, see my latest RISC-V core here; http://github.com/ultraembedded/biriscv

Overview

Features

Configuration

Param NameValid RangeDescription
SUPPORT_SUPER1/0Enable supervisor / user privilege levels.
SUPPORT_MMU1/0Enable basic memory management unit.
SUPPORT_MULDIV1/0Enable HW multiply / divide (RV-M).
SUPPORT_LOAD_BYPASS1/0Support load result bypass paths.
SUPPORT_MUL_BYPASS1/0Support multiply result bypass paths.
SUPPORT_REGFILE_XILINX1/0Support Xilinx optimised register file.
EXTRA_DECODE_STAGE1/0Extra decode pipe stage for improved timing.
MEM_CACHE_ADDR_MIN32'h0 - 32'hffffffffLowest cacheable memory address.
MEM_CACHE_ADDR_MAX32'h0 - 32'hffffffffHighest cacheable memory address.

Directories

NameContents
core/riscvRISC-V pipelined RV32IM CPU core (Verilog)
isa_simInstruction set simulator (C)
top_tcm_axi/src_vExample instance with 64KB DP-RAM & AXI Interfaces
top_tcm_axi/tbSystem-C testbench for the core
top_cache_axi/src_vExample instance with instruction and data caches.
top_cache_axi/tbSystem-C testbench for the core

Example Core Instance (with TCM memory)

The top (top_tcm_axi/src_v/riscv_tcm_top.v) contains;

Memory Map

RangeDescription
0x0000_0000 - 0x0000_ffff64KB TCM Memory
0x0000_2000Boot address (configurable, see RISCV_BOOT_ADDRESS)
0x8000_0000 - 0xffff_ffffPeripheral address space (from AXI4-L port)

Interfaces

NameDescription
clk_iClock input
rst_iAsync reset, active-high. Reset memory / AXI interface.
rst_cpu_iAsync reset, active-high. Reset CPU core (excluding AXI / memory).
axi_t_*AXI4 slave interface for access to 64KB TCM memory.
axi_i_*AXI4-Lite master interface for CPU access to peripherals.
intr_iActive high interrupt input (for connection external int controller).

Testbench

A basic System-C / Verilator based testbench for the core is provided.

Dependencies;

To build the testbench;

cd top_tcm_axi/tb
make

To run the provided test executable;

cd top_tcm_axi/tb
make run

Example Core Instance (with caches)

The top (top_cache_axi/src_v/riscv_top.v) contains;

Interfaces

NameDescription
clk_iClock input
rst_iAsync reset, active-high. Reset memory / AXI interface.
axi_i_*AXI4 master interface for CPU access to instruction memory.
axi_d_*AXI4 master interface for CPU access to data / peripheral memories.
intr_iActive high interrupt input (for connection external int controller).
reset_vector_iBoot vector.

Execution Example