Le langage Signal
| |
Signal est construit autour d'un petit nombre d'opérateurs de base qui permettent de spécifier dans un style équationnel les relations entre les signaux. Chaque équation issue d'un programme Signal peut être vue comme un processus élémentaire. Ces processus Signal décrivent donc à la fois les relations fonctionnelles et temporelles entre les signaux. Ils peuvent communiquer, par l'intermédiaire de signaux constituant leurs ports d'entrée et de sortie, avec le monde extérieur ou avec d'autres processus. Enfin, la composition d'un ensemble de processus produit le programme Signal.
Le système d'équations issu de la composition des différents processus est ensuite analysé par le compilateur qui se livre à une vérification de sa consistance et détermine si les contraintes de synchronisation sont vérifiées. Si c'est le cas et si le programme est contraint de façon à calculer une solution unique, alors un code exécutable en C ou en Fortran est produit.
Noyau du langage signal
En Signal, les opérateurs de base définissent des processus élémentaires,
chacun correspondant à une équation :
Y := f{X1, X2, ... , Xn} |
Les expressions fonctionnelles sont monochrones, ce qui signifie que les signaux Y, X1, ..., Xn sont dits synchrones : ils partagent la même horloge. En d'autres termes, pour calculer la valeur de Yt, tous les Xi doivent être disponibles à l'instant t. Pour cette raison, ils sont contraints à avoir la même horloge : celle de Y.
Y := X when C |
Cet opérateur est polychrone : les opérandes et le résultat n'ont pas la même horloge. Le signal Y est présent si et seulement si X et C sont présents au même instant et C a la valeur true. Ainsi, Y est moins fréquent que X et que C à la fois : l'intersection des horloges de X et de C (c'est-à-dire les instants où l'expression peut être évaluée) inclut l'horloge de Y (qui ne comporte que les instants où C s'évalue à true). Quand Y est présent, sa valeur est celle de X.
Z := X default Y |
Cet opérateur est également polychrone : l'horloge de Z est l'union de celles de X et Y, elle est donc plus fréquente que chacune d'elles.
La valeur de Z est celle de X quand il est présent,
sinon celle de Y quand il est présent.
(| P1 | P2 |) |
D'autres opérateurs, dont le rôle est de décrire des comportements dynamiques
et des comportements parallèles, sont disponibles dans le langage Signal : le
retard permet l'accès aux valeurs passées d'un signal et l'opérateur de
composition peut être vu comme un opérateur de composition parallèle.
ZX := X$1 avec l'initialisation ZX init V0 |
Le retard est un opérateur monochrone, c'est-à-dire que X et ZX ont la même horloge.
(| P1 | P2 |) |
Les communications entre ces processus se font de manière instantanée par l'intermédiaire de signaux.