• Aucun résultat trouvé

4.3 Programmation de mppSoC

4.3.3 Jeu d’instructions mppSoC

Le jeu d’instructions mppSoC est dérivé du jeu d’instructions du processeur utilisé. Pour simplifier l’écriture d’un programme data parallèle pour mppSoC, nous avons défini quelques macros facilitant l’utilisation des instructions spécifiques. Ce langage spécialisé de haut niveau constitue une alternative avantageuse au micro-codage et rend plus facile la programmation bas niveau de mppSoC. L’approche haut niveau permet de simplifier de nombreuses étapes lors de la programmation, de réduire les risques d’erreur et les temps de développement. Abstraire les détails architecturaux du système sous-jacent permet de faciliter la programmation des algorithmes. Parmi les instructions spécifiques, nous notons celles de communication et de contrôle. Ces instructions sont alors codées en se basant sur les instructions mémoires à savoir Load : LW et Store :SW. Les adresses utilisées avec ces instructions sont aussi bien définies.

Notre ultime objectif est d’utiliser les outils et compilateurs existants et ne pas dévelop-per d’autres plus spécifiques ou complexes. Le tableau 4.13 donne la liste de ces macros et leur décodage selon le jeu d’instructions du processeur utilisé. Le paragraphe suivant dé-taille le décodage des instructions de communication utilisées pour programmer les deux réseaux de mppSoC. Ces instructions sont dérivées des instructions du processeur utilisé qui sont les instructions d’accès mémoire : LW et SW. Nous distinguons les instructions dé-diées au réseau mpNoC de celles dédé-diées au réseau de voisinage.

Instructions pour le réseau mpNoC

Afin d’établir le mode de communication requis pour mpNoC, nous utilisons une ins-truction particulière. Cette dernière consiste à écrire la valeur correspondante au mode dans

4.3 Programmation de mppSoC 103

une adresse spécifique. Elle se base alors sur l’instruction SW :

SWcst, @ModeManager (4.1)

Avec :

– @ModeManager est une adresse spécifique utilisée pour activer le mpNoC ; – cst est la constante du mode qui peut avoir une valeur parmi cinq possibles.

Les modes de communication mpNoC sont définis dans le fichier de configuration VHDL de mppSoC comme suit :

–MPNoC Modes

constant Mode0 : positive := 0 ; – PE− >PE constant Mode1 : positive := 1 ; – ACU− >PE constant Mode2 : positive := 2 ; – PE− >ACU constant Mode3 : positive := 3 ; – PE− >Device constant Mode4 : positive := 4 ; – Device− >PE

Après le choix du mode de communication, les transferts via le mpNoC seront assurés via les instructions SEND et RECEIVE.

I Instruction SEND permet d’envoyer une donnée à travers le réseau d’une source vers un destinataire, en se basant sur l’instruction mémoire SW : SW data,address. Le champ "data" est la donnée à envoyer sur 32 bits et le champ "address" correspond à l’adresse trans-mise sur 32 bits. L’adresse peut avoir divers formats selon le mode de communication du mpNoC :

– Modes PE-PE, ACU-PE et périphérique-PE : l’identité du PE destinataire (de longueur 32-SL_add_width bits) + l’adresse mémoire où stocker la donnée (SL_add_width bits). Dans le cas d’un transfert de données vers tous les PEs, il suffit de spécifier seulement l’adresse mémoire ;

– Mode PE-ACU : l’adresse mémoire de l’ACU (MS_add_width bits) ; – Mode PE-périphérique : l’adresse du périphérique (32 bits) ;

MS_add_width et SL_add_width sont les tailles paramétriques des adresses mémoires de l’ACU et du PE respectivement. Les modes de communication ACU-périphérique ou périphérique-ACU sont établis par des connexions point à point gérées au niveau matériel.

I Instruction RECEIVE permet de recevoir la donnée en se basant sur l’instruction mémoire LW : LW data,address. Elle prend le même champ d’adresse que l’instruction SEND. À travers ces différentes instructions, nous remarquons que le temps d’exécution d’une instruction varie selon le mode de communication. Par exemple dans le cas d’une communi-cation de multiple sources vers un seul destinataire, la donnée est envoyée une à une séquen-tiellement vu que le destinataire ne peut recevoir qu’une donnée à la fois. Le temps d’exécu-tion vaut alors le temps d’une seule communicad’exécu-tion multiplié par le nombre de sources (le même cas se trouve dans les machines SIMD traditionnelles telle que la MasPar).

Instructions pour le réseau de voisinage

I Instruction SEND permet d’envoyer la donnée d’un PE à un autre selon une di-rection précise. En effet, elle se base comme le mpNoC sur l’instruction mémoire SW. Son adresse se compose de trois champs :

– la distance (29-SL_add_width bits) qui définit le nombre de liens entre le PE source et le PE destinataire ;

– la direction (3 bits) qui peut avoir une valeur parmi huit possibles selon la topologie du réseau : Nord(000), Est(010), Sud(001), Ouest(011), Nord Est(100), Nord Ouest(101), Sud Est(110) et Sud Ouest(111) ;

– l’adresse mémoire (SL_add_width bits) où stocker la donnée.

I Instruction RECEIVE permet de recevoir la donnée en se basant sur l’instruction mémoire LW : LW data,address. Elle prend le même champ d’adresse que l’instruction SEND décrite précédemment.

Ces différentes instructions de communication décrites servent alors à piloter les ré-seaux de communication. Elles sont aussi applicables quelque soit l’IP processeur utilisé puisqu’elles se basent sur les instructions standard d’accès mémoire.

4.4 Conclusion

Dans ce chapitre, nous avons détaillé la conception des IPs présents dans la bibliothèque d’IPs mppSoC. Cette bibliothèque offre des processeurs, mémoires et réseaux d’intercon-nexion afin de constituer la configuration mppSoC désirée. Une configuration donnée d’un système mppSoC décrit les composants devant être utilisés et les paramètres de dimension-nement du système (nombre de processeurs, taille mémoire associée à chaque processeur, etc.). L’utilisateur aura le choix d’intégrer les IPs prédéfinis et nécessaires pour son architec-ture, piloté par les exigences de son application. Nous avons alors vu qu’en partant du mo-dèle mppSoC générique, différentes configurations SIMD peuvent être construites et adap-tées selon les besoins. La configuration implémentée peut être soit simulée par les outils de simulation ou prototypée sur un circuit FPGA. Il est aussi intéressant de monter dans le ni-veau d’abstraction de la conception afin d’encore faciliter la tâche au concepteur. Pour cette fin, un outil capable de générer automatiquement une configuration choisie de mppSoC spé-cifiée à un haut niveau d’abstraction sans se préoccuper des détails d’implémentation s’avère utile. Cet outil sera présenté dans le chapitre suivant. Nous exposerons de même les résultats expérimentaux et discutons les performances du système mppSoC.

4.4 Conclusion 105

TABLE4.13 – Macros mppSoC

Macro ASM Description Codage

miniMIPS OpenRisc NIOS

SET_MODE_MPNOC Sélectionner le mode SW reg,0x9003(r0) l.addi r1,r0,0x9003 IOWR (WRP_ACU_B,

(reg) de communication de l.sw 0x0(r1),reg 0x800, data) mpNoC parmi 5 modes Avec : data est la (listés dans la sous valeur du mode. section 4.3.3).

Le registre reg contient la valeur du mode.

Modes :0,1 et 4 : Envoi via mpNoC : p_/addi r1,r0,dest l.addi r1,r0,dest IOWR (WRP_B,

P_/MPNOC_SEND transférer la donnée p_/addi r1,r1,adr l.addi r1,r1,adr addr, data)

(reg,dest,adr) (qui se trouve dans reg) p_/SW reg,0(r1) l.sw 0x0(r1),reg Avec : addr(11)=’1’ et à la destination requise. addr(10 :0)contient dest.

Modes :2 et 3 : p_/addi r1,r0,adr l.addi r1,r0,adr Avec : addr(11)=’1’ et

P_/MPNOC_SEND p_/SW reg,0(r1) l.sw 0x0(r1),reg addr(10 :0) contient adr.

(reg,adr)

Modes :0,1 et 4 : Réception via mpNoC : p_/addi r1,r0,src l.addi r1,r0,src data=IORD (WRP_B,

P_/MPNOC_REC recevoir la donnée p_/addi r1,r1,adr l.addi r1,r1,adr addr)

(reg,src,adr) (la stocker dans reg) p_/LW reg,0(r1) l.lwz reg,0x0(r1) Avec : addr(11)=’1’ et de la source. addr(10 :0) contient src.

Modes :2 et 3 : p_/addi r1,r0,adr l.addi r1,r0,adr Avec : addr(11)=’1’ et

P_/MPNOC_REC p_/LW reg,0(r1) l.lwz reg,0x0(r1) addr(10 :0) contient adr.

(reg,adr)

P_REG_SEND Envoi via le réseau p_addi r1,r0,dir l.addi r1,r0,dir IOWR (WRP_B,

(reg,dir,dis,adr) de voisinage : transférer p_addi r1,r1,dis l.addi r1,r1,dis addr, data)

la donnée (stockée p_addi r1,r1,adr l.addi r1,r1,adr Avec : addr(11)=’0’ et dans reg) de la source p_SW reg,0(r1) l.sw 0x0(r1),reg addr(10 :3)=dis et à la destination. addr(2 :0)=dir.

P_REG_REC Réception via le réseau p_addi r1,r0,dir l.addi r1,r0,dir data=IORD (WRP_B,

(reg,dir,dis,adr) de voisinage : recevoir p_addi r1,r1,dis l.addi r1,r1,dis addr)

la donnée (la stocker p_addi r1,r1,adr l.addi r1,r1,adr Avec : addr(11)=’0’ et dans reg) de la source. p_LW reg,0(r1) l.lwz reg,0x0(r1) addr(10 :3)=dis et

addr(2 :0)=dir.

P_GET_STATUS lire le bit d’activité p_lui r1,0x9 l.movhi r1,0x9

(reg,ident) du PE identifié par p_ori r1,r1,0 l.addi r1,r1,ident "ident". p_addi r1,r1,ident l.lwz reg,0x0(r1)

p_LW reg,0(r1)

P_SET_STATUS modifier le bit p_lui r1,0x9 l.movhi r1,0x9

(val,ident) d’activité du PE (identifié p_ori r1,r1,0 l.addi r1,r1,ident par "ident") par la p_addi r1,r1,ident l.addi r2,r0,val valeur val. p_addi r2,r0,val l.sw 0x0(r1),r2

p_SW r2,0(r1)

P_GET_IDENT lire l’identité p_lui r1,0x2 l.movhi r1,0x2 NIOS2_READ_

(reg) p_ori r1,r1,0 l.lwz reg,0x0(r1) CPUID(id) p_LW reg,0(r1)

GET_OR_TREE lire la valeur addi r1,r0,0x9005 l.addi r1,r0,0x9005

Outil de conception de mppSoC : mise

en œuvre et expérimentation sur FPGA

5.1 Introduction à l’IDM et automatisation de la génération de code . . . 107

5.1.1 L’IDM pour la conception des systèmes embarqués . . . 108