Model-Driven Multi-core Embedded Software Design