Hardwaresoftware Co Design Principles And Practice