Changes between Version 3 and Version 4 of MjpegCourse/Monopro


Ignore:
Timestamp:
Feb 19, 2008, 9:34:32 PM (16 years ago)
Author:
Nicolas Pouillon
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • MjpegCourse/Monopro

    v3 v4  
    1919
    2020La seconde partie du TP vous permettra d'utiliser DSX pour décrire et
    21 contrôler précisément le déploiement de l'application logicielle !SplitMsg
    22 (TCG décrit avec DSX), sur l'architecture matérielle décrite dans la première
    23 partie. On validera ce déploiement en simulant l'exécution d>u code binaire
    24 de l'application logicielle (généré par DSX) sur le modèle SystemC de
    25 l'architecture matérielle (également généré par DSX).
     21contrôler précisément le déploiement de l'application logicielle !SplitMsg,
     22sur l'architecture matérielle décrite dans la première
     23partie. On validera ce déploiement en simulant l'exécution du code binaire
     24de l'application logicielle sur le modèle SystemC de
     25l'architecture matérielle.
    2626
    2727La troisième partie du TP vous permettra d'atteindre notre véritable but, qui est
     
    4444   la latence du réseau: nombre minimal de cycles pour une traversée du réseau
    4545   "one-way".
    46  * Elle comporte un contrôleur de verrous (composant LOCKS), utilisé pour protéger
    47    l'accès aux canaux de communication MWMR.
    4846 * Elle comporte deux contrôleurs mémoire RAM0 et RAM1
    4947 * Elle comporte un contrôleur de terminal TTY.
     
    7270#!/usr/bin/env python
    7371
     72import soclib
    7473from vgmn_noirq_mono import VgmnNoirqMono
    7574
    7675archi = VgmnNoirqMono()
    7776
    78 archi.generate(Caba())
    79 }}}
    80  * Rendez ce nouveau fichier de description exécutable, lancez-le. Ne réalisez pas la compilation
    81    de la plateforme résultante: nous n'avons pas encore de logiciel à exécuter dedans.
     77archi.generate(soclib.PfDriver())
     78}}}
     79 * Rendez ce nouveau fichier de description exécutable, lancez-le.
    8280
    8381Si tout se passe bien, vous devriez avoir un nouveau répertoire `caba` dans le répertoire courant.
    84 La description SystemC de la  ''top-cell'' est dans `caba/top.h.new`. DSX alloue automatiquement des adresses aux
    85 segments mémoire pour lesquels les adresses de base ne sont pas imposées par l'utilisateur.
    86 [[BR]]
    87 [[Image(MjpegCourse:q.gif)]] Q2: '''''Visualisez le fichier de "top-cell" pour déterminer les adresses
    88 et les tailles des 6 segments de l'espace adressable définis dans cette application.'''''
     82La description SystemC de la  ''top-cell'' est dans `hard/top.cpp`.
    8983
    9084= 2. Déploiement de l'application SplitMsg =
     
    9286On va commencer par déployer l'application !SplitMsg, qui ne comporte que deux tâches et un canal
    9387sur notre architecture de SoC monoprocesseur.
    94  * Créez dans le répertoire TP2 un sous-répertoire 'splitmsg' (Important!)
     88 * Créez dans le répertoire TP2 un sous-répertoire 'splitmsg'
    9589 * Recopiez dans ce répertoire la description DSX de l'application !SplitMsg du TP1.
     90 * Recopiez dans ce répertoire la description DSX de vgmn_noirq_mono
    9691 * Modifiez cette description DSX en ajoutant après la description du TGG  l'instanciation de l'architecture matérielle !VgmnNoirqMono.
    9792
     
    107102from soclib import *
    108103
    109 import sys
    110 sys.path.append("..")
    111 
    112104from vgmn_noirq_mono import VgmnNoirqMono
    113105
     
    120112
    121113   Dans cette section, un objet `Mapper` doit être créé.
    122    Supposons qu'on crée une variable `mapper`, l'architecture matérielle doit
    123    être référencée à travers mapper.hard.''nom'' pour accéder aux composants
    124    créés par self.''nom'' dans la description de la plateforme.
    125    De même les objets logiciels doivent être accédés à travers mapper.tcg!['nom'].
     114   Supposons qu'on crée une variable `mapper`,
     115   les objets logiciels doivent être accédés à travers mapper.tcg!['nom'].
    126116   Il va falloir placer toutes les tâches, tous les canaux de communication,
    127117   tous les objets logiciels associés aux processeurs et enfin les objets globaux du système.
     
    137127# mapping the "prod0" and "cons0" tasks
    138128
    139 mapper.map("prod0",
    140    run = mapper.hard.processor,
    141    stack   = mapper.hard.cram0,
    142    desc    = mapper.hard.cram0,
    143    status  = mapper.hard.uram0,
    144    code    = mapper.hard.cram0)
    145 
    146 mapper.map("cons0",
    147    run = mapper.hard.processor,
    148    stack   = mapper.hard.cram0,
    149    desc    = mapper.hard.cram0,
    150    status  = mapper.hard.uram0,
    151    code    = mapper.hard.cram0)
     129mapper.map(mapper.tcg["prod0"],
     130   run = "processor",
     131   stack   = "cram0",
     132   desc    = "cram0",
     133   status  = "uram0")
     134
     135mapper.map(mapper.tcg["cons0"],
     136   run = "processor",
     137   stack   = "cram0",
     138   desc    = "cram0",
     139   status  = "uram0")
    152140
    153141# mapping the MWMR channel
    154142
    155 mapper.map( "fifo",
    156   lock    = mapper.hard.locks,
    157   status  = mapper.hard.cram1,
    158   desc    = mapper.hard.cram1)
     143mapper.map( mapper.tcg["fifo"],
     144  status  = "cram1",
     145  desc    = "cram1")
    159146
    160147# mapping the software objects associated to a processor
    161148
    162 mapper.map("processor",
    163   desc    = mapper.hard.cram0,
    164   priv    = mapper.hard.cram0,
    165   status  = mapper.hard.uram0)
     149mapper.map( mapper.platform["processor"],
     150  desc    = "cram0",
     151  priv    = "cram0",
     152  status  = "uram0")
    166153
    167154# mapping the software objects used by the embedded OS
    168155
    169156mapper.map(mapper.tcg,
    170   desc    = mapper.hard.cram1,
    171   shared  = mapper.hard.uram1,
    172   code    = mapper.hard.cram1)
     157  desc    = "cram1",
     158  shared  = "uram1",
     159  code    = "cram1")
    173160}}}
    174161
     
    183170# SystemC simulator for the hardware architecture at Cycle Accurate/Bit Accurate abstraction level
    184171
    185 muteks = MutekS()
    186 simulator = Caba()
    187 mapper.generate( muteks, simulator )
     172mapper.generate( SrlOverHexo() )
    188173
    189174# The software application for a POSX workstation can still be generated
     
    192177tcg.generate(posix)
    193178
    194 # Global Makefile generation
    195 TopMakefile( muteks, simulator, posix )
    196 }}}
    197 
    198 
    199 [[Image(MjpegCourse:q.gif)]] Q3: '''''Quels objets logiciels doit-on placer dans
     179}}}
     180
     181
     182[[Image(MjpegCourse:q.gif)]] Q2: '''''Quels objets logiciels doit-on placer dans
    200183l'espace addressable pour une tâche ? pour un canal mwmr ? pour un processeur ?'''''
    201184
     
    204187$ ./SplitMsg.py
    205188}}}
    206  * Générez le code binaire et le modèle SystemC de l'architecture matérielle.
    207 {{{
    208 $ make
    209 }}}
    210 
    211 Une fois la compilation effectuée, visualisez le fichier de "top cell" généré par DSX spécifiquement pour
    212 ce déploiement. Il se situe dans muteks/caba/top.h. Déterminez les adresses
    213 et les tailles des 6 segments de l'espace adressable définis dans cette application.[[BR]]
    214 [[Image(MjpegCourse:q.gif)]] Q4: '''''En quoi diffèrent-ils de ces mêmes segments
    215 vus à la question 2 ?'''''
    216189
    217190 * Executez l'application logicielle sur la station de travail
     
    221194 * Simulez l'exécution de l'application logicielle sur le modèle SystemC du SoC
    222195{{{
    223 $ ./exe.muteks_caba
    224 }}}
    225 
    226 [[Image(MjpegCourse:q.gif)]] Q5: '''''Qu'observez-vous ? En quoi est-ce différent de ce
     196$ ./exe.srloverhexo
     197}}}
     198
     199[[Image(MjpegCourse:q.gif)]] Q2: '''''Qu'observez-vous ? En quoi est-ce différent de ce
    227200qui se passe dans la version pour station de travail ?'''''
    228201