219 | | On souhaite maintenant modéliser une architecture quadri-processeurs structurée en quatre clusters presque identiques, |
220 | | Chaque cluster contiendra un processeur MIPS32, un composant ICU, un contrôleur TTY, un TIMER et une mémoire RAM. On se dispensera d'instancier le coprocesseur GCD dans cette architecture. On placera la ROM de boot dans le cluster 0. On placera le contrôleur d'écran graphique FBF et le contrôleur DMA dans le cluster 1. On placera enfin le contrôleur de disque IOC dans le cluster 2. |
| 217 | On souhaite modéliser une architecture structurée en quatre clusters presque identiques, |
| 218 | Chaque cluster contiendra un processeur MIPS32, un composant ICU, un contrôleur TTY, un TIMER et une mémoire RAM. On se dispensera d'instancier le coprocesseur GCD dans cette architecture. On placera la ROM de boot dans le cluster 0, le contrôleur d'écran graphique FBF dans le cluster 1 le contrôleur de disque IOC dans le cluster 2, et le contrôleur DMA dans le cluster 3. |
228 | | * La ligne d'interruption du contrôleur DMA sera connectée à l'entrée IRQ_IN[3] du composant ICU[1]. |
229 | | |
230 | | Il faut donc écrire les deux fichiers '''tp5_top.cpp''' et '''tp5.desc''' correspondant à cette architecture, |
231 | | en veillant à donner des valeurs croissantes (de 0 à 3) à l'argument ''processor-id'' des 4 processeurs. |
232 | | |
233 | | Il faut définir 4 segments pour les 4 composants ICU[i], 4 autres segments pour les 4 composants TTY[i], et 4 segments pour les 4 TIMER[i]. Il faut également définir 4 segments distincts pour les 4 piles d'exécution des 4 processeurs. En revanche, les segment seg_reset, seg_kernel et seg_code qui ne contiennent que des instructions peuvent être partagés par les 4 processeurs. |
| 226 | * La ligne d'interruption du contrôleur DMA sera connectée à l'entrée IRQ_IN[3] du composant ICU[3]. |
| 227 | |
| 228 | On définit 25 segments pour cette plate-forme : |
| 229 | * 1 segment '''seg_fbf''' associé au frame buffer |
| 230 | * 1 segment '''seg_ioc''' associé au contrôleur de disque |
| 231 | * 1 segment '''seg_dma''' associé au contrôleur DMA |
| 232 | * 4 segments '''seg_icu_i''' associés aux 4 composants ICU[i], |
| 233 | * 4 segments '''seg_tty_i''' associés aux 4 composants TTY[i] |
| 234 | * 4 segments '''seg_tim_i''' associés aux 4 composants TIMER[i] |
| 235 | * 4 segments '''seg_stack_i''' pour les 4 piles d'exécution des 4 processeurs |
| 236 | * 1 segment '''seg_reset''' pour le code de RESET à l'adresse imposée 0xBFC00000 |
| 237 | * 1 segment '''seg_kcode''' pour le code système à l'adresse imposée 0x80000000 |
| 238 | * 1 segment '''seg_kdata''' pour les données cachables du système d'exploitation. |
| 239 | * 1 segment '''seg_kunc''' pour les données non-cachables du système d'exploitation. |
| 240 | * 1 segment '''seg_text''' pour le code des programmes utilisateur |
| 241 | * 1 segment '''seg_data''' pour les données globale des programmes utilisateur |
| 242 | |
| 243 | '''Question''' : Pourquoi faut-il des segments distincts pour les 4 piles d'exécution ? |
| 244 | |
| 245 | '''Question''' : Proposez des adresses de base pour ces 25 segments, en tenant compte du fait que le crossbar local ne doit décoder que les bits (LADR) de l'adresse, et que le réseau global ne doit décoder que les bits (GADR) de l'adresse. |
| 246 | Recommandation : on peut utiliser les 4 bits A[31:28] pour le champs GADR, en considérant que seuls les 2 bits A[29:28] sont |
| 247 | réellement discriminants pour désigner le cluster visé. |
| 248 | |
| 249 | '''Question''' : Modifiez le fichier '''ldscript''' pour définir ces adresses de bases, et pour préciser le nombre de processeurs. |
| 250 | |
| 251 | '''Question''' : Ecrivez les deux fichiers '''tp5_top.cpp''' et '''tp5.desc''' correspondant à cette architecture. |
| 252 | n'oubliez pas de donner des valeurs croissantes (de 0 à 3) à l'argument ''processor-id'' des 4 processeurs. |