5
\$\begingroup\$

I'm looking for an introductory book to CPU / microcontroller /microprocessor design. Any ideas? ARM or x86 are both great. I have a great assembler language book, but I'm looking for something more on the engineering level. Or maybe they're the same? Maybe it doesn't exist, or maybe I need to refine my question but anything would help. Thanks.

\$\endgroup\$
3
  • 2
    \$\begingroup\$ Are you looking for a book on designing CPUs or on using CPUs? \$\endgroup\$
    – kenny
    Apr 25 '11 at 12:18
  • 1
    \$\begingroup\$ Microchip (link) is a company which sells integrated circuits. A microcontroller (link) is a type of microprocessor which adds peripherals like volatile and/or non-volatile memory, general-purpose IO, and other hardware peripherals. I've edited your question because I believe that you intended to use "microcontroller", but please feel free to revert the change if you want to know about the company (though I imagine you'll need a job there to learn details about their processors...) \$\endgroup\$ May 5 '11 at 21:24
  • \$\begingroup\$ Thank you reemrevnivek - microcontroller architecture is definitely on the same topic \$\endgroup\$
    – kalaracey
    May 11 '11 at 22:18
5
\$\begingroup\$

I happen to be working on something like this but am not ready to release any of it yet. (at least not publicly)

I think you need to edit/refine your question though. Taking a general stab at the question. I would start with something simpler than both the ARM and x86, and would avoid x86 all together.

Having an assembler book implies you are a programmer or have some programming skills. I dont know if your question is more from the programming side or digital design side.

If you are coming from the programmer side, I would start by learning assembler for the msp430, and arm or thumb (dont mess with x86 just yet, it is not a good architecture), maybe PIC (older pic, not the dspic nor the pic32). Then write a disassembler and/or an instruction set simulator. if it is just a dissassembler choose a non-variable word length instruction set like the ARM or thumb (yes if you think about it you can handle that branch instruction) or the PIC. Eventually write an instruction set simulator, at least enough of one to implement a handful of instructions and a branch, make a loop see it execute. Then go study up on state machines and re-write the simulator using state machines. I have an instruction set simulator, not necessarily, completely, state machine based, but might give you the feel for what I am talking about. search for thumbulator at github. My username is dwelch67 there.

if you are approaching this from an electrical engineer perspective, you might want to look at opencores. The readability and other features of the hdl may be difficult but it is out there to be consumed. verilator and icarus verilog are good verilog simulators. I like verilator more partly because it is so rigid with the verilog parsing and second it is super easy to cross the C/C++ and HDL boundary for writing software to talk to the hardware being simulated, and other reusable type things. There is a tiny one called mcpu or something like that that the whole thing fits on about a page of paper if printed. You really have to wrap your head around how to write a program with only one or two real operations (I think it only has a NOR). If you are an electrical engineer and need a crash course in digital, the transistors are always saturated, basically they are used as electrically controlled switches. Take a pair of them with some wiring and other components and you can make AND, and OR gates, add an inverting transistor and make a NOT gate allowing NAND and NOR. You will want to learn about state machines if you dont already know.

In general you need to understand basic logic AND, OR, NOT, etc. Learn about state machines which work just fine either with software or hardware, the concept is the same. Reset and clocking are actually part of the state machine learning, getting the state machine going and thinking in terms of each pass through the logic/code is a clock cycle in the cpu and you state variables are used on each pass to indicate what to do during that clock cycle, what is the current state, and based on the current state and inputs what is the next state going to be, etc.

\$\endgroup\$
1
  • \$\begingroup\$ Wow. thanks - I appreciate all the info. Definitely coming from a programmer background, but I was interested in the electrical engineering perspective. I had heard that x86 wasn't the best and that it "should" have been replaced a while ago. \$\endgroup\$
    – kalaracey
    May 5 '11 at 1:17
8
\$\begingroup\$

I would suggest Building a Modern Computer from First Principles. As the title suggests, it goes through the process of building a computer from the fundamental logic gates on up. Check out the reviews on amazon here.

The author's website actually has quite a lot of info on it, so you can decide for yourself if it looks like it would meet your needs.

\$\endgroup\$
4
\$\begingroup\$

In the textbook domain, Computer Organization and Design is one of the classics. I'm not sure how well it works for self-study, though.

\$\endgroup\$
1
  • \$\begingroup\$ I used this book in a course where it was the Prof's first time teaching (so it was pretty rough teaching at first). Nonetheless, I found the book exptremely helpful, and unusually understandable. \$\endgroup\$
    – Dan
    Apr 12 '16 at 20:18
2
\$\begingroup\$

For ARM I'd recommend ARM System-on-chip Architecture.

\$\endgroup\$
1
\$\begingroup\$

For ARM architecture I second the Furber book (ARM System-on-chip Architecture), but it might not fit 'introductory'. (We used it as reference in the ARM assembly class, for which it is less suited). For general computer architecture I love the Hennessey / Patterson books. Not exactly 'introductory' either :)

\$\endgroup\$
1
\$\begingroup\$

Try Computer Organization by Carl Hamacher. We used it in our university to study Digital computers and Microprocessor systems

\$\endgroup\$

Not the answer you're looking for? Browse other questions tagged or ask your own question.