Changes between Version 13 and Version 14 of SoclibCourseTp2
- Timestamp:
- Sep 9, 2009, 11:04:26 AM (16 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
SoclibCourseTp2
v13 v14 22 22 [[Image(soclib_tp2_archi.png)]] 23 23 24 Le composant ''!Vci Gsb'' se comporte comme un bus, car il ne traite qu'une seule transaction à la fois.25 Si plusieurs initiateurs cherchent à envoyer un paquet commande, le contrôleur du bus sélectionne un initiateur24 Le composant ''!VciVgsb'' se comporte comme un bus, car il ne traite qu'une seule transaction à la fois. 25 Si plusieurs initiateurs cherchent à envoyer un paquet commande, le contrôleur du bus sélectionne un initiateur 26 26 (en respectant une priorité tournante de type ''round-robin''), il aiguille la commande vers la bonne cible en 27 27 dé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.28 La transaction (n+1) n'est traitée que lorsque la ransaction (n) est entièrement terminée. 29 29 30 30 = 3. Protocole VCI/OCP = … … 44 44 '''Question''' : à quoi sert le paquet réponse dans le cas d'une transaction d'écriture ? 45 45 46 En principe, n'importe quel initiateur est capable de communiquer avec n'importe quelle cible.46 Dans une architecture à espace d'adressage partagé, n'importe quel initiateur est capable de communiquer avec n'importe quelle cible. 47 47 La cible est désignée par les bits de poids fort de l'adresse. Le champs VCI ADDRESS doit donc être décodé 48 48 par le (ou les) composant(s) matériel(s) qui réalise(nt) le sous-sytème d'interconnexion, pour aiguiller … … 55 55 [[Image(soclib_tp2_vci_protocol.png)]] 56 56 57 Un canal de communication VCI utilise donc deux sous-canaux : un sous-canal ''direct''pour58 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.57 Un canal de communication VCI utilise donc deux sous-canaux : un sous-canal dans le sens (initiateur => cible) pour 58 la 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). 59 59 60 60 == 3.2 Les signaux VCI == … … 76 76 == 3.3 Modélisation des interfaces VCI == 77 77 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 78 La généricité des interfaces de communication VCI est évidemment une souplesse très utile, puisqu'elle permet d'adapter le protocole 79 aux besoins particuliers de chaque application embarquée (on n'a pas toujours besoin de 4 Goctets d'espace adressable). 80 Mais elle crée une difficulté pour la modélisation des composants matériels, puisqu'il faut écrire des modèles de 80 81 simulation génériques, capable de s'adapter à différentes largeurs des champs adresse ou donnée. 81 82 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. 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 85 Comme 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 : 84 86 * 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'') 89 Ces trois objets possèdent évidemment un paramètre template de type ''VciParams''. 90 91 = 4. Outillage logiciel = 92 93 Dans cette section, on présente différentes classes C++ définies par la plate-forme de prototypage virtuel SoCLib pour 94 faciliter et simplifier l'écriture des modèles de simulation. 95 96 == 4.1 Indexation des composants VCI == 97 98 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). 99 100 La plate-forme SoCLib définit la classe C++ ''!IntTab'' pour représenter ces index composites. (voir fichier ''int_tab.h''). 101 Dans 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 == 96 104 97 105 Dans une architecture à mémoire partagée, on assigne à tout composant ''cible'' un (ou plusieurs) segment(s) dans l'espace adressable. … … 102 110 segments 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. 103 111 104 La plate-forme de prototypageSoCLib définit la classe C++ ''!MappingTable'' permettant de centraliser dans un même objet toutes112 La plate-forme SoCLib définit la classe C++ ''!MappingTable'' permettant de centraliser dans un même objet toutes 105 113 les informations concernant la segmentation de l'espace addressable, et la correspondance entre les cible VCI (identifiées par leur index), 106 114 et les segments. (voir fichiers ''mapping_table.h'' et ''segment.h''). 107 115 116 Un 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 108 123 Pour plus de détails, vous pouvez consulter le site WEB du projet SoCLib : [https://www.soclib.fr/trac/dev/wiki/Component/MappingTable]. 109 124 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 127 Dans une architecture à mémoire partagée, l'adresse VCI est décodée à différents endroits : 128 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 SoCLib définit la classe C++ ''!AddressDecodingTable'' (voir fichier ''address_decoding_table.h''). 129 130 == 4.4 Allocation de tableaux == 131 132 On a parfois besoin d'utiliser des tableaux d'objets complexes. Par exemple, le composant ''!VciVgsb'' possède un nombre variable 133 de ports VCI initiateur, et un nombre variable de ports VCI cibles. Ces ports sont donc définis comme des tableaux de ports. Pour 134 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 135 de tableaux (voir fichier ''alloc_elems.h''). 112 136 113 137 = 5. Travail à réaliser = … … 131 155 * ''address_decoding_table.h'' : Table indexée par une partie de l'adresse. 132 156 * ''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 134 158 L'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) 142 166 143 167 == 5.1 Composant ''!VciLcdCoprocessor == … … 166 190 Une erreur est signalée si le coprocesseur reçoit une commande de longueur supérieure à un mot, 167 191 ou 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.192 ou si le mode d'accès (Read ou Write) ne respecte pas les contraintes ci-dessus. 169 193 170 194 Question : comment sont traitées les erreurs dans ce modèle de simulation? à quoi servent ces vérifications ? … … 175 199 176 200 Le 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.201 Il n'a pas besoin d'être modifié, mais vous aurez besoin de le lire attentivement pour modifier 202 le fichier ''vci_lcd_coprocessor.cpp'', qui contient une description incomplête des méthodes associées à ce composant. 203 Complêtez le code des méthodes ''transition()'' et ''genMoore()''. 180 204 181 205 == 5.2 Composant ''!VciLcdMaster'' ==