This design methodology exploits the synergy between hardware and software in the search for optimized solutions that use the best in the current eco-system, the availability of hardware components and software infrastructure. It is a methodology of piecing together modules on hardware and software to develop an optimized solution. This also involves integrating the design life cycles of hardware and software, in such a manner that they complement each other. As we will understand further this methodology offers high design flexibility and maneuverability.
By nature hardware software co-design is concurrent; this allows system designers to optimize individual design approaches to accommodate and realign as required. Most importantly, this allows early detection of errors in system architecture and course correction. Often hardware and software modules are developed in a staggered fashion to enable or unblock each other. For example, to make sure that the software modules are ready by the time hardware is manufactured, software needs to be enabled with an early development platform. Today silicon vendors provide many reference designs that can be used for enabling early software development. Finally, hardware software co-design is an integrated design approach which means at every stage the design artifacts are vetted against the other approach to look for synergy, incompatibility and design outcome as against the optimized solution offering.