This textbook provides semester-length coverage of computer architecture and design, providing a strong foundation for students to understand modern computer system architecture and to apply these insights and principles to future computer designs. It is based on the authors decades of industrial experience with computer architecture and design, as well as with teaching students focused on pursuing careers in computer engineering. Unlike a number of existing textbooks for this course, this one focuses not only on CPU architecture, but also covers in great detail in system buses, peripherals and memories. This book teaches every element in a computing system in two steps. First, it introduces the functionality of each topic (and subtopics) and then goes into from-scratch design of a particular digital block from its architectural specifications using timing diagrams. The author describes how the data-path of a certain digital block is generated using timing diagrams, a method which most textbooks do not cover, but is valuable in actual practice. In the end, the user is ready to use both the design methodology and the basic computing building blocks presented in the book to be able to produce industrial-strength designs.