Embedded computing systems are everywhere and they control a great deal of important infrastructure: communication, medical, utilities, etc. Embedded computing systems must be designed not just to perform a given function but to do it in real time, consume limited amounts of power, etc. Today's tools don't adequately help the programmers of embedded computers to design programs that work properly in all these senses: function, performance, and power consumption. Today, many programmers must simply write a program and run it on the embedded computer or a simulator; this approach takes too much time. As a result, many embedded programs aren't adequately analyzed and tested. This project is developing new methods for embedded system design that use models of both the programs and the computers they run on to create successively more accurate versions of the program. Previous research has developed simple models. The premise of the work is that several levels of modeling are required to design efficient and correct embedded software. In the early stages, less-accurate models are necessary to efficiently explore the design space. As design progresses, more detailed models are required. As part of this research project, the PIs are developing teaching materials to be distributed over the World Wide Web. The materials discuss model-based computing, the characteristics of models, and software synthesis through a hierarchy of models. The PIs also distribute over the Web the tools developed and design examples and benchmarks collected during the course of this project.