Sous-sections
Mots clés : Signal, programmation
synchrone, format commun, DC+, transformation de programme,
Sildex .
Contact : P. Bournai.
Résumé :
Le développement d'un environnement de programmation
Signal, construit à l'Irisa selon des techniques de
conception modulaires, répond à trois objectifs :
- a)
- il nous permet d'étudier des extensions
sémantiques ou algorithmiques du modèle synchrone
;
- b)
- il nous permet de mieux comprendre les
applications et de dégager ainsi des problématiques
nouvelles ;
- c)
- il est diffusé à des fins d'expérimentation et
d'enseignement dans des laboratoires pour lesquels la
version commerciale Sildex ne convient pas.
L'environnement de programmation Signal se compose
d'un compilateur et d'un éditeur graphique orienté
blocs-diagrammes. L'éditeur de Signal permet à
l'utilisateur de construire ses programmes sous forme à la
fois textuelle et graphique. L'existence de cet éditeur est
un vecteur majeur pour la diffusion.
Le compilateur est écrit en C++ et C Ansi. L'éditeur
graphique est écrit en Java (utilisation de la librairie
Swing), C++ et Signal. Ceci permet d'avoir une version
commune de l'environnement Signal dans les mondes Windows
et Unix.
L'environnement de compilation Signal est un outil
interactif de conception d'applications. L'architecture de
l'environnement peut être vue comme un ensemble de services.
Un service peut être ou non appliqué selon l'objectif :
simulation, vérification formelle, compilation séparée,
génération de code distribué, etc. Ces fonctionnalités sont
accessibles au moyen d'options pour le compilateur «batch» et
de manière interactive sous l'éditeur graphique. Le
superviseur de l'environnement est lui-même un programme
Signal.
Ces fonctionnalités s'appliquent également au format
commun de la programmation synchrone
(DC+). Ce format DC+, issu des
travaux des projets européens Synchron et Sacres, permet de
représenter, par delà un langage particulier, la paradigme
«flots de données synchronisés». Il constitue aussi un format
concret, servant de vecteur commun de représentation, pour
des programmes ou des propriétés sur lesquels on souhaite
appliquer des transformations définies dans le cadre du
modèle synchrone.
Un programme Signal/DC+ est représenté de
faÇon interne par un GHDC (graphe hiérarchisé
aux dépendances conditionnées) qui constitue donc la
structure principale de l'environnement.
On peut distinguer :
- un ensemble de traitements qui produisent un graphe
hiérarchisé à partir d'un source Signal ou
DC+ ;
- un ensemble de transformations du graphe hiérarchisé,
transformations qui restituent un graphe hiérarchisé ; ceci
constitue le coeur du compilateur ;
- un ensemble de traitements qui produisent les sources
d'autres outils.
L'ensemble des fonctionnalités pour la production du
GHDC est constitué :
- de l'analyse syntaxique et
contextuelle, qui fournit la représentation interne
d'un programme source, Signal ou DC+, sous
forme d'un arbre de syntaxe abstraite ;
- de la production de graphe, qui
associe à tout programme un graphe caractérisé par un
système d'équations d'horloges. À ce stade, aucune
vérification sur le système d'équations ni sur le graphe
(cycles...) n'est effectuée.
L'ensemble de traitements qui transforment le
graphe hiérarchisé est constitué :
- de la compilation, dont le rÔle
principal est de triangulariser le système d'équations
d'horloges et de détecter la présence de cycles de
dépendance de données. Cette transformation permet la
vérification partielle de la correction du programme
vis-à-vis de ses synchronisations. La synthèse partielle
d'expressions explicites du contrÔle se traduit en une
forêt d'arbres d'horloges, dont les racines sont
éventuellement arguments de contraintes non résolues, et
les noeuds internes des expressions explicites. Cette
représentation sous forme de forêt d'arbres d'horloges
(événements) correspond au format DC+. Pour
ce calcul d'horloges, nous avons développé une
structure hiérarchique de BDD qui s'avère
très performante ; nous utilisons actuellement le package
BDD de Berkeley.
-
des transformations inter-formats
définies dans le cadre du projet Sacres. Ces
transformations, décrites d'abord sur le format
DC+, sur les différents niveaux de
sous-formats ayant été identifiés, s'appliquent sur la
forme interne d'un programme Signal
(GHDC). Les différents sous-formats
caractérisent une forme particulière du
GHDC.
Ainsi, le sous-format bDC+ (pour
«boolean DC+»), dans lequel les horloges,
représentées comme des flots booléens, sont organisées en
une hiérarchie pour laquelle il existe une horloge
maîtresse, est le point d'entrée adéquat pour des outils
s'appuyant sur la hiérarchie des horloges, comme par
exemple des générateurs de code.
Le sous-format sbDC+ (pour
«sequentialized boolean DC+») est le
format d'entrée effectif des générateurs de code. Il est
produit pour les programmes (bDC+) sans
cycles et sans contraintes. Un code sbDC+
est une liste de noeuds ordonnés selon les dépendances
implicites et explicites du programme
Signal-DC+. Ceci permet d'écrire de
nouveaux générateurs de code sans avoir à parcourir le
graphe du programme.
Le sous-format STS (pour «Symbolic
Transition Systems») de bDC+, dans lequel
la hiérarchie des horloges est plate (le statut
présent/absent d'un signal est défini à tout instant par
un booléen), est utilisé en entrée d'outils de
vérification.
Le sous-format DC est un sous-format
mono-horloge de STS.
Les transformations inter-formats, DC+
bDC+,
bDC+
SBDC+,
bDC+
STS et
STS
DC sont
des fonctionnalités de l'environnement. Elles sont
appliquées selon l'objectif de la compilation.
-
de l'application du principe de
substitution du langage. On peut citer :
- la transformation des booléens (opérateur logiques
et relationnels) en événements ; cette opération peut
être utile au calcul d'horloges afin de prouver des
équivalences ;
- la suppression des renommages (équations de
définition triviales) ;
- l'unification des signaux définis par la même
expression ;
- la substitution des signaux référencés au plus
N fois dans le
programme (N étant un
paramètre de compilation), par leur expression de
définition.
-
des opérations de partitionnement de
graphe, qui produisent un graphe constitué de noeuds
représentant eux-mêmes des graphes. On peut citer :
- la séparation contrÔle/calculs, qui consiste à
séparer la partie contrÔle de l'application de la
partie calcul.
- la séparation état/reste, qui consiste à séparer la
partie état du programme du reste de
l'application.
- le calcul de lignées sur entrées, qui consiste à
partitionner un graphe selon le critère qualitatif
suivant : deux noeuds sont éléments de la même
lignée sur entrée si et seulement s'ils sont précédés
du même sous-ensemble d'entrées. Ce partitionnement est
à la base d'un nouveau schéma de génération de code
séquentiel : une lignée peut être exécutée de
manière atomique dès que ses entrées sont
disponibles.
- la répartition de programmes, qui se base sur
l'utilisation de pragmas pour l'affectation
des noeuds à des unités de calcul.
-
des calculs systèmes suivants :
- la synthèse d'interface, dont le but est
l'extraction d'éléments de la représentation interne en
vue de la compilation séparée de programmes Signal.
Cette opération consiste en le calcul de la fermeture
transitive du graphe réduite aux entrées/sorties du
processus compilé.
- le retiming, qui consiste en la réécriture
de toute fonction synchrone construite sur les
expressions de retard afin d'une part, de faire
apparaître des variables d'état booléennes et d'autre
part, de réduire le nombre des variables d'état.
Cet ensemble est constitué :
- de la génération de code
séquentiel, qui passe par un tri topologique du graphe
et qui produit du code Cou c++ ;
- de la restitution de source Signal,
qui fournit à l'utilisateur le GHDC sous la
forme d'un nouveau programme Signal faisant apparaître la
hiérarchie obtenue et les synchronisations calculées. La
restitution du source peut également être effectuée en
partant d'une représentation sous forme d'arbre de syntaxe
abstraite.
- de la restitution de source
DC+, ceci afin de pouvoir se connecter
aux outils disponibles autour du format.
- de l'interfaçage avec des systèmes de
preuves ; actuellement la connexion avec l'outil Sigali
est réalisée dans le but d'étudier les propriétés
dynamiques des programmes (décompilateur
Z/3Z).
- les calculs d'architectures ;
actuellement la connexion avec l'outil Syndex est réalisée.
L'outil Syndex (Y. Sorel, projet Sosso à Rocquencourt)
permet d'effectuer une implantation optimisée sous
contraintes temps réel sur une architecture
multi-processeur.
La version commerciale de Signal est vendue par
TNI sous la forme de l'environnement Sildex.
La version Inria de Signal qui jusqu'à cette année pouvait
être obtenue dans le cadre d'une convention de mise à
disposition gratuite signée pour un an renouvelable sera
bientÔt accessible sur le site Web du projet
EP-ATR en accès libre.
Signal est actuellement mis à disposition dans des écoles
ou universités (Ubo, IUP de Lorient,
université de Nantes Irin, Supelec, Oil & Gas University
of Ploiesti -- Pologne, University of Victoria -- Canada,
University of Michigan -- USA, Mecaprom --
Mexique), et chez certains industriels pour des études ou
évaluations particulières (EDF). Notre
objectif est de fournir à court terme une distribution sous
une licence de type logiciel libre.