Hardware and software don’t always co-exist peacefully. All too often, when hardware and software engineers get together, it’s a bit like having too many cooks in the kitchen. They come from different backgrounds, often have different work styles and unfortunately, the things that make a hardware engineers work easier often make life more difficult for the software side of things and vice versa.
Though the idea of hardware and software co-design has been around for many years, it hasn’t been truly implemented often. Yet as multicore devices have become more and more complicated over the years, it is now a necessity.
As part of that complexity, multicore devices are smaller than ever before, containing more transistors and running faster with each generation, enabling them to support very advanced, integrated systems. The interface between software and hardware is critical in these highly integrated systems and requires the design team to take a systems-level approach, jointly constructing both software and hardware simultaneously. When done correctly, multicore devices are easier to use. Software can be more easily added and the hardware is easier to optimize to new uses. It becomes more intuitive to program, as the complexity is dealt with as part of the design process.
Hardware and software co-design isn’t easy. It requires the two groups to work closely together, in contrast to their traditionally segmented workflow. However, when done properly, the end result is an easier to use, integrated and highly programmable multicore device that is also competitive in price, performance, and capability.