{{{ #!html

TP2: Introduction d'un coprocesseur matériel spécialisé

}}} [[PageOutline]] TP Précédent: MjpegCourse/Multipipe = 0. Objectif = L'objectif de ce TP est de vous montrer comment introduire un coprocesseur matériel spécialisé dans une architecture matérielle comportant principalement des processeurs programmables. Nous allons nous concentrer sur la traduction en matériel de la tâche la plus gourmande en ressources du TCG: la tâche `Idct`. Nous repartirons de la plateforme du [MjpegCourse/Multipro TP3]: !VgmnNoirqMulti. Sur la base de cette plateforme à deux processeurs Mips, nous ajouterons un composant dédié au traitement de l'`Idct`. Reprenez les fichiers du TP2: * La description de la plateforme * La description de l'application * Le code des tâches (`Libu` ne gère qu'un seul pipeline et `Split` n'existe pas) [[Image(MjpegCourse:q.gif)]] Pour un déploiement entièrement logiciel, quel est le temps nécessaire pour décoder 25 images ? = 1. Tâche matérielle virtuelle = == 1.1. Déploiement == Ici, la tâche sera virtuellement matérielle dans le sens où nous utiliserons le code C de notre tâche pour implémenter le comportement matériel de l'`Idct`. Ajoutez une déclaration à la tâche `idct`: {{{ idct = TaskModel( 'idct', infifos = [ 'input' ], outfifos = [ 'output' ], impl = [ SwTask( 'idct', stack_size = 1024, sources = [ 'src/idct.c' ], defines = [ 'WIDTH', 'HEIGHT' ] ), Synthetic() ] ) }}} L'implémentation `Synthetic()` doit être accompagnée d'une déclaration de tâche logicielle (`SwTask`) et permet la synthèse virtuelle de la tâche. On peut alors déployer la tâche comme si elle était matérielle, son comportement est simulé. [[Image(MjpegCourse:q.gif)]] Avec cette tâche déployée en coprocesseur virtuel, quel est le temps nécessaire pour décoder 25 images ? == 1.2. Précision temporelle == Pour rendre la tâche matérielle virtuelle plus exacte en temps de simulation, on peut ajouter des directives dans le code source des tâches pour préciser le temps qu'il faudrait pour réaliser la même action en matériel: `srl_busy_cycles` (voir SrlApi). Insérez dans le code de votre `Idct` un temps de traitement de 8 cycles entre la lecture entière d'un bloc et l'écriture du résultat. [[Image(MjpegCourse:q.gif)]] Quel est le temps de simulation nécessaire pour 25 images ? = 2. Tâche matérielle = Maintenant nous allons utiliser un coprocesseur dédié au traitement de l'`Idct`. Remplacez la déclaration `Synthetic()` par une déclaration de coprocesseur matériel `HwTask( IdctCoproc )`. [[Image(MjpegCourse:q.gif)]] Quel est le temps de simulation nécessaire pour 25 images ? [[Image(MjpegCourse:q.gif)]] Qu'en déduisez-vous sur la différence entre les deux possibilités pour tester une implémentation matérielle ? [[Image(MjpegCourse:q.gif)]] Quel intérêt y a-t-il à pouvoir caractériser précisément le temps de traitement d'une tâche matérielle à partir d'un code en C ? = 3. Compte-Rendu = Comme pour les TP précédents, vous rendrez une archive contenant: {{{ $ tar tzf binome0_binome1.tar.gz tp5/ tp5/rapport.pdf tp5/vgmn_noirq_multi.py tp5/mjpeg/ tp5/mjpeg/mjpeg.py tp5/mjpeg/src/ tp5/mjpeg/src/iqzz.c tp5/mjpeg/src/idct.c tp5/mjpeg/src/libu.c }}} Cette archive devra être livrée avant le mardi 13 mars 2007, 18h00 à [MailAsim:nipo Nicolas Pouillon]