This document discusses embedded systems design and hardware-software codesign. It describes why codesign is important to reduce time to market, achieve better design, and explore alternative designs while meeting constraints. Various codesign approaches are presented, including using bus functional models, instruction set simulators, and carbon models in simulation tools. The document focuses on the Proteus VSM tool for embedded systems design, describing its microcontroller and peripheral models, visual firmware design, and example applications. References for further information are provided at the end.