Emulator was originally created by Fabrice Bellard and then modified and shared on Hackaday by Frank Buss as a single C-file. Shaos added some additional statistics and macros.
Requires libelf-dev:
$ sudo apt-get install libelf-dev
How to compile it:
$ gcc -O3 -Wall -lelf emu-rv32i.c -o emu-rv32i
or
$ make emu-rv32i
Passed RV32I compliance tests from https://github.com/riscv/riscv-compliance
- Must install the risc-v toolchain
$ make RISCV_TARGET=spike RISCV_DEVICE=rv32i TARGET_SIM=/full/path/emulator variant
Compiling and running simple code:
$ make test1
then
$ ./emu-rv32i test1
Hello RISC-V!
- RV32M and RV32A instructions may be enabled by commenting
#define STRICT_RV32I
.
Passed RV32C compliance tests from https://github.com/riscv/riscv-compliance
make C-ADDI.log
If there is no accident, it will output the TEST PASSED
- RV32C instructions can be enabled by commenting
#define RV32C
https://github.com/riscv/riscv-gnu-toolchain
64-bit universal version (riscv64-unknown-elf-* that can build 32-bit code too):
$ ./configure --prefix=/opt/riscv
$ make
32-bit version (riscv32-unknown-elf-*):
$ ./configure --prefix=/opt/riscv32 --with-arch=rv32i --with-abi=ilp32
$ make