An embedded system is a part of a product with which an end user does not directly interact or control. Products with embedded systems in them include modems, disk drives, digital cellular phones, radios, audio CD players, music synthesizers, video disk players, sonar, radar, confocal microscopes, Magnetic Resonance Imaging (MRI) medical systems, video telephones, and missiles. The fundamental problem facing the design of embedded systems is heterogeneity. Multiple styles of algorithms (e.g. signal processing, communications, and controls) are implemented using a variety of technologies (e.g., digital signal processors, microcontrollers, field-programmable gate arrays, application-specific integrated circuits, and real-time operating systems).
This course focuses on the design and implementation of software for programmable embedded systems. It surveys modern methods for specifying algorithms, simulating systems, and mapping specifications onto embedded systems. The methods are formal in that they have a solid mathematical basis; they support heterogeneity in that they can be composed to characterize heterogeneous systems; and they are general in that both hardware and software can be synthesized from them. The course introduces the technologies used in the design and implementation of programmable embedded systems, including electronic devices such as programmable processors, cores, memories, and dedicated and configurable hardware, and software tools such as compilers, schedulers, code generators, and system-level design tools.