M5 is a flexible, modular full-system architecture
simulator that I helped to develop. It's capable of
modeling entire systems, including caches, devices, busses,
and interconnects, as well as standard microarchitectural
modeling. It is written largely in C++ with a lot of Python
thrown in, and has been growing in popularity. For more
information on this awesome tool, see the
M5 homepage.