Changes between Version 21 and Version 22 of SoclibCourseTp2


Ignore:
Timestamp:
Sep 26, 2009, 11:31:49 AM (16 years ago)
Author:
alain
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • SoclibCourseTp2

    v21 v22  
    1818L'architecture matérielle qu'on souhaite prototyper dans ce second TP instancie 7 composants matériels de
    1919trois types différents :
    20 Les deux composants ''!VciLcdCoprocessor'' et ''!VciLcdMaster'' sont instanciés trois fois chacun. Ils ont des fonctionnalités identiques à celles des composants utilisés dans le premier TP, mais ces composants possèdent maintenant des ports de communication qui respectent le protocole VCI/OCP. Le composant ''!VciLcdMaster'' se comporte comme un initiateur, et le composant ''!VciLcdCoprocesseur'' se comporte come une cible. Le troisième composant ''!VciVgsb'' (Virtual Generic System Bus) est un composant matériel modélisant un bus multi-maîtres, multi-cibles respectant le protocole VCI/OCP. 
     20Les deux composants ''!VciGcdCoprocessor'' et ''!VciGcdMaster'' sont instanciés trois fois chacun. Ils ont des fonctionnalités identiques à celles des composants utilisés dans le premier TP, mais ces composants possèdent maintenant des ports de communication qui respectent le protocole VCI/OCP. Le composant ''!VciGcdMaster'' se comporte comme un initiateur, et le composant ''!VciGcdCoprocesseur'' se comporte come une cible. Le troisième composant ''!VciVgsb'' (Virtual Generic System Bus) est un composant matériel modélisant un bus multi-maîtres, multi-cibles respectant le protocole VCI/OCP. 
    2121
    2222[[Image(soclib_tp2_archi.png)]]
     
    159159
    160160L'archive contient également les fichiers suivants :
    161  * `lcd.h` : ce fichier décrit les fichiers adressables du coprocesseur LCD (fichier complet)
    162  * `vci_lcd_master.h` : définition du composant `VciLcdMaster` (fichier complet)
    163  * `vci_lcd_master.cpp` : méthodes associées (fichier incomplet)
    164  * `vci_lcd_coprocessor.h` : définition du composant `VciLcdCoprocessor`. (fichier complet)
    165  * `vci_lcd_coprocessor.cpp` : méthodes associées (fichier incomplet)
     161 * `gcd.h` : ce fichier décrit les fichiers adressables du coprocesseur GCD (fichier complet)
     162 * `vci_gcd_master.h` : définition du composant `VciGcdMaster` (fichier complet)
     163 * `vci_gcd_master.cpp` : méthodes associées (fichier incomplet)
     164 * `vci_gcd_coprocessor.h` : définition du composant `VciGcdCoprocessor`. (fichier complet)
     165 * `vci_gcd_coprocessor.cpp` : méthodes associées (fichier incomplet)
    166166 * `vci_vgsb.h` : définition du composant `VciVgsb`. (fichier complet)
    167167 * `vci_vgsb.cpp` : méthodes associées (fichier complet)
    168168 * `tp2_simple_top.cpp` : top-cell d'une architecture simple à deux composants (fichier incomplet)
    169169
    170 == 5.1 Composant ''!VciLcdCoprocessor'' ==
    171 
    172 Le composant ''!VciLcdCoprocessor'' se comporte comme un périphérique adressable, et doit donc être
     170== 5.1 Composant ''!VciGcdCoprocessor'' ==
     171
     172Le composant ''!VciGcdCoprocessor'' se comporte comme un périphérique adressable, et doit donc être
    173173modélisé comme une cible VCI. Il possède un seul port de type ''!VciTarget'', et 4 registres
    174174(ou pseudo-registres) implantés dans l'espace addressable, qui peuvent donc - en principe - être
     
    187187
    188188Attention : Il n'existe pas réellement de registre ''r_start'' dans le composant matériel.
    189 Lorsque le composant ''!VciLcdCoprocessor'' reçoit une commande d'écriture à l'adresse
     189Lorsque le composant ''!VciGcdCoprocessor'' reçoit une commande d'écriture à l'adresse
    190190correspondant à l'adresse de ''r_start'', la donnée WDATA correspondante n'est écrite nulle part,
    191191mais la commande est interprêtée par le coprocesseur comme un ordre de démarrage du calcul.
     
    193193Comme pour tout composant contenant des registres addressables, on définit dans un fichier
    194194séparé les mnémoniques  correspondant aux numéros des registres, car cette information
    195 est utilisée non seulement  par le composant ''!VciLcdCoprocesseur'' (pour décoder les adresses),
    196 mais également par le composant ''!VciLcdMaster'' (pour générer les adresses).
     195est utilisée non seulement  par le composant ''!VciGcdCoprocesseur'' (pour décoder les adresses),
     196mais également par le composant ''!VciGcdMaster'' (pour générer les adresses).
    197197
    198198Une erreur est signalée si le coprocesseur reçoit une commande de longueur supérieure à un mot,
     
    202202Question : comment sont traitées les erreurs dans ce modèle de simulation? à quoi servent ces vérifications ?
    203203
    204 La figure ci-dessous décrit la structure de l'automate de contrôle du composant `VciLcdCoprocessor`.
     204La figure ci-dessous décrit la structure de l'automate de contrôle du composant `VciGcdCoprocessor`.
    205205
    206206[[Image(soclib_tp2_coprocessor.png)]]
    207207
    208 Le fichier `vci_lcd_coprocessor.h` contient une définition complête du composant `VciLcdCoprocessor`.
     208Le fichier `vci_gcd_coprocessor.h` contient une définition complête du composant `VciGcdCoprocessor`.
    209209Il n'a pas besoin d'être modifié, mais vous aurez besoin de le lire attentivement pour modifier
    210 le fichier `vci_lcd_coprocessor.cpp`, qui contient une description incomplête des méthodes associées à ce composant.
     210le fichier `vci_gcd_coprocessor.cpp`, qui contient une description incomplête des méthodes associées à ce composant.
    211211Complétez le code des méthodes `transition()` et `genMoore()`.
    212212
    213 == 5.2 Composant ''!VciLcdMaster'' ==
    214 
    215 Le composant `VciLcdMaster` est un initiateur VCI, qui exécute une boucle infinie dans laquelle il exécute
     213== 5.2 Composant ''!VciGcdMaster'' ==
     214
     215Le composant `VciGcdMaster` est un initiateur VCI, qui exécute une boucle infinie dans laquelle il exécute
    216216successivement les 6 actions suivantes:
    217217 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 LCD.
    219  1. écriture de l'opérande OPB dans le registre `r_opb` du coprocesseur LCD.
    220  1. écriture dans le pseudo-registre `r_start` du coprocesseur LCD.
    221  1. lecture du résultat dans le registre `r_res` du coprocesseur LCD.
     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.
    222222 1. affichage des résultats.
    223223
    224 Pour accéder au coprocesseur LCD, le composant a besoin de l'adresse de base du
    225 segment de l'espace adressable aui a été assigné au coprocesseur LCD.
    226 Le composant ''!VciLcdMaster'' étant un automate cablé (non programmable), on considère
     224Pour accéder au coprocesseur GCD, le composant a besoin de l'adresse de base du
     225segment de l'espace adressable aui a été assigné au coprocesseur GCD.
     226Le composant ''!VciGcdMaster'' étant un automate cablé (non programmable), on considère
    227227que cette adresse est également "câblée". Elle est donc définie comme un paramètre du constructeur.
    228228 
    229 La figure ci-dessous décrit la structure de l'automate de contrôle du composant ''!VciLcdMaster''.
     229La figure ci-dessous décrit la structure de l'automate de contrôle du composant ''!VciGcdMaster''.
    230230
    231231[[Image(soclib_tp2_master.png)]]
     
    235235dans lequel on attend la réponse (on reste dans cet état tant qu'on a pas reçu une réponse valide).
    236236
    237 Le fichier `vci_lcd_coprocessor.h` contient une description complète du composant `!VciLcdMaster`.
     237Le fichier `vci_gcd_coprocessor.h` contient une description complète du composant `!VciGcdMaster`.
    238238Il n'a pas besoin d'être modifié, mais vous devez le lire attentivement pour modifier
    239 le fichier `vci_lcd_coprocessor.cpp`, qui contient une description incomplète des méthodes associées à ce composant.
     239le fichier `vci_gcd_coprocessor.cpp`, qui contient une description incomplète des méthodes associées à ce composant.
    240240Complétez le code des méthodes `transition()` et `genMoore()`.
    241241
    242242== 5.3 Architecture minimale ==
    243243
    244 Pour valider les modèles de simulation des composants `VciLcdMaster` et `VciLcdCoprocessor`,
     244Pour valider les modèles de simulation des composants `VciGcdMaster` et `VciGcdCoprocessor`,
    245245on construit une architecture minimale ne contenant que deux composants matériels, conformément au schéma ci-dessous :
    246246
     
    249249En vous inspirant de ce que vous avez fait dans le TP1, complétez le fichier ''tp2_simple_top.cpp'' qui vous est fourni,
    250250en précisant :
    251  * les caractéristiques du segment mémoire associé au coprocesseur LCD.
     251 * les caractéristiques du segment mémoire associé au coprocesseur GCD.
    252252 * les valeurs des paramètres VCI (largeurs des champs) dans l'objet `vci_param`.
    253253 * les valeurs des arguments des constructeurs des deux composants.
     
    258258Il faut ensuite compiler les différents fichiers pour générer le simulateur.
    259259On va utiliser la même méthode que dans le TP1, mais il y a une difficulté supplémentaire, à cause
    260 du paramètre template `vci_param` des composants `VciLcdMaster`, `VciLcdCoprocessor`.
     260du paramètre template `vci_param` des composants `VciGcdMaster`, `VciGcdCoprocessor`.
    261261Dans un contexte de compilation séparée, il est nécessaire de définir explicitement la valeur de ce paramètre
    262262dans chacun des fichiers source avant de lancer la génération du fichier objet associé.
    263 Pour cela, il faut rajouter la ligne suivante à la fin des fichiers `vci_lcd_master.cpp` et `vci_lcd_coprocessor.cpp` :
     263Pour cela, il faut rajouter la ligne suivante à la fin des fichiers `vci_gcd_master.cpp` et `vci_gcd_coprocessor.cpp` :
    264264{{{
    265 template class VciLcdMaster<soclib::caba::VciParams<4, 8, 32, 1, 1, 1, 12, 1, 1, 1> >;
     265template class VciGcdMaster<soclib::caba::VciParams<4, 8, 32, 1, 1, 1, 12, 1, 1, 1> >;
    266266}}}
    267 (pensez à changer le nom de la classe pour `vci_lcd_coprocessor.cpp`.
     267(pensez à changer le nom de la classe pour `vci_gcd_coprocessor.cpp`.
    268268
    269269Ceci étant fait, écrivez le Makefile permettant la génération du fichier exécutable `simple_simulator.x`.