This is the sort of engineering book that one initially might deem inessential for practice; however, with further consideration, one might realize its value as a handy reference. It is encyclopedic in its depth of presentation, and, though a bit too abstract for practicing engineers, it is close to perfection for academic courses.
Readers should have some knowledge of combinational logic and Boolean expression manipulation. However, chapter 1 provides an exceptionally good refresher for these topics. Chapter 2 introduces sequential design formalism, and the style is similar to the one more commonly found in automata theory or compiler books. This chapter is the basis for the material that follows, and is essential reading for the rest of the book.
Chapters 3 and 4 are core chapters on synchronous state machine design. Chapter 3 focuses on using classical combinational logic elements in the combinational portion of state machines. Chapter 4 presents methods for designing with multiplexers and decoders implemented in combinational logic, as well as sections on implementing state automata in programmable logic or in machine-level software. Of particular value are the deglitching methodologies introduced and transformations between Moore and Mealy automata. Certain other discussions, such as conversion of iterative combinational networks into sequential state machines and error detection in state automata, are not commonly found in the mainstream digital design literature.
The really unique feature of the book is the set of three chapters (5, 6, and 7) that deal with asynchronous sequential machine design. To the best of my knowledge, such a presentation doesn’t exist anywhere else in book form. Chapter 5 covers the analysis of asynchronous machines, with emphasis on hazards, races, and oscillations. Chapter 6 is quite detailed in its presentation of methods for synthesizing asynchronous machines, and provides many thorough examples. Chapter 7 gives an account of a particular type of asynchronous machine—a pulse mode asynchronous machine—where instead of steady levels, the information representation of the working alphabet is, in the author’s words, by pulses. A thorough explanation of the analysis and synthesis procedures for such machines is provided.
It is interesting to note that, despite its thoroughness, the part of the book devoted to asynchronous design doesn’t mention micropipelines, which are a well-known and widely taught topic in advanced digital design courses. Such an omission, which may be the author’s personal viewpoint, in no manner affects the quality of this truly unique book.