Changes between Version 36 and Version 37 of SoclibCourseTp2
- Timestamp:
- Sep 30, 2014, 4:38:10 PM (11 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
SoclibCourseTp2
v36 v37 32 32 33 33 Le protocol de communication VCI permet de construire des architectures matérielles multi-processeurs à memoire 34 partagée. Dans ce type d e d'architecture, les différents composants matériels utilisent des transactions pour communiquer entre eux.34 partagée. Dans ce type d'architecture, les différents composants matériels utilisent des transactions pour communiquer entre eux. 35 35 36 36 Terminologie : … … 39 39 * une ''transaction'' est un couple (paquet commande / paquet réponse) 40 40 41 Une transaction est initiée par un composant ''initiateur'', qui envoie un paquet ''commande'', et est terminée par41 Une transaction est initiée par un composant initiateur, qui envoie un paquet ''commande'', et est terminée par 42 42 un composant cible, qui répond à la commande en renvoyant un paquet ''réponse''. 43 43 44 44 == 3.1 Interconnection VCI == 45 45 46 Dans la spécification VCI "advanced", il y a principalement deux types de commandes :46 Dans la spécification VCI ''advanced'', il y a principalement deux types de commandes : 47 47 * transaction CMD_WRITE : le paquet commande contient un ou plusieurs flit (à des adresses constantes ou consécutives). Le paquet réponse contient un seul flit pour acquitter la transaction. 48 48 * transaction CMD_READ : le paquet commande contient un seul flit (à l'adresse du premier octet) et le nombre d'octets à lire est défini par le champs PLEN. Le paquet réponse contient un ou plusieurs flits suivant la longueur de la rafale. 49 49 50 '''Question ''' : à quoi sert le paquet réponse dans le cas d'une transaction d'écriture ?50 '''Question 1''' : à quoi sert le paquet réponse dans le cas d'une transaction d'écriture ? 51 51 52 52 Dans une architecture à espace d'adressage partagé, n'importe quel initiateur est capable de communiquer avec n'importe quelle cible. … … 56 56 décoder le champs VCI RSRCID pour aiguiller le paquet réponse vers l'initiateur concerné. 57 57 58 '''Question ''' : Pourquoi les différents types de sous-sytèmes d'interconnexion (bus, cross-bar, micro-réseaux, etc.)58 '''Question 2''' : Pourquoi les différents types de sous-sytèmes d'interconnexion (bus, cross-bar, micro-réseaux, etc.) 59 59 sont-ils conçus de telle sorte qu'ils utilisent des ressources matérielles séparées pour aiguiller les commandes et les réponses ? 60 60 … … 82 82 == 3.3 Modélisation des interfaces VCI == 83 83 84 La généricité des interfaces de communication VCI est évidemment une souplesse très utile, puisqu'elle permet d'adapter le protocole 85 aux besoins particuliers de chaque application embarquée (on n'a pas toujours besoin de 4 Goctets d'espace adressable). 84 La généricité des interfaces de communication VCI est évidemment une souplesse très utile, puisqu'elle permet d'adapter le protocole aux besoins particuliers de chaque application embarquée (on n'a pas toujours besoin de 4 Goctets d'espace adressable). 86 85 Mais elle crée une difficulté pour la modélisation des composants matériels, puisqu'il faut écrire des modèles de 87 86 simulation génériques, capable de s'adapter à différentes largeurs des champs adresse ou donnée. 88 On utilise pour cela la techique des ''templates'' du langage C++ : on regroupe toutes les valeurs de ces param êtres dans un oblet C++ de type `VciParams`, qui est utilisé comme paramètre ''template'' par tous les composants matériels qui possèdent des ports de communication VCI.87 On utilise pour cela la techique des ''templates'' du langage C++ : on regroupe toutes les valeurs de ces paramètres dans un objet C++ de type `VciParams`, qui est utilisé comme paramètre ''template'' par tous les composants matériels qui possèdent des ports de communication VCI. 89 88 (voir fichier ''vci_param.h''). 90 89 … … 132 131 133 132 Le champs ADDRESS de la commande VCI est décodé à deux endroits : 134 * les bits de poids faibles sont décodés par les périphériques adressables pour déterminer l'action à réaliser.133 * les bits de poids faibles sont décodés par les périphériques adressables pour déterminer sur quel octet porte la commandel. 135 134 * les bits de poids fort sont décodés par le sous-système d'interconnexion pour déterminer l'index de la cible et router le paquet commande vers la cible concernée. 136 135 Pour faciliter ce décodage, la plate-forme SoCLib définit les classe C++ ''!AddressDecodingTable'' (voir fichier ''address_decoding_table.h'') et … … 139 138 == 4.4 Allocation de tableaux == 140 139 141 On a parfois besoin d'utiliser des tableaux d'objets complexes. Par exemple, le composant générique ''!VciVgsb'' possède un nombre variable 142 de ports VCI initiateur, et un nombre variable de ports VCI cibles. Ces ports sont donc définis comme des tableaux de ports. Pour 143 pouvoir nommer chacun des éléments d'un tableau, la plate-forme SoCLib définit un mécanisme générique d'allocation et de désallocation 144 de tableaux (voir fichier ''alloc_elems.h''). 140 On a parfois besoin d'utiliser des tableaux d'objets complexes. Par exemple, le composant générique ''!VciVgsb'' possède un nombre variable de ports VCI initiateur, et un nombre variable de ports VCI cibles. Ces ports sont donc définis comme des tableaux de ports. Pour 141 pouvoir nommer chacun des éléments d'un tableau, la plate-forme SoCLib définit un mécanisme générique d'allocation et de désallocation de tableaux (voir fichier ''alloc_elems.h''). 145 142 146 143 = 5 Travail à réaliser = … … 185 182 Par conséquent, le segment occupé par ce périphérique dans l'espace adressable a une longueur de `4*4` = 16 octets. 186 183 187 Pour simplifier le décodage des adresses, on impose la contrainte que l'adresse de base de ce segment est 188 un multiple de sa longueur (on dit que le segment est ''aligné''). 184 Pour tous les périphériques adressables, on simplifie le décodage des adresses par le matériel, en imposant la contrainte que l'adresse de base du segment associé au périphérique soit un multiple de sa longueur (on dit que le segment est ''aligné''). 189 185 La carte des registres est définie comme suit : 190 186 … … 216 212 le fichier `vci_gcd_coprocessor.cpp`, qui contient une description incomplête des méthodes associées à ce composant. Complétez le code des méthodes `transition()` et `genMoore()`. 217 213 218 '''Question ''' : Pourquoi faut-t-il deux automates séparés pour contrôler l'interface VCI et pour contrôler le calcul214 '''Question 3''' : Pourquoi faut-t-il deux automates séparés pour contrôler l'interface VCI et pour contrôler le calcul 219 215 du PGCD proprement dit ? 220 216 … … 229 225 * le mode d'accès (Read ou Write) ne respecte pas les contraintes définies dans la carte des registres. 230 226 231 '''Question ''' : comment sont traitées les erreurs dans ce modèle de simulation? à quoi servent ces vérifications ?227 '''Question 4''' : comment sont traitées les erreurs dans ce modèle de simulation? à quoi servent ces vérifications ? 232 228 233 229 == 5.2 Composant ''!VciGcdMaster'' ==