| 29 | Les modèles de simulation des composants matériels instanciés dans cette architecture sont disponibles dans la bibliothèque SoCLib. |
| 30 | Ils vous sont fournis, et vous n'aurez pas à les re-écrire vous-même. |
| 31 | |
| 32 | Le composant ''!VciXcacheWrapper'' est un contrôleur de cache générique à interface VCI, qui peut être utilisé pour interfacer |
| 33 | différents coeurs de processeur avec le reste du système. Le coeur du processeur est modélisé par un ISS (Instruction Set Simulateur). |
| 34 | Le type du proceseur instancié (MIP32, ARM, SPARCV8, PPC405, NIOS, MicroBlaze, etc.) est défini par un paramètre template |
| 35 | du composant ''!VciXcacheWrapper''. |
| 36 | |
| 37 | Le composant ''!VciSimpleRam'' est utilisé pour modéliser des mémoires inscriptibles embarquées (SRAM), ou |
| 38 | pour modéliser des mémoires non inscriptibles (ROM) dont le contenu est ''cablé''. |
| 39 | Ce composants peut contenir un ou plusieurs segments (correspondant à des tranches disjointes |
| 40 | de l'espace addressable). Cela signifie que ce composant décode les bits de poids fort de l'adresse VCI |
| 41 | pour adresser le segment désigné. Les dimensions des tableaux qui implémentent les bancs mémoire |
| 42 | physique sont définis par les longueurs des segments définis dans la MappingTable. |
| 43 | |
66 | | * `vci_lcd_master.h` : définition du composant `VciLcdMaster` (fichier complet) |
67 | | * `vci_lcd_master.cpp` : méthodes associées (fichier incomplet) |
68 | | * `vci_lcd_coprocessor.h` : définition du composant `VciLcdCoprocessor`. (fichier complet) |
69 | | * `vci_lcd_coprocessor.cpp` : méthodes associées (fichier incomplet) |
70 | | * `vci_vgsb.h` : définition du composant `VciVgsb`. (fichier complet) |
71 | | * `vci_vgsb.cpp` : méthodes associées (fichier complet) |
72 | | * `tp2_simple_top.cpp` : top-cell d'une architecture simple à deux composants (fichier incomplet) |
| 82 | * `vci_xcache_wrapper.h` : définition du composant `VciXcacheWrapper` |
| 83 | * `vci_xcache_wrapper.cpp` : méthodes associées |
| 84 | * `vci_lcd_coprocessor.h` : définition du composant `VciLcdCoprocessor` |
| 85 | * `vci_lcd_coprocessor.cpp` : méthodes associées |
| 86 | * `vci_simple_ram.h` : définition du composant `VciSimpleRam` |
| 87 | * `vci_simple_ram.cpp` : méthodes associées |
| 88 | * `vci_multi_tty.h` : définition du composant `VciMultiTty` |
| 89 | * `vci_multi_tty.cpp` : méthodes associées |
| 90 | * `vci_vgsb.h` : définition du composant `VciVgsb` |
| 91 | * `vci_vgsb.cpp` : méthodes associées |
| 92 | * `tp3_mono_top.cpp` : top-cell d'une architecture simple à deux composants (fichier incomplet) |
92 | | Attention : Il n'existe pas réellement de registre ''r_start'' dans le composant matériel. |
93 | | Lorsque le composant ''!VciLcdCoprocessor'' reçoit une commande d'écriture à l'adresse |
94 | | correspondant à l'adresse de ''r_start'', la donnée WDATA correspondante n'est écrite nulle part, |
95 | | mais la commande est interprêtée par le coprocesseur comme un ordre de démarrage du calcul. |
| 104 | Cette architecture nécessite la définition de 6 segments: |
| 105 | * '''seg_lcd''' est le segment associé au coprocesseur LCD. On prendra pour adresse de base la valeur 0xD0000000. La longueur de 16 octets correspond aux quatre registres adressables de ce composant. |
| 106 | * '''seg_tty''' est le segment associé au contrôleur de terinaux TTY. On prendra pour adresse de base la valeur 0xC0000000, et pour longueur 64 octets, ce qui permet d'adresser jusqu'à 4 terminaux indépendants (consulter la spécification fonctionnelle du composant VciMultiTty). |
| 107 | * '''seg_reset''' est le segment contenant contient le code de ''boot'' exécuté à la mise sous tension. Il est évidemment assigné à la ROM. L'adresse de base 0xBFC00000 est imposée par la spécification du processeur MIPS32. On choisira une capacité de stockage de 4Koctets. |
| 108 | * '''seg_giet''' est le segment contenant le code du Gestionnaire d'Interruptions, Exceptions, et Trappes (GIET). Il est assigné à la RAM. L'adresse de base 0x80000000 est imposée par la spécification du processeur MIPS32. On choisira une capacité de stockage de 4 Koctets. |
| 109 | * '''seg_code''' est le segment contenant le code de l'application logicielle embarquée. Il est assigné à la RAM. On choisira pour adresse de base la valeur 0x00400000, |
| 110 | et une capacité de stockage de 16 Koctets. |
| 111 | * '''seg_data''' est le segment contenant les données globales et la pile d'exécution de l'application logicielle embarquée. Il est assigné à la RAM. On choisira pour adresse de base la valeur 0x10000000, et une capacité de stockage de 64 Koctets. |
97 | | Une erreur est signalée si le coprocesseur reçoit une commande de longueur supérieure à un mot, |
98 | | ou si l'adresse reçue n'appartient pas au segment qui a été défini pour le coprocesseur, |
99 | | ou si le mode d'accès (Read ou Write) ne respecte pas les contraintes ci-dessus. |
100 | | |
101 | | Question : comment sont traitées les erreurs dans ce modèle de simulation? à quoi servent ces vérifications ? |
102 | | |
103 | | La figure ci-dessous décrit la structure de l'automate de contrôle du composant `VciLcdCoprocessor`. |
104 | | |
105 | | [[Image(soclib_tp2_coprocessor.png)]] |
106 | | |
107 | | Le fichier `vci_lcd_coprocessor.h` contient une définition complête du composant `VciLcdCoprocessor`. |
108 | | Il n'a pas besoin d'être modifié, mais vous aurez besoin de le lire attentivement pour modifier |
109 | | le fichier `vci_lcd_coprocessor.cpp`, qui contient une description incomplête des méthodes associées à ce composant. |
110 | | Complétez le code des méthodes `transition()` et `genMoore()`. |
111 | | |
112 | | == 5.2 Composant ''!VciLcdMaster'' == |
113 | | |
114 | | Le composant `VciLcdMaster` est un initiateur VCI, qui exécute une boucle infinie dans laquelle il exécute |
115 | | successivement les 6 actions suivantes: |
116 | | 1. calcul de deux valeurs aléatoires (entiers positifs codés sur 32 bits) |
117 | | 1. écriture de l'opérande OPA dans le registre `r_opa` du coprocesseur LCD. |
118 | | 1. écriture de l'opérande OPB dans le registre `r_opb` du coprocesseur LCD. |
119 | | 1. écriture dans le pseudo-registre `r_start` du coprocesseur LCD. |
120 | | 1. lecture du résultat dans le registre `r_res` du coprocesseur LCD. |
121 | | 1. affichage des résultats. |
122 | | |
123 | | Pour accéder au coprocesseur LCD, le composant a besoin de l'adresse de base du |
124 | | segment de l'espace adressable aui a été assigné au coprocesseur LCD. |
125 | | Le composant ''!VciLcdMaster'' étant un automate cablé (non programmable), on considère |
126 | | que cette adresse est également "câblée". Elle est donc définie comme un paramètre du constructeur. |
127 | | |
128 | | La figure ci-dessous décrit la structure de l'automate de contrôle du composant ''!VciLcdMaster''. |
129 | | |
130 | | [[Image(soclib_tp2_master.png)]] |
131 | | |
132 | | Chaque transaction VCI nécessite deux états dans l'automate: un premier état pour envoyer la commande |
133 | | (on reste dans cet état tant qu'on a pas reçu confirmation que la commande a été acceptée), et un second état |
134 | | dans lequel on attend la réponse (on reste dans cet état tant qu'on a pas reçu une réponse valide). |
135 | | |
136 | | Le fichier `vci_lcd_coprocessor.h` contient une description complète du composant `!VciLcdMaster`. |
137 | | Il n'a pas besoin d'être modifié, mais vous devez le lire attentivement pour modifier |
138 | | le fichier `vci_lcd_coprocessor.cpp`, qui contient une description incomplète des méthodes associées à ce composant. |
139 | | Complétez le code des méthodes `transition()` et `genMoore()`. |
140 | | |
141 | | == 5.3 Architecture minimale == |
142 | | |
143 | | Pour valider les modèles de simulation des composants `VciLcdMaster` et `VciLcdCoprocessor`, |
144 | | on construit une architecture minimale ne contenant que deux composants matériels, conformément au schéma ci-dessous : |
145 | | |
146 | | [[Image(soclib_tp2_simple_archi.png)]] |
147 | | |
148 | | En vous inspirant de ce que vous avez fait dans le TP1, complétez le fichier ''tp2_simple_top.cpp'' qui vous est fourni, |
149 | | en précisant : |
150 | | * les caractéristiques du segment mémoire associé au coprocesseur LCD. |
151 | | * les valeurs des paramètres VCI (largeurs des champs) dans l'objet `vci_param`. |
152 | | * les valeurs des arguments des constructeurs des deux composants. |
153 | | On prendra pour valeurs des paramètres VCI les valeurs définies en commentaire dans le fichier ''tp2_simple_top.cpp''. |
| 113 | == 5.3 Génération du logiciel embarqué == |