Teaching in academia



Course objectives

The main objectives of this course are:
(a) to learn the Verilog HDL hardware description language,
(b) to use Verilog for the design of synthesizable digital circuits and
(c) to familiarize students with simulation environments for digital circuits/systems specified in the Verilog HDL.

Course contents

  1. Introduction to the Verilog HDL hardware description language.

  2. Sequential and concurrent descriptions.

  3. Advanced features of Verilog HDL (UDPs, transistor-level modeling).

  4. Description of parameterized designs.

  5. Coding guidelines for logic synthesis.

  6. Testbenches and simulation-based circuit behavior validation.

  7. Finite-state machines.

  8. Non-programmable processors and the finite-state machine with datapath (FSMD) model of computation.

  9. Parameterized designs.

  10. Describing programmable processors in Verilog HDL.

  11. Advanced design techniques.



Course agenda (pdf)

Suggested bibliography on Verilog HDL (pdf)

Lecture notes and corresponding code packs





  • P1: Processor for graph manipulation (pdf) [Also as P41]

  • P2: Integer square root approximation (pdf)

  • P3: Programmable cellular automaton (pdf)

  • P4: Spiral address generator (pdf)

  • P5: Design of a stack (pdf) [Without swap operation]

  • P6: Population count (pdf) [Also as P42]

  • P7: Conversions between the single and half floating-point formats (pdf) [Also as P64]

  • P8: Taylor expansion calculator (pdf)

  • P9: Programmable divider by integer constant (pdf)

  • P10: Turtle graphics processor (pdf)

  • P11: Farey sequence generator (pdf)

  • P12: 2D Euclidean distance approximation (pdf) [Also as P102]

  • P13: Coins change calculator (pdf) [Simplified as P112]

  • P14: Simple lossless image compressor (pdf)

  • P15: Interval arithmetic unit (pdf) [Simplified as P35] [Simplified version also as P110]

  • P16: Polynomial expression calculator via Horner scheme (pdf) [Simplified as P132]

  • P17: Fibonacci sequence generator (pdf) [Also as P44] [Simplified as P117]

  • P18: Nested loops algorithm implementation (pdf)

  • P19: Binary logarithm computation (pdf) [Also as P43]

  • P20: Recursive equation computation (pdf)

  • P21: Row-prime address generator (pdf)

  • P22: Zig-zag address generator (pdf)

  • P23: Hailstone sequence generator (pdf)

  • P24: Perfect number detection (pdf) [Also as P50] [Also as P113]

  • P25: Day of week calculation (pdf) [Simplified as P104]

  • P26: Delta encoder/decoder (pdf) [P32: Encoder only version] [P36: Decoder only version]

  • P27: High-performance ALU (pdf) [Also as P45]

  • P28: Automatic soccer coach (pdf)

  • P29: Queue with swap operation (pdf) [Also as P47]

  • P30: Fixed-point square root computation (pdf) [also as P130]

  • P31: XORshift pseudo-random number generator (pdf) [Also as P131]

  • P33: Clipping data filter (pdf)

  • P34: McCarthy's function (pdf)

  • P38: 1D smoothing filter (pdf)

  • P39: 1D maximum filter (pdf) [Also as P134]

  • P40: 1D minimum filter (pdf)

  • P46: Snake-order address generator (pdf)

  • P48: Base-k integer logarithm computation (pdf) [Also as P116]

  • P49: Polynomial computation using Horner's scheme (pdf)

  • P51: Park-Miller pseudo-random number generator (pdf)

  • P52: Palindrome word detection (pdf) [Also as P126]

  • P53: Rational arithmetic ALU (pdf) [Also as P109]

  • P54: Bubble-sort (pdf)

  • P55: Linear search in an 1D array (pdf) [Also as P123]

  • P56: Powering unit (pdf)

  • P57: Binary search in an 1D array (pdf) [Also as P128]

  • P58: Compression using the bit-zip algorithm (pdf) [Also as P108]

  • P59: Decompression using the bit-unzip algorithm (pdf) [Also as P111

  • P60: Pythagorean triples detector (pdf) [Also as P101]

  • P61: Simple encryption approach (pdf)

  • P62: Inverse Gray code (pdf)

  • P63: Population count for sparse words (pdf) [Also as P115]

  • P65: Non-linear equation solver (pdf)

  • P66: Power computation with repeated squarings (pdf) [Also as P119]

  • P67: 2nd order polynomial equation solver (pdf) [Also as P127]

  • P68: Blue code generator (pdf) [Also as P120]

  • P69: 1D median filter (pdf)

  • P70-P100 have not been assigned to any students.

  • P103: Euclidean distance approximation used in the Doom game engine (pdf)

  • P105: Integer square root approximation [simplified requirements] (pdf)

  • P106: Bit extraction circuit (pdf)

  • P107: Bit insertion circuit (pdf)

  • P114: Integer square root approximation using division (pdf)

  • P118: Prime number sieve (of Eratosthenes) (pdf)

  • P121: Accurate absolute value calculation (pdf)

  • P122: Multiplicative inverse calculation (pdf)

  • P124: Multiplicative inverse calculation [version 2] (pdf)

  • P125: Non-linear equation solver [simplified requirements] (pdf)

  • P129: Integer square root approximation using division [version 2] (pdf)

  • P133: Integer square root approximation using multiplication (pdf)

  • P135: Iterative multiplier (pdf)

  • P136: Binary word range computation (pdf)

  • P137: Diophantine equation solver (pdf)

  • P138: Fibonacci sequence n-th order term (pdf)

  • P139: Abacus method for calculating the square root (pdf)

  • P140: Integer cubic root approximation (pdf)

  • P141: Euler problem 1: Sum the numbers divisible by 3 or 5 (pdf)



Past exams
  • Spring 2010 exams (pdf)

  • Fall 2010 exams (pdf)

  • Spring 2011 exams (pdf)

  • Fall 2011 exams (pdf)

  • Spring 2012 exams (pdf)

  • Fall 2012 exams (pdf)

  • Winter 2013 exams (pdf)



Updated by
Nikolaos Kavvadias on February 17, 2014