Changes between Version 22 and Version 23 of SoclibCourseTp2
- Timestamp:
- Sep 27, 2009, 8:12:01 PM (16 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
SoclibCourseTp2
v22 v23 174 174 (ou pseudo-registres) implantés dans l'espace addressable, qui peuvent donc - en principe - être 175 175 lus ou écrits par n'importe quel initiateur du sytème. Chacun de ces registres a une largeur de 4 octets. 176 Par conséquent, le segment occupé par ce périphérique dans l'espace adressable a une taille de `4* 4` = 16 octets.176 Par conséquent, le segment occupé par ce périphérique dans l'espace adressable a une taille de `4*` = 16 octets. 177 177 178 178 Pour simplifier le décodage des adresses, on impose la contrainte que l'adresse de base de ce segment est … … 180 180 La carte d'implantation des registres est définit comme suit : 181 181 182 || '''Nom du registre''' || '''Offset''' || '''Mode''' || 183 || r_opa || 0x0 || Write Only || 184 || r_opb || 0x4 || Write Only || 185 || r_start || 0x8 || Write Only || 186 || r_res || 0xc || Read Only || 187 188 Attention : Il n'existe pas réellement de registre ''r_start'' dans le composant matériel. 189 Lorsque le composant ''!VciGcdCoprocessor'' reçoit une commande d'écriture à l'adresse 190 correspondant à l'adresse de ''r_start'', la donnée WDATA correspondante n'est écrite nulle part, 191 mais la commande est interprêtée par le coprocesseur comme un ordre de démarrage du calcul. 182 || '''Nom du registre''' || '''Offset''' || '''Mode''' || 183 || GCD_OPA || 0x0 || Read/Write || 184 || GCD_OPB || 0x4 || Write Only || 185 || GCD_START || 0x8 || Write Only || 186 || GCD_STATUS || 0xc || Read Only || 192 187 193 188 Comme pour tout composant contenant des registres addressables, on définit dans un fichier 194 séparé les mnémoniques correspondant aux numéros des registres, car cette information189 séparé ''gcd.h'' les mnémoniques correspondant aux numéros des registres, car cette information 195 190 est utilisée non seulement par le composant ''!VciGcdCoprocesseur'' (pour décoder les adresses), 196 191 mais également par le composant ''!VciGcdMaster'' (pour générer les adresses). 197 192 198 Une erreur est signalée si le coprocesseur reçoit une commande de longueur supérieure à un mot, 193 * Une commande d'écriture vers le registres GCD_OPA (resp. GCD_OPB) permet d'écrire l'opérande A (resp. opérande B). 194 * Une commande de lecture du registre GCD_OPB retourne la valeur du résultat si le coprocesseur a fini son calcul. 195 * Une commande de lecture du registre GCD_STATUS retourne la valeur 0 lorsque le coprocesseur est dans l'état 196 ''IDLE", et retourne une valeur différente de 0 si le coprocesseur n'a pas fini de calculer. 197 * Une commande d'écriture vers le pseudo-registre GCD_START déclenche le calcul du PGCD portant sur les valeurs présentes dans les registres GCD_OPA et GCD_OPB. La donnée correspondant à cette écriture (champs VCI WDATA) n'est écrite nulle part. 198 199 Comme vous pouvez le constater dans la figure ci-dessous, le coprocesseur GCD contient deux automates 200 fonctionnant en parallèle : 201 * l'automate ''vci_fsm'' contrôle l'interface VCI : il répond aux commandes qu'il reçoit, en écrivant dans le registre concerné s'il sagit d'une écriture, ou en renvoyant la valeur demandée s'il s'agit d'une lecture. 202 * l'automate ''exe_fsm'' contrôle l'exécution de la boucle de calcul du PGCD. 203 204 [[Image(soclib_tp2_coprocessor.png)]] 205 206 '''Question''' : Pourquoi faut-t-il deux automates séparés pour contrôler l'interface VCI et pour contrôler le calcul 207 du PGCD proprement dit ? 208 209 '''Question''' Dans la fonction de transition, on a écrit le code définissant les transitions de l'automate ''vci_fsm'' après 210 le code définissant les transitions de l'automate ''exe_fsm'', bien que les transitions de l'automate ''exe_fsm'' dépendent 211 de l'état de l'automate ''vci_fsm''. On aurait aussi bien pu décrire ces deux automates dans l'ordre inverse. 212 Quelle mécanisme du langage SystemC utilise-t-on pour rendre l'ordre de description des automates indifférent? 213 214 Une erreur est signalée si le coprocesseur GCD reçoit une commande de longueur supérieure à un mot, 199 215 ou si l'adresse reçue n'appartient pas au segment qui a été défini pour le coprocesseur, 200 ou si le mode d'accès (Read ou Write) ne respecte pas les contraintes ci-dessus. 201 202 Question : comment sont traitées les erreurs dans ce modèle de simulation? à quoi servent ces vérifications ? 203 204 La figure ci-dessous décrit la structure de l'automate de contrôle du composant `VciGcdCoprocessor`. 205 206 [[Image(soclib_tp2_coprocessor.png)]] 216 ou si le mode d'accès (Read ou Write) ne respecte pas les contraintes définies dans la carte des registres. 217 218 '''Question''' : comment sont traitées les erreurs dans ce modèle de simulation? à quoi servent ces vérifications ? 207 219 208 220 Le fichier `vci_gcd_coprocessor.h` contient une définition complête du composant `VciGcdCoprocessor`. … … 214 226 215 227 Le composant `VciGcdMaster` est un initiateur VCI, qui exécute une boucle infinie dans laquelle il exécute 216 successivement les 6actions suivantes:228 successivement les actions suivantes: 217 229 1. calcul de deux valeurs aléatoires (entiers positifs codés sur 32 bits) 218 1. écriture de l'opérande OPA dans le registre `r_opa` du coprocesseur GCD. 219 1. écriture de l'opérande OPB dans le registre `r_opb` du coprocesseur GCD. 220 1. écriture dans le pseudo-registre `r_start` du coprocesseur GCD. 221 1. lecture du résultat dans le registre `r_res` du coprocesseur GCD. 230 1. écriture de l'opérande OPA dans le registre GCD_OPA du coprocesseur GCD. 231 1. écriture de l'opérande OPB dans le registre GCD_OPB du coprocesseur GCD. 232 1. écriture dans le pseudo-registre GCD_START du coprocesseur GCD. 233 1. lecture du registre GCD_STATUS du coprocesseur GCD, jusqu'à obtenir une valeur nulle (calcul terminé).. 234 1. lecture du résultat dans le registre GCD_OPA du coprocesseur GCD. 222 235 1. affichage des résultats. 223 236 224 237 Pour accéder au coprocesseur GCD, le composant a besoin de l'adresse de base du 225 segment de l'espace adressable aui a été assigné au coprocesseur GCD.238 segment de l'espace adressable qui a été assigné au coprocesseur GCD. 226 239 Le composant ''!VciGcdMaster'' étant un automate cablé (non programmable), on considère 227 240 que cette adresse est également "câblée". Elle est donc définie comme un paramètre du constructeur. … … 236 249 237 250 Le fichier `vci_gcd_coprocessor.h` contient une description complète du composant `!VciGcdMaster`. 238 Il n'a pas besoin d'être modifié, mais vous d evez le lire attentivement pour modifier251 Il n'a pas besoin d'être modifié, mais vous d'êtreevez le lire attentivement pour modifier 239 252 le fichier `vci_gcd_coprocessor.cpp`, qui contient une description incomplète des méthodes associées à ce composant. 240 253 Complétez le code des méthodes `transition()` et `genMoore()`. … … 256 269 == 5.4 Compilation et génération du simulateur == 257 270 258 Il faut ensuitecompiler les différents fichiers pour générer le simulateur.271 Il faut maintenant compiler les différents fichiers pour générer le simulateur. 259 272 On va utiliser la même méthode que dans le TP1, mais il y a une difficulté supplémentaire, à cause 260 273 du paramètre template `vci_param` des composants `VciGcdMaster`, `VciGcdCoprocessor`. … … 274 287 les calculs effectués sont les mêmes (seul le protocole de communication a changé. 275 288 289 En cas de difficulté, vous pouvez obtenir une trace détaillée (cycle par cycle) des valeurs contenues dans les registres. 290 Il faut relancer la compilation en ajoutant le flag ''-DSOCLIB_MODULE_DEBUG'' dans les options de compilation. 291 276 292 == 5.5 Architecture multi-maitres == 277 293 … … 296 312 }}} 297 313 298 Modifiez le Makefile pour générer le fichier exécutable `multi_simulator.x`, en n'oubliant pas d'inclure le fichier `vci_vgsb.o` 299 dans l'ensemble des fichiers objet. 314 Modifiez le Makefile pour générer le fichier exécutable `multi_simulator.x`, en n'oubliant pas d'inclure le fichier `vci_vgsb.o` dans l'ensemble des fichiers objet. 300 315 Le lancement du simulateur doit vous fournir une trace d'exécution qui entrelace les compte-rendus des trois initiateurs 301 316 qui s'exécutent en parallèle. Chaque initiateur commande un seul coprocesseur, et la seule ressource partagée est le