167 | | Question : Quels sont les registres initialisés par le code de boot ? pouquoi ces initialisations ? |
168 | | |
169 | | Puisqu'on dispose d'un contrôleur de terminal dans l'architecture, le premier programme que vous allez exécuter se contentera d'afficher le célèbre ''hello world'' sur le terminal. Complêtez le fichier ''main.c'' en utilisant la fonction C ''fputs()''. N'oubliez pas de terminer proprement le programme par un appel à la fonction C ''exit()''. |
170 | | |
171 | | Lancez l'exécution du Makefile. Un fichier ''soft.bin'' doit doit être créé dans le répertoire ''soft''. |
172 | | |
173 | | le fichier ''soft.bin.txt'' contient un version desassemblée de ce code binaire, qui vous permet de visualiser le |
174 | | code qui va être chagé dans les mémoires du prototype virtuel, pour exécution par le processeur MIPS32. |
175 | | |
176 | | == 4.3 Instanciation des modèles des composants == |
| 163 | '''Question''' : Quels sont les registres initialisés par le code de boot ? pouquoi ces initialisations ? |
| 164 | |
| 165 | Puisqu'on dispose d'un contrôleur de terminal dans l'architecture, le premier programme que vous allez exécuter se contentera d'afficher le célèbre ''hello world'' sur le terminal. Ouvrez lz fichier ''soft/main.c''. |
| 166 | |
| 167 | '''Question''' : Que fait ce programme ? (on rappelle que la fonction ''getc()'' est bloquante, et ne rend pas la main au programme appelant tant qu'un caractère |
| 168 | n'a pas été saisi au clavier). |
| 169 | |
| 170 | Lancez l'exécution du Makefile. Deux fichiers ''soft.bin'' et ''soft.bin.txt'' doivent être créé dans le répertoire ''soft'' : |
| 171 | Le fichier ''soft.bin'' contient le code binaire au format ELF, et le fichier ''soft.bin.txt'' contient un version desassemblée (donc lisible) de ce code binaire. |
| 172 | |
| 173 | == 4.3 Définition de l'architecture matérielle |
| 174 | |
| 175 | Il faut compléter le fichier ''tp3_top.cpp'', pour définir les segments enregistrés dans la MappingTable, |
| 176 | définir les arguments des constructeurs ainsi que les valeurs des paramètres template des différents composants matériels instanciés, |
| 177 | et définir le cheminom permettant au ''loader'' des composants ROM et RAM d'accéder au fichier ELF. |
| 178 | |
| 179 | '''Question''' : Parmi les 7 segments utilisés dans cette l'architecture, lesquels doivent être déclarés cachables ? |
| 180 | |
| 181 | '''Question''' : Quel est le nombre de bits de poids fort de l'adresse qui doivent être décodés par le contrôleur du bus |
| 182 | pour déterminer la cible VCI désignée ? Cette information est un des arguments du constructeur de la !MappingTable. |
| 183 | |
| 184 | '''Question''' quels sont les bits d'adresse qui doivent être décodés par le contrôleur du cache, pour déterminer |
| 185 | qu'une adresse appartient à un segment non-cachable, et doit être diredtement transmise à la mémoire ? |
| 186 | Cette information est un autre argument du constructeur de la !MappingTable. |
184 | | == 4.4 Définition de la Top-cell == |
185 | | |
186 | | Il faut compléter le fichier ''tp3_top.cpp'', pour définir complêtement la MappingTable, |
187 | | définir les arguments des constructeurs et les valeurs des paramètres template des différents composants matériels instanciés, |
188 | | et définir le cheminom permettant au ''loader'' d'accéder au fichier ELF. |
189 | | |
190 | | == 4.5 Compilation et génération du simulateur == |
191 | | |
192 | | Complêtez le Makefile qui vous est fourni dans le répertoire TP3, pour définir l'ensemble de tous les fichiers |
193 | | objet utilisés pour construire le simulateur ''tp3_mono_simulator.x''. |
194 | | |
195 | | Lancez la compilation, puis exécutez la simulation. |
| 196 | Il faut faire de même pour les autres composants matériels instanciés. |
| 197 | |
| 198 | Quand tout ceci est fait, lancez le Makefile qui vous est fourni dans le répertoire TP3, pour générer le simulateur ''simulator.x''. |
| 199 | |
| 200 | == 4.5 Lancement de la simulation |
| 201 | |
| 202 | Lancez la simulation en lançant la commande habituelle: |
| 203 | {{{ |
| 204 | $ ./simulator.x 2000 |
| 205 | }}} |
| 206 | |
| 207 | En cas de problème lors de l'éxécution, vous pouvez relancer la compilation du simulateur en activant le mode DEBUG. |
| 208 | Il faut modifier le fichier Makefile en ajoutant un flag supplémentaire dans la list des flags de gcc : |
| 209 | {{{ |
| 210 | CFLAGS = -Wno-deprecated -DSOCLIB_MODULE_DEBUG |
| 211 | }}} |
| 212 | |
| 213 | Ce flag permet d'activer les directives de compilation conditionnelle qui se trouvent |
| 214 | à la fois dans le fichier ''tp3_top.cpp'', et dans les modèles des composants matériels. |
| 215 | |
| 216 | Pour attirer votre attention sur des erreurs fréquentes, faites les essais suivants : |
| 217 | * Modifiez l'adresse de base du segment ''seg_lcd'' pour lui donner la valeur 0xB0000000 au lieu de 0x9000000. Relancez la compilation et la simulation. Expliquez les résultats obtenus. |
| 218 | 1. Déclarez les segments correspondant aux périphériques (seg_tty et seg_lcd) comme cachables, le processeur part en exception |
| 219 | en signalant une erreur d'accès mémoire. Expliquez pourquoi. |
199 | | Il est maintenant possible de modifier le logiciel embarqué (fichier ''main.c''), sans modifier l'architecture matérielle (fichier ''tp3_top.cpp''). |
200 | | L'application logicielle ''hello world'' n'utilisait pas le coprocesseur LCD. |
| 223 | Puisque le logiciel embarqué est chargé dynamiquement dans la RAM et dans la ROM lors du lancement du simulateur, |
| 224 | il est possible de modifier le logiciel embarqué (fichier ''bin.soft''), sans modifier l'architecture matérielle et donc |
| 225 | sans recompiler le simulateur et sans avoir à regénérer le fichier ''simulator.x''. |
| 226 | |
| 227 | On peut donc maintenant écrire une application logicielle un peu plus complexe, qui utilise le coprocesseur LCD, |
| 228 | simplement en modifiant le fichier ''main.c'' dans le répertoire ''soft'', et en relançant la compilation et la génération |
| 229 | du fichier ''bin.soft''. |
| 230 | |