Changes between Version 36 and Version 37 of SoclibCourseTp2


Ignore:
Timestamp:
Sep 30, 2014, 4:38:10 PM (11 years ago)
Author:
alain
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • SoclibCourseTp2

    v36 v37  
    3232
    3333Le protocol de communication VCI permet de construire des architectures matérielles multi-processeurs à memoire
    34 partagée. Dans ce type de d'architecture, les différents composants matériels utilisent des transactions pour communiquer entre eux.
     34partagée. Dans ce type d'architecture, les différents composants matériels utilisent des transactions pour communiquer entre eux.
    3535
    3636Terminologie :
     
    3939 * une ''transaction'' est un couple (paquet commande / paquet réponse)
    4040
    41 Une transaction est initiée par un composant ''initiateur'', qui envoie un paquet ''commande'', et est terminée par
     41Une transaction est initiée par un composant initiateur, qui envoie un paquet ''commande'', et est terminée par
    4242un composant cible, qui répond à la commande en renvoyant un paquet ''réponse''.
    4343
    4444== 3.1 Interconnection VCI ==
    4545
    46 Dans la spécification VCI "advanced", il y a principalement deux types de commandes :
     46Dans la spécification VCI ''advanced'', il y a principalement deux types de commandes :
    4747 * 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.
    4848 * 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.
    4949
    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 ?
    5151
    5252Dans une architecture à espace d'adressage partagé, n'importe quel initiateur est capable de communiquer avec n'importe quelle cible. 
     
    5656décoder le champs VCI RSRCID pour aiguiller le paquet réponse vers l'initiateur concerné.
    5757
    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.)
    5959sont-ils conçus de telle sorte qu'ils utilisent des ressources matérielles séparées pour aiguiller les commandes et les réponses ?
    6060
     
    8282== 3.3 Modélisation des interfaces VCI ==
    8383
    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).
     84La 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).
    8685Mais elle crée une difficulté pour la modélisation des composants matériels, puisqu'il faut écrire des modèles de
    8786simulation 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.
     87On 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.
    8988(voir fichier ''vci_param.h'').
    9089
     
    132131
    133132Le 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.
    135134 * 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.
    136135Pour faciliter ce décodage, la plate-forme SoCLib définit les classe C++ ''!AddressDecodingTable'' (voir fichier ''address_decoding_table.h'') et
     
    139138== 4.4 Allocation de tableaux ==
    140139
    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'').
     140On 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
     141pouvoir 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'').
    145142 
    146143= 5 Travail à réaliser =
     
    185182Par conséquent, le segment occupé par ce périphérique dans l'espace adressable a une longueur de `4*4` = 16 octets.
    186183
    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é''). 
     184Pour 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é''). 
    189185La carte des registres est définie comme suit :
    190186
     
    216212le 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()`.
    217213
    218 '''Question''' : Pourquoi faut-t-il deux automates séparés pour contrôler l'interface VCI et pour contrôler le calcul
     214'''Question 3''' : Pourquoi faut-t-il deux automates séparés pour contrôler l'interface VCI et pour contrôler le calcul
    219215du PGCD proprement dit ?
    220216
     
    229225 * le mode d'accès (Read ou Write) ne respecte pas les contraintes définies dans la carte des registres.
    230226
    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 ?
    232228
    233229== 5.2 Composant ''!VciGcdMaster'' ==