blob: fa7e6bfd09e21b7209841cd89701aa235ac65305 [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.