It is a great pleasure to write a preface to this book. In my view, the content is unique in that it blends traditional teaching approaches with the use of mathematics and a mainstream Hardware Design Language (HDL) as formalisms to describe key concepts. The book keeps the "machine" separate from the "application" by strictly following a bottom-up approach: it starts with transistors and logic gates and only introduces assembly language programs once their execution by a processor is clearly de ned. Using a HDL, Verilog in this case, rather than static circuit diagrams is a big deviation from traditional books on computer architecture. Static circuit diagrams cannot be explored in a hands-on way like the corresponding Verilog model can. In order to understand why I consider this shift so important, one must consider how computer architecture, a subject that has been studied for more than 50 years, has evolved. In the pioneering days computers were constructed by hand. An entire computer could (just about) be described by drawing a circuit diagram. Initially, such d- grams consisted mostly of analogue components before later moving toward d- ital logic gates. The advent of digital electronics led to more complex cells, such as half-adders, ip- ops, and decoders being recognised as useful building blocks.
This book blends traditional teaching approaches with the use of mathematics, together with the use of a hardware description language and a concrete processor as vehicles for "hands-on" modelling and experimenting with digital logic and processor design. This unique approach encourages readers to derive their own conclusions via experimentation, enabling them to discover for themselves the fundamental and exciting topics of computer architecture. Features: includes a wide-ranging introductory chapter; outlines basic methods for evaluating processors; investigates advanced topics in processor design; presents a detailed description of a development tool-chain; provides a stand-alone tutorial on using SPIM; focuses on aspects of compilers which are closely tied to the processor; examines the concept of efficient programming; concludes every chapter with a set of example problems. This practical, reader-friendly textbook has been written with undergraduates in mind, and is suitable for self-study.