• Stars
    star
    595
  • Rank 75,217 (Top 2 %)
  • Language
    Rust
  • License
    MIT License
  • Created almost 5 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

RISC-V processor emulator written in Rust+WASM

riscv-rust

Build Status Crate npm version

riscv-rust is a RISC-V processor and peripheral devices emulator project written in Rust and compiled to WebAssembly. You can import RISC-V emulator into your Rust or JavaScript project. Refer to the Slides for more detail.

Online Demo

You can run Linux or xv6 on the emulator in your browser. Online demo is here

Screenshots

animation debugger

Documents

Features

  • Emulate RISC-V processor and peripheral devices
  • Stable as Linux and xv6-riscv run on it
  • Linux OpenSBI and legacy BBL boot support
  • Runnable locally
  • Also runnable in browser with WebAssembly
  • Debugger
  • You can import RISC-V emulator into your Rust or JavaScript project

Instructions/Features support status

  • RV32/64I
  • RV32/64M
  • RV32/64F (almost)
  • RV32/64D (almost)
  • RV32/64Q
  • RV32/64A (almost)
  • RV64C/32C (almost)
  • RV32/64Zifencei (almost)
  • RV32/64Zicsr (almost)
  • CSR (almost)
  • SV32/39
  • SV48
  • Privileged instructions (almost)
  • PMP

etc...

The emulator supports almost all instructions listed above but some instructions which are not used in Linux or xv6 are not implemented yet. Your contribution is very welcome.

How to import into your Rust project

The emulator module is released at crates.io. Add the following line into Cargo.toml of your Rust project.

[dependencies]
riscv_emu_rust = "0.2.0"

Refer to Document for the API.

How to build core library locally

$ git clone https://github.com/takahirox/riscv-rust.git
$ cd riscv-rust
$ cargo build --release

How to run Linux or xv6 as desktop application

$ cd riscv-rust/cli
# Run Linux
$ cargo run --release ../resources/linux/opensbi/fw_payload.elf -f ../resources/linux/rootfs.img
# Run xv6
$ cargo run --release ../resources/xv6/kernel -f ../resources/xv6/fs.img

How to run riscv-tests

Prerequirements

$ cd riscv-rust/cli
$ cargo run $path_to_riscv_tets/isa/rv32ui-p-add -n

How to import and use WebAssembly RISC-V emulator in a web browser

See wasm/web

How to install and use WebAssembly RISC-V emulator npm package

See wasm/npm

Links

Linux RISC-V port

Running 64- and 32-bit RISC-V Linux on QEMU

xv6-riscv

xv6-riscv is the RISC-V port of xv6 which is UNIX V6 rewritten by MIT for x86 in the current C language.

Specifications

More Repositories

1

nes-js

JavaScript NES(Famicom) emulator
JavaScript
205
star
2

nes-rust

NES emulator written in Rust + WASM
Rust
204
star
3

toho-like-js

Touhou style danmaku shooter game which runs on your chrome.
JavaScript
176
star
4

online-wgsl-editor

A tiny WGSL online editor
JavaScript
174
star
5

webgpu-devtools

JavaScript
172
star
6

mmd-viewer-js

MMD model dances on your chrome with WebGL.
JavaScript
158
star
7

wgpu-rust-renderer

A tiny WebGPU renderer written in Rust
JavaScript
138
star
8

THREE.WebGPURenderer

Experimental Three.js WebGPU renderer
JavaScript
132
star
9

three-gltf-extensions

Unofficial Three.js glTF loader/exporter plugins
JavaScript
118
star
10

tiny-web-metaverse

A web-based 3D virtual space lightweight framework with high flexibility, extensibility, and easy hosting, built on ECS architecture
JavaScript
117
star
11

MMDLoader-app

sample applications for THREE.MMDLoader
HTML
111
star
12

WebAssembly-benchmark

HTML
89
star
13

a-mmd

A-Frame MMD component
JavaScript
83
star
14

ThreeNetwork

Network sync library for Three.js
JavaScript
72
star
15

glTF-Blender-IO-materials-variants

Blender3D addon for glTF KHR_materials_variants extension
Python
71
star
16

ecs-rust

Tiny ECS library in Rust
JavaScript
60
star
17

three.wasm-experimental

Experimental Three.js WASM (WIP)
JavaScript
55
star
18

glTF-Blender-IO-EXT-mesh-gpu-instancing

Python
52
star
19

mmd-parser

NPM MMD parser package
JavaScript
48
star
20

webgpu-trial

WebGPU trial
HTML
48
star
21

pdp11-js

PDP-11 emulator implemented with JavaScript. UNIX V6 runs on your chrome.
JavaScript
43
star
22

aframe-rain

A-Frame Rainfall effect component
JavaScript
41
star
23

aframe-outline

Two-pass Outline effect component for A-Frame
JavaScript
34
star
24

aframe-instancing

A-Frame instancing component
JavaScript
24
star
25

EXT_skeleton_humanoid

21
star
26

THREE.Math-WASM

Three.js Math library in WASM
JavaScript
20
star
27

aframe-webrtc

A-Frame WebRTC component
JavaScript
17
star
28

takahirox.github.io

JavaScript
16
star
29

glTF-Blender-IO-MSFT-lod

Python
16
star
30

glTF-Transform-lod-script

JavaScript
15
star
31

aframe-deferred-renderer

A-Frame Deferred Renderer component
JavaScript
15
star
32

THREE.ZipLoader

Zip archived model file Loading helper for Three.js
JavaScript
14
star
33

THREE.TextureUploader

Experimental Less-blocking Texture uploader for Three.js
10
star
34

EXT_texture_video

8
star
35

nes-rust-ecsy

NES emulator + ECSY + Webpack bundle
JavaScript
7
star
36

KHR_lights_shadows

glTF exntension to specify which nodes can cast or receive shadows
6
star
37

EXT_copyrights

glTF copyrights extension
5
star
38

AsyncGLTFLoader

JavaScript
5
star
39

binary-viewer

Easy online binary dump tool.
HTML
5
star
40

Basis-Texture-Viewer

JavaScript
4
star
41

Vulkan-glTF-viewer-trial

C++
4
star
42

WebWorkers-benchmark

HTML
4
star
43

Hubs-glTF-Test-Models

3
star
44

WebAssemblyThread-benchmark

JavaScript
3
star
45

vr-tours

3
star
46

WebGL-CPU-Profiler-Extension

WebExtension profiling CPU elapsed time for WebGL
JavaScript
3
star
47

web_ai_chat

AI chat with on-device and in-browser inference
TypeScript
3
star
48

EXT_mesh_lod

2
star
49

charset-encoder-js

Simple charset encoder with JavaScript
JavaScript
2
star
50

KHR_parallel_shader_compile_test

GLSL
2
star
51

YouTube-Auto-Ad-Skipper

JavaScript
2
star
52

custom-shader

2
star
53

license-info-js

JavaScript
2
star
54

js-arguments-test

HTML
2
star
55

rust-tiny-os

Rust
2
star
56

libsquish-js

JavaScript libsquish compiled with emscripten
C++
2
star
57

EXT_text

glTF text extension
2
star
58

whisper-web-extension

JavaScript
2
star
59

ios-webaudio-test

JavaScript
1
star
60

ios-video-test

Test purpose
HTML
1
star
61

MyPersonalTodos

1
star
62

texImage2D-gl-test

HTML
1
star
63

SIMDJS-benchmark

HTML
1
star
64

pannernode-test

HTML
1
star
65

MOZ_lightmap

1
star
66

system_trade

Easy algorithmic trading tool on Lubuntu for myself.
Shell
1
star