Simulation is an engineering method used when it is inconvenient, expensive, impractical, or plain impossible to try things in reality. It reduces the cost of experiments while increasing insight and control. It makes systems that do not yet exist accessible. It cuts lead times and improves product quality. This class gives an overview of how simulation (and virtualization) can be used to help embedded software development, covering simulation of processors, boards, networks, systems, user interfaces, and the environment.