• Aucun résultat trouvé

Chapitre III Présentation du flot de conception proposé

III. 3.3– Outil d’extraction du parallélisme

L’outil d’extraction a été développé en langage C++. Il a deux rôles principaux :

Paralléliser sous contrainte de dépendance de donnée et d'accès à la zone mémoire,

Réduire le nombre de registres utilisés.

Figure III.3 : Vue graphique de l’outil développé pour l’extraction de ILP.

1 R1 = Load @1 R2 = Load @2 R4 = Load @3 R6 = Load @5 2 R3 = Mul (R1,R2) R7 = Add (R6,1)

3 R5 = Add (R3,R4) Store (R7,@6) 4 Store (R5,@4)

Début de la parallélisation L’instruction est‐elle parallélisable ? Un pas d’instructions est‐il disponible ? L’ajout de l’instruction au pas respecte‐il les contraintes de

parallélisation ? Oui

Ajout de l’instruction au pas d’instructions

Oui

Pour chaque instruction

On parcourt les pas d’instructions jusqu’à trouver un « pas d’accueil »

Oui

Création d’un nouveau pas d’instructions servant de point de départ pour les

prochaines instructions Non

Création d’un nouveau pas d’instructions Non

Non

Reste‐t‐il des instructions à paralléliser ?

Fin parallélisation Non Oui

Contraintes de parallélisation (accès mémoire max, opérateurs max,…)

Figure III.4 : Principe d’extraction du parallélisme.

La Figure III.4 illustre le principe suivi pour extraire le parallélisme au niveau des instructions. A l’entrée de l’outil, on précise les contraintes à respecter : nombre d’accès simultanés à l’espace de mémoire, nombre maximum d’opérateurs fonctionnels ou d’autres. Pour chaque instruction séquentielle, on vérifie d’abord si elle n’est pas une instruction spécifique (saut, branchement …) pour

décider de la création d’un nouveau pas d’instruction dans le processus parallèle. Ensuite, on examine si l’ajout de l’instruction au pas courant respecte la dépendance de données. Toutes les instructions séquentielles de Lcode subissent le même traitement avec cette étape d’extraction du parallélisme au niveau des instructions.

Réduire le nombre de registres utilisés consiste en un processus d’optimisation. Ceci permet de réduire la complexité du processeur RISP généré et de minimiser les ressources matérielles nécessaires. Pour chaque utilisation d’un registre, on vérifie qu’il n’existe pas un autre registre disponible sur la même plage d’utilisation, pouvant le remplacer. Par exemple, R1= R2 + R3 pourrait devenir R2= R2 + R3 ou R3=R2 + R3.

III.4 Analyse automatique des caractéristiques matérielles du processeur

Après l’extraction du parallélisme, nous allons décrire la phase qui consiste à assembler les différents éléments matériels nécessaires pour générer un modèle VHDL du processeur taillé pour une application donnée. Ceci passe par une analyse automatique du code intermédiaire Lcode parallélisé fourni par l’étape de développement décrite dans la section précédente.

L’outil d’analyse a été développé en langage C++. Il est organisé autours de plusieurs modules. A partir du fichier Lcode parallélisé, chaque module analyse les lignes contenues dans le fichier et extrait les informations qui lui sont utiles. Le regroupement de tous les résultats obtenus permet de construire une base de données contenant une liste exhaustive des caractéristiques matérielles du processeur à générer.

Module d’analyse des opérateurs utilisés

Ce module recense les différents opérateurs de calcul nécessaires par le processeur pour l’application. On retrouve toutes les sortes d'opérations classiques : logiques, arithmétiques et de contrôle.

Module d’analyse des registres utilisés

Programme d’extraction phase 1 : Recensement des opérateurs Opérateurs utilisées : 4

Après la phase précédente de parallélisation qui inclut aussi une phase de réduction de registres, ce module analyse le nombre et le nom des registres utilisés :

Module d’analyse des registres en entrée pour chaque opérateur

Lors de l’exécution d’une instruction, deux opérandes d’entrée sont nécessaires. Celles-ci proviennent des bancs de registres. Ce module établit une liste des registres en entrée pour chaque opérateur.

Module d’analyse des opérateurs autorisés à écrire dans chaque registre

Après l’exécution d’une instruction, un opérande de sortie est disponible. Celle-ci doit être transférée dans un registre. Le module permet de répertorier, pour chaque registre utilisé, les opérateurs qui auront accès en écriture à celui-ci.

Programme d’extraction phase 2 : Analyse des registres Registres utilisés : R0, R1, R5, R7, R8

Programme d’extraction phase 3 : Analyse des registres d’entrée Opérateur 1 : Opérande 1 : R0, R5 Opérande 2 : R8, R5, R9 Opérateur 2 : Opérande 1 : R1, R4, R6 Opérande 2 : R9, R0 Opérateur 3 : Opérande 1 : R1, R2, R3 Opérande 2 : R0, R1, R1 Opérateur 4 : Opérande 1 : R5 Opérande 2 : R5, R0

Programme d’extraction phase 4 : Analyse des registres de sortie

R0 : op 1, op 4 R1 : op 1, op 3 R5 : op 2, op 3, op 5 R8 : op 2 R2 : op 3, op 2 R9 : op 4 R11 : op 3 R15 : op 5

L’ensemble des résultats obtenus par les différents modules constitue la base de données matérielle associée au processeur. Cette base sera utilisée pour la dernière étape de notre flot de conception : la génération du modèle VHDL du processeur.

Un module statistique, associé à la base de donnée permettrait la visualisation rapide d’une synthèse des différents éléments matériels qui constituent le processeur. Ceci pourrait donner une idée de la taille finale du processeur dans le FPGA.

III.5. Génération automatique du modèle VHDL du DSP C6201

L’idée d’embarquer un processeur dans un FPGA n’est pas nouvelle. Ce processeur peut être inséré lors de la fabrication du FPGA. Nous pouvons citer par exemple un cœur Power PC pour le Virtex II

Pro [Power], E7V CSoc de Triscend [E7V] et Excalibur de la société Altera [Exalibur]. Une autre

solution consiste à modéliser en langage matériel un processeur et l’implanter dans le FPGA lors du développement de l’application comme les processeurs MicroBlaze de Xilinx [Xilinx] et Leon SPARC

V8 [Leon]. Ici, nous proposons de générer, pour une application donnée, un modèle VHDL qui

n’intégre que les éléments matériels du processeur strictement nécessaires au fonctionnement de l’application ciblée.

A partir des données fournies par l’outil d’analyse des ressources matérielles du processeur, un troisième outil appelé générateur construit automatiquement un modèle VHDL adapté qui possède le nombre d’opérateurs de calcul et le nombre de registres justes nécessaires pour exécuter l’application envisagée.

Documents relatifs