Changes between Version 22 and Version 23 of SoclibCourseTp2


Ignore:
Timestamp:
Sep 27, 2009, 8:12:01 PM (16 years ago)
Author:
alain
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • SoclibCourseTp2

    v22 v23  
    174174(ou pseudo-registres) implantés dans l'espace addressable, qui peuvent donc - en principe - être
    175175lus 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.
     176Par conséquent, le segment occupé par ce périphérique dans l'espace adressable a une taille de `4*` = 16 octets.
    177177
    178178Pour simplifier le décodage des adresses, on impose la contrainte que l'adresse de base de ce segment est
     
    180180La carte d'implantation des registres est définit comme suit :
    181181
    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   ||
    192187
    193188Comme 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 information
     189séparé ''gcd.h'' les mnémoniques  correspondant aux numéros des registres, car cette information
    195190est utilisée non seulement  par le composant ''!VciGcdCoprocesseur'' (pour décoder les adresses),
    196191mais également par le composant ''!VciGcdMaster'' (pour générer les adresses).
    197192
    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
     199Comme vous pouvez le constater dans la figure ci-dessous, le coprocesseur GCD contient deux automates
     200fonctionnant 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
     207du 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
     210le code définissant les transitions de l'automate ''exe_fsm'', bien que les transitions de l'automate ''exe_fsm'' dépendent
     211de l'état de l'automate ''vci_fsm''. On aurait aussi bien pu décrire ces deux automates dans l'ordre inverse.
     212Quelle mécanisme du langage SystemC utilise-t-on pour rendre l'ordre de description des automates indifférent?
     213 
     214Une erreur est signalée si le coprocesseur GCD reçoit une commande de longueur supérieure à un mot,
    199215ou 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)]]
     216ou 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 ?
    207219
    208220Le fichier `vci_gcd_coprocessor.h` contient une définition complête du composant `VciGcdCoprocessor`.
     
    214226
    215227Le composant `VciGcdMaster` est un initiateur VCI, qui exécute une boucle infinie dans laquelle il exécute
    216 successivement les 6 actions suivantes:
     228successivement les actions suivantes:
    217229 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.
    222235 1. affichage des résultats.
    223236
    224237Pour 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.
     238segment de l'espace adressable qui a été assigné au coprocesseur GCD.
    226239Le composant ''!VciGcdMaster'' étant un automate cablé (non programmable), on considère
    227240que cette adresse est également "câblée". Elle est donc définie comme un paramètre du constructeur.
     
    236249
    237250Le fichier `vci_gcd_coprocessor.h` contient une description complète du composant `!VciGcdMaster`.
    238 Il n'a pas besoin d'être modifié, mais vous devez le lire attentivement pour modifier
     251Il n'a pas besoin d'être modifié, mais vous d'êtreevez le lire attentivement pour modifier
    239252le fichier `vci_gcd_coprocessor.cpp`, qui contient une description incomplète des méthodes associées à ce composant.
    240253Complétez le code des méthodes `transition()` et `genMoore()`.
     
    256269== 5.4 Compilation et génération du simulateur ==
    257270
    258 Il faut ensuite compiler les différents fichiers pour générer le simulateur.
     271Il faut maintenant compiler les différents fichiers pour générer le simulateur.
    259272On va utiliser la même méthode que dans le TP1, mais il y a une difficulté supplémentaire, à cause
    260273du paramètre template `vci_param` des composants `VciGcdMaster`, `VciGcdCoprocessor`.
     
    274287les calculs effectués sont les mêmes (seul le protocole de communication a changé.
    275288
     289En cas de difficulté, vous pouvez obtenir une trace détaillée (cycle par cycle) des valeurs contenues dans les registres.
     290Il faut relancer la compilation en ajoutant le flag ''-DSOCLIB_MODULE_DEBUG'' dans les options de  compilation.
     291
    276292== 5.5 Architecture multi-maitres ==
    277293
     
    296312}}}
    297313
    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.
     314Modifiez 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.
    300315Le lancement du simulateur doit vous fournir une trace d'exécution qui entrelace les compte-rendus des trois initiateurs
    301316qui s'exécutent en parallèle. Chaque initiateur commande un seul coprocesseur, et la seule ressource partagée est le