III.4. Un exemple d'environnement orienté
composants pour la conception d'architectures numériques :
Dans ce paragraphe, nous présentons une étude
qui utilise les techniques orientées objets et l'approche par composant
pour concevoir et simuler des architectures numériques. Il s'agit
là d'un exemple d'environnement de modélisation et
d'évaluation de performance d'architecture : SEP (Simulation et
Evaluation de Performance). Initialement SEP a été
étudié pour répondre à des besoins d'industriels
qui souhaitaient pouvoir réutiliser leurs modèles existants et
les enrichir afin qu'ils réalisent les nouvelles fonctions. Les langages
objets ont été choisis dans SEP afin d'enrichir les
modèles bien conçus en utilisant les mécanismes
d'héritage et de composition. Les composants pour leur part, permettent
d'encapsuler par une interface de communication une ou plusieurs
fonctionnalités. Ils communiquent par l'intermédiaire de
connecteurs qui ont l'avantage indiscutable sur les objets de faire
apparaître sur un pied d'égalité l'émetteur et le
récepteur. De ce point de vue, le composant est un modèle mieux
adapté que les objets pour représenter cette
caractéristique des échanges dans le matériel. Ces
approches doivent être combinées et adaptées aux outils et
modèles existants pour la conception de circuits.
Les langages de description du matériel (VHDL ou
Verilog) sont orientés composants. Ils permettent la description de
l'interface de communication ou entité, ainsi que de plusieurs
implémentations différentes (composant) et enfin de la
configuration. Ils manquent néanmoins de mécanismes
d'enrichissement des composants existants. SEP se base donc sur deux approches
pour la modélisation et la simulation d'architecture numérique
à savoir :
Chapitre III conception matériel
- utiliser des langages orientés objets tels que Java
ou C++ pour décrire les fonctions (services) élémentaires
réalisés par les architectures matérielles. Ces
modèles peuvent alors être enrichis et adaptés à de
nouvelles spécifications ;
- utiliser un langage de description d'architecture pour
décrire les entités elles-mêmes et les mécanismes de
communication et de synchronisation. Cette description matérielle
utilise les modèles objets définis précédemment
pour réaliser le comportement. Alors qu'avec des langages tels que VHDL
et Verilog, le comportement est indissociable de l'interface du composant, dans
l'outil SEP, ce comportement est délégué par un
mécanisme d'interposition vers le monde des objets. Cela permet d'avoir
une approche 'top-down' dans la conception et ainsi de vérifier les
aspects fonctionnels avant de vérifier les aspects temporels de VHDL ou
Verilog.
Le composant SEP L'entité de base de
modélisation dans SEP est le composant. On distingue deux
catégories de composants :
- les composants "élémentaires"
représentés par la classe "Active Component" et dont le
comportement est modélisé par un ensemble de services. Le
comportement des composants est complètement autonome, il ne
dépend pas de la configuration dans laquelle ils sont placés ce
qui assure la modularité et la réutilisation ;
- les composants "Material Container" appelés aussi
modules dont le comportement est représenté par une description
structurelle, c'est-à-dire par composition d'autres composants.
Interface des composants SEP Les composants
communiquent avec l'extérieur au travers de leur interface. Cette
interface est constituée d'un ensemble de ports munis d'une
sensibilité qui définit les conditions sous lesquelles les
composants réagissent. Cette notion de sensibilité est
caractéristique du matériel.
Les ports sont reliés entre eux par des signaux. Ils
communiquent avec le composant dont ils dépendent en utilisant le ou les
"event Listener" qui leur est associés. Les composants utilisent les
ports pour échanger des données à travers des signaux de
communication. Une donnée émise sur un port de sortie PS d'un
composant est diffusée vers le ou les ports connectés au port PS
par un signal. Cette autonomie rend possible la définition de nouvelles
configurations qui modifient l'interconnexion des composants. En effet, une
connexion directe entre deux composants, c'est-àdire un composant
invoquant explicitement un service d'un autre composant sans connecteur, ne
permet ni une modification aisée de la configuration, ni une
réutilisation aisée des composants. La modélisation avec
des composants et des connecteurs permet plus de souplesse que la simple
utilisation d'objets.
Les services d'un composant La description du
comportement d'un composant (Active Component) commence par la
définition des services fournis par le composant. Ces services sont
décrits par les méthodes d'une classe appelée "Service
Provider" associée à ce composant. Ensuite, chaque service est
encapsulé dans un composant SEP afin de réaliser un comportement.
En effet, le service constitue seulement une partie du comportement. Il est
exécuté en concurrence avec d'autres services du même
composant ou d'autres composants. Il existe deux catégories
élémentaires de composant dans SEP. Les composants combinatoires
dont les sorties ne dépendent que des entrées : "Level
Component", et les composants séquentiels qui peuvent être
modélisés par des machines à
états et dont les sorties dépendent de
l'état courant du composant et de ses entrées (modèle de
Mealy): "Edge Component". L'état suivant est calculé en fonction
de l'état courant et des entrées.
La composition de composants Dans SEP, il est
possible de construire un comportement complexe par composition du comportement
de composants plus simples. La définition d'une configuration de
composants et de connecteurs permet de construire ce comportement. Les
connecteurs élémentaires de SEP sont les signaux de
contrôle et les bus de données. L'introduction de la notion de
module permet de réutiliser des parties de modèles existants et
permet une approche incrémentale. La notion de service est donc aussi
présente au niveau des modules, c'est pourquoi un mécanisme qui
la fait apparaître explicitement a été mis en oeuvre. Ce
mécanisme permet la définition de services dans un module,
améliore la lisibilité et donc la possibilité de
réutilisation.
Héritage de comportements et de services
Que la description du comportement des composants soit logicielle ou
structurelle, tous les composants sont potentiellement constitués d'un
ensemble de services.
On définit une relation d'héritage du
comportement d'un composant fils vers son composant père comme d'une
part, l'héritage par le fils de l'interface du composant père et
d'autre part, l'héritage des services définis par le père.
C'est-à-dire que le composant fils possède dans son interface au
minimum les mêmes ports que son père ; bien évidemment, il
peut en déclarer de nouveaux ; de plus, il hérite des services
définis par son père et peut les redéfinir. Une
deuxième notion d'héritage a été définie,
c'est l'héritage des services d'un composant fils par son composant
père, c'est-à-dire par le module auquel il appartient.
Les services du fils peuvent être directement
invoqués sur le père comme s'il les avait définis
lui-même.
|