Monday, March 25, 2013

Hardware and software, an uneasy partnership

I guess that fundamentally I am a lazy hardware design engineer. I say lazy because I found many years ago that programming on top of someone else's hardware was much easier in some respects than having to design the hardware before you began the task of programming.

Many of my early works were embedded processor driven with no "operating system" to speak of, usually a Z80 or 8051 processor running code from the first available memory location and all under my control.

Modifying a hardware design is very hard and requires a different timescale of lead time than that of software yet unfortunately, the software will be what sells the job to the marketing people so its really important to get that combination right. A hardware design engineer will need to get all the aspects of the design pretty much correct before any sort of manufacture is done, a software engineer can play with, modify or change their design more or less at will within a certain number of constraints.

I have recently gone back to the very fundamental aspect of hardware design and I am creating a system that has no underlying operating system, is heavily dependent on hardware that performs tasks that might otherwise be seen to be software tasks and the hardware is built from scratch with the most important components being the equations that I am using to define the parameters of the hardware. This is a really difficult departure for another part of the team who will need to design the software for the job.

The trick to making the two work harmoniously is in designing a high-level protocol that will satisfy all of the requirements of communication early on in the process and then creating mock components that can be used to develop the software before the hardware is fully finished.


No comments: