| 12 |  | langage DSX/L -une architecture matérielle de système intégré sur puce exploitant les | 
                        | 13 |  | composants matériels de la bibliothèque SoCLib. On rappelle que la | 
                        | 14 |  | bibliothèque SoCLib contient un ensemble modèles de simulation de composants | 
                        | 15 |  | matériels (IP cores), décrits en langage SystemC. L'intérêt d'utiliser DSX | 
                        | 16 |  | (plutôt que de décrire directement l'architecture en langage SystemC), | 
                        | 17 |  | est qu'il permet de décrire facilement des architectures génériques | 
                        | 18 |  | (nombre variable de processeurs ou de bancs mémoire par exemple). | 
                        | 19 |  |  | 
                        | 20 |  | La seconde partie du TP vous permettra d'utiliser DSX pour décrire et | 
                        | 21 |  | contrôler précisément le déploiement de l'application logicielle !SplitMsg, | 
                        | 22 |  | sur l'architecture matérielle décrite dans la première | 
                        | 23 |  | partie. On validera ce déploiement en simulant l'exécution du code binaire | 
                        | 24 |  | de l'application logicielle sur le modèle SystemC de | 
                        | 25 |  | l'architecture matérielle. | 
                        | 26 |  |  | 
                        | 27 |  | La troisième partie du TP vous permettra d'atteindre notre véritable but, qui est | 
                        | 28 |  | de déployer l'application MJPEG du TP1 sur l'architecture de SoC monoprocesseur | 
                        | 29 |  | décrite dans la première partie, en contrôlant précisément le placement des tâches sur | 
                        | 30 |  | les processeurs ou coprocesseurs, et le placement des tampons de communication | 
                        | 31 |  | sur les bancs mémoire embarqués. | 
                      
                        |  | 12 | langage DSX/L - une architecture matérielle de système intégré sur puce, en | 
                        |  | 13 | exploitant les composants matériels de la bibliothèque ''SoCLib''. On rappelle | 
                        |  | 14 | que la bibliothèque SoCLib contient un ensemble modèles de simulation de | 
                        |  | 15 | composants matériels (IP cores), décrits en langage SystemC. L'intérêt | 
                        |  | 16 | d'utiliser DSX (plutôt que de décrire directement l'architecture en langage | 
                        |  | 17 | SystemC), réside dans la facilité de décrire des architectures génériques (par | 
                        |  | 18 | exemple, à nombre variable de processeurs ou bancs mémoire). | 
                        |  | 19 |  | 
                        |  | 20 | La seconde partie du TP vous permettra d'utiliser DSX pour décrire et contrôler | 
                        |  | 21 | précisément le déploiement de l'application logicielle !SplitMsg, sur | 
                        |  | 22 | l'architecture matérielle décrite dans la première partie. On validera ce | 
                        |  | 23 | déploiement en simulant l'exécution du code binaire de l'application logicielle | 
                        |  | 24 | sur le modèle SystemC de l'architecture matérielle. | 
                        |  | 25 |  | 
                        |  | 26 | La troisième partie du TP vous permettra d'atteindre notre véritable but, qui | 
                        |  | 27 | est de déployer l'application MJPEG, vue au TP1, sur l'architecture de SoC | 
                        |  | 28 | monoprocesseur décrite dans la première partie, en contrôlant précisément le | 
                        |  | 29 | placement des tâches sur les processeurs ou coprocesseurs, et le placement des | 
                        |  | 30 | tampons de communication dans les bancs mémoire embarqués. | 
            
                      
                        | 41 |  | * Elle est organisée autour d'un micro-réseau générique à interface VCI (composant VGMN). | 
                        | 42 |  | Ce composant est générique en ce sens qu'il accepte un nombre quelconque d'inititiateurs | 
                        | 43 |  | VCI, et un nombre quelconque de cibles VCI, ainsi qu'un paramètre définissant | 
                        | 44 |  | la latence du réseau: nombre minimal de cycles pour une traversée du réseau | 
                        | 45 |  | "one-way". | 
                        | 46 |  | * Elle comporte un processeur et son cache, deux contrôleurs mémoire RAM0 et RAM1, et un contrôleur de terminal TTY. | 
                        | 47 |  |  | 
                        | 48 |  | '''Attention''': les deux coprocesseurs matériels d'entrée/sortie TG et RAMDAC, doivent | 
                        | 49 |  | être décrits dans l'architecture !VgmnNoirqMono. | 
                        | 50 |  |  | 
                        | 51 |  | Ces deux coprocesseurs, ainsi que les deux contrôleurs MWMR leur permettant d'accéder aux canaux MWMR ne sont utilisés | 
                        | 52 |  | que par l'application MJPEG, et pas par l'application !SplitMsg. Ils  seront | 
                        | 53 |  | donc inutiles pour !SplitMsg. | 
                        | 54 |  |  | 
                        | 55 |  | Commencez par créer un répertoire de travail TP2. | 
                        | 56 |  | Pour faciliter la réutilisation, l'architecture matérielle est généralement décrite | 
                        | 57 |  | dans un fichier séparé. Créez, dans le répertoire TP2, le fichier `vgmn_noirq_mono.py`. | 
                        | 58 |  | [MjpegCourse/VgmnNoirqMono VgmnNoirqMono] contient une descrition incomplète que vous | 
                        | 59 |  | devez compléter, en consultant la documentation SoclibComponents qui définit les | 
                        | 60 |  | paramètres des différents composants de la bibliothèque SoCLib. | 
                        | 61 |  |  | 
                        | 62 |  | [[Image(MjpegCourse:q.gif)]] Q1: '''''Quelle est la syntaxe utilisée par DSX pour exprimer | 
                        | 63 |  | que le port P,,0,, du composant matériel C,,0,, est connecté au port P,,1,, du composant matériel C,,1,,?''''' | 
                        | 64 |  |  | 
                        | 65 |  | Une fois la description de la plateforme complète, nous pouvons la tester en générant | 
                        | 66 |  | une netlist SystemC  décrivant la ''top-cell''. | 
                        | 67 |  |  | 
                        | 68 |  | * Rendez le fichier de description exécutable, lancez-le. | 
                        | 69 |  |  | 
                        | 70 |  | Si tout se passe bien, vous devriez avoir un nouveau répertoire `hard` dans le répertoire courant. | 
                        | 71 |  | La description SystemC de la  ''top-cell'' est dans `hard/topcell.cpp`. | 
                      
                        |  | 40 | * Elle est organisée autour d'un micro-réseau générique à interface VCI | 
                        |  | 41 | (composant VGMN).  Le VGMN est générique dans le sens où il accepte un nombre | 
                        |  | 42 | quelconque d'initiateurs VCI, et un nombre quelconque de cibles VCI, ainsi | 
                        |  | 43 | qu'un paramètre définissant la latence du réseau : c'est-à-dire le nombre | 
                        |  | 44 | minimal de cycles pour ''une'' traversée du réseau ("one-way"). | 
                        |  | 45 | * Elle comporte un processeur et son cache, deux contrôleurs mémoire RAM0 et | 
                        |  | 46 | RAM1, et un contrôleur de terminal TTY. | 
                        |  | 47 |  | 
                        |  | 48 | '''Attention''': pour l'application MJPEG, les deux coprocesseurs matériels | 
                        |  | 49 | d'entrée/sortie TG et RAMDAC, doivent être décrits dans l'architecture | 
                        |  | 50 | !VgmnNoirqMono. Cependant, ces deux coprocesseurs, ainsi que les deux | 
                        |  | 51 | contrôleurs MWMR leur permettant d'accéder aux canaux MWMR, ne sont utilisés | 
                        |  | 52 | que par l'application MJPEG, et pas par l'application !SplitMsg. Vous pouvez | 
                        |  | 53 | donc les laisser commenter pour le moment. | 
                        |  | 54 |  | 
                        |  | 55 | Commencez par créer un répertoire de travail `'TP2'`.  Pour faciliter la | 
                        |  | 56 | réutilisation, l'architecture matérielle est généralement décrite dans un | 
                        |  | 57 | fichier séparé. Créez, dans le répertoire TP2, le fichier `vgmn_noirq_mono.py` | 
                        |  | 58 | et saisissez-y le contenu de [MjpegCourse/VgmnNoirqMono VgmnNoirqMono]. La | 
                        |  | 59 | description que vous venez de saisir est incomplète : il vous faut donc | 
                        |  | 60 | compléter le code à trou fourni (sachant que les trous sont signalés par le | 
                        |  | 61 | texte `'*** remplir ***'`) en vous aidant de la documentation SoclibComponents | 
                        |  | 62 | qui définit les paramètres des différents composants de la bibliothèque SoCLib. | 
                        |  | 63 |  | 
                        |  | 64 | [[Image(MjpegCourse:q.gif)]] Q1 : '''''Quelle est la syntaxe utilisée par DSX | 
                        |  | 65 | pour exprimer que le port P,,0,, du composant matériel C,,0,, est connecté au | 
                        |  | 66 | port P,,1,, du composant matériel C,,1,,?''''' | 
                        |  | 67 |  | 
                        |  | 68 | Une fois la description de la plateforme complète, nous pouvons la tester en | 
                        |  | 69 | générant une description SystemC  décrivant la ''top-cell''. | 
                        |  | 70 |  | 
                        |  | 71 | * Rendez le fichier de description exécutable et exécutez-le. | 
                        |  | 72 |  | 
                        |  | 73 | Si tout se passe bien, vous devriez avoir un nouveau répertoire nommé `hard` | 
                        |  | 74 | dans le répertoire courant. La description SystemC de la ''top-cell'' est | 
                        |  | 75 | contenue dans le fichier `hard/topcell_hard/topcell_hard.cpp`. | 
            
                      
                        | 75 |  | On va commencer par déployer l'application !SplitMsg, qui ne comporte que deux tâches et un canal | 
                        | 76 |  | sur notre architecture de SoC monoprocesseur. | 
                        | 77 |  | * Créez dans le répertoire TP2 un sous-répertoire 'splitmsg' | 
                        | 78 |  | * Recopiez dans ce répertoire la description DSX vgmn_noirq_mono.py | 
                        | 79 |  | * Recopiez dans ce répertoire la description DSX de l'application !SplitMsg du TP1. | 
                        | 80 |  | * Modifiez la description `SplitMsg` en ajoutant après la description du TGG  l'instanciation de l'architecture matérielle !VgmnNoirqMono. | 
                      
                        |  | 79 | Vous allez commencer par déployer l'application !SplitMsg, qui ne comporte que | 
                        |  | 80 | deux tâches et un canal sur votre architecture de SoC monoprocesseur. | 
                        |  | 81 |  | 
                        |  | 82 | * Créez dans le répertoire TP2 un sous-répertoire `'splitmsg'`. | 
                        |  | 83 | * Recopiez dans ce répertoire la description DSX `vgmn_noirq_mono.py` que vous | 
                        |  | 84 | venez d'écrire. | 
                        |  | 85 | * Recopiez dans ce répertoire la description DSX de l'application !SplitMsg | 
                        |  | 86 | que vous aviez écrite dans le TP1, ainsi que les sources de l'application | 
                        |  | 87 | (répertoire `src`). | 
                        |  | 88 | * Modifiez la description `SplitMsg` en ajoutant, après la description du TGG, | 
                        |  | 89 | l'instanciation de l'architecture matérielle !VgmnNoirqMono. | 
            
                      
                        | 97 |  | * Définissez le mapping de l'application !SplitMsg sur l'architecture !VgmnNoirqMono. | 
                        | 98 |  | Vous devez consulter la page DsxMapping pour plus d'informations. | 
                        | 99 |  |  | 
                        | 100 |  | Dans cette section, un objet `Mapper` doit être créé. | 
                        | 101 |  | Supposons qu'on crée une variable `mapper`, | 
                        | 102 |  | les objets logiciels doivent être identifiés par leur nom. | 
                        | 103 |  | Il va falloir placer tous les canaux de communication, toutes les tâches, | 
                        | 104 |  | tous les objets logiciels associés aux processeurs et enfin les objets globaux du système; dans cet ordre. | 
                      
                        |  | 106 | * Définissez le mapping de l'application !SplitMsg sur l'architecture | 
                        |  | 107 | !VgmnNoirqMono. Vous devez consulter la page DsxMapping pour plus | 
                        |  | 108 | d'informations. | 
                        |  | 109 |  | 
                        |  | 110 | Dans cette section, un objet `Mapper` doit être créé. Supposons qu'on crée une | 
                        |  | 111 | variable `mapper`, les objets logiciels doivent être identifiés par leur nom. | 
                        |  | 112 | Il va falloir placer tous les canaux de communication, toutes les tâches, tous | 
                        |  | 113 | les objets logiciels associés aux processeurs et enfin les objets globaux du | 
                        |  | 114 | système (''dans cet ordre''). | 
            
                      
                        | 193 |  | L'application MJPEG est différente de l'application !SplitMsg car elle utilise deux | 
                        | 194 |  | périphériques d'entrée/sortie spécialisés : | 
                        | 195 |  | * le coprocesseur ''Tg'': un composant matériel qui récupère le flux binaire MJPEG | 
                        | 196 |  | (en analysant un signal radio-fréquence par exemple), effectue la conversion | 
                        | 197 |  | analogique/numérique et écrit le résultat dans un canal MWMR | 
                        | 198 |  | * le coprocesseur ''Ramdac'': un composant matériel qui lit une image décompressée | 
                        | 199 |  | dans un canal MWMR et génère le signal video pour affichage sur l'écran. | 
                        | 200 |  |  | 
                        | 201 |  | Pour pouvoir déployer ces deux tâches sous forme de coprocesseurs matériels, il faut | 
                        | 202 |  | prévenir DSX qu'il existe des coprocesseurs implémentant ces tâches. Nous allons donc | 
                        | 203 |  | modifier les déclarations des modèles de tâches en conséquence. | 
                        | 204 |  |  | 
                        | 205 |  | Retournez dans le répertoire mjpeg du TP1, et exécutez la commande  {{{./mjpeg -m clean}}} | 
                        | 206 |  | qui détruit tous les fichiers générés par les différentes compilations effectuées. | 
                        | 207 |  | Ce ménage est indispensable pour vous éviter de dépasser votre quota d'espace | 
                        | 208 |  | disque. Recopiez ce répertoire `mjpeg` nettoyé dans votre répertoire TP2. | 
                        | 209 |  |  | 
                        | 210 |  | Dans la description DSX de l'application MJPEG, modifiez la définition des modèles de tâches | 
                        | 211 |  | `tg` et `ramdac` pour introduire leurs implémentations matérielles. | 
                        | 212 |  | Comme ces deux implémentations sont définies dans soclib, la directive | 
                        | 213 |  | {{{import soclib}}} doit être présente avant la description des tâches dans | 
                        | 214 |  | votre fichier de description de tâche (`.task`). | 
                      
                        |  | 204 | L'application MJPEG est différente de l'application !SplitMsg car elle utilise | 
                        |  | 205 | deux périphériques d'entrée/sortie spécialisés : | 
                        |  | 206 | * le coprocesseur ''Tg'' : un composant matériel qui récupère le flux binaire | 
                        |  | 207 | MJPEG (fournit par un signal radio-fréquence, par exemple), effectue la | 
                        |  | 208 | conversion analogique/numérique et écrit le résultat dans un canal MWMR | 
                        |  | 209 | * le coprocesseur ''Ramdac'' : un composant matériel qui lit une image | 
                        |  | 210 | décompressée dans un canal MWMR et génère le signal video pour affichage sur | 
                        |  | 211 | l'écran. | 
                        |  | 212 |  | 
                        |  | 213 | Pour pouvoir déployer ces deux tâches sous forme de coprocesseurs matériels, il | 
                        |  | 214 | faut prévenir DSX qu'il existe des coprocesseurs implémentant ces tâches. Vous | 
                        |  | 215 | allez donc modifier les déclarations des modèles de tâches en conséquence. | 
                        |  | 216 |  | 
                        |  | 217 | Retournez dans le répertoire mjpeg du TP1, et exécutez la commande  {{{./mjpeg | 
                        |  | 218 | -m clean}}} qui détruit tous les fichiers générés par les différentes | 
                        |  | 219 | compilations effectuées. Ce ménage est indispensable pour vous éviter de | 
                        |  | 220 | dépasser votre quota d'espace disque. Recopiez ce répertoire `mjpeg` nettoyé | 
                        |  | 221 | dans votre répertoire TP2. | 
                        |  | 222 |  | 
                        |  | 223 | Modifiez la définition des modèles de tâches `tg` et `ramdac` pour introduire | 
                        |  | 224 | leurs implémentations matérielles.  Comme ces deux implémentations sont | 
                        |  | 225 | définies dans soclib, la directive {{{import soclib}}} doit être présente avant | 
                        |  | 226 | la description des tâches dans votre fichier de description de tâche (`.task`). | 
                        |  | 227 |  | 
            
                      
                        | 232 |  | Décommentez ensuite la partie de la netlist qui instancie les composants tg et ramdac. | 
                        | 233 |  |  | 
                        | 234 |  | * En vous inspirant de ce qui a été fait pour déployer !SplitMsg, déployez l'application MJPEG | 
                        | 235 |  | sur la plateforme. | 
                        | 236 |  | * Les coprocesseurs `tg` et `ramdac` sont spécifiques, ils doivent | 
                        | 237 |  | faire l'objet d'un déploiement non pas en tant que tâches logicielles sur un processeur, mais | 
                        | 238 |  | en tant que coprocesseurs rattachés à un contrôleur MWMR. Un déploiement valide pour `tg` est par exemple: | 
                        | 239 |  | {{{ | 
                        | 240 |  | m.map('tg', | 
                      
                        |  | 245 | * Recopiez dans le répertoire `mjpeg` la description DSX `vgmn_noirq_mono.py` | 
                        |  | 246 | que vous avez écrite dans la première partie, puis décommentez la partie de la | 
                        |  | 247 | description qui instancie les composants tg et ramdac. | 
                        |  | 248 |  | 
                        |  | 249 | * En vous inspirant de ce qui a été fait pour déployer !SplitMsg, déployez | 
                        |  | 250 | l'application MJPEG sur la plateforme en complétant le fichier de description | 
                        |  | 251 | `mjpeg`. | 
                        |  | 252 | * Les coprocesseurs `tg` et `ramdac` sont spécifiques, ils doivent faire | 
                        |  | 253 | l'objet d'un déploiement non pas en tant que tâches logicielles sur un | 
                        |  | 254 | processeur, mais en tant que coprocesseurs rattachés à un contrôleur MWMR. | 
                        |  | 255 | Un déploiement valide pour `tg` est par exemple : | 
                        |  | 256 | {{{ | 
                        |  | 257 | mapper.map('tg', | 
            
                      
                        | 265 |  | L'environnement DSX permet actuellement d'utiliser deux systèmes d'exploitation embarqués. | 
                        | 266 |  |  | 
                        | 267 |  | * Mutek/S, un noyau "statique", ne fournissant pas la compatibilité POSIX. En particulier, il ne permet pas la création dynamique de tâches au moment de l'exécution. | 
                        | 268 |  | * Mutek/H, un noyau fournissant aux applications l'API des threads POSIX (y compris la création dynamique de tâches), permettant d'héberger sur le même système des applications tierces. | 
                        | 269 |  |  | 
                        | 270 |  | Modifiez la description DSX de l'application MJPEG, pour utiliser l'OS Mutek/H. La section D devient: | 
                      
                        |  | 284 | L'environnement DSX permet actuellement d'utiliser deux systèmes d'exploitation | 
                        |  | 285 | embarqués. | 
                        |  | 286 |  | 
                        |  | 287 | * Mutek/S, un noyau "statique", ne fournissant pas la compatibilité POSIX. En | 
                        |  | 288 | particulier, il ne permet pas la création dynamique de tâches au moment de | 
                        |  | 289 | l'exécution. | 
                        |  | 290 | * Mutek/H, un noyau fournissant aux applications l'API des threads POSIX (y | 
                        |  | 291 | compris la création dynamique de tâches), permettant d'héberger sur le même | 
                        |  | 292 | système des applications tierces. | 
                        |  | 293 |  | 
                        |  | 294 | Modifiez la description DSX de l'application MJPEG, pour utiliser l'OS Mutek/H. | 
                        |  | 295 | La section D devient: | 
            
                      
                        | 315 |  | * Les fichiers `splitmsg.py` et `mjpeg.py` seront complets, avec vos descriptions de TCG et le mapping. | 
                        | 316 |  | Pour mjpeg, il y aura les directives de génération de code pour Mutek/S et Mutek/D. | 
                        | 317 |  | * Le répertoire `mjpeg/src` contiendra uniquement les implémentation de vos deux tâches libu et iqzz | 
                        | 318 |  | (éventuellement mises à jour par rapport à la semaine dernière) vous ayant servi à exécuter les tests de ce TP. | 
                        | 319 |  | * Le rapport sera court (une table des matières pour dire que tout est sur la même page est superflue), répondant aux questions | 
                        | 320 |  | posées dans le texte, nommé exactement `tp2/rapport.pdf`. | 
                        | 321 |  |  | 
                        | 322 |  | Vous livrerez cette archive avant jeudi 15 octobre 2009, 16h00 GMT (18h00 à Paris) à [MailAsim:nipo Nicolas Pouillon]. | 
                      
                        |  | 346 | * Les fichiers `splitmsg.py` et `mjpeg.py` seront complets, avec vos | 
                        |  | 347 | descriptions de TCG et le mapping. Pour mjpeg, il y aura les directives de | 
                        |  | 348 | génération de code pour Mutek/S et Mutek/H. | 
                        |  | 349 | * Le répertoire `mjpeg/src` contiendra uniquement les implémentation de vos | 
                        |  | 350 | deux tâches libu et iqzz (éventuellement mises à jour par rapport à la semaine | 
                        |  | 351 | dernière) vous ayant servi à exécuter les tests de ce TP. | 
                        |  | 352 | * Le rapport sera court (une table des matières pour dire que tout est sur la | 
                        |  | 353 | même page est superflue), répondant aux questions posées dans le texte, et | 
                        |  | 354 | nommé exactement `tp2/rapport.pdf`. | 
                        |  | 355 |  | 
                        |  | 356 | Vous enverrez cette archive avant le jeudi 16/12/2010, 18h00 (heure de Paris) à | 
                        |  | 357 | [MailAsim:joel.porquet Joël Porquet]. |