Software architectural design is a key activity in the software development process. It is especially critical for embedded systems subject to specific non-functional requirements such as performance or reliability. However, the activity of designing an architecture fulfilling a set of requirements still remains largely informal, based on experience with the support of some informal patterns and styles.The purpose of this paper is to explore how to build more systematically architectures for embedded systems using precise models both for the requirements and the architecture. A mapping is proposed between those models together with guidelines on how to inject functional and non-functional requirements at various stages. The process is illustrated and discussed using a cruise control system.