As the world of engineering advances, the complexity demands of both hardware and software grow at a phenomenal rate. The trade-offs between hardware and software within a system are at the forefront of this complexity and demand attention into themselves. Hardware software codesign is the study of how to make these tradeoffs and meet system constraints.