Virtutech's Simics is a full system simulation platform, capable of simulating high-end target systems with sufficient fidelity and speed to boot and run operating systems and commercial workloads. Simics provides a controlled, deterministic, and fully virtualized environment for a variety of hardware and software engineering tasks. However, it does not provide micro-architecture timing detail nor cache/memory subs-xystem timings. To remedy these shortcomings, there are two research projects have released software modules that added these functionality. They are Wisconsin's Multifacet GEMS and CMU's Flexus.
GEMS is a set of modules for Virtutech Simics that enables detailed simulation of multiprocessor systems, including Chip-Multiprocessors (CMPs) systems. You can see some of the key features of GEMS on their website.
Flexus is a family of component-based C++ computer architecture simulators that build on Virtutech Simics' Micro-Architecture Interface (MAI) to enable full-system timing-accurate simulation of uni- and multiprocessor systems running unmodified commercial applications and operating systems. Flexus can control Simic's timing so that it can model out-of-order effects and speculative techniques.
In summary, you can use Simics to:
You could utilize any or all of these tools for your class project.
Simics is a system-level instruction set simulator; its default CPU models are functionally very close to their real counterparts, detailed enough to boot and run unmodified operating systems and applications. At this level of abstraction, exact timing is rarely a requirement. Simics considers the execution of an entire instruction, an exception or an interrupt as an atomic operation in the simulation process: it takes exactly one cycle. Simics allows a user module to take control over the memory system timing, deciding how many cycles each memory transaction requires to complete. Although this model can be sufficient to simulate the effects of caches, it still enforces Simics's concept of atomic, in-order execution. Simics Micro Architectural Interface (MAI) was designed to overcome these limitations while keeping the power of a functional full-system simulator. Using MAI, Simics can model the timing behavior of modern processors with deep pipelines and still run unmodified system-level software.
The basic idea behind MAI is to let the user decide when things happen, while Simics handles how things happen. A user module chooses when to fetch, decode, execute and commit instructions, using MAI to tell Simics to actually perform the actions. Execution is supervised by Simics; it will notify the user when program order consistency is violated, but even these warnings may be overridden.
Simics MAI supports out-of-order execution, multi-processor and multi-threading, branch and value speculation; for each processor, it gives the user control over an execution tree that represents the possible execution paths. The user module builds these paths by speculating on output values and branches.