Course Outline for Winter 2009
Students are responsible for monitoring e-mail to their university accounts concerning this course, and checking for announcements that will be posted on the Wiki.
Specification and design of embedded systems, system-on-a-chip paradigm, specification languages, hardware/software co-design, performance estimation, co-simulation and validation, processor architectures and software synthesis, retargetable code generation and optimization.
CIS*3110, CIS*3120, and CIS*3750, or equivalent courses covering these topics:
A student trained in a typical computer science program will have learned how to specify, design, and implement software intended to run on general purpose computers, such as desktop PCs and workstations hosting commodity operating systems. The modern application user interface will typically be a GUI, and there will likely be no peripherals beyond what is common on such computers. This training may leave students underprepared to participate in the vast embedded systems industry, which creates products containing hidden processors such as microcontrollers, interacting with their environment through a variety of sensors, actuators, switches, displays, and other devices, often within real-time constraints. Such products may contain digital logic (hardware) for the sake of performance, and the product's functionality is thus divided between the hardware and the software. Whereas conventionally-trained programmers rarely keep memory size or processor speed in mind when they design, embedded systems may be severely constrained in these areas for reasons of cost, size, and power consumption, and may lack any form of secondary storage. Some may be installed in relatively inaccessible locations or operate equipment that is critical to human safety, therefore reliability may be more important than for software applications which can exhibit flaws or crash without serious consequences.
At the same time, rapid developments in technology have been blurring the line between software and hardware: circuits can be designed using languages that look like software programs, and "hardware" can be reconfigured at run time. Companies are looking for people who are comfortable on both sides of this blurry line, but traditional training still produces either electrical/computer engineers or software engineers, with each speciality having its own "culture" that impedes integration. Part of the solution relies on the increasing use of CAD (computer-aided design, also called CAE, computer-aided engineering) tools, since they incorporate considerable domain knowledge and expertise, thus enabling an average user to produce acceptable results in areas outside their detailed training. Codesign techniques and tools, in particular, address the problems of optimizing the hardware/software division to meet specified constraints, and of enabling programmers to write and debug code for hardware that may not yet be built.
This course is designed to bring computer science students into the world of embedded systems, learning what makes them different, what architectural components they utilize, and what special challenges their designers face. It will familiarize students with some of the CAD tools used for the design and synthesis of hardware and software. Students will find that this course pulls together many technical themes they studied throughout their undergraduate curriculum.
Embedded System Design: A Unified Hardware/Software Introduction, by Frank Vahid and Tony Givargis, Wiley, 2002.
Recommended texts will be posted on the course Wiki.
The term project may be carried out singly or by a two-person team. It will include designing and simulating or implementing an embedded system, or carrying out a relevant student research proposal. Various prototyping platforms will be available for experimentation. All projects include a proposal, a presentation, and a written report, plus software and/or hardware if applicable. The project report can be handed in anytime up till the last day of classes (Apr. 3).