Changes between Version 63 and Version 64 of SoclibCourseTp3


Ignore:
Timestamp:
Dec 4, 2010, 4:02:54 PM (14 years ago)
Author:
alain
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • SoclibCourseTp3

    v63 v64  
    1212soit des processeurs GPP (General Purpose Processor), soit des processeurs DSP (Digital Signal Processor).
    1313
    14 On utilise des processeurs RISC 32 bits, car ce type de processeur possède un très bon rapport (puissance de calcul) / (consommation énergétique).
    15 
    1614On introduit également dans ce TP l'outil de compilation '''soclib-cc''' qui facilite la génération du simulateur.
     15
     16On introduit également le GIET (Gestionnaire d'Interruptions, Exceptions et Trappes), qui sera utilisé comme
     17système d'exploitation dans ce TP et dans les suivants.
    1718
    1819= 2 Architecture matérielle  =
     
    3233Ils vous sont fournis, et vous n'aurez pas à les re-écrire vous-même.
    3334
    34 Le composant `VciXcacheWrapper` peut encapsuler différents processeurs RISC 32 bits. Le coeur du processeur est modélisé par un ISS (Instruction Set Simulator).
     35Le composant '''VciXcacheWrapper''' peut encapsuler différents processeurs RISC 32 bits. Le coeur du processeur est modélisé par un ISS (Instruction Set Simulator).
    3536Le type du proceseur instancié (MIP32, ARM, SPARCV8, PPC405, NIOS, !MicroBlaze, etc.) est défini par un paramètre template du composant `VciXcacheWrapper`.
    3637Consultez la documentation [https://www.soclib.fr/trac/dev/wiki/Component/VciXcacheWrapper ici].
    3738
    38 Le composant `VciSimpleRam` est utilisé pour modéliser des mémoires inscriptibles embarquées (SRAM). On utilise le même composant
    39 pour modéliser des mémoires non inscriptibles (ROM).
     39Le composant '''VciSimpleRam''' est utilisé pour modéliser des mémoires inscriptibles embarquées (SRAM). On utilise le même composant pour modéliser des mémoires non inscriptibles (ROM).
    4040Ce composants peut contenir un ou plusieurs segments (correspondant à des tranches disjointes
    4141de l'espace addressable). Le composant analyse les bits de poids fort de l'adresse VCI
     
    4444Consultez la documentation [https://www.soclib.fr/trac/dev/wiki/Component/VciSimpleRam ici].
    4545
    46 Enfin le composant `VciMultiTty` est un contrôleur de terminaux alpha-numériques. Ce composant peut contrôler de 1 à 256 terminaux (un terminal est une paire écran / clavier). Pratiquement, chaque terminal est modélisé par l'ouverture d'une fenêtre XTERM indépendante sur l'écran de la station de travail qui exécute la simulation.
     46Enfin le composant '''VciMultiTty''' est un contrôleur de terminaux alpha-numériques. Ce composant peut contrôler de 1 à 256 terminaux (un terminal est une paire écran / clavier). Pratiquement, chaque terminal est modélisé par l'ouverture d'une fenêtre XTERM indépendante sur l'écran de la station de travail qui exécute la simulation.
    4747Chaque terminal possède 4 registres adressables pour la lecture ou l'écriture, et fonctionne en mode ''caractère'':
    48 on ne peut lire ou écrire qu'un seul caractère par transaction.
     48on ne peut lire ou écrire qu'un seul caractère par transaction VCI.
    4949Consultez la documentation [https://www.soclib.fr/trac/dev/wiki/Component/VciMultiTty ici]. 
    5050
    5151= 3 Logiciel embarqué =
    5252
    53 Il existe plusieurs façons de définir et de générer le code binaire qui sera exécuté par le (ou les) processeur(s) du
    54 MPSoC. Si on part d'une application logicielle écrite en langage C, il faut utiliser un cross-compilateur spécifique
    55 pour le processeur choisi. Le résultat est un fichier binaire au format ELF. Le code binaire correspondant doit ensuite
    56 être chargé dans les mémoires embarquées du MPSoC.  Il y a donc deux étapes bien distinctes pour la génération  et le chargement.
    57 
    58 == 3.1 Génération du code ==
    59 
    60 Les composants de la bibliothèque SoCLib permettent de modéliser des architectures matérielles complexes, capables d'exécuter des
    61 systèmes d'exploitation généralistes (tels que LINUX ou NetBSD), ou des systèmes d'exploitation spécialisés pour MPSoC (tels que [https://www.mutek.fr/ MutekH]. Mais dans ce TP et les suivants, on se contentera d'un
    62 système d'exploitation minimal, constitué par un Gestionnaire d'Interruptions, Exceptions et Trappes (GIET). Cet OS minimal fournit quelques appels systèmes
    63 permettant aux programmes utilisateurs d'accéder aux périphériques, il traite les requêtes d'interruption vectorisées, et facilite le debug du logiciel embarqué en signalant les exceptions.
    64 Le code du GIET est  écrit en C et en assembleur MIPS32.
    65 
    66 Les processeurs disponibles dans SoCLib sont principalement des processeurs RISC, capables
    67 de démarrer une instruction à chaque cycle, grâce à leur structure pipe-line.
    68 Le processeur doit, à chaque instruction (donc à  chaque cycle) lire l'instruction dans le cache, la décoder et l'exécuter. En cas de MISS, c'est le contrôleur
    69 du cache qui se charge de délencher une transaction VCI pour aller lire le code binaire chargé dans les mémoires embarquées.
    70 
    71 Le code binaire doit donc être généré par un cross-compilateur spécifique pour le processeur Mips32. On utilise la chaîne de compilation GCC, pour compiler l'ensemble du logiciel embarqué (code applicatif et code système) et pour réaliser l'édition de liens entre le code applicatif écrit par vous, et le code système. Le résultat de cette compilation est un fichier au format ELF, contenant le code binaire exécutable par le processeur MIP32.
     53Si l'application logicielle est écrite en langage C, il faut utiliser un cross-compilateur C spécifique
     54au processeur embarqué pour compiler ce code applicatif, ainsi que le code du système d'exploitation embarqué.
     55Le résultat est un fichier binaire au format ELF, qui doit ensuite être chargé dans les mémoires embarquées du MPSoC.
     56
     57== 3.1 Gestionnaire d'Interruptions, exceptions et Trappes ==
     58
     59Les composants de la bibliothèque SoCLib permettent d'exécuter des systèmes d'exploitation généralistes (tels que LINUX ou NetBSD), ou des systèmes d'exploitation spécialisés pour MPSoC (tels que [https://www.mutek.fr/ MutekH]. Dans ce TP et les suivants, on se contentera d'un
     60système d'exploitation minimal, constitué par un Gestionnaire d'Interruptions, Exceptions et Trappes (GIET). Le GIET fournit quelques appels systèmes permettant aux programmes utilisateurs d'accéder aux périphériques, il traite les requêtes d'interruption vectorisées émises par les périphériques, et facilite le debug du logiciel embarqué en signalant les exceptions.
     61
     62Vous pouvez consulter le code source du système d'exploitation dans le répertoire
     63{{{
     64/users/cao/alain/ue_almo/soft/giet
     65}}}
     66
     67 * le fichier '''giet.s''' est écrit en assembleur et contient le code du Gestionnaire d'Interruption, Exceptions et Trappes. Le GIET est l'unique point d'entrée dans le système d'exploitation. Ce code s'exécute en mode ''kernel'', et se termine toujours par une instruction ''eret''.
     68 * les fichier '''stdio.c''' et '''stdio.h''' sont écrits en C, et contiennent le code des appels systèmes permettant à un programme s'exécutant en mode ''user'' d'accéder aux périphériques.
     69 * les fichiers '''drivers.c''' et '''drivers.h''' sont  écrits en C et contiennent le code des fonctions systèmes qui s'exécutent en mode kernel, qui accèdent effectivement aux périphériques ou aux registres protégés du processeur.
     70 * le fichier '''isr.s''' contient le code des routines de traitement des interruptions (Interrupt Service Routine).
     71
     72== 3.2 Génération du code ==
     73
     74Le code binaire doit être généré par un cross-compilateur spécifique pour le processeur Mips32. On utilise la chaîne de compilation GCC, pour compiler l'ensemble du logiciel embarqué (code applicatif et code système) et pour réaliser l'édition de liens entre le code applicatif, et le code système. Le résultat de cette compilation est un fichier au format ELF, contenant le code binaire exécutable par le processeur MIP32. Le code du GIET étant tès compact, on recompilera l'ensemble du code source (y compris le code système) à chaque modification du code de l'application.
    7275
    7376== 3.2 Chargement du code ==
     
    120123
    121124== 4.1 Compilation du logiciel embarqué ==
    122 
    123 Le logiciel embarqué est défini dans deux types de fichiers.
    124 
    125 Vous pouvez consulter le code source générique du système d'exploitation dans le répertoire
    126 {{{
    127 /users/cao/alain/ue_almo/soft/giet
    128 }}}
    129 
    130  * le fichier '''giet.s''' est écrit en assembleur et contient le code du Gestionnaire d'Interruption, Exceptions et Trappes. Le GIET est l'unique point d'entrée dans le système d'exploitation. Ce code s'exécute en mode ''kernel'', et se termine toujours par une instruction ''eret''.
    131  * les fichier '''stdio.c''' et '''stdio.h''' sont écrits en C, et contiennent le code des appels systèmes permettant à un programme s'exécutant en mode ''user'' d'accéder aux périphériques.
    132  * les fichiers '''drivers.c''' et '''drivers.h''' sont  écrits en C et contiennent le code des fonctions systèmes qui s'exécutent en mode kernel, qui accèdent effectivement aux périphériques ou aux registres protégés du processeur.
    133  * le fichier '''isr.s''' contient le code des routines de traitement des interruptions (Interrupt Service Routine).
    134125
    135126Le répertoire '''soft''' de l'archive qui vous est fournie contient les fichiers spécifiques à l'application embarquée :