riscv-vp-plusplus
RISCV-VP++ is a extended and improved successor of the RISC-V based Virtual Prototype (VP) RISC-V VP. It is maintained at the Institute for Complex Systems, Johannes Kepler University, Linz.
File Explorer
Download Latest Version (.zip)- Dockerfile
- how-to.txt
- GD32_VP.pdf
- README.md
- SDK-wont-compile.txt
- vp.svg
- README.md
- riscv-vp_logo.pdf
- riscv-vp_logo.png
- riscv-vp_logo.svg
- README.md
- 202601_debug_rework_project.md
- CMakeLists.txt
- framebuffer.h
- main.cpp
- mainwindow.cpp
- mainwindow.h
- mainwindow.ui
- VP-Display-layout.svg
- VP-Display-layout.svg.png
- VP-Display.pro
- vpdisplayserver.cpp
- vpdisplayserver.h
- breadboard-json.cpp
- breadboard.cpp
- breadboard.h
- configurations.h
- raster.cpp
- raster.h
- AddGitSubmodule.cmake
- GenerateDevicesHeader.cmake
- GenerateResourceFiles.cmake
- oled_shield.json
- tft_shield.json
- button.cpp
- button.h
- oled.cpp
- oled.h
- tft.cpp
- tft.h
- cFactory.cpp
- cFactory.h
- configurations.h
- factory.cpp
- factory.h
- loadscript.lua
- luaFactory.cpp
- luaFactory.hpp
- cDevice.cpp
- cDevice.h
- luaDevice.cpp
- luaDevice.hpp
- bme280.lua
- button.lua
- dht22.lua
- led.lua
- rtc.lua
- ssd1106.lua
- configurations.h
- device.cpp
- device.hpp
- embedded.cpp
- embedded.h
- oled_shield.jpg
- tft_shield.png
- virtual_breadboard.png
- virtual_hifive.png
- get_dir.cpp
- get_dir.h
- json_entry.cpp
- json_entry.h
- central.cpp
- central.h
- mainwindow.ui
- window.cpp
- window.h
- CMakeLists.txt
- LuaBridge3
- main.cpp
- TODO.md
- vp-breadboard_arch.svg
- Makefile
- sum.S
- bootstrap.S
- main.c
- Makefile
- sum.c
- bootstrap.S
- eclipse-remote-debug-readme.txt
- main.c
- Makefile
- remote-debug-readme.txt
- test-ignore
- bootstrap.S
- irq.c
- irq.h
- main.c
- Makefile
- Makefile
- sum.S
- main.c
- Makefile
- test-ignore
- bootstrap.S
- gpio.h
- link.ld
- main.c
- Makefile
- platform.h
- uart.c
- uart.h
- util.c
- util.h
- bootstrap.S
- main.c
- Makefile
- bootstrap.S
- irq.S
- main.c
- Makefile
- bootstrap.S
- main.c
- Makefile
- main.cpp
- Makefile
- bootstrap.S
- link.ld
- main.c
- Makefile
- README.md
- test-ignore
- bootstrap.S
- irq.c
- irq.h
- main.c
- Makefile
- bootstrap.S
- link.ld
- main.c
- Makefile
- platform.h
- uart.c
- uart.h
- util.c
- util.h
- main.cpp
- Makefile
- test-ignore
- main.cpp
- Makefile
- bootstrap.S
- link.ld
- main.c
- Makefile
- platform.h
- uart.c
- uart.h
- util.c
- util.h
- bootstrap.S
- irq.c
- irq.h
- main.c
- Makefile
- entry.S
- main.c
- Makefile
- bootstrap.S
- main.c
- Makefile
- libDisplay.cpp
- libDisplay.hpp
- main.cpp
- Makefile
- test-ignore
- bootstrap.S
- cor.S
- main.c
- Makefile
- cor.S
- main.c
- Makefile
- bootstrap.S
- irq.c
- irq.h
- main.c
- Makefile
- main.c
- Makefile
- test-ignore
- .gitignore
- Makefile
- Makefile.common
- README.md
- test.sh
- AddGitSubmodule.cmake
- parser1.h
- parser2.h
- response.h
- CMakeLists.txt
- internal.h
- mpc
- parser1.c
- parser2.c
- parser2.h
- README.md
- response.c
- util.c
- CMakeLists.txt
- gdb_runner.cpp
- gdb_runner.h
- gdb_server.cpp
- gdb_server.h
- handler.cpp
- register_format.cpp
- register_format.h
- bus_lock_if.h
- clint.h
- clint_if.h
- CMakeLists.txt
- core_defs.h
- dbbcache.h
- dbbcache_stats.h
- debug.h
- debug_memory.cpp
- debug_memory.h
- dmi.h
- elf_loader.h
- fp.h
- instr.cpp
- instr.h
- irq_if.h
- iss_stats.cpp
- iss_stats.h
- load_if.h
- lscache.h
- lscache_stats.h
- lwrt_clint.h
- mem.h
- mem_if.h
- mmu.h
- mmu_mem_if.h
- rawmode.cpp
- rawmode.h
- real_clint.cpp
- real_clint.h
- regfile.h
- regfile_base.h
- syscall.h
- syscall_if.h
- timer.cpp
- timer.h
- trap.h
- v.h
- cheri_cap_common.cpp
- cheri_cap_common.h
- cheri_capability.h
- cheri_constants.h
- cheri_exceptions.h
- cheri_sys_regs.h
- cheri_types.h
- CMakeLists.txt
- dbbcache.h
- dmi.h
- instr.cpp
- instr.h
- iss_stats.cpp
- iss_stats.h
- mem.h
- mmu.h
- regfile.h
- timing_external.h
- timing_simple.h
- CMakeLists.txt
- csr.h
- elf_loader.h
- iss.cpp
- iss.h
- iss_ctemplate.cpp
- iss_ctemplate.h
- iss_ctemplate_handle.h
- mem.h
- mmu.h
- syscall.cpp
- syscall.h
- CMakeLists.txt
- csr.h
- elf_loader.h
- iss.cpp
- iss.h
- iss_ctemplate.cpp
- iss_ctemplate.h
- iss_ctemplate_handle.h
- mem.h
- mmu.h
- syscall.cpp
- syscall.h
- CMakeLists.txt
- rvfi_dii.cpp
- rvfi_dii.h
- rvfi_dii_trace.h
- RvfiDiiCoreRunner.h
- cheri_addr_checks.h
- cheri_mem.h
- cheri_prelude.cpp
- cheri_prelude.h
- CMakeLists.txt
- csr.h
- elf_loader.h
- iss.cpp
- iss.h
- iss_ctemplate.cpp
- iss_ctemplate.h
- iss_ctemplate_handle.h
- mem.h
- mmu.h
- syscall.cpp
- syscall.h
- CMakeLists.txt
- basic_timer.h
- CMakeLists.txt
- display.cpp
- display.hpp
- dma.h
- ethernet.cpp
- ethernet.h
- flash.h
- main.cpp
- random_source.h
- sensor.h
- sensor2.h
- async_event.h
- bus.h
- channel_console.cpp
- channel_console.h
- channel_fd_if.cpp
- channel_fd_if.h
- channel_if.cpp
- channel_if.h
- channel_slip.cpp
- channel_slip.h
- channel_tcp.cpp
- channel_tcp.h
- CMakeLists.txt
- ds1307.cpp
- ds1307.h
- dummy_i2c.h
- dummy_tlm_target.h
- fe310_plic.cpp
- fe310_plic.h
- fu540_gpio.cpp
- fu540_gpio.h
- fu540_i2c.cpp
- fu540_i2c.h
- fu540_uart.cpp
- fu540_uart.h
- gpio_if.h
- i2c_if.h
- memory.h
- memory_mapped_file.h
- miscdev.h
- net_trace.cpp
- net_trace.h
- ns16550a_uart.cpp
- ns16550a_uart.h
- options.cpp
- options.h
- sifive_plic.cpp
- sifive_plic.h
- sifive_spi.h
- sifive_test.cpp
- sifive_test.h
- spi_if.h
- spi_sd_card.cpp
- spi_sd_card.h
- tagged_memory.h
- terminal.h
- util.h
- vncsimplefb.cpp
- vncsimplefb.h
- vncsimpleinputkbd.cpp
- vncsimpleinputkbd.h
- vncsimpleinputptr.cpp
- vncsimpleinputptr.h
- .gitignore
- cli-client.cpp
- cli-server.cpp
- debug.h
- gpio-client
- gpio-client.cpp
- gpio-client.hpp
- gpio-server
- gpio-server.cpp
- gpio-server.hpp
- gpiocommon.cpp
- gpiocommon.hpp
- Makefile
- nuclei_csr.h
- nuclei_irq_if.h
- nuclei_iss.cpp
- nuclei_iss.h
- nuclei_mem.h
- common.cpp
- common.hpp
- oled.cpp
- oled.hpp
- nuclei_memory_map.h
- afio.h
- CMakeLists.txt
- eclic.h
- exmc.h
- exti.h
- gd32_main.cpp
- gpio.cpp
- gpio.h
- rcu.h
- spi.h
- timer.cpp
- timer.h
- usart.h
- 90-slcan.rules
- CAN-Howto.md
- cantest.cpp
- mcp_can_dfs.h
- slcan_add.sh
- slcan_remove.sh
- common.cpp
- common.hpp
- oled.cpp
- oled.hpp
- aon.h
- can.cpp
- can.h
- channel_tunnel.cpp
- channel_tunnel.h
- CMakeLists.txt
- gpio.cpp
- gpio.h
- hifive_main.cpp
- maskROM.h
- otp.h
- prci.h
- vbb-protocol
- CMakeLists.txt
- main.cpp
- virtual-bus
- virtual_bus_tlm_connector.cpp
- virtual_bus_tlm_connector.hpp
- linux-dt-gen.py
- CMakeLists.txt
- linux_main.cpp
- prci.h
- CMakeLists.txt
- main.cpp
- microrv32_gpio.h
- microrv32_led.h
- microrv32_uart.h
- qemu_virt-dt-gen.py
- CMakeLists.txt
- main.cpp
- README.md
- CMakeLists.txt
- main.cpp
- CMakeLists.txt
- main.cpp
- CMakeLists.txt
- .gitignore
- CMakeLists.txt
- riscv-filter.cpp
- CMakeLists.txt
- common.h
- elegantEnums.cpp
- elegantEnums.hpp
- gtkwave_riscv-filter.py
- histogram.h
- initiator_if.h
- memory_map.h
- options.cpp
- options.h
- propertytree.cpp
- propertytree.h
- tlm_ext_initiator.h
- tlm_ext_tag.h
- tlm_map.h
- vncserver.cpp
- vncserver.h
- internals.h
- platform.h
- primitives.h
- primitiveTypes.h
- softfloat.h
- softfloat.hpp
- softfloat_types.h
- specialize.h
- bf16_to_f32.c
- CMakeLists.txt
- f128_add.c
- f128_classify.c
- f128_div.c
- f128_eq.c
- f128_eq_signaling.c
- f128_isSignalingNaN.c
- f128_le.c
- f128_le_quiet.c
- f128_lt.c
- f128_lt_quiet.c
- f128_mul.c
- f128_mulAdd.c
- f128_rem.c
- f128_roundToInt.c
- f128_sqrt.c
- f128_sub.c
- f128_to_f16.c
- f128_to_f32.c
- f128_to_f64.c
- f128_to_i32.c
- f128_to_i32_r_minMag.c
- f128_to_i64.c
- f128_to_i64_r_minMag.c
- f128_to_ui32.c
- f128_to_ui32_r_minMag.c
- f128_to_ui64.c
- f128_to_ui64_r_minMag.c
- f16_add.c
- f16_classify.c
- f16_div.c
- f16_eq.c
- f16_eq_signaling.c
- f16_isSignalingNaN.c
- f16_le.c
- f16_le_quiet.c
- f16_lt.c
- f16_lt_quiet.c
- f16_mul.c
- f16_mulAdd.c
- f16_rem.c
- f16_roundToInt.c
- f16_sqrt.c
- f16_sub.c
- f16_to_f128.c
- f16_to_f32.c
- f16_to_f64.c
- f16_to_i16.c
- f16_to_i32.c
- f16_to_i32_r_minMag.c
- f16_to_i64.c
- f16_to_i64_r_minMag.c
- f16_to_i8.c
- f16_to_ui16.c
- f16_to_ui32.c
- f16_to_ui32_r_minMag.c
- f16_to_ui64.c
- f16_to_ui64_r_minMag.c
- f16_to_ui8.c
- f32_add.c
- f32_classify.c
- f32_div.c
- f32_eq.c
- f32_eq_signaling.c
- f32_isSignalingNaN.c
- f32_le.c
- f32_le_quiet.c
- f32_lt.c
- f32_lt_quiet.c
- f32_mul.c
- f32_mulAdd.c
- f32_rem.c
- f32_roundToInt.c
- f32_sqrt.c
- f32_sub.c
- f32_to_bf16.c
- f32_to_f128.c
- f32_to_f16.c
- f32_to_f64.c
- f32_to_i16.c
- f32_to_i32.c
- f32_to_i32_r_minMag.c
- f32_to_i64.c
- f32_to_i64_r_minMag.c
- f32_to_ui16.c
- f32_to_ui32.c
- f32_to_ui32_r_minMag.c
- f32_to_ui64.c
- f32_to_ui64_r_minMag.c
- f64_add.c
- f64_classify.c
- f64_div.c
- f64_eq.c
- f64_eq_signaling.c
- f64_isSignalingNaN.c
- f64_le.c
- f64_le_quiet.c
- f64_lt.c
- f64_lt_quiet.c
- f64_mul.c
- f64_mulAdd.c
- f64_rem.c
- f64_roundToInt.c
- f64_sqrt.c
- f64_sub.c
- f64_to_f128.c
- f64_to_f16.c
- f64_to_f32.c
- f64_to_i32.c
- f64_to_i32_r_minMag.c
- f64_to_i64.c
- f64_to_i64_r_minMag.c
- f64_to_ui32.c
- f64_to_ui32_r_minMag.c
- f64_to_ui64.c
- f64_to_ui64_r_minMag.c
- fall_maxmin.c
- fall_reciprocal.c
- i32_to_f128.c
- i32_to_f16.c
- i32_to_f32.c
- i32_to_f64.c
- i64_to_f128.c
- i64_to_f16.c
- i64_to_f32.c
- i64_to_f64.c
- s_add128.c
- s_add256M.c
- s_addCarryM.c
- s_addComplCarryM.c
- s_addM.c
- s_addMagsF128.c
- s_addMagsF16.c
- s_addMagsF32.c
- s_addMagsF64.c
- s_approxRecip32_1.c
- s_approxRecip_1Ks.c
- s_approxRecipSqrt32_1.c
- s_approxRecipSqrt_1Ks.c
- s_commonNaNToF128UI.c
- s_commonNaNToF16UI.c
- s_commonNaNToF32UI.c
- s_commonNaNToF64UI.c
- s_compare128M.c
- s_compare96M.c
- s_countLeadingZeros16.c
- s_countLeadingZeros32.c
- s_countLeadingZeros64.c
- s_countLeadingZeros8.c
- s_eq128.c
- s_f128UIToCommonNaN.c
- s_f16UIToCommonNaN.c
- s_f32UIToCommonNaN.c
- s_f64UIToCommonNaN.c
- s_le128.c
- s_lt128.c
- s_mul128By32.c
- s_mul128MTo256M.c
- s_mul128To256M.c
- s_mul64ByShifted32To128.c
- s_mul64To128.c
- s_mul64To128M.c
- s_mulAddF128.c
- s_mulAddF16.c
- s_mulAddF32.c
- s_mulAddF64.c
- s_negXM.c
- s_normRoundPackToF128.c
- s_normRoundPackToF16.c
- s_normRoundPackToF32.c
- s_normRoundPackToF64.c
- s_normSubnormalF128Sig.c
- s_normSubnormalF16Sig.c
- s_normSubnormalF32Sig.c
- s_normSubnormalF64Sig.c
- s_propagateNaNF128UI.c
- s_propagateNaNF16UI.c
- s_propagateNaNF32UI.c
- s_propagateNaNF64UI.c
- s_remStepMBy32.c
- s_roundMToI64.c
- s_roundMToUI64.c
- s_roundPackMToI64.c
- s_roundPackMToUI64.c
- s_roundPackToBF16.c
- s_roundPackToF128.c
- s_roundPackToF16.c
- s_roundPackToF32.c
- s_roundPackToF64.c
- s_roundPackToI32.c
- s_roundPackToI64.c
- s_roundPackToUI32.c
- s_roundPackToUI64.c
- s_roundToI32.c
- s_roundToI64.c
- s_roundToUI32.c
- s_roundToUI64.c
- s_shiftRightJam128.c
- s_shiftRightJam128Extra.c
- s_shiftRightJam256M.c
- s_shiftRightJam32.c
- s_shiftRightJam64.c
- s_shiftRightJam64Extra.c
- s_shortShiftLeft128.c
- s_shortShiftLeft64To96M.c
- s_shortShiftRight128.c
- s_shortShiftRightExtendM.c
- s_shortShiftRightJam128.c
- s_shortShiftRightJam128Extra.c
- s_shortShiftRightJam64.c
- s_shortShiftRightJam64Extra.c
- s_shortShiftRightM.c
- s_sub128.c
- s_sub1XM.c
- s_sub256M.c
- s_subM.c
- s_subMagsF128.c
- s_subMagsF16.c
- s_subMagsF32.c
- s_subMagsF64.c
- softfloat_raiseFlags.c
- softfloat_state.c
- ui32_to_f128.c
- ui32_to_f16.c
- ui32_to_f32.c
- ui32_to_f64.c
- ui64_to_f128.c
- ui64_to_f16.c
- ui64_to_f32.c
- ui64_to_f64.c
- CMakeLists.txt
- systemc
- CMakeLists.txt
- CMakeLists.txt
- connect-and-quit.S
- gdb-cmds
- output
- post-process.sh
- CMakeLists.txt
- gdb-cmds
- hit-breakpoint.S
- output
- CMakeLists.txt
- gdb-cmds
- mc-dead-thread.S
- output
- test-ignore
- CMakeLists.txt
- gdb-cmds
- mc-info-threads.S
- output
- CMakeLists.txt
- gdb-cmds
- mc-wfi-thread.S
- output
- CMakeLists.txt
- gdb-cmds
- output
- read-memory.S
- CMakeLists.txt
- gdb-cmds
- output
- post-process.sh
- read-registers.S
- CMakeLists.txt
- gdb-cmds
- output
- remove-breakpoint.S
- CMakeLists.txt
- gdb-cmds
- output
- write-memory.S
- CMakeLists.txt
- README.md
- run_tests.sh
- test.sh
- CMakeLists.txt
- opts
- output
- post-process.sh
- sum.S
- bootstrap.S
- CMakeLists.txt
- main.c
- opts
- output
- post-process.sh
- sum.c
- CMakeLists.txt
- main.cpp
- opts
- output
- bootstrap.S
- CMakeLists.txt
- main.c
- output
- post-process.sh
- CMakeLists.txt
- entry.S
- main.c
- opts
- output
- CMakeLists.txt
- input
- main.c
- opts
- output
- CMakeLists.txt
- README.md
- run_tests.sh
- test.sh
- ack.dat
- nack.dat
- notify.dat
- simple.dat
- CMakeLists.txt
- parser1.c
- parser2.c
- parser_util.c
- ptest
- run_tests.sh
- suite.h
- test.c
- test.sh
- util.c
- util.h
- rv32.cmake
- rv64.cmake
- .gitignore
- LICENSE
- .gitignore
- CMakeLists.txt
- .clang-format
- .dockerignore
- .gitignore
- .gitlab-ci.yml
- .gitmodules
- Dockerfile
- LICENSE
- Makefile
- README.md
# Installation Guide
git clone https://github.com/ics-jku/riscv-vp-plusplus
Downloads the entire project code from GitHub to your computer.
cd riscv-vp-plusplus
Moves into the project folder you just downloaded.
2. Official Install Script
Easy Recommended- APT (Debian/Ubuntu κ³μ΄) Built into Debian/Ubuntu-based Linux distributions.
sudo apt install cmake autoconf automake autotools-dev clang-format-19 curl libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo libgoogle-perftools-dev libtool patchutils bc zlib1g-dev libexpat-dev libboost-iostreams-dev libboost-program-options-dev libboost-log-dev qtbase5-dev qt5-qmake libvncserver-dev nlohmann-json3-dev
Installs directly from the APT package repository (Debian/Ubuntu-based).
Pulled directly from this repo's README.
3. Docker
Easy- Git Needed to download the project code from GitHub.
- Docker Desktop Needed to build and run containers. Install it and keep it running in the background.
docker build -t riscv-vp-plusplus .
Builds a runnable image based on the Dockerfile.
docker run -p 8080:80 riscv-vp-plusplus
Runs the built image as an actual container.
4. CMake
Mediumsudo apt install cmake autoconf automake autotools-dev clang-format-19 curl libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo libgoogle-perftools-dev libtool patchutils bc zlib1g-dev libexpat-dev libboost-iostreams-dev libboost-program-options-dev libboost-log-dev qtbase5-dev qt5-qmake libvncserver-dev nlohmann-json3-dev
Installs directly from the APT package repository (Debian/Ubuntu-based).
sudo dnf install autoconf automake curl libmpc-devel mpfr-devel gmp-devel gawk bison flex texinfo gperf libtool patchutils bc zlib-devel expat-devel cmake boost-devel qt5-qtbase qt5-qtbase-devel libvncserver-devel json-devel
Type this command into your terminal and run it.
Pulled directly from this repo's README.
5. Make
Medium- Git Needed to download the project code from GitHub.
- Make Usually pre-installed on Linux/macOS. On Windows, install separately (e.g. via MSYS2 or WSL).
make -j$(nproc)
Compiles the code based on the generated build configuration to produce an executable.
make # (requires RISC-V GNU toolchain in PATH)
Compiles the code based on the generated build configuration to produce an executable.
make sim # (requires *riscv32-vp*, i.e. *vp/build/bin/riscv32-vp*, executable in PATH)
Compiles the code based on the generated build configuration to produce an executable.
Pulled directly from this repo's README.
