TP SSAM : Crossbar

Par Remi Melisson & Erik Clairiot


_____________
MODE D'EMPLOI

Pour compiler, il faut renseigner correctement la variable SYSTEMC du 
Makefile, puis lancer la commande make.
L'executable est le fichier ./Run créé, à executer donc avec un ./Run

L'executable a pour fonction de generer un reseau, de l'afficher, de
le mettre en test avec l'envoi de messages, et de constater le nombre
de blocages que le reseau a subi.

Plusieurs classes C++ ont été codés, au dela des modules SystemC, afin
de pouvoir réutiliser facilement ce code pour y implementer de nouveaux 
types de reseaux, et d'automatiser la lourde tâche d'assignations de
signaux aux modules systemC, ici les crossbars notamment.

Le mode de fonctionnement de la classe d'un XNetwork est le suivant :
 - à la construction du réseau, remplissage d'un tableau à 2 dimensions 
 (entrees / 2 * stages), ou chaque element est une structure similaire
 à un crossbar (structure à 2 entrees et 2 sorties)
 - les entrees doivent correspondre aux numeros des sorties des crossbars
 à l'etage précédent, les sorties aux numeros des entrees des crossbars
 de l'etage suivant.

De manière générale, il suffit pour créer un nouveau réseau de trouver
un algorithme permettant de construire dynamiquement ce réseau, de 
l'invoquer dans le constructeur de la classe, et d'appeler finalement 
dans ce constructeur la méthode construct(), qui permet de construire
à partir du tableau rempli l'ensemble des crossbars SystemC, et ceux là
correctement reliés.

(S'inspirer de Butterfly.h / cpp)

_________________________
STRUCTURE DE NOS FICHIERS

-----------------
3 modules SystemC
    - sender : Permet d'envoyer des messages aux entrées d'un crossbar

    - receiver : Permet de recevoir des messages provenant des sorties
    d'un crossbar

    - cross2x2 : Represente un crossbar 2 entrees 2 sorties.

-----------
Classes C++
    - XNetwork.h : Définit un réseau de type XNetwork, permet la
    construction implicite des modules systemC des crossbars qui le 
    forment, et ses liaisons.
    Permet aussi un affichage visuel du réseau.
    Chaque réseau implementé doit etendre cette classe.

    - Crossbar.h : Surcouche contenant un module SystemC cross2x2 et
    permettant une manipulation plus aisée.

    - Butterfly.h, Omega.h, Flip.h, Baseline.h : 4 types de réseau.
    Seuls Butterfly & Baseline sont constructibles dynamiquement.
    Sinon, la taille du réseau est fixe et imposée.

-------------
Configuration
    - includes/common.h : Permet de définir l'ensemble des variables
    definissant les tailles des reseaux et autres details.
    Tres important (est source de problèmes si oubli)

----------
Executable
    - Main.cpp : Pour tester chacun des reseaux, il faut manipuler le
    fichier Main.cpp, et notamment la fonction main().
    Du code y est commenté, il suffit de choisir les lignes correctes
    à decommenter (a partir de ligne 102).
    
    Une fois le code modifié du Main.cpp, executer :
	make -B Main.o Run && ./Run


____
BUGS

La trace generée est inexploitable avec GTKWave.. (Xtrace.vcd)
