blob: ae27dcc915ebd5f9fdcf95f02ef059382958a312 [file] [view]
# MPACT-RiscV
MPACT-RiscV is an implementation of an instruction set simulator for the RiscV
instruction set architecture created using the
[MPACT-Sim](https://github.com/google/mpact-sim) simulator tools and framework,
for which there are tutorials at
[Google for Developers](https://developers.google.com/mpact-sim).
The instruction set is described in a set of `.isa` files, and the instruction
encoding in a corresponding set of `.bin_fmt` files. The instruction semantics
are implemented in a set of of functions distributed over a large set of C++
files `*_instructions.{cc,h}`.
The top level simulator control is implemented in `riscv_top.{cc,h}`, and the
simulators are instantiated from main in `rv{32,64}g_sim.cc`.
## Building
### Bazel
MPACT-Sim utilizes the [Bazel](https://bazel.build/) build system. The easiest
way to install bazel is to use
[Bazelisk](https://github.com/bazelbuild/bazelisk), a wrapper for Bazel that
automates selecting and downloading the right version of bazel. Use `brew
install bazelisk` on macOS, `choco install bazelisk` on Windows, and on linux,
download the Bazelisk binary, add it to your `PATH`, then alias bazel to the
bazelisk binary.
### Java
MPACT-Sim depends on Java, so a reasonable JRE has to be installed. For macOS,
run `brew install java`, on linux `sudo apt install default-jre`, and on Windows
follow the appropriate instructions at [java.com](https://java.com).
### Build and Test
To build the mpact-sim libraries for x86 based processors, use the command
`bazel build ...:all` from the top level directory. To run the tests, use the
command `bazel test ...:all`.
For Apple computers with Arm64 M series chips, use `bazel build
--cpu=darwin_arm64 ...:all` and `bazel test --cpu=darwin_arm64 ...:all`.
The build targets `rv32g_sim` and `rv64g_sim` provide RiscV simulators for the
32 bit and 64 bit variants of RiscV scalar architectures respectively. Decoding
and execution support for vector instructions is included, but has not been
built into these targets, though adding them to these simulators is not
particularly daunting.