
"This book introduces the concepts and methodologies employed in designing a system-on-chip (SoC) based around a microprocessor core and in designing the microprocessor core itself. The principles of microprocessor design are made concrete by extensive illustrations based upon the ARM.
There is a surprising paucity of material on SoC design which are comprehensive and complete. Application-specific tailored features, Cost, Performance, Area, Power etc. all go into SoC design and yet there does not seem to be a comprehensive resource bringing everything together. Even wikipedia isn't detailed enough - https://en.wikipedia.org/wiki/System_on_a_chip
I know of only two decent books viz. Computer System Design: System-on-Chip by Michael Flynn and Wayne Luk (this is pretty good) and the older ARM System-on-Chip Architecture by Steve Furber.
http://studentnet.cs.manchester.ac.uk/ugt/COMP15111/syllabus... http://studentnet.cs.manchester.ac.uk/ugt/COMP22712/syllabus...
Despite its age, ARM System-on-Chip Architecture (Steve Furber) is still a good introduction to the processor and assembly (I'm re-reading it at the moment). ARM Assembly Language - an Introduction (J.R. Gibson) is worth reading if you want to learn ARM assembly.
The materials page for COMP22712 also has some interesting resources, including the lab manuals and a small ARM assembler written in C (source is also on GitHub: https://github.com/uomcs/aasm). Unfortunately COMP15111 is now hosted on Blackboard so you can only get at the materials if you're a current student enrolled on the course.
(I've been an undergrad, postgrad and staff in CS at Manchester, so I'm familiar with the courses - other universities may have similar resources with fewer access restrictions).
Dr. Dorfan pointed out that analog wasn't required for a EE degree. He said "I can see how they can design digital chips, but I can't understand how they get them to actually work."
Consider problems like capacitive coupling, and hot spots due to frequently-used parts of your digital circuit being close together.
Learn the assembly code of at least one instruction set architecture. Pointers will make a lot more sense then. These days I would advise that you learn ARM; Steve Furber's ARM System-on-Chip Architecture is quite good.
Intel assembly may have more widespread application however it is far harder to make sense of than ARM.
* TCP/IP Illiustrated (Volumes 1,2 & 3) - W. Richard Stephens
* The Web Application Hacker's Handbook - Stuttard, Pinto et al
* The Shellcoder's Handbook - Kozoil, Aitel et al
* The Cuckoo's Egg - Clifford Stoll
* Neuromancer - William Gibson
* ARM System-on-chip Architecture - Stephen B. Furber
* Operating Systems Design & Implementation - Tanenbaum
* The Design and Implementation of the FreeBSD Operating System - McKusick, Neville-Neil
These are just a few, and I'm sure there's plenty of others, even better ones. But to truly round yourself out you need to know more than programming a few languages - you need to know the low-level end of things and the high-level view of the world.
ARM System-on-Chip Architecture (2nd Edition) By Steve Furber (the guy who designed the bloody chip!) http://www.amazon.com/ARM-System-Chip-Architecture-2nd/dp/02...
ARM Architecture Reference Manual (2nd Edition) By David Seal http://www.amazon.com/ARM-Architecture-Reference-Manual-2nd/...
The architecture has come along quite a bit since those days so if you'd like the most up to date release you need to look for the ARM v7AR Architecture Reference Manual which you can get (with a click-through) here: http://infocenter.arm.com/help/topic/com.arm.doc.ddi0406b/in...
This will cover you up to the latest cores like Cortex-A8 inside the Beagleboard and Cortex-A9. Enjoy!