Course Description

As the feature size of semiconductor devices continues to shrink at a staggering rate, the increasing degree of integration allows very complex digital systems to be realized on a single chip. Such systems can either be fabricated in application specific integrated circuits (ASICs) using very large scale integration (VLSI) techniques or implemented in programmable devices, such as field programmable gate arrays (FPGAs).

In both cases, very large designs are partitioned into a hierarchy of logical blocks, and by adhering to a set of standard design rules, the difficulty of integrating these blocks is dramatically reduced. The most popular approach is synchronous design with register transfer level (RTL) logic, but asynchronous designs are also possible. Although digital systems were traditionally designed at the schematic level, the current trend is toward hardware description languages (HDLs) that allow compact description of very complex hardware constructs. The appearance of sophisticated automatic hardware synthesis engines that implement logic directly from HDL have made HDLs the choice for new logic designs. Although the target language of this class is VHDL, other languages such as Verilog and SystemC apply the same design strategies. This course stresses the importance of viewing HDL as a way of describing real hardware, and not just another programming language.

Concepts Covered

  • Hardware Description Languages (HDLs): Types, signals, sequential and concurrent statements, simulation, test benches, synthesis
  • Digital Building Blocks: Combinational logic, Finite state machines, counters, arithmetic circuits, registers, RAM, FIFOs
  • Designing Complex Digital Systems: Hierarchical design, pipelining, asynchronous circuits, RTL design methodology, parameterized design
  • Synchronization Principles: Clock skew, multiple clock domains, metastability

Prerequisite Material

For this class, students should have an exposure to the following concepts:

  • Programming: Experience with a sequential programming language like C or Matlab
  • Number Systems: Number representations, binary numbers, signed and unsigned numbers, integer arithmetic
  • Basic Digital Systems: Basic knowledge about logical operations, boolean algebra, basic ideas on state machines


At the end of the course, you will be assigned a grade based on the following weighting:

Labs 30%
Midterm 35%
Final Exam 35%