blob: c3f414d058203ce605661882a6d6ce06addb5334 [file] [view]
# MPACT-Sim - Retargetable Instruction Set Simulator Infrastructure
MPACT-Sim is a toolkit that reduces the effort to create instruction set
simulators, and make the resulting simulators easy to change and extend.
This repository contains the C++ code for MPACT-Sim, tools and library support
for making it simple to create easily retargetable simulators for a wide range
of instruction set architectures.
The toolkit consists of three major components. The first is the isa and binary
decoder generators, that take in descriptors of the isa and the binary encoding
of instructions and produce C++ code used in writing a decoder. The second is
the generic classes that implement the instruction objects, registers, and other
simulated state objects, and the code necessary to manipulate them, as well as
supporting writing the semantics of the instructions. Lastly, there are utility
classes that make it easier to put together a finished simulator, including
memory classes and an ELF loader.
## Building
MPACT-Sim utilizes the [bazel](https://bazel.build/) build system.
## Directory Listing
* mpact/sim/decoder <br />
This directory contains the code that implements the tools
that parse `.isa` and `.bin_fmt` files, which define the
instructions and instruction encodings of an ISA, and generate C++
code for the instruction decoder for an MPACT-Sim simulator.
The tools are built automatically and the process is largly invisible when
using bazel with the appropriate build targets - see the tests in
mpact/sim/decoder/test for examples.
* mpact/sim/generic <br />
This directory contains alll the generic classes provided for use
in writing MPACT-Sim instruction set simulators.
* mpact/sim/util <br />
This directory contains code for a generic ELF program loader, and
for a set of classes that can be used to implement memories used in
an instruction set simulator.