Changes between Version 7 and Version 8 of SoclibCourseTp1


Ignore:
Timestamp:
Aug 31, 2009, 9:03:16 AM (16 years ago)
Author:
alain
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • SoclibCourseTp1

    v7 v8  
    9999$ tar xjvf soclib_tp1.tgz
    100100}}}
    101 Cette archive contient en principe les fichiers suivants :
     101Cette archive contient les fichiers suivants :
    102102 * ''fifo_signals.h'' : fichier définissant l'objet C++ '''FifoSignal''' représentant les signaux d'un canal FIFO. Ce fichier est complet et ne doit pas être modifié.
    103103 * ''fifo_ports.h'' : fichier définissant les objets C++ '''FifoInput''' et '''FifoOutput''' représentant les ports d'accès à un canal FIFO. Ce fichier est complet et ne doit pas être modifié. Ce fichier est complet et ne doit pas être modifié.
     
    106106 * ''fifo_lcd_coprocessor.h'' : fichier définissant l'objet C++ '''FifoLcdCoprocessor''' représentant  le modèle du coprocesseur. Ce fichier ne contient qu'une carcasse vide et devra être complété.
    107107 * ''fifo_lcd_master.cpp" : fichier contenant l'implémentation C++ des méthodes utilisées par le composant master. Ce fichier ne contient qu'une carcasse vide et devra être complété.
    108  * ''tp1_top.cpp" : fichier C++  décrivant l"architecture matérielle du système, dont la compilation générera le simulateur proprement dit. Ce fichier est partiellement incomplet, et devra être complété.
     108 * ''tp1_top.cpp'' : fichier C++  décrivant l"architecture matérielle du système, dont la compilation générera le simulateur proprement dit. Ce fichier est partiellement incomplet, et devra être complété.
    109109
    110110== 3.1 Ecriture du modèle CABA du coprocesseur ==
     
    114114Le modèle de simulation d'un composant matériel (appelé ''module'' en SystemC) nécessite la définition d'une classe C++ dont le nom correspond au nom du module matériel modélisé.
    115115En vous inspirant du code fourni pour le composant '''master''', complêter les deux fichiers ''fifo_lcd_coprocessor.h'' et
    116 ''fifo_lcd_coprocessor.cpp''.
     116''fifo_lcd_coprocessor.cpp''.
     117
     118Comme pour tout modèle CABA SoCLib, les variables membres de la classe '''FifoLcdCoprocessor sont de trois types :
     119 * '''ports''' : les variables membres représentant les ports d'entrée sortie sont de type ''sc_core::sc_in'' ou ''sc_core::sc_out'',
     120ou des objets plus complexe (possédant éventuellement un paramètre template) représentant des regroupements de plusieurs ports élémentaires : c'est la cas des types ''soclib::caba::FifoOutput<typename>'' et ''soclib::caba::FifoInput<typename>'' utilisés pour accéder à un cana FIFO. Pour des raisons de lisibilité, il est recommandé que les noms de registre soient préfixé par '''p_'''. On définira 2 ports simples (''p_ck'', ''p_resetn''), et deux ports FIFO (''p_in'' et ''p_out''). Ce sont évidemment des variables publiques.
     121* '''registres''' : les variables membres représentant les registres sont de type ''sc_core::sc_signal''. Pour des raisons de lisibilité, il est recommandé que les noms de registre soient préfixé par '''r_'''. On définira trois registres ''r_fsm'', ''r_opa'' et ''r_opb''. Ce sont des variables privées.
     122 * '''constantes''' : ces variables membres sont en fait des constantes permettant de stocker les valeurs des paramètres définis comme arguments du constructeur pour les composants matériels génériques. Ces variables membres sont initialisées dans le constructeur, et leur valeur reste constante au cours de la simulation.  Pour des raisons de lisibilité, il est recommandé que les noms de constantes soient préfixé par '''m_'''. Ces variables sont toujours privées.  Le coprocesseur n'étant pas paramètrable, on ne définira aucune variable de ce type.
     123
     124Le constructeur du coprocesseur LCD ne possède qu'un seul argument, qui est le nom d'instance (on a besoin d'un nom d'instance, car il est possible d'avoir plusieurs instances du même coprocesseur dans une architecture).  Ce nom d'instance est de type ''sc_core::sc_module_name'', et il est stoké dans une variable membre de la classe ''sc_module'', qui est une classe générique dont héritent tous les modèles de composant SoCLib.
     125
     126Enfin, comme tous les modèles CABA de SoCLib, le coprocesseur LCD possède des fonctions membres définissant
     127le comportement du composant, qui sont de trois types :
     128 * la fonction ''transition()'' est sensible au front montant du port d'etrée CK, et permet de calculer la valeur future des
     129registres en fonction de la valeur courante des registres et des valeurs présentes sur les autres ports d'entrée.
     130 * la fonction ''genMoore()'' est sensible au front descendant du port d'entrée CK, et permet de calculer la valeur des ports de sortie qui ne dépendent que des valeurs stockées dans les registres.
     131 * les fonctions ''genMealy'' (une ou plusieurs fonction). Chacune de ces fonction est  sensible au front descendant du port CK, et à un ensemble particulier de port d'entrée. Elle permettent de calculer la valeur des ports de sorties qui dépendent de façon combinatoire des ports d'entrée.
     132Les noms de fonction ne sont pas imposés, mais il est recommandé de respecter les noms proposés ci-dessus.
     133Le coprocesseur LCD se comportant globalement comme un automate de Moore, on n'a pas besoin de définir de fonctions de type ''genMealy()''.
     134
     135Les architectures matérielles modélisées avec SoCLib peuvent comporter plusieurs dizaines de modèles différents.
     136Pour réduire les temps de compilation la plate-forme de modélisation SoCLib exploite le principe de la compilation séparée: Chaque modèle de composant matériel est compilé séparément.
     137
     138A titre d'exemple, compilez le modèle du composant '''FifoLcdMaster''', en utilisant le compilateur g++.
     139Il faut lancer la commande suivante dans votre répertoire de travail TP1 :
     140{{{
     141$ g++ -Wno-deprecated -I. -I/.../systemc/systemc-2.2/include -c -o fifo_lcd_master.o fifo_lcd_master.cpp
     142}}}
     143Cette commande doit créer fichier objet ''fifo_lcd_master.o dans le répertoire TP1.
     144
     145Vous pouvez utiliser la même commande (en changeant les noms des fichiers) pour compiler... et déboguer le modèle
     146du composant '''FifoLcdCoprocessor'''.
    117147
    118148== 3.2 Ecriture du modèle CABA de la ''top-cell'' ==
     149
     150On appelle généralement ''top-cell'' la description structurelle decrivant l'interconnexion des différents composants
     151matériels constituant l'architecture matérielle qu'on souhaite simuler.
     152Editez le fichier ''tp1_top.cpp'', qui décrit l'architecture, ainsi que les directives de simulation. Ce fichier est volontairement incomplet pour vous obliger à analyser en détail les différentes sections :
     153
    119154
    120155== 2.3 Compilation  et génération du simulateur ==