Recent years have seen an incredible increase in the achievable densities,
speeds, and complexities of integrated circuits. The key to designing such
complex chips is the use of complex computer-aided design tools. In this
course, we will examine some of the optimization algorithms behind these CAD
tools, and learn how CAD tools translate a circuit to a working
chip.
We will study each aspect of the design flow including high-level design,
technology dependent and independent optimization, partitioning,
floorplanning and placement, and routing. We will talk about algorithms
that target both custom chips and FPGAs.
Note that this course is NOT about the USE of CAD tools (there are other
courses where you can learn to use the tools). This course is about the
DESIGN of the tools themselves, and the algorithms employed by the tools.
This course will be of interest to three types of students:
Students interested in integrated circuit design. Having a thorough
understanding of how CAD tools work and the algorithms they employ is
key to using these tools effectively.
Students interested in software design. Many of the optimization
algorithms we will talk about (simulated annealing, dynamic programming,
genetic algorithms, etc.) have many applications outside of CAD tool
design. Understanding these algorithms is an essential component of
any software designer's arsenal.
Students interested in persuing research in CAD tool design. This is
an exciting, fast moving area with many research opportunities. This
course will give a good overview of the field, and will identify many
open research problems.
This course will be primarily based on research papers. Each week, one or
two papers will be assigned; we will then discuss these papers the following
week in class. There will be several assignments and a final project. In
each assignment, you will implement one of the algorithms described in
class. The project will be somewhat open-ended; students with a research
bent can tackle an open research problem, others may choose to work on
implementing and evaluating a known algorithm.
Further information and handouts are available
here.