You might question why, in a blog that is supposed to be about embedded software, I am considering the selection of an embedded CPU, which is clearly a hardware matter. It would be a fair question, except that, in embedded system design, the development of hardware and software are inextricably entwined, each having an influence on the other.
So, how do software considerations affect the selection of a CPU? …
There is an incredible number of embedded CPUs on the market today, so selecting the right one for a given project is a challenge. Here are some of the more obvious selection criteria:
- Computing power
- Power consumption
- On-chip facilities
- Price and availability
These are largely hardware oriented, except for computing power, because the amount of power needed will depend on the software being run.
There are some other criteria which may seem less obvious:
- Is the software team familiar with the CPU architecture?
- Do they have development tools for it [or are they readily available and good quality?]?
- Are simulation models available?
- Is the chip supported by the chosen operating system? [And any other software IP.]
- Are there low power modes available [critical if needed, but an overhead if not - only the software designers can say]?
This brief review seems to suggest that there are more software oriented factors in the selection of a CPU than hardware criteria. Although I would stop short of suggesting that the software guys should get to choose the device, I do think that a somewhat revised approach might make sense.
As the software development for most embedded systems is a bigger undertaking than the hardware design, it is obvious that work on the code should start first in order to meet time to market. That is easy enough. However, the further the software development has advanced, the more well defined the needs for CPU specification will be. For example, it may turn out that a design might benefit from the CPU having low power modes. However, this may not be apparent until a large amount of software design and analysis of use cases has taken place.
In other words, I am suggesting that the hardware design team hold off from the selection of the CPU until the last possible moment. That will give the software guys a chance to assess how much computing power [and memory] they will need and also what power management capabilities [like low power modes, DVFS etc.] will be needed to meet their design goals.
I have a feeling that this assertion may be controversial, but I would like to hear the arguments against it – email or comment are good.