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.