• Aucun résultat trouvé

Encapsulation des Modules Pour la Cosimulation

3.3 Principe de Fonctionnement de l’Outil

3.3.2 Encapsulation des Modules Pour la Cosimulation

Chaque module de l’environnement de cosimulation se compose d’un modèle adapté pour

la cosimulation et d’un simulateur adéquat pour effectuer la simulation. Les modèles à simuler

doivent donc être transformés et adaptés à la cosimulation avant de pouvoir faire partie d’un

module. Les transformations qui doivent être apportées aux modèles sont décrites ci-dessous :

Avant d’être compilés et simulés, ils nécessitent l’introduction de ports EXINS-EXOUTS

qui permettront à l’environnement de cosimulation de communiquer avec l’intérieur du

mo-dule à cosimuler. Ces ports sont présents dans des bibliothèques de ports EXINS-EXOUTS qui

contiennent toutes les primitives d’entrées/sorties nécessaires pour lier les modèles à simuler

et l’environnement de cosimulation. Une bibliothèque d’EXINS-EXOUTS peut éventuellement

contenir des Exinouts, ports d’entrée et de sortie auxquels certaines conventions, comme la

résolution, seront à appliquer suivant les nécessités.

Il existe exactement une bibliothèque pour chaque langage pouvant être inséré dans

l’envi-ronnement MCI. Les déclarations ajoutées par les bibliothèques de MCI sont dépendantes du

langage, de sa syntaxe et de ses propriétés de description. Le principe général pour

l’élabora-tion des bibliothèques est d’utiliser les déclaral’élabora-tions standards des langages. Les possibilités de

déclaration peuvent être les suivantes :

– la définition de procédures dédiées à la cosimulation pour les langages procéduraux (par

exemple C, C++).

La définition des primitives peut être attribuée à la déclaration de prototypes de fonctions

qui seront liées, à l’édition de lien, aux fonctions équivalentes de la bibliothèque MCI.

Par exemple avant d’intégrer le modèle dans l’environnement de cosimulation, pour le

langage C, le concepteur aura besoin de :

1. Référencer la bibliothèque d’EXINS-EXOUTS :

L’utilisateur inclut la référence à la bibliothèque par la commande :

#include <exinexoutc.h>

2. Définir les ports à cosimuler :

L’utilisateur introduit dans son modèle une déclaration du port qu’il désire

connecter à l’environnement de cosimulation :

Port<Type>(<Nom de la variable>) ;

Principe de Fonctionnement de l’Outil 77

L’utilisateur introduit au début de son programme un appel de fonction pour

initialiser ses ports avant toute exécution, selon le modèle suivant :

CPort<Type>Decl(&<Nom de la variable>,”<Nom de la variable>”,

<Valeur initiale>, <Direction du port>) ;

4. Ajouter des primitives d’échanges :

Pour chaque transmission d’une donnée, le modèle doit contenir une primitive

de communication afin de mettre à jour les ports au niveau du simulateur et/ou

de l’environnement

Output_<Type>(&<Nom de la variable>) ;

ou

Input_<Type>(&<Nom de la variable>) ;

– la définition de composants dans les langages proposant la notion de modules (par exemple

VHDL, COSSAP, MATLAB).

Dans ce cas, la bibliothèque de MCI propose un ensemble de composants qui doivent

connectés aux ports du modèle. Ces composants peuvent se présenter sous forme

gra-phique ou textuelle (VHDL). Pour les modèles gragra-phiques, l’outil MCI dispose de

bi-bliothèques graphiques, et leur utilisation ne consiste qu’en un simple “glisser-poser”

9

.

C’est le cas de MATLAB, COSSAP et SABER. Pour les simulateurs graphiques, comme

MATLAB, les EXINS-EXOUTS (e.g., figure 3.4) sont créés de façon à ce que l’utilisateur

n’ait plus qu’à les utiliser grâce à quelques mouvements de la souris. En réalité, sous

l’affichage graphique les EXINS-EXOUTS contiennent une couche écrite en langage C

permettant la connexion à l’environnement de cosimulation lors de l’exécution. Le fait de

les placer sur la feuille de travail équivaut à la déclaration de ces ports au niveau

procé-dural.

Pour un modèle textuel écrit en VHDL, la déclaration consiste uniquement à instancier

les composants de la bibliothèque de cosimulation VHDL. Le concepteur doit :

1. Référencer la bibliothèque pour le VHDL :

L’utilisateur fait référence au composant VHDL de la bibliothèque EXINS

-EXOUTS.

use WORK.EXINEXOUT_COMP.all

2. Définir les ports à cosimuler :

Pour définir un signal comme étant un port à cosimuler, l’utilisateur doit

connec-ter ce signal à une instance de type Exin, Exout, ou Exinout de sa bibliothèque,

suivant son type. Pour réaliser l’instanciation d’un port de sortie, il doit

in-clure :

<Instance Name> : EXOUT_<Type>

Generic Map (“<Nom du signal à cosimuler>”), <Taille du

vecteur si le signal est un tableau>

Port Map (<Nom du signal à cosimuler>)

Principe de Fonctionnement de l’Outil 78

Ports d’entrées EXIN

Ports de sorties EXOUT

FIG. 3.4 – Modèle MATLAB avec ses EXINS-EXOUTS.

C=A+B

A

B

C

FIG. 3.5 – Exemple d’un additionneur

Lorsque l’utilisateur a instancié tous les signaux qu’il veut cosimuler, son modèle

est prêt pour être compilé et exécuté dans l’environnement de cosimulation.

– L’utilisation de propriétés syntaxiques du langage (par exemple SDL).

Le langage SDL est un cas particulier car il communique via un canal connecté vers

l’environnement. Cet environnement est considéré à défaut comme étant l’interface

uti-lisateur. Néanmoins, Object_Geode propose une API permettant d’intercepter ce canal.

Ainsi, si l’utilisateur désire cosimuler un port, il doit utiliser un canal SDL connecté à

l’environnement. Lors de la connexion avec MCI, tout ce qui passe dans ce canal est pris

en compte par la cosimulation. La déclaration du canal peut être faite de façon graphique

comme textuelle.

3.3.2.1 Exemple de modification de modèles pour la cosimulation

Deux exemples de programme contenant les modifications apportées sont représentés dans

les tableaux 3.1 et 3.2. Le premier est un programme C et le second est un modèle VHDL.

Le même programme consiste à lire 2 entiers, à calculer leur somme et la communiquer à

l’environnement (cf. figure 3.5).

Dans tous les cas, pour insérer un modèle dans l’environnement de cosimulation,

l’utilisa-teur doit déclarer les ports qui doivent être cosimulés à l’intérieur des différents modèles.

L’ar-chitecture des ports est contenue dans les bibliothèques de MCI. Le lien entre ces déclarations

et les architectures équivalentes est établi au moment de l’édition de liens ou à la compilation

des différents modèles.

3.3.2.2 Compilation des Modèles adaptés pour la cosimulation

La compilation des modèles est en général relativement facile ou du moins elle n’est pas

plus contraignante que la compilation classique d’un modèle sans ports EXINS-EXOUTS.

Principe de Fonctionnement de l’Outil 79

Avant Transformation Modèle adapté à la cosimulation

#include <exinexoutc.h>

Portint(a) ;

Portint(b) ;

Portint(c) ;

int main() { int main() {

CPortintDecl(&a,”a”,0,EXIN) ;

CPortintDecl(&b,”b”,0,EXIN) ;

while (1) { while (1) {

scanf(“%d”,a) ; Input_int(&a) ;

scanf(“%d”,b) ; Input_int(&b) ;

c=a+b ; c=a+b ;

printf(“c=%d\n”,c) ; Output_int(&c) ;

} /* End While */ } /* End While */

} /* End Main */ } /* End Main */

TAB. 3.1 – Transformation d’un programme C

Avant Transformation Modèle adapté à la cosimulation

library Synopsys ; library Synopsys ;

use Synopsys.types.all ; use Synopsys.types.all ;

use Synopsys.attribute.all ; use Synopsys.attributes.all ;

use work.EXINEXOUT_COMP.all ;

entity Addition is entity Addition is

Port (a,b : in integer Port (a,b : in integer

c : out integer c : out integer

) ; ) ;

end Addition ; end Addition ;

architecture behavioral of Addition is architecture behavioral of Addition is

Instance_A :EXIN_INTEGER

Generic Map(“a”)

Port Map(a) ;

Instance_B :EXIN_INTEGER

Generic Map(“b”)

Port Map(b) ;

Instance_C :EXOUT_INTEGER

Generic Map(“c”)

Port Map(c) ;

begin begin

c<=a+b ; c<=a+b ;

end Behavioral ; end Behavioral ;

Principe de Fonctionnement de l’Outil 80

– Dans le cas de modèles graphiques, la compilation, si elle a lieu, est relativement

trans-parente et ne pose pas de problèmes.

– Dans les autres cas, elle consiste à utiliser les outils traditionnels de compilation en

fonc-tion des langages (e.g., gcc ou cc pour le C, vhdlan pour le VHDL, gsmcomp pour le

SDL).

C’est l’édition de liens qui, dans la plupart des cas, va établir l’association des primitives

ajou-tées au modèle avec les architectures de ces primitives contenues dans les bibliothèques de MCI.

Ces bibliothèques, chacune associée à un langage particulier, sont statiques ou dynamiques.

Dans le premier cas, la bibliothèque sera reliée au moment de l’édition de lien, avant la

simula-tion (Par exemple pour le langage C : gcc -o ModelExecutable Model.c -lexinexoutc). Dans le

deuxième cas, le lien est établi en standard par le compilateur, mais sera effectivement réalisé

au moment de l’exécution lorsque le simulateur fera appel à une primitive de cosimulation (e.g.

VHDL).