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