Part I. Introduction Brief Overview of Quantum Computing Basics of Quantum Mechanics and Mathematical/CS Background (2 lectures) Classical vs Quantum: positive and negative results; sample algorithms Basic examples of Quantum Circuits: adders, etc An overview of implementation technologies and implied constraints Part II. Classical circuits Brute-force Synthesis of Optimal Classical Circuits; Basic Heuristics BDD-based Synthesis with Implicit representations Basic ideas in circuit testing, ATPG, D-algorithm, redundancies, etc Don't cares in classical circuits, SPFDs and related Spectral ideas in circuit synthesis Fault-tolerance, ECC.... Reversible circuits Part III. Quantum Circuits The pivotal role of the Fourier transform in quantum computing Circuits for the Quantum Fourier transform Gate Libraries for Quantum Circuits Straighforward synthesis of quantum circuits (following Cybenko) Heuristics for minimization of quantum circuits Quantum Measurement and don't cares of quantum circuits Errors in quantum circuits, fault-tolerance, ECC Part IV. Simulation of quantum circuits/algorithms Notations for quantum circuits and algorithms Basic challenges, best-case vs worst-case FFT-based and BDD-based simulation Part V. Research topics explored via student term projects. Each project will include a written report, a 30-min presentation as well as the design of software or logic circuits.