Plateforme matérielle simul_almo_generic
Plateforme mono-processeur
Vue graphique
Brève description
En utilisant la plateforme simul_almo_generic sans spécifier d'argument, on obtient une plateforme mono-processeur MIPS32 telle qu'illustrée ci-dessus. Cette plateforme supporte jusqu'à quatre tâches logicielles s'exécutant en pseudo-parallélisme sur un seul processeur . De manière fixe, elle embarque une mémoire morte (ROM), une mémoire vive (RAM), un concentrateur d'interruptions matérielles (ICU), un contrôleur d'horloge (TIMER), un contrôleur DMA et un terminal d'entrée/sortie (TTY). Un contrôleur de périphérique de bloc (IOC) et un contrôleur graphique (FBF) peuvent être activés de manière optionnelle.
Arguments
La plateforme mono-processeur peut être lancée avec les arguments suivants :
- -SYS : spécifie le chemin vers le fichier contenant le code binaire du système d'exploitation (normalement
sys.bin) - -APP : spécifie le chemin vers le fichier contenant le code binaire de l'application (normalement
app.bin) - -NCYCLES : spécifie le nombre de cycles de simulation avant l'arrêt du simulateur
- -NTASKS : spécifie le nombre de tâches maximum par processeur (entre 1 et 4)
- -NICACHE : spécifie le nombre d'ensembles ('set') pour le cache d'instructions
- -NDCACHE : spécifie le nombre d'ensembles ('set') pour le cache de données
- -IOCFILE : active le périphérique de bloc et spécifie le chemin vers le fichier qui servira d'image pour ce contrôleur
- -FBFSIZE : active le périphérique graphique et spécifie la largeur/hauteur de la fenêtre graphique (en pixels)
- -TRACE : spécifie le chemin vers le fichier qui contiendra les informations de tracage
- -STATS : spécifie le chemin vers le fichier qui contiendre les informations de statistiques
- -DEBUG : spécifie le nombre de cycles à partir duquel le mode débogage est actif
- -TOCYCLE : spécifie le nombre de cycles à partir duquel le mode débogage devient inactif
- -LATENCY : spécifie la latence du bus (en nombre de cycles)
Cartographie de l'espace adressable
En fonction des adresses croissantes :
| Adresse | Taille | Périphérique : Utilisation |
|---|---|---|
| 0x00400000 | 0x00004000 | RAM : Code de l'application utilisateur |
| 0x10000000 | 0x00080000 | RAM : Données de l'application utilisateur |
| 0x20000000 | 0x00001000 | RAM : Pile de l'application utilisateur |
| 0x80000000 | 0x00004000 | RAM : Code du système d'exploitation |
| 0x81000000 | 0x00004000 | RAM : Données (cachables) du système d'exploitation |
| 0x82000000 | 0x00001000 | RAM : Données (non-cachables) du système d'exploitation |
| 0x90000000 | 0x00000200 | TTY |
| 0x91000000 | 0x00000080 | TIMER |
| 0x92000000 | 0x00000020 | IOC |
| 0x93000000 | 0x00000100 | DMA |
| 0x96000000 | 0x00004000 | FBF |
| 0x9F000000 | 0x00000100 | ICU |
| 0xBFC00000 | 0x00001000 | ROM : Code de démarrage |
Cartographie des interruptions
Le concentrateur d'interruptions matérielles (ICU) est capable de multiplexer jusqu'à 32 interruptions d'entrée vers 1 interruption de sortie (à destination du processeur MIPS32). L'interruption matérielle connectée à l'entrée i de l'ICU est notée irq_in[i]. Voici la cartographie des entrées pour la plateforme mono-processeur :
| Entrée | Périphérique |
|---|---|
| irq_in[0] | IOC |
| irq_in[1] | TIMER |
| irq_in[2] | DMA |
| irq_in[3] | TTY0 : terminal de la tâche n°0 |
| irq_in[4] | TTY1 : terminal de la tâche n°1 (n'existe que si NTASKS > 1) |
| irq_in[5] | TTY2 : terminal de la tâche n°2 (n'existe que si NTASKS > 2) |
| irq_in[6] | TTY3 : terminal de la tâche n°3 (n'existe que si NTASKS > 3) |
Plateforme multi-processeur
Pour une plateforme multi-processeur, les changements sont les suivants :
- il n'y a toujours qu'un seul composant
IOC. - il n'y a également qu'un seul composant pour les autres périphériques (
ICU,TIMER,DMAetTTY) mais chaque composant possède plusieurs canaux indépendants.
Chaque canal a son propre ensemble de registres adressables (en fonction du numéro de processeur) :
- un processeur
P[i]trouvera l'adresse de base du canalICUqui lui est attaché avec la formule suivante :icu_seg_base + proc_id * ICU_SPAN. - même comportement pour les autres périphériques.
Concernant la cartographie des interruptions, l'idée est la suivante :
IOC: une seule interruption, toujours connecté à irq_in[0].TIMER: une interruption par processeurDMA: une interruption par processeurTTY: une interruption par processeur et par tâche exécutée sur ce processeur
Il y a donc (2 + N_TASKS) interruptions par processeur.
Le calcul de l'index de la première interruption vers un processeur P[i] suit la formule : irq_base_number = 1 + i * irq_span.
Enfin, on soulignera la contrainte suivante : il est impossible, avec les 32 lignes d'interruption possibles en entrée de l'ICU, de supporter la configuration maximale, à savoir 8 processeurs et 4 tâches par processeur. Le maximum supporté sera par exemple, 6 processeurs et 4 tâches/processeur ou 8 processeurs et 2 tâches/processeur.

