Digital Design and Computer Architecture

David Money Harris, Sarah L. Harris

Mentioned 4

Designed for courses that combine digital logic design with computer organization/architecture or that teach these subjects as a two-course sequence, this text covers the fundamentals and then introduces Hardware Description Languages (HDLs).

More on

Mentioned in questions and answers.

Can anyone recommend a good book for learning VHDL? Or failing that, any good resource?

I'm not sure what your background or needs are, but Digital Design and Computer Architecture, by David Harris and Sarah Harris, was a very useful introduction for me. It's not VHDL specific (Verilog and VHDL examples are presented side by side) or even HDL-heavy – as the title would suggest, it's more of an introduction to digital design in general. But for me it has been a great approach, presenting the code along with a grounding in its application and theoretical context.

I like the book called "Circuit Design with VHDL", from Volnei A. Pedroni. It focuses on synthesizable VHDL, that is what you will need to code for real chips, not only for simulation.

I have to create a short program in C that manipulates strings, but I always run into some weird pointer errors. While K&R is a great reference on the language, and I often look at it when I am puzzled it already assumes you are an adequate programmer.

The lecturer that teaches us programming said that good programmers make nice diagrams on these stuff but I have no idea how to do it. Can you recommend a good book or lectures on this?

Thanks, I will appreciate every answer I get.

The typical memory model for C is that memory is a set of boxes; each box is 1 byte wide. Each box has an address in hexadecimal. A pointer is a variable that has an address in it.

Regarding books/lectures, you're looking for a basic computer organization and architecture book.

I've used these 3 books; I order them by "decreasing understandability". The classic is the last one by Patterson and Hennessy, but I find it the least readable. YMMV.

I want a couple good books that cover the subject of logic design, making computer circuits. There seems to be a lot of expensive books on logic design but it is unclear which ones are good.

IMO, Bebop to the Boolean Boogie is quite good -- as you might guess from the name, its tone is much lighter and more readable than most. Nonetheless, it covers the subject quite well. Though it's specific to Verilog, Thomas and Moorby's The Verilog Hardware Description Language is a classic. It's much more 'business-like' than BBB, but still written very clearly. Being devoted to a specific language isn't all that much of a shortcoming either, given Verilog's market share -- unless, of course, you're one of the (admittedly sizable) minority who will be using VHDL or something else.

For starters, the one I recommend is Fundamentals of Logic Design by Dr. Charles Roth. It's what we use as the curriculum here at the University of Texas in a self-paced course.

Table of contents:

  • Introduction, Number Systems and Conversion
  • Boolean Algebra (2 chapters)
  • Algebraic Simplification
  • Word Problems, Minterm and Maxterm Expansions
  • Karnaugh Maps
  • Quine-McCluskey Method
  • Multi-level Gate Networks, NAND and NOR Gates
  • Multiple-Output Networks, Multiplexers, Decoders, Read-Only Memories, and Programmable Logic Arrays
  • Combinatorial Network Design
  • Review of Combinational Networks
  • Flip-Flops
  • Counters and Similar Sequential Networks
  • Analysis of Clocked Sequential Networks
  • Derivation of State Tables
  • Reduction of State tables, State Assignment
  • Sequential Network Design
  • Iterative Networks
  • MSI Integrated Circuits in Sequential Network Design
  • Networks for Addition and Subtraction
  • Networks for Arithmetic Operations
  • State Machine Design with SM Charts
  • Analysis of Asynchronous Sequential Networks
  • Derivation and Reduction of Primitive Flow Tables
  • State Assignment and Realization of Flow Tables
  • Hazards
  • Asynchronous Sequential Network Design
  • Review of Synchronous Sequential Network Design

Once you get through this, all you'll need to learn is Verilog and get some FPGA design tools. ^_^

Digital Design and Computer Organization by Harris and Harris is a good book, one of the better I've looked at.

It has example VHDL & Verilog code for a CPU and RAM, as well as good explanations.

Mind you, this is a lower-division book - it's not a upper division or graduate or practitioner's book.

I am a self-taught embedded developer. I mostly use AVRs programmed in C and ASM, but I have dabbled with other systems. I am looking to move onto more complex devices like CPLDs and FPGAs, but I have no idea where to start. So my one and a half questions are:

  1. Do you prefer VHDL or Verilog and why?
  2. What is a good way for one with no prior experience in HDLs get started in learning such a beast?

I was in the same boat as you are now a semester ago. My preferred book was this one, since it talked about FPGAs by reviewing digital logic. It also shows side-by-side comparisons of VHDL and Verilog code so that, instead of choosing one that people may push you to, you can learn the one that you like stylistically.

As for an FPGA itself, use Xilinx's ISE webpack to do your programming (it's free), and start off with FPGAs like the Basys2 FPGA board. It's a very small FPGA that should get you started for a small price, but has the added advantage that you learn resource and memory management very early. You can use Digilent's Adept (also free) to make life easy in uploading your "compiled" code to the board.

Good luck!

One additional thing to think about is whether you should start by learning an HDL, or by learning boolean logic, Karnaugh maps, DeMorgan's theorem, gates, implementing arithmetic in gates, etc. It's easy to write non-synthesizable HDL if you don't have an accurate mental model of what the underlying hardware will look like.

This book is the Verilog version of the one I used in undergrad, and it did a pretty good job in my opinion. It starts you out with the material mentioned above, as well as some basic, basic info on the transistor-level implementation of gates, then introduces you to an HDL, and has you build progressively more complex structural and behavioral hardware blocks. Yes, I know it's ungodly expensive, as are most college textbooks, but this is one of those things for which the information I've been able to find online, at least, has been woefully inadequate.

Once you're ready to choose an HDL, I heartily recommend Verilog (having learned VHDL first). Yes, VHDL was once much more feature-rich than Verilog, but later revisions of the language (Verilog 2001, Verilog 2005, SystemVerilog, etc..) have cherry-picked most of the interesting features, and there is far more robust toolchain support for Verilog and its variant these days, in addition to it being the dominant language in use in the US (in my experience, VHDL is only used here when dealing with extreme legacy blocks, and in academic contexts, partially due to the tools support mentioned previously). Finally, once you've learned the HDL, you have a hardware verification language (HVL) in SystemVerilog with strict-superset syntax, saving you a good bit of the learning curve. Not so for VHDL, to my knowledge.