Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

I'm involved in an embedded software project where we also need to specify the target hardware. I come from a mostly software-only background, and would like to learn more about the simultaneous design of software and hardware.

Are there any books/resources/courses out there that you would recommend?

share|improve this question
What type of hardware are you talking about designing with the software? Custom hardware development (as on an FPGA platform)? Or coming up with requirements in which your SW should fit? (e.g. how much RAM do you need, how fast a processor, how many GPIOs? what's the minimal hw that I could buy off the shelf to support my application?) –  Aidan Cully Jun 22 '11 at 1:31
add comment

migrated from stackoverflow.com Mar 20 '11 at 7:50

This question came from our site for professional and enthusiast programmers.

4 Answers

The question needs more details for a thorough answer.

I am guessing part of your design would be on hardware -- have you looked into what options you have there? Typically a FPGA is a cool way to start off: You code your design in a high level language like VHDL and the flow from there on is mostly push-button.

For FPGA its best off to look into the vendor's documentation.

The critical thing is partitioning the design into s/w and h/w components. Remember that h/w will tend to run faster than s/w so you need to have a way to sync up.

Look into Hardware/Software Co-Design: Principles and Practice by Jørgen Staunstrup and Wayne Wolf

share|improve this answer
add comment

CMMI Technical Solution (TS) talks about this is detail. You want to learn CMMI right ?

You need to establish a high-level architecture. No, really.

You need to have someone who understands what hardware does, someone understand what software does to avoid all the problems being shoved into one category or the other. Otherwise you get a block on the diagram best labelled "magic happens here"

You can create a diagram of the architecture, and assign requirements to elements. Then in discussion with a hardware person, requirements move around from software to hardware elements and vice versa.

Each hardware sub-system is usually two boxes: one hardware, and a software layer atop that. The interface between the two should be specified at architecture time. If the top level designers can't imagine it, nobody can ever make it work.

If software people write the diagram, it's often the hardware people get left holding it. Hardware guys are just as bad at leaving software guys holding it. Hardware guys that write firmware sometimes bite off more then they can chew. You can make testing and integration easier by giving the hardware people simpler software-facing interfaces to implement, ( which don't have magical internal states or processing) and get the software people to do the stateful stuff. It's quicker to test the hardware, and easier to simulate in unit test.


share|improve this answer
+1 for this alone: "If software people write the diagram, it's often the hardware people get left holding it. Hardware guys are just as bad at leaving software guys holding it." Having worked in a few embedded shops now, I've seen that pattern over and over again. If I could give +10 for the answer I would. –  JUST MY correct OPINION Jun 22 '11 at 1:53
add comment

Visit open cores, you would find some interesting projects there that are in the hardware software co-design area. Universities have courses/subjects, in the area of Digital IC Design, Verilog and/or VHDL programming, real time computing, etc. These will give you the fundamentals of the subject area. But if you are already in the industry, university might not be such a good option.

share|improve this answer
add comment

This book is expensive but good and understandable.

Digital Design and Computer Architecture by David Harris and Sarah Harris

It explains Boolean Algebra, Logic Gates, Combinatorial Logic, Sequential Logic, Sequential Logic Building Block (FlipFlops, SR Latch and so on) Than it explains VHDL and Verilog. MIPS Assembler and Mirco Architecture. In addition there is a chapter about memory.

Furthermore of course 32 bit floating point numbers, two's complement numbers and all that stuff =)

Have fun with around 600 pages of digital design.

share|improve this answer
Thanks, but that sounds more like a textbook on microcontroller design. I was looking for guidance on how to manage the development of an embedded system, including choice of microcontroller, memory, etc. –  lindelof Mar 20 '11 at 15:53
add comment

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

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