Changes between Version 13 and Version 14 of SoclibCourseTp2


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

--

Legend:

Unmodified
Added
Removed
Modified
  • SoclibCourseTp2

    v13 v14  
    2222[[Image(soclib_tp2_archi.png)]]
    2323
    24 Le composant ''!VciGsb'' se comporte comme un bus, car il ne traite qu'une seule transaction à la fois.
    25 Si plusieurs initiateurs cherchent à envoyer un paquet commande, lecontrôleur du bus sélectionne un initiateur
     24Le composant ''!VciVgsb'' se comporte comme un bus, car il ne traite qu'une seule transaction à la fois.
     25Si plusieurs initiateurs cherchent à envoyer un paquet commande, le contrôleur du bus sélectionne un initiateur
    2626(en respectant une priorité tournante de type ''round-robin''), il aiguille la commande vers la bonne cible en
    2727décodant les bits de poids fort de l'adresse, attend la réponse de la cible, et aiguille celle-ci vers le bon initiateur.
    28 La transaction (n+1( n'est traitée que lorsque la ransaction (n) est entièrement terminée. 
     28La transaction (n+1) n'est traitée que lorsque la ransaction (n) est entièrement terminée. 
    2929
    3030= 3. Protocole VCI/OCP =
     
    4444'''Question''' : à quoi sert le paquet réponse dans le cas d'une transaction d'écriture ?
    4545
    46 En principe, n'importe quel initiateur est capable de communiquer avec n'importe quelle cible. 
     46Dans une architecture à espace d'adressage partagé, n'importe quel initiateur est capable de communiquer avec n'importe quelle cible. 
    4747La cible est désignée par les bits de poids fort de l'adresse. Le champs VCI ADDRESS doit donc être décodé
    4848par le (ou les) composant(s) matériel(s) qui réalise(nt) le sous-sytème d'interconnexion, pour aiguiller
     
    5555[[Image(soclib_tp2_vci_protocol.png)]]
    5656
    57 Un canal de communication VCI utilise donc deux sous-canaux : un sous-canal ''direct'' pour
    58 la commande et un sous-canal ''retour'' pour la réponse. Il est intéressant de noter que chacun de ces deux sous-canaux respecte le protocole FIFO. Les signaux CMDVAL et CMDACK (resp. RSPVAL et RSPACK) correspondent aux signaux WOK et ROK du protocole FIFO pour le sous-canal commande (resp. réponse). C'est un exemple typique d'encapsulation de protocoles.
     57Un canal de communication VCI utilise donc deux sous-canaux : un sous-canal dans le sens (initiateur => cible) pour
     58la commande et un sous-canal dans le sens (cible=>initiateur) pour la réponse. Il est intéressant de noter que chacun de ces deux sous-canaux respecte le protocole FIFO. Les signaux CMDVAL et CMDACK (resp. RSPVAL et RSPACK) correspondent aux signaux WOK et ROK du protocole FIFO pour le sous-canal commande (resp. réponse).
    5959
    6060== 3.2 Les signaux VCI ==
     
    7676== 3.3 Modélisation des interfaces VCI ==
    7777
    78 La généricité des interfaces de communication VCI est évidemment une souplesse très utile,
    79 mais elle crée une difficulté pour la modélisation des composants matériels, puisqu'ilfaut écrire des modèles de
     78La généricité des interfaces de communication VCI est évidemment une souplesse très utile, puisqu'elle permet d'adapter le protocole
     79aux besoins particuliers de chaque application embarquée (on n'a pas toujours besoin de 4 Goctets d'espace adressable).
     80Mais elle crée une difficulté pour la modélisation des composants matériels, puisqu'il faut écrire des modèles de
    8081simulation génériques, capable de s'adapter à différentes largeurs des champs adresse ou donnée.
    8182On 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.
    82 
    83 On définit également trois autres objets, qui facilitent l'écriture des modèles de simulation CABA :
     83(voir fichier ''vci_param.h'').
     84
     85Comme on l'a fait pour le canal de communication FIFO, on définit trois objets, qui facilitent l'écriture des modèles de simulation CABA :
    8486 * l'objet ''VciSignals'' regroupe tous les signaux (commande et réponse) d'un canal VCI. (voir fichier ''vci_signals.h'')
    85  * l'objet ''VciInitiator'' regroupe tous les ports utilisés par un initiateur VCI pour émettre une commande,
    86 et recevoir la réponse. (voir fichier ''vci_initiator.h'')
    87  * l'objet ''VciTarget'' regroupe tous les ports utilisés par une cible VCI pour émettre une réponsee,
    88 et recevoir une commande. (voir fichier ''vci_target.h'')
    89 Ces trois objets utilisent évidemment un paramètre template de type ''VciParams''.
    90 
    91 = 4. Segmentation de l'espace adressable =
    92 
    93 On assigne à tout composant matérielpossédant un port VCI  (composant ''cible ou composant ''initiateur'') un index permettant de l'identifier de façon unique. Cet index peut être éventuellement structuré (on parle d'index composite) si l'architecture est structurée ''clusters'.  Un index composite est la concaténation d'un index global (le numéro de cluster) et d'un index local (à l'intérieur d'un cluster).
    94 
    95 La plate-forme de prototypage SoCLib définit la classe C++ ''!IntTab'' pour représenter ces index composites. (voir fichier ''int_tab.h'').
     87 * l'objet ''VciInitiator'' regroupe tous les ports utilisés par un initiateur VCI pour émettre une commande, et recevoir la réponse. (voir fichier ''vci_initiator.h'')
     88 * l'objet ''VciTarget'' regroupe tous les ports utilisés par une cible VCI pour émettre une réponse, et recevoir une commande. (voir fichier ''vci_target.h'')
     89Ces trois objets possèdent évidemment un paramètre template de type ''VciParams''.
     90
     91= 4. Outillage logiciel =
     92
     93Dans cette section, on présente différentes classes C++ définies par la plate-forme de prototypage virtuel SoCLib pour
     94faciliter et simplifier l'écriture des modèles de simulation.
     95
     96== 4.1 Indexation des composants VCI ==
     97
     98On assigne à tout composant matérielpossédant un port VCI  (composant ''cible ou composant ''initiateur'') un index permettant de l'identifier de façon unique. Cet index peut être éventuellement structuré (on parle d'index composite) si l'architecture est structurée ''clusters''.  Un index composite est la concaténation d'un index global (le numéro de cluster) et d'un index local (à l'intérieur d'un cluster).
     99
     100La plate-forme SoCLib définit la classe C++ ''!IntTab'' pour représenter ces index composites. (voir fichier ''int_tab.h'').
     101Dans ce TP, on utilisera un seul niveau d'indexation, mais il faut utiliser l'objet ''!IntTab'' pour indexer les composants VCI.
     102
     103== 4.2 Segmentation de l'espace addressable ==
    96104
    97105Dans une architecture à mémoire partagée, on assigne à tout composant ''cible'' un (ou plusieurs) segment(s) dans l'espace adressable.
     
    102110segments aux différentes cibles est donc un caractéristique globale de l'architecture, et doit donc être définie dans la ''top-cell'' décrivant l'architecture générale du système.
    103111
    104 La plate-forme de prototypage SoCLib définit la classe C++ ''!MappingTable'' permettant de centraliser dans un même objet toutes
     112La plate-forme SoCLib définit la classe C++ ''!MappingTable'' permettant de centraliser dans un même objet toutes
    105113les informations concernant la segmentation de l'espace addressable, et la correspondance entre les cible VCI (identifiées par leur index),
    106114et les segments. (voir fichiers ''mapping_table.h'' et ''segment.h'').
    107115
     116Un segment est caractérisé par 5 informations :
     117 * un nom
     118 * une adresse de base
     119 * une taille (en octets)
     120 * l'index de la cible VCI à laquelle il est assigné
     121 * un attribut de cachabilité
     122
    108123Pour plus de détails, vous pouvez consulter le site WEB du projet SoCLib :  [https://www.soclib.fr/trac/dev/wiki/Component/MappingTable].
    109124
    110 Dans une architecture à mémoire partagée, l'adresse contenue dans la commande VCI est donc décodée à différents endroits :
    111 les bits de poids faibles sont décodés par les périphériques adressables pour déterminer l'action à réaliser, et les bits de poids fort sont décodés par le sous-système d'interconnexion pour déterminer l'index de la cible concernée. Pour faciliter ce décodage, la plate-forme de prototypage SoCLib définit la classe C++ ''!AddressDecodingTable'' (fichier ''address_decoding_table.h'').
     125== 4.3 Décodage des champs ADDRESS et SRCID ==
     126
     127Dans une architecture à mémoire partagée, l'adresse VCI est décodée à différents endroits :
     128les bits de poids faibles sont décodés par les périphériques adressables pour déterminer l'action à réaliser, et les bits de poids fort sont décodés par le sous-système d'interconnexion pour déterminer l'index de la cible concernée. Pour faciliter ce décodage, la plate-forme SoCLib définit la classe C++ ''!AddressDecodingTable'' (voir fichier ''address_decoding_table.h'').
     129
     130== 4.4 Allocation de tableaux ==
     131
     132On a parfois besoin d'utiliser des tableaux d'objets complexes. Par exemple, le composant ''!VciVgsb'' possède un nombre variable
     133de ports VCI initiateur, et un nombre variable de ports VCI cibles. Ces ports sont donc définis comme des tableaux de ports. Pour
     134pouvoir 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
     135de tableaux (voir fichier ''alloc_elems.h'').
    112136 
    113137= 5. Travail à réaliser =
     
    131155 * ''address_decoding_table.h'' : Table indexée par une partie de l'adresse.
    132156 * ''address_decoding_table.cpp'' : implémentation des méthodes de la table indexée.
    133 
     157 * ''alloc_elems.h" : allocation de tableaux d'objets complexes
    134158L'archive contient également les fichiers suivants :
    135  * ''vci_lcd_master.h'' : définition du composant ''!VciLcdMaster''.
    136  * ''vci_lcd_master.cpp'' : méthodes associées (fichier incomplet).
    137  * ''vci_lcd_coprocessor.h'' : définition du composant ''!VciLcdCoprocessor''.
    138  * ''vci_lcd_coprocessor.cpp'' : méthodes associées (fichier incomplet).
    139  * ''vci_gsb.h'' : définition du composant ''!VciGsb''.
    140  * ''vci_gsb.cpp'' : méthodes associées (fichier complet).
    141  * ''tp2_simple_top.cpp'' : top-cell d'une architecture ne contenant que deux composants.
     159 * ''vci_lcd_master.h'' : définition du composant ''!VciLcdMaster'' (fichier complet)
     160 * ''vci_lcd_master.cpp'' : méthodes associées (fichier incomplet)
     161 * ''vci_lcd_coprocessor.h'' : définition du composant ''!VciLcdCoprocessor''. (fichier complet)
     162 * ''vci_lcd_coprocessor.cpp'' : méthodes associées (fichier incomplet)
     163 * ''vci_gsb.h'' : définition du composant ''!VciGsb''. (fichier complet)
     164 * ''vci_gsb.cpp'' : méthodes associées (fichier complet)
     165 * ''tp2_simple_top.cpp'' : top-cell d'une architecture simple à deux composants (fichier incomplet)
    142166
    143167== 5.1 Composant ''!VciLcdCoprocessor ==
     
    166190Une erreur est signalée si le coprocesseur reçoit une commande de longueur supérieure à un mot,
    167191ou si l'adresse reçue n'appartient pas au segment qui a été défini pour le coprocesseur,
    168 ou si le mode d'accès (Read ou write) ne respecte pas les contraintes ci-dessus.
     192ou si le mode d'accès (Read ou Write) ne respecte pas les contraintes ci-dessus.
    169193
    170194Question : comment sont traitées les erreurs dans ce modèle de simulation? à quoi servent ces vérifications ?
     
    175199
    176200Le fichier ''vci_lcd_coprocessor.h'' contient une définition complête du composant ''!VciLcdCoprocessor''.
    177 Il n'a pas besoin d'ëtre modifié.
    178 Le fichier ''vci_lcd_coprocessor.cpp'' contient une description incomplête des méthodes associées à ce composant.
    179 Complêtez le code des méthodes ''transition()'' et ''genMoore()'', pour traiter les états de l'automate qui ne le sont pas.
     201Il n'a pas besoin d'être modifié, mais vous aurez besoin de le lire attentivement pour modifier
     202le fichier ''vci_lcd_coprocessor.cpp'', qui contient une description incomplête des méthodes associées à ce composant.
     203Complêtez le code des méthodes ''transition()'' et ''genMoore()''.
    180204
    181205== 5.2 Composant ''!VciLcdMaster'' ==