Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

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?


migration rejected from Jul 22 '15 at 0:07

This question came from our site for professional and enthusiast programmers. Votes, comments, and answers are locked due to the question being closed here, but it may be eligible for editing and reopening on the site where it originated.

closed as off-topic by durron597, MichaelT, Snowman, Dan Pichelman, gnat Jul 22 '15 at 0:07

This question appears to be off-topic. The users who voted to close gave these specific reasons:

  • "Questions seeking career or education advice are off topic on Programmers. They are only meaningful to the asker and do not generate lasting value for the broader programming community. Furthermore, in most cases, any answer is going to be a subjective opinion that may not take into account all the nuances of a (your) particular circumstance." – durron597, Community, gnat
  • "Questions asking us to recommend a tool, library or favorite off-site resource are off-topic for Programmers as they tend to attract opinionated answers and spam. Instead, describe the problem and what has been done so far to solve it." – Snowman, Dan Pichelman
If this question can be reworded to fit the rules in the help center, please edit the 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

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


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.


+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

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.


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