| 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]. |