Changes between Version 28 and Version 29 of SoclibCourseTp5


Ignore:
Timestamp:
Dec 16, 2010, 5:36:57 PM (14 years ago)
Author:
alain
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • SoclibCourseTp5

    v28 v29  
    201201micro-réseau intégré ou NoC).
    202202
    203 [[Image(soclib_tp5_multi.png)]]
    204 
    205203Ce regroupement en clusters répond généralement à deux objectifs:
    206204 * D'un point de vue architecture, regrouper dans un même cluster les composants qui communiquent beaucoup entre eux permet de réduire la latence des communications, et de minimiser la consommation. Ce découpage permet également de distribuer la mémoire embarquée, et d'éviter le goulot d'étranglement que constituerait un unique banc mémoire sur la puce (même si l'accès à la mémoire externe reste un goulot d'étranglement).
     
    217215== 3.2 architecture à 4 clusters ==
    218216
    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.
     217On souhaite modéliser une architecture structurée en quatre clusters presque identiques,
     218Chaque 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.
    221219
    222220On utilisera un composant '''vci_local_crossbar''' comme interconnect local ( voir documentation [https://www.soclib.fr/trac/dev/wiki/Component/VciXcacheWrapper ici]) , et on utilisera le composant '''vci_vgmn''' comme interconnect global ( voir documentation [https://www.soclib.fr/trac/dev/wiki/Component/VciXcacheWrapper ici]) .
     
    226224 * Dans chaque cluster (i), la ligne d'interruptiondu TTY sera connectée à l'entrée IRQ_IN[1] du composant ICU[i].
    227225 * La ligne d'interruption du contrôleur IOC sera connectée à l'entrée IRQ_IN[2] du composant ICU[2].
    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
     228On 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.
     246Recommandation : 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
     247ré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.
     252n'oubliez pas de donner des valeurs croissantes (de 0 à 3) à l'argument ''processor-id'' des 4 processeurs.
    234253
    235254== 3.3 Logiciel embarqué ==