Changes between Version 21 and Version 22 of SoclibCourseTp2
- Timestamp:
- Sep 26, 2009, 11:31:49 AM (16 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
SoclibCourseTp2
v21 v22 18 18 L'architecture matérielle qu'on souhaite prototyper dans ce second TP instancie 7 composants matériels de 19 19 trois types différents : 20 Les deux composants ''!Vci LcdCoprocessor'' 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.20 Les 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. 21 21 22 22 [[Image(soclib_tp2_archi.png)]] … … 159 159 160 160 L'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) 166 166 * `vci_vgsb.h` : définition du composant `VciVgsb`. (fichier complet) 167 167 * `vci_vgsb.cpp` : méthodes associées (fichier complet) 168 168 * `tp2_simple_top.cpp` : top-cell d'une architecture simple à deux composants (fichier incomplet) 169 169 170 == 5.1 Composant ''!Vci LcdCoprocessor'' ==171 172 Le composant ''!Vci LcdCoprocessor'' se comporte comme un périphérique adressable, et doit donc être170 == 5.1 Composant ''!VciGcdCoprocessor'' == 171 172 Le composant ''!VciGcdCoprocessor'' se comporte comme un périphérique adressable, et doit donc être 173 173 modélisé comme une cible VCI. Il possède un seul port de type ''!VciTarget'', et 4 registres 174 174 (ou pseudo-registres) implantés dans l'espace addressable, qui peuvent donc - en principe - être … … 187 187 188 188 Attention : Il n'existe pas réellement de registre ''r_start'' dans le composant matériel. 189 Lorsque le composant ''!Vci LcdCoprocessor'' reçoit une commande d'écriture à l'adresse189 Lorsque le composant ''!VciGcdCoprocessor'' reçoit une commande d'écriture à l'adresse 190 190 correspondant à l'adresse de ''r_start'', la donnée WDATA correspondante n'est écrite nulle part, 191 191 mais la commande est interprêtée par le coprocesseur comme un ordre de démarrage du calcul. … … 193 193 Comme pour tout composant contenant des registres addressables, on définit dans un fichier 194 194 séparé les mnémoniques correspondant aux numéros des registres, car cette information 195 est utilisée non seulement par le composant ''!Vci LcdCoprocesseur'' (pour décoder les adresses),196 mais également par le composant ''!Vci LcdMaster'' (pour générer les adresses).195 est utilisée non seulement par le composant ''!VciGcdCoprocesseur'' (pour décoder les adresses), 196 mais également par le composant ''!VciGcdMaster'' (pour générer les adresses). 197 197 198 198 Une erreur est signalée si le coprocesseur reçoit une commande de longueur supérieure à un mot, … … 202 202 Question : comment sont traitées les erreurs dans ce modèle de simulation? à quoi servent ces vérifications ? 203 203 204 La figure ci-dessous décrit la structure de l'automate de contrôle du composant `Vci LcdCoprocessor`.204 La figure ci-dessous décrit la structure de l'automate de contrôle du composant `VciGcdCoprocessor`. 205 205 206 206 [[Image(soclib_tp2_coprocessor.png)]] 207 207 208 Le fichier `vci_ lcd_coprocessor.h` contient une définition complête du composant `VciLcdCoprocessor`.208 Le fichier `vci_gcd_coprocessor.h` contient une définition complête du composant `VciGcdCoprocessor`. 209 209 Il 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.210 le fichier `vci_gcd_coprocessor.cpp`, qui contient une description incomplête des méthodes associées à ce composant. 211 211 Complétez le code des méthodes `transition()` et `genMoore()`. 212 212 213 == 5.2 Composant ''!Vci LcdMaster'' ==214 215 Le composant `Vci LcdMaster` est un initiateur VCI, qui exécute une boucle infinie dans laquelle il exécute213 == 5.2 Composant ''!VciGcdMaster'' == 214 215 Le composant `VciGcdMaster` est un initiateur VCI, qui exécute une boucle infinie dans laquelle il exécute 216 216 successivement les 6 actions suivantes: 217 217 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. 222 222 1. affichage des résultats. 223 223 224 Pour accéder au coprocesseur LCD, le composant a besoin de l'adresse de base du225 segment de l'espace adressable aui a été assigné au coprocesseur LCD.226 Le composant ''!Vci LcdMaster'' étant un automate cablé (non programmable), on considère224 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. 226 Le composant ''!VciGcdMaster'' étant un automate cablé (non programmable), on considère 227 227 que cette adresse est également "câblée". Elle est donc définie comme un paramètre du constructeur. 228 228 229 La figure ci-dessous décrit la structure de l'automate de contrôle du composant ''!Vci LcdMaster''.229 La figure ci-dessous décrit la structure de l'automate de contrôle du composant ''!VciGcdMaster''. 230 230 231 231 [[Image(soclib_tp2_master.png)]] … … 235 235 dans lequel on attend la réponse (on reste dans cet état tant qu'on a pas reçu une réponse valide). 236 236 237 Le fichier `vci_ lcd_coprocessor.h` contient une description complète du composant `!VciLcdMaster`.237 Le fichier `vci_gcd_coprocessor.h` contient une description complète du composant `!VciGcdMaster`. 238 238 Il 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.239 le fichier `vci_gcd_coprocessor.cpp`, qui contient une description incomplète des méthodes associées à ce composant. 240 240 Complétez le code des méthodes `transition()` et `genMoore()`. 241 241 242 242 == 5.3 Architecture minimale == 243 243 244 Pour valider les modèles de simulation des composants `Vci LcdMaster` et `VciLcdCoprocessor`,244 Pour valider les modèles de simulation des composants `VciGcdMaster` et `VciGcdCoprocessor`, 245 245 on construit une architecture minimale ne contenant que deux composants matériels, conformément au schéma ci-dessous : 246 246 … … 249 249 En vous inspirant de ce que vous avez fait dans le TP1, complétez le fichier ''tp2_simple_top.cpp'' qui vous est fourni, 250 250 en 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. 252 252 * les valeurs des paramètres VCI (largeurs des champs) dans l'objet `vci_param`. 253 253 * les valeurs des arguments des constructeurs des deux composants. … … 258 258 Il faut ensuite compiler les différents fichiers pour générer le simulateur. 259 259 On 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 `Vci LcdMaster`, `VciLcdCoprocessor`.260 du paramètre template `vci_param` des composants `VciGcdMaster`, `VciGcdCoprocessor`. 261 261 Dans un contexte de compilation séparée, il est nécessaire de définir explicitement la valeur de ce paramètre 262 262 dans 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` :263 Pour cela, il faut rajouter la ligne suivante à la fin des fichiers `vci_gcd_master.cpp` et `vci_gcd_coprocessor.cpp` : 264 264 {{{ 265 template class Vci LcdMaster<soclib::caba::VciParams<4, 8, 32, 1, 1, 1, 12, 1, 1, 1> >;265 template class VciGcdMaster<soclib::caba::VciParams<4, 8, 32, 1, 1, 1, 12, 1, 1, 1> >; 266 266 }}} 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`. 268 268 269 269 Ceci étant fait, écrivez le Makefile permettant la génération du fichier exécutable `simple_simulator.x`.