Changes between Version 53 and Version 54 of Archi-1-TP9
- Timestamp:
- Dec 4, 2020, 1:48:47 AM (4 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
Archi-1-TP9
v53 v54 73 73 * L'espace d'adressage du MIPS est l'ensemble des adresses que peut former le MIPS. 74 74 * Les adresses sont sur 32 bits qui désigne chacune un octet, il y a donc 2^32^ octets. 75 * On accède à l'espace d'adressage avec les instructions load/store ( lw, lh, lb, lhu, lbu, sw, sh, sb).75 * On accède à l'espace d'adressage avec les instructions load/store (`lw`, `lh`, `lb`, `lhu`, `lbu`, `sw`, `sh`, `sb`). 76 76 * Non, les mémoires sont des composants contenant des cases de mémoire adressable. Les mémoires sont placées (on dit aussi « ''mappées'' » dans l'espace d'adressage). 77 77 ''''''''''''''' … … 88 88 ''''''''''''''' 89 89 * Ici, c'est le composant TTY qui permet de sortir des caractères sur un écran et de lire des caractères depuis un clavier. 90 * Dans un autre SoC, on pourrait avoir un contrôleur de disque, un contrôleur vidéo, un port réseau ethernet, un port USB, des entrées analogiques (pour mesurer des tensions), etc.90 * Dans un autre SoC, on pourrait avoir un contrôleur de disque, un contrôleur vidéo, un port réseau Ethernet, un port USB, des entrées analogiques (pour mesurer des tensions), etc. 91 91 ''''''''''''''' 92 92 }}} … … 96 96 * Le composant TTY est placé à partir de l'adresse `0xD0200000`. 97 97 * Non, ce sont des registres de périphériques placés dans l'espace d'adressage et donc accessibles par des instructions load/store uniquement. 98 * Pour écrire un caractère sur l'écran, il faut écrire le code ascii du caractère dans le registre `TTY_WRITE` 99 * `TTY_STATUS` contient 1 s'il y a au moins un caractère en attente d'être lu, `TTY_READ` contient le code ascii du caractère tapé au clavier si `TTY_STATUS==1` 100 ''''''''''''''' 101 }}} 102 1. Le contrôleur de TTY 103 98 * Pour écrire un caractère sur l'écran, il faut écrire le code ASCII du caractère dans le registre `TTY_WRITE` 99 * `TTY_STATUS` contient 1 s'il y a au moins un caractère en attente d'être lu, `TTY_READ` contient le code ASCII du caractère tapé au clavier si `TTY_STATUS==1` 100 ''''''''''''''' 101 }}} 102 1. Le contrôleur de TTY peut contrôler de 1 à 4 terminaux. Chaque terminal dispose d'un ensemble de 4 registres (on appelle ça une carte de registres, ou en anglais une ``register map``). Ces ensembles de 4 registres sont placés à des adresses contiguës. S'il y a 2 terminaux (`TTY0` et `TTY1`), A quelle adresse est le registre `TTY_READ` de `TTY1` ? 103 {{{#!protected ------------------------------------------------------------------------------------ 104 ''''''''''''''' 105 * Si les adresses utilisées par `TTY0` commencent à `0xD0200000` alors celles de `TTY1` commencent à l'adresse `0xD0200010` et donc `TTY_READ` est à l'adresse `0xD0200018`. 106 ''''''''''''''' 107 }}} 108 1. Que représentent les flèches bleues sur le schéma ? Pourquoi ne vont-elles que dans une seule direction ? 109 {{{#!protected ------------------------------------------------------------------------------------ 110 ''''''''''''''' 111 * Ces flèches représentent les requêtes d'accès à la mémoire, c'est-à-dire les ''loads'' et les ''stores'' qui sont émis par le MIPS lors de l'exécution des instructions `lw`, `sw`, etc. Les requêtes sont émises par le MIPS et reçues par les composants mémoires ou périphériques. 112 * On ne représente pas les données qui circulent, mais juste les requêtes, pour ne pas alourdir inutilement le schéma. Implicitement, si le MIPS envoie une requête de lecture alors il y aura une donnée qui va revenir, c'est obligatoire, alors on ne la dessine pas, car ce n'est pas intéressant. En revanche, le fait que le MIPS soit le seul composant à émettre des requêtes est une information intéressante. 113 ''''''''''''''' 114 }}} 104 115 105 116 … … 107 118 108 119 109 == A3. Cha ine de compilation120 == A3. Chaîne de compilation 110 121 111 122 … … 167 178 - la définition de variable du ldscript. Ce sont essentiellement des adresses dans l'espace d'adressage, 168 179 mais pas seulement, il y a aussi la taille des régions. 169 - On trouve ensuite la déclaration des régions mémoire .170 - et enfin la définition des sections de sortie qui seront mise dans le fichier binaire produit et dans quelle région ellesont placées.180 - On trouve ensuite la déclaration des régions mémoires. 181 - et enfin la définition des sections de sortie qui seront mises dans le fichier binaire produit et dans quelle région elles sont placées. 171 182 ''''''''''''''' 172 183 }}} … … 183 194 - L'adresse de démarrage est `0xBFC00000`. 184 195 - On peut le vérifier dans le fichier `kernel.ld`. 185 Il y a une définition des régions mémoire dont une région commençant à cette adresse làet c'est dans196 Il y a une définition des régions mémoires, dont une région commençant à cette adresse-là, et c'est dans 186 197 cette région que l'on met le code de boot. 187 198 ''''''''''''''' … … 225 236 ''''''''''''''' 226 237 }}} 227 - Dans quelle région de la mémoire le code de boot est placé ?228 {{{#!protected ------------------------------------------------------------------------------------ 229 ''''''''''''''' 230 - Le code de boot est placé edans la région `boot_region`238 - Dans quelle région de la mémoire le code de boot est-il placé ? 239 {{{#!protected ------------------------------------------------------------------------------------ 240 ''''''''''''''' 241 - Le code de boot est placé dans la région `boot_region` 231 242 ''''''''''''''' 232 243 }}} … … 243 254 {{{#!protected ------------------------------------------------------------------------------------ 244 255 ''''''''''''''' 245 - C'est quand la boucle d'affichage détecte le `0` terminateur de la cha ine de caractères.256 - C'est quand la boucle d'affichage détecte le `0` terminateur de la chaîne de caractères. 246 257 ''''''''''''''' 247 258 }}} … … 289 300 290 301 - **Questions**\\ 291 ''Les réponse sont dans le cours ou dans les fichiers sources''\\\\302 ''Les réponses sont dans le cours ou dans les fichiers sources''\\\\ 292 303 - Regarder dans le fichier `hcpu.S`, dans quelle section est désormais le code de boot ? 293 304 {{{#!protected ------------------------------------------------------------------------------------ … … 297 308 }}} 298 309 - Le code de boot ne fait que sauter dans la fonction kinit avec l'instruction `j`, 299 il n'y a pas de retour, ce n'est donc pas un `jal`, mais pourquoi ne pas avoir utilis er310 il n'y a pas de retour, ce n'est donc pas un `jal`, mais pourquoi ne pas avoir utilisé 300 311 `j init` et donc pourquoi passer par un registre ? 301 312 {{{#!protected ------------------------------------------------------------------------------------ … … 315 326 ''''''''''''''' 316 327 - C'est une manière de désigner toutes les sections nommées `.*data*` avec `*` = n'importe quoi 317 présentes dans n'importe quel fichier objets reçu spar le compilateur.328 présentes dans n'importe quel fichier objets reçu par le compilateur. 318 329 ''''''''''''''' 319 330 }}} … … 374 385 375 386 - **Questions**\\ 376 ''Les réponse sont dans le cours ou dans les fichiers sources''\\\\387 ''Les réponses sont dans le cours ou dans les fichiers sources''\\\\ 377 388 - Question ? 378 389 {{{#!protected ------------------------------------------------------------------------------------ … … 409 420 410 421 - **Questions**\\ 411 ''Les réponse sont dans le cours ou dans les fichiers sources''\\\\422 ''Les réponses sont dans le cours ou dans les fichiers sources''\\\\ 412 423 - Question ? 413 424 {{{#!protected ------------------------------------------------------------------------------------ … … 427 438 428 439 Dans l'étape 4, nous accédons au registre de périphérique directement dans la fonction `kinit()`, ce n'est pas très 429 simple. C'est pourquoi ,nous allons ajouter un niveau d'abstraction qui représente un début de pilote de périphérique440 simple. C'est pourquoi nous allons ajouter un niveau d'abstraction qui représente un début de pilote de périphérique 430 441 (device driver). Ce pilote, même tout petit constitue une couche logicielle avec une API. 431 442 \\\\ 432 443 **Objectifs** 433 - Savoir comment cré ér uun début de pilote pour le terminal TTY.444 - Savoir comment créer un début de pilote pour le terminal TTY. 434 445 - Savoir comment décrire une API en C 435 446 … … 446 457 447 458 - **Questions**\\ 448 ''Les réponse sont dans le cours ou dans les fichiers sources''\\\\459 ''Les réponses sont dans le cours ou dans les fichiers sources''\\\\ 449 460 - Question ? 450 461 {{{#!protected ------------------------------------------------------------------------------------