This course teaches the fundamental knowledge of designing a digital system. We will begin by introducing the number systems, Boolean algebra, and the logic gates. After that, we will discuss the simplification techniques for Boolean functions using Karnaugh Map as well as algorithmic procedures. In the second half, we will focus on the design techniques for combinational, sequential, and memory circuits. Finally, we will introduce the more modern design concept using Register-Transfer-Level (RTL) descriptions. Upon completion, the students will know how to realize a given digital system, e.g., a computer's arithmetic logic unit (ALU), into a logic circuit.