Changes between Version 4 and Version 5 of MjpegCourse/Monopro


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

--

Legend:

Unmodified
Added
Removed
Modified
  • MjpegCourse/Monopro

    v4 v5  
    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 sur l'architecture matérielle décrite dans la première
    23 partie. On validera ce déploiement en simulant l'exécution du code binaire
    24 de l'application logicielle sur le modèle SystemC de
    25 l'architecture matérielle.
     21contrô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
     23partie. On validera ce déploiement en simulant l'exécution d>u code binaire
     24de l'application logicielle (généré par DSX) sur le modèle SystemC de
     25l'architecture matérielle (également généré par DSX).
    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.
    4648 * Elle comporte deux contrôleurs mémoire RAM0 et RAM1
    4749 * Elle comporte un contrôleur de terminal TTY.
     
    7072#!/usr/bin/env python
    7173
    72 import soclib
    7374from vgmn_noirq_mono import VgmnNoirqMono
    7475
    7576archi = VgmnNoirqMono()
    7677
    77 archi.generate(soclib.PfDriver())
    78 }}}
    79  * Rendez ce nouveau fichier de description exécutable, lancez-le.
     78archi.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.
    8082
    8183Si tout se passe bien, vous devriez avoir un nouveau répertoire `caba` dans le répertoire courant.
    82 La description SystemC de la  ''top-cell'' est dans `hard/top.cpp`.
     84La description SystemC de la  ''top-cell'' est dans `caba/top.h.new`. DSX alloue automatiquement des adresses aux
     85segments 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
     88et les tailles des 6 segments de l'espace adressable définis dans cette application.'''''
    8389
    8490= 2. Déploiement de l'application SplitMsg =
     
    8692On va commencer par déployer l'application !SplitMsg, qui ne comporte que deux tâches et un canal
    8793sur notre architecture de SoC monoprocesseur.
    88  * Créez dans le répertoire TP2 un sous-répertoire 'splitmsg'
     94 * Créez dans le répertoire TP2 un sous-répertoire 'splitmsg' (Important!)
    8995 * 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
    9196 * Modifiez cette description DSX en ajoutant après la description du TGG  l'instanciation de l'architecture matérielle !VgmnNoirqMono.
    9297
     
    102107from soclib import *
    103108
     109import sys
     110sys.path.append("..")
     111
    104112from vgmn_noirq_mono import VgmnNoirqMono
    105113
     
    112120
    113121   Dans cette section, un objet `Mapper` doit être créé.
    114    Supposons qu'on crée une variable `mapper`,
    115    les objets logiciels doivent être accédés à travers mapper.tcg!['nom'].
     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'].
    116126   Il va falloir placer toutes les tâches, tous les canaux de communication,
    117127   tous les objets logiciels associés aux processeurs et enfin les objets globaux du système.
     
    127137# mapping the "prod0" and "cons0" tasks
    128138
    129 mapper.map(mapper.tcg["prod0"],
    130    run = "processor",
    131    stack   = "cram0",
    132    desc    = "cram0",
    133    status  = "uram0")
    134 
    135 mapper.map(mapper.tcg["cons0"],
    136    run = "processor",
    137    stack   = "cram0",
    138    desc    = "cram0",
    139    status  = "uram0")
     139mapper.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
     146mapper.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)
    140152
    141153# mapping the MWMR channel
    142154
    143 mapper.map( mapper.tcg["fifo"],
    144   status  = "cram1",
    145   desc    = "cram1")
     155mapper.map( "fifo",
     156  lock    = mapper.hard.locks,
     157  status  = mapper.hard.cram1,
     158  desc    = mapper.hard.cram1)
    146159
    147160# mapping the software objects associated to a processor
    148161
    149 mapper.map( mapper.platform["processor"],
    150   desc    = "cram0",
    151   priv    = "cram0",
    152   status  = "uram0")
     162mapper.map("processor",
     163  desc    = mapper.hard.cram0,
     164  priv    = mapper.hard.cram0,
     165  status  = mapper.hard.uram0)
    153166
    154167# mapping the software objects used by the embedded OS
    155168
    156169mapper.map(mapper.tcg,
    157   desc    = "cram1",
    158   shared  = "uram1",
    159   code    = "cram1")
     170  desc    = mapper.hard.cram1,
     171  shared  = mapper.hard.uram1,
     172  code    = mapper.hard.cram1)
    160173}}}
    161174
     
    170183# SystemC simulator for the hardware architecture at Cycle Accurate/Bit Accurate abstraction level
    171184
    172 mapper.generate( SrlOverHexo() )
     185muteks = MutekS()
     186simulator = Caba()
     187mapper.generate( muteks, simulator )
    173188
    174189# The software application for a POSX workstation can still be generated
     
    177192tcg.generate(posix)
    178193
    179 }}}
    180 
    181 
    182 [[Image(MjpegCourse:q.gif)]] Q2: '''''Quels objets logiciels doit-on placer dans
     194# Global Makefile generation
     195TopMakefile( muteks, simulator, posix )
     196}}}
     197
     198
     199[[Image(MjpegCourse:q.gif)]] Q3: '''''Quels objets logiciels doit-on placer dans
    183200l'espace addressable pour une tâche ? pour un canal mwmr ? pour un processeur ?'''''
    184201
     
    187204$ ./SplitMsg.py
    188205}}}
     206 * Générez le code binaire et le modèle SystemC de l'architecture matérielle.
     207{{{
     208$ make
     209}}}
     210
     211Une fois la compilation effectuée, visualisez le fichier de "top cell" généré par DSX spécifiquement pour
     212ce déploiement. Il se situe dans muteks/caba/top.h. Déterminez les adresses
     213et 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
     215vus à la question 2 ?'''''
    189216
    190217 * Executez l'application logicielle sur la station de travail
     
    194221 * Simulez l'exécution de l'application logicielle sur le modèle SystemC du SoC
    195222{{{
    196 $ ./exe.srloverhexo
    197 }}}
    198 
    199 [[Image(MjpegCourse:q.gif)]] Q2: '''''Qu'observez-vous ? En quoi est-ce différent de ce
     223$ ./exe.muteks_caba
     224}}}
     225
     226[[Image(MjpegCourse:q.gif)]] Q5: '''''Qu'observez-vous ? En quoi est-ce différent de ce
    200227qui se passe dans la version pour station de travail ?'''''
    201228