| | 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é == |