Embedded Code Generation from High-level Heterogeneous Components - Archive ouverte HAL Accéder directement au contenu
Thèse Année : 2006

Embedded Code Generation from High-level Heterogeneous Components

Génération du Code Embarqué a partir de Composants de Haut-niveau Hétérogènes

Christos Sofronis
  • Fonction : Auteur
  • PersonId : 854448

Résumé

The work described in this thesis is done in the context of a long term effort at VERIMAG laboratory to build a complete model based tool-chain for the design and implementation of embedded systems. We follow a layered approach that distinguishes the application level from the architectural/implementation level. The application is described in a high-level language that is independent of implementation details. The application is then mapped to a specified architecture using a number of techniques so that the desired properties of the high level description are preserved.
In this thesis, the application is described in Simulink/Stateflow, a wide-spread modeling language that has become a de-facto standard in many industrial domains, such as automotive. At the architectural level we consider single-processor, multi-tasking software implementations. Multi-tasking means that the application software is divided into a number of processes that are scheduled by a real-time operating system, according to some preemptive scheduling policy, such as static-priority or earliest deadline first.
Between these two layers we add an intermediate representation layer, based on the synchronous language Lustre, developed at VERIMAG for the last 25 years. This intermediate layer permits us to take advantage of a number of tools developed for Lustre, such as simulators, model-checkers, test generators and code generators.
In a first part of the thesis, we study how to translate automatically Simulink/Stateflow models into Lustre. For Simulink this is mostly straightforward, however it still requires sophisticated algorithms for the inference of type and timing information. The translation of Stateflow is much harder for a number of reasons; first Stateflow presents a number of semantically ``unsafe'' features, including non-termination of a synchronous cycle or dependence of semantics on the graphical layout. Second, Stateflow is an automata-based, imperative language, whereas Lustre is a dataflow language. For the first set of problems we propose a number of statically verifiable conditions that define a ``safe'' subset of stateflow. For the second set of problems we propose a set of techniques to encode automata and sequential code into dataflow equations.
In the second part of the thesis, we study the problem of implementing synchronous designs in the single-processor multi-tasking architecture described above. The crucial issue is how to implement inter-task communication so that the semantics of the synchronous design are preserved. Standard implementations, using single buffers protected by semaphores to ensure atomicity, or other, lock-free, protocols proposed in the literature do not preserve the synchronous semantics. We propose a new buffering scheme that preserves the synchronous semantics and is also lock-free. We also show that this scheme is optimal in terms of buffer usage.
Le travail décrit dans cette thèse fait partie d'un effort de recherche au laboratoire VERIMAG pour créer une chaîne d'outils basée sur modèles (model-based) pour la conception et l'implantation des systèmes embarquées. Nous utilisons une approche en trois couches, qui séparent le niveau d'application du niveau implantation/architecture. L'application est décrite dans un langage de haut niveau qui est indépendante des détails d'implantation. L'application est ensuite transférée à l'architecture d'exécution en utilisant des techniques spécifiques pour que les propriétés demandées soient bien préservées.
Dans cette thèse, l'application est décrite en Simulink/Stateflow, un langage de modélisation très répandu dans le milieu de l'industrie, comme celui de l'automobile. Au niveau de l'architecture, nous considérons des implantation sur une plate-forme "mono-processeur" et "multi-tâches". Multi-tâches signifie que l'application est répartie en un nombre des tâches qui sont ordonnées par un système d'exploitation temps-réel (RTOS) en fonction d'une politique d'ordonnancement préemptive comme par exemple la priorité statique (static-priority SP) ou la date-limite la plus proche en priorité (earliest deadline first EDF).
Entre ces deux couches, on rajoute une couche de représentation intermédiaire basée sur le langage de programmation synchrone Lustre, développé à VERIMAG durant les 25 dernières années. Cette représentation intermédiaire permet de profiter des nombreux outils également développés à VERIMAG tels que des simulateurs, des générateurs de tests, des outils de vérification et des générateurs de code.
Dans la première partie de cette thèse, on étudie comment réaliser une traduction automatique de modèle Simulink/Stateflow en modèles Lustre. Coté Simulink, le problème est relativement simple mais nécessite néanmoins l'utilisation d'algorithmes sophistiqués pour inférer correctement les informations de temps et de types (de signaux) avant de générer les variables correspondantes dans le programme Lustre. La traduction de Stateflow est plus difficile à cause d'un certain nombre de raisons ; d'abord Stateflow présent un certain nombre de comportements "non-sûr" tels que la non-terminaison d'un cycle synchrone ou des sémantiques qui dépendent de la disposition graphique des composants sur un modèle. De plus Stateflow est un langage impératif, tandis que Lustre un langage de flots de données. Pour le premier problème nous proposons un ensemble de conditions vérifiables statiquement servant à définir un sous-ensemble "sûr" de Stateflow. Pour le deuxième type de problèmes nous proposons un ensemble de techniques pour encoder des automates et du code séquentiel en équations de flots de données.
Dans la deuxième partie de la thèse, on étudie le problème de l'implantation de programmes synchrones dans l'architecture mono-processeur et multi-tâche décrite plus haut. Ici, l'aspect le plus important est comment implanter les communications entre tâches de manière à ce que la sémantique synchrone du système soit préservée. Des implantations standards, utilisant des buffers de taille un, protégés par des sémaphores pour assurer l'atomicité, ou d'autres protocoles "lock-free" proposés dans la littérature ne préservent pas la sémantique synchrone. Nous proposons un nouveau schéma de buffers, qui préserve la sémantique synchrone tout en étant également "lock-free". Nous montrons de plus que ce schéma est optimal en terme d'utilisation des buffers.
Fichier principal
Vignette du fichier
phd-sofronis.pdf (1.2 Mo) Télécharger le fichier
Loading...

Dates et versions

tel-00329534 , version 1 (12-10-2008)

Identifiants

  • HAL Id : tel-00329534 , version 1

Citer

Christos Sofronis. Embedded Code Generation from High-level Heterogeneous Components. Networking and Internet Architecture [cs.NI]. Université Joseph-Fourier - Grenoble I, 2006. English. ⟨NNT : ⟩. ⟨tel-00329534⟩
1162 Consultations
1037 Téléchargements

Partager

Gmail Facebook X LinkedIn More