CIS*6090
Hardware/Software Co-design of Embedded Systems [0.50]

Course Outline for Winter 2009

INSTRUCTOR

COURSE LINKS

Bill Gardner

 

 

Class Schedule

office

Reynolds 105

 

 

 

phone

824-4120 x52696

 

 

 

e-mail

wgardner@cis.uoguelph.ca

 

 

 

web

www.cis.uoguelph.ca/~wgardner

 

 

 

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.

Calendar course description

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.

Prerequisites

CIS*3110, CIS*3120, and CIS*3750, or equivalent courses covering these topics:

  • operating systems and computer architecture (concurrency, scheduling, multithreading, interrupts, system bus, memory, peripheral devices, assembly language)
  • digital systems (digital logic, hardware description language, finite state machines, logic synthesis, design flow)
  • software engineering (object-oriented analysis and design, UML, software lifecycle, C++ programming).
  • Overview

    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.

    Course topics

  • 1. Embedded systems
  • economic factors
  • hardware components: integrated circuits, peripherals, memories, bus protocols
  • software components: microprocessors and microcontrollers, operating systems
  • prototyping platforms (field-programmable devices)
  • 2. System modeling techniques
  • state machines, concurrent processes, dataflow
  • 3. Hardware/software codesign, approaches and techniques
  • 4. CAD (computer aided design) tool support
  • IBM Rational Rose RealTime (for UML and Statecharts)
  • Xilinx ISE (for schematic capture, hardware description language, and finite state machines)
  • Xilinx Embedded Design Kit (for system-on-chip hosted on FPGA)
  • SystemC (for hardware/software codesign and cosimulation)
  • Handel-C (for hardware synthesis from software-like algorithmic description)
  • Textbooks

    Required text

    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.

    Determination of final grade

    Assignments & labs

    30%

    Quizzes

    10%

    Term project

    35%

    Final exam

    25%

    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).

    Auditors

    In order to have this course recorded on their transcripts, auditors must attend at least 75% of classes (i.e., miss no more than 6 classes or 9 hours). There are no other requirements.