Hardware and software can be co-designed as a single system to obtain high-performance computing solutions that use a minimum of resources such as CPU cycles and memory. Hardware/software co-design is often a complex and time consuming process. Software functionality is typically developed independently from hardware functionality and functional elements are not reused across similar products. Co-design is particularly important in System on-Chip (SoC) development where an entire system consisting of both software and hardware is integrated on a single chip. Developing high-performance computing solutions in the form of SoCs in a repeatable manner is technically possible, but knowing how to apply software concepts in a hardware context and ...