Spinach is a performance simulation toolkit for programmable network interface and embedded system architectures, based on the Liberty Simulation Environment. It was written by Paul Willmann and Mike Brogioli at Rice University's Computer Architecture group and Derek Schuff at Purdue University's SDC Lab.
For a detailed explanation of Spinach, how it fits into Liberty, and why we wrote it, you can read our paper which appeared at the 2004 Conference on Languages, Tools, and Compilers for Embedded Systems. For information on installing and getting started with Spinach, you can read the getting started guide, which is also included with the distribution. To download Spinach, visit the Sourceforge project page.
To summarize, Spinach is a set of add-on modules for the Liberty simulation environment (LSE). Spinach modules are targeted specifically at embedded systems, including (but not limited to) programmable network interfaces. Spinach simulators use no global state; rather, state is maintained locally at each module, and timing decisions (such as memory bus arbitration) are evaluated on a cycle-by-cycle basis. Consequently, you can rearrange these modules in any way you see fit, and they will seamlessly support and accurately model asynchronous interactions that are common in embedded systems (such as DMA transfers and unsolicited I/O events). Since memory-path widths and latencies are explicitly defined, and since memory transfers are evaluated cycle-by-cycle, memory bandwidth, contention, and latency are modeled precisely. Fundamental to Spinach's extensibility and reconfigurability is the notion of "no global state" - since no module assumes anything about the state of another module, it's possible to reconfigure these modules in any way you see fit and they should "just work". This means that you can do things like add additional processors by adding a processor instance and corresponding memory paths - note also, however, that just as in a real machine, you must take care of coherence issues (if necessary).
This work is supported in part by the National Science Foundation under Grant Nos. CCF-0532448 and CNS-0532452 .