Changes between Version 17 and Version 18 of SoclibCourseTp4


Ignore:
Timestamp:
Oct 5, 2009, 3:35:32 PM (15 years ago)
Author:
nipo
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • SoclibCourseTp4

    v17 v18  
    2626 1. Il faut dentifier et localiser tous les fichiers nécessaires pour générer le simulateur d'une architecture particulière. L' archive qui vous a été fournie pour le  TP3 rassemblait dans un seul répertoire tous les fichiers nécessaires, et contenait un Makefile. Mais dans le cas général,  l'identification des fichiers nécessaires à la compilation est un travail non négligeable, à cause des dépendances entre composants logiciels  (le fichier A fait référence à des objets définis dans le fichier B, qui lui-même fait appel au fichier C, etc.). De ce fait, la construction du Makefile est généralement un exercice laborieux.
    2727
    28  2. Par ailleurs, la plupart des modèles ont des paramètres templates (puisque la plupart des composants ont des interfaces VCI, et que les largeurs des champs VCI sont paramètrables). Pour chaque composant possédant un (ou plusieurs) paramètre(s) template, il faut donc modifier le fichier ''.cpp''  pour préciser la valeur des paramètres template avant de lancer la compilation de ce composant (on dit qu'on instancie les paramètres template). Vous avez fait ce travail dans le TP2, et c'est un travail très fastidieux dès que les architectures modélisées deviennent complexes.
     28 2. Par ailleurs, la plupart des modèles ont des paramètres templates (puisque la plupart des composants ont des interfaces VCI, et que les largeurs des champs VCI sont paramétrables). Pour chaque composant possédant un (ou plusieurs) paramètre(s) template, il faut donc modifier le fichier ''.cpp''  pour préciser la valeur des paramètres template avant de lancer la compilation de ce composant (on dit qu'on instancie les ''template''). Vous avez fait ce travail dans le TP2, et c'est un travail très fastidieux dès que les architectures modélisées deviennent complexes.
    2929
    3030La chaîne de compilation SoCLib-CC a pour but de résoudre ces deux problèmes dans le cas général,
    31 en automatisant la recherche des dépendances, l'instanciation des paramètres templates, et la génération
    32 du Makefile.
     31en automatisant la recherche des dépendances, l'instanciation des templates, et l'appel du compilateur.
    3332       
    3433Pour permettre cette automatisation, tout composant logiciel de SoCLib doit être accompagné d'un fichier
    35 de ''métadata'' (fichier possédant le suffixe '''.sd''') qui contient les informations suivantes:
     34de ''metadata'' (fichier possédant le suffixe {{{.sd}}}) qui contient les informations suivantes:
    3635 * le nom de la classe C++
    37  * les paramètres templates associés, avec leurs types et les valeurs par défaut
     36 * les paramètres templates associés, avec leurs types et les valeurs par défaut (si applicable)
    3837 * les chemins d'accès aux fichiers d'en-tête (.h) et d'implémentation (.cpp)
    39  * la liste des ports d(interface du composant
     38 * la liste des ports d'interface du composant
    4039 * la liste des dépendances vers d'autres composants
    4140 * les paramètres du constructeur, avec leurs types
    42 Ce fichier est écrit en langage Python, et on trouvera ci-dessous, à titre d'exemple, le fichier ''vci_simple_ram.sd'':
     41Ce fichier est écrit en un langage ad-hoc (mais que Python peut parser nativement), et on trouvera ci-dessous, à titre d'exemple, le fichier ''vci_simple_ram.sd'':
    4342{{{
    44 # -*- python -*-
    4543       
    4644Module('caba:vci_simple_ram',
     
    7270}}}
    7371
    74 Il faut par ailleurs définir les caractéristiques de la top-cell dans un fichier nommé '''platform.desc'''.
    75 Ce fichier est également en langage Python, et contient le nom de la top-cell SystemC, la liste des composants matériels instanciés et les valeurs des paramètres VCI.
     72Il faut par ailleurs définir les caractéristiques de la top-cell dans un fichier nommé '''platform.desc'''.
     73Ce fichier est également en langage parsable par Python, et contient le nom de fichier de la top-cell SystemC, la liste des composants matériels instanciés et les valeurs des paramètres VCI.
    7674Vous trouverez ci-dessous, à titre d'exemple, le fichier '''platform.desc''' décrivant l'architecture du TP3:
    7775
    7876{{{
    79 # -*- python -*-
    8077
    8178todo = Platform('caba', 'tp3_top.cpp',
     
    103100Pour lancer la compilation, il faut simplement lancer la commande:
    104101{{{
    105 > soclib-cc -p platform_desc
     102$ soclib-cc -p platform_desc -o simulation.x
    106103}}}
    107104
     
    111108pour repérer les initiateurs et les cibles VCI. Un cluster est un sous-système regroupant généralement plusieurs
    112109initiateurs et plusieurs cibles VCI, communiquant entre eux par un interconnect local (bus ou crossbar).
    113 Chaque composant est donc repèré par un couple ''(cluster_index, local_index)''.
     110Chaque composant est donc repèré par un couple `(cluster_index, local_index)`.
    114111
    115 L'espace d'adressage reste partatgé par tous les composants du système (quel que soit leur cluster), et n'importe
     112L'espace d'adressage reste partagé par tous les composants du système (quel que soit leur cluster), et n'importe
    116113quel initiateur peut directement adresser n'importe quelle cible. Si l'initiateur et la cible n'appartiennent pas au même
    117114cluster, les paquets VCI (commande et réponse) sont acheminés grace à un interconnect global (généralement un
     
    122119Ce regroupement en clusters répond généralement à deux objectifs:
    123120 * D'un point de vue architecture, regrouper dans un même cluster les composants qui communiquent beaucoup
    124 entre eux permet de réduire la latence des communications, et de minimiser la consommation. Ce découpage permet également de distribuer la mémoire embarquée, et d'éviter le goulot d'étranglement que constutuerait un unique banc mémoire sur la puce (même si l'accès à la mémoire externe reste un goulot d'étranglement).
     121entre eux permet de réduire la latence des communications, et de minimiser la consommation. Ce découpage permet également de distribuer la mémoire embarquée, et d'éviter le goulot d'étranglement que constituerait un unique banc mémoire sur la puce (même si l'accès à la mémoire externe reste un goulot d'étranglement).
    125122 * D'un point de vue électrique, le découpage en clusters permet de résoudre en partie les problèmes d'horlogerie, puisque chaque cluster peut être implanté dans un domaine d'horloge séparé (approche GALS : Globally Asynchronous / Locally Synchronous). Le franchissement des frontières d'horlogre est alors la responsabilité du micro-réseau assurant les communications inter-clusters.
    126123
    127124Pour faciliter le décodage des adresses, on décompose les bits de poids fort de l'adresse VCI en deux champs GADR et LADR, de telle sorte que le décodage du champs GADR définisse complêtement le numéro du cluster cible.
    128125Le décodage du champs LADR permet lui de déterminer l'index local de la cible dans un cluster.
    129 Le nombre de bits des champs GADR et LADR dépend évidemment du système, mais
     126Le nombre de bits des champs GADR et LADR dépend évidemment du système.
    130127|| GADR || LADR ||  OFFSET  ||
    131128Cette organisation hiérarchique à deux niveaux impose évidemment que les valeurs des champs GADR des segments associés aux cibles d'un même cluster soient égales entre elles (ou appartiennent à un même ensemble de valeurs caractéristiques de ce cluster)