• Aucun résultat trouvé

Deployed et son point d’arrivée est le code VHDL synthétisable. Nous utilisons en effet les chaînes de transformation de Gaspard pour passer du modèle UML de mppSoC jusqu’au modèle Deployed. À ce stade, nous considérons que le modèle du système mppSoC est suf-fisamment proche pour la génération du code VHDL. Pour cela, nous avons développé une dernière transformation pour atteindre notre objectif. Cette transformation, de type modèle-vers-texte, consiste à générer du code pour l’architecture matérielle. La génération du code de la partie matérielle dépend de la configuration de mppSoC modélisée par le concepteur. Un parcourt du modèle de l’architecture est réalisé en tirant avantage de l’outil Acceleo et une génération du code est ensuite réalisée en se basant sur la bibliothèque d’IPs mppSo-CLib.

5.3.1 Organisation de mppSoCLib

L’architecture de mppSoC est configurable et paramétrique. Deux types d’IPs sont utili-sés pour concevoir une configuration mppSoC : des IP que le concepteur doit choisir pour construire son architecture (les IPs composants) et des IP qui vont être générés automatique-ment suivant ce choix pour assurer un fonctionneautomatique-ment juste de l’architecture (les IPs d’as-semblage). Afin d’aider le concepteur, la bibliothèque mppSoCLib fournit ces deux sortes d’IPs pour alléger leur conception. Cette bibliothèque est incluse dans la bibliothèque Gas-pardLib. Dans le but d’assurer une bonne utilisation de notre chaîne de transformation, les IPs sont regroupés d’une façon hiérarchique. La figure 5.32 dénote l’ensemble de dos-siers construisant la bibliothèque mppSoCLib. Cette dernière contient l’ensemble des fichiers VHDL qui sont des briques de base pour la construction d’une configuration mppSoC. Le dossier "mpnoc" par exemple contient les fichiers relatifs aux réseaux d’interconnexion ir-réguliers. Le dossier "mppsoc-files" groupe les fichiers de configuration ; et le dossier "pro-cessor" contient les fichiers relatifs à chaque type de processeur (miniMIPS, MIPS, NIOS, OpenRisc).

Dans le paragraphe ci-après, nous présentons la transformation de modèle que nous avons appliquée pour passer d’un modèle mppSoC au code correspondant.

FIGURE5.32 – Organisation de mppSoCLib

5.3.2 Transformation depuis un modèle Deployed vers du code VHDL

Un des objectifs de notre flot de conception est la génération d’un code VHDL lisible et compréhensible par les utilisateurs pour une synthèse sur des plateformes FPGA. Partant d’une configuration mppSoC modélisée par le concepteur, une transformation de ce modèle à un modèle conforme au métamodèle Deployed est ensuite réalisée. Un parcourt de ce modèle est effectué afin de grouper les paramètres de l’architecture mppSoC voulue. Le nombre de PE, la taille des mémoires, la topologie du réseau de voisinage et la méthodologie de conception sont directement déduits à partir des diagrammes modélisant l’architecture matérielle. Les autres paramètres (type du processeur, type du réseau d’interconnexion dans le mpNoC, etc.) sont déduits dans la phase de déploiement. Nous présentons ci dessous par exemple un extrait du code de notre chaîne de transformation. Cet extrait nous permet de connaître le type de processeur (getPeCodeFile) et le type de réseau d’interconnexion dans le mpNoC (getMPNOCCodeFile) à générer :

[query public getPECodeFile (m : Model) : CodeFile =

self.ownedElement->select (oclIsKindOf(CodeFile) and name = ’PEImpl_codefile’)->asOrderedSet()->first() ]

[query public getMPNOCCodeFile (m : Model) : CodeFile = self.ownedElement->select (oclIsKindOf(CodeFile) and name = ’RouterImplem_codefile’)->asOrderedSet()->first()]

Pour générer les fichiers de configuration de mppSoC nous procédons comme suit : 1. Récupérer les paramètres nécessaires à remplir dans les fichiers de configuration. Le

texte ci-après montre les deux méthodes qui permettent de connaître le nombre de lignes et le nombre de colonnes de la grille des PEs.

5.4 Expérimentation sur FPGA : traitement vidéo temps réel 127 [query public sl_nb_rows (s : AssemblyPart) : Integer =

if (self.shape.size->size() = 1) then 1 else self.shape.size->at(1) endif ] [query public sl_nb_column (s : AssemblyPart) : Integer =

if (self.shape.size->size() = 1) then self.shape.size->at(1) else self.shape.size->at(2) endif]

2. Connaître le type de processeur à intégrer afin de générer le bon fichier de configura-tion. La ligne suivante montre le test réalisé afin de connaître s’il s’agit d’un processeur de type miniMIPS :

[if m.getPECodeFile().sourceFilePath.contains(’minimips’)]

3. Remplir le fichier de configuration approprié avec les paramètres.

Dans les sections précédentes, nous avons présenté l’usage de l’IDM pour résoudre la complexité de conception du système mppSoC. En partant d’une modélisation de l’architecture, une transformation de modèles permet d’obtenir le code VHDL synthétisable d’une configuration mppSoC. Nous disposons alors d’un flot de conception qui, à partir d’une modélisation en UML, génère le code VHDL.

Afin de faciliter et accélérer la conception d’une architecture SIMD, réponse à la ques-tion Q5 posée à la fin du chapitre 2, nous avons développé une chaîne de génération automatique de configurations mppSoC. Cette chaîne se base sur l’utilisation de l’IDM permettant de faire face à la complexité de conception de mppSoC. En partant d’un mo-dèle UML-MARTE d’une configuration SIMD, une transformation momo-dèle vers texte permet de générer automatiquement le code VHDL synthétisable de l’architecture dési-gnée. Ce code sert pour des fins de simulation ou prototypage sur des circuits reconfi-gurables.

La modélisation de l’architecture est indépendante de tout détail d’implémentation, dans la mesure où la saisie d’un modèle est réalisée dans un langage unifié. Notre flot de conception peut donc être utilisable même par des non spécialistes des architectures massivement parallèles sur puce.

Reste maintenant la phase de test des performances du système conçu et implémenté dans un contexte réel. La section suivante s’inscrit dans ce cadre.

5.4 Expérimentation sur FPGA : traitement vidéo temps réel

Dans cette section, nous nous servons de la chaîne de génération de mppSoC dévelop-pée afin d’implémenter et tester différentes configurations mppSoC. Le système parallèle est testé dans un contexte de traitement vidéo temps réel. Notre objectif est de valider le fonctionnement de notre système paramétrique sur la plate-forme cible. Dans une première partie, nous introduisons la plateforme de prototypage utilisée. Dans une deuxième partie, nous décrivons et discutons les différents tests expérimentaux réalisés.

Caméra D5M