Nous allons détailler les étapes qui doivent être suivit afin de créer un Component du nom de XXX localiser dans le répertoire YYY. Ce dernier étant un sous répertoire de Morpheo/Behavioural. A la fin de chaque étape, il est conseillé de faire des tests.

Tous les tests sont contenus dans le répertoire ./SelfTest. Les fichiers contenus dans ./SelfTest/main sont des jeux de paramètres. Ils sont le points d'entrées de la fonction test contenus dans ./SelfTest/src/test.cpp

\begin{enumerate}
\item 
{\bf Initialisation}
\begin{enumerate}
\item {\it Morpheo/Behavioural}, éxècutez la commande ./New\_component.sh YYY XXX, puis aller dans le répertoire YYY.
\end{enumerate}
\item 
{\bf Paramètres}
\begin{enumerate}
\item {\it ./include/Parameters.h}, définition des constantes définissant les paramètres. (Ne pas oublier les paramètres du constructeur)
\item {\it ./src/Parameters.cpp}, constructeur et constructeur par copie.
\item {\it ./src/Parameters\_msg\_error.cpp}, énumérer les conditions d'erreurs.
\end{enumerate}
\item 
{\bf Interfaces}
\begin{enumerate}
\item {\it ./include/XXX.h}, Ajout de l'interface.
\item {\it ./include/Types.h}, Ajout des types composants l'interface.
\item {\it ./src/Parameters\_msg\_error.cpp}, Ajouter si non effectuer dans l'étape précedente, les erreurs pouvant survenir pour une erreur d'encodage des types.
\item {\it ./src/XXX\_allocation.cpp}, Allocation des ports d'interface (en fonction des paramètres).
\item {\it ./src/XXX\_desallocation.cpp}, Désallocation des ports d'interface.
\item {\it ./SelfTest/src/test.h}, Ajout des signaux interne et instanciation avec l'instance du modèle.
\end{enumerate}
\item 
{\bf SystemC}
\begin{enumerate}
\item {\it ./SelfTest/src/test.h}, Ecriture du test en lui même pour les tests combinatoires, ne pas oublier de faire avancer le delta cycle en utilisant sc\_start(0). L'écriture des tests est plus difficle à faire avant l'écriture du code, mais cela ne supposeras alors aucun apriori et permet se baser uniquement sur l'interface vut dans l'étape précedente.
\item {\it ./include/XXX.h}, Ajout des prototypes des fonctions de Mealy et de Moore. (Prenez comme exemple la fonction ``transition'')
\item {\it ./include/XXX.cpp}, Ajout de la liste de sensibilité des fonctions de Mealy et de Moore. (Prenez comme exemple la fonction ``transition'')
\item {\it ./include/transition.cpp}, Ajouter le corps de la fonction de transition. Créez un fichier par fonctions de Mealy et Moore contenus dans le modèle (Prenez comme exemple la fonction ``transition''). Note pour la compatibilité systemCass : un signal ne doit être affecté qu'un seul fois.
\end{enumerate}
\item 
{\bf Statistics}
\begin{enumerate}
\item {\it ./include/Statistics.h}, Ajouter les variables qui vont servir de sondes, et pour la fonction ``add'' ajouter également autant de paramètres que de sondes. Si vous devez sonder un ensemble d'élément (port, file, banc de registres), et déterminer l'utilisation moyenne, nous vous proposer la classe Statistics contenus dans {\it Behavioural/Generic/Group/include/Statistics.h}
\item {\it ./src/Statistics.cpp}, Remplir le corps du constructeur et du destructeur de la classe Statistics.
\item {\it ./src/Statistics\_print.cpp}, Ajouter le corps de la fonction print contenus dans ce fichier. Son but étant d'imprimer au format XML.
\item {\it ./src/Statistics\_add.cpp}, Implémentation de la fonction add de la classe Statistics. (Son but étant d'incrémenter les variables de la classe)
\item {\it ./src/XXX\_transition.cpp}, Dernière étape pour l'ajout des statistics : à la fin de la fonction de transition, faire un appel à la méthode add de la classe statistics. Il peut être utile d'ajouter des variables local à la classe XXX dans ./include/XXX.h, mais n'oubliez pas de les protéger par un \#ifdef STATISTICS
\end{enumerate}
\item 
{\bf Vhdl}
\begin{enumerate}
\item {\it ./src/XXX\_vhdl.cpp} Normalement vous n'avez pas à modifier ce fichier. Mais si bloc est structurelle et ne contient pas des sous bloc définit par d'autre composant, alors fonction vhdl de la classe XXX doit s'occuper d'appeler les bonnes fonctions pour les généreés. (prenez exemple sur {\it ./Behavioural/Predictor/Branch\_Target\_Buffer/Sort/src/Sort\_vhdl.cpp}
\item {\it ./src/XXX\_vhdl\_declaration.cpp} Enumeration des types nécessaires pour le corps du code VHDL.
\item {\it ./src/XXX\_vhdl\_port.cpp} Listes des ports du composants. Attention, les types des ports doivent être des types simples. (De préférence pas les types définitions dans le fichier {\it ./src/XXX\_vhdl\_type.cpp}).
\item {\it ./src/XXX\_vhdl\_declaration.cpp} Définitions des signaux internes aux composants.
\item {\it ./src/XXX\_vhdl\_body.cpp} Corps du composant... Amusez vous bien :)
\end{enumerate}
\item 
{\bf Vhdl - TestBench}
\begin{enumerate}
\item {\it ./src/XXX.cpp} Dans le constructeur, on définit l'horloge interne du testBench. A la ligne {\bf \_vhdl\_testbench->set\_clock("in\_CLOCK",true);} le premier argument de {\it set\_clock} est le nom du port de l'horloge. Le deuxième argument est un booléen qui indique si le modèle à tester possède une horloge ou pas. Modifier cette ligne pour être en adéquation avec votre composant.
\item {\it ./src/XXX\_vhdl\_testbench\_port.cpp} Enumaration des ports du modèle. Il s'agit en générale d'une bête recopie du fichier {\it ./src/XXX\_vhdl\_port.cpp} avec quelques petites retouches.
\item {\it ./src/XXX\_vhdl\_testbench\_transition.cpp} Ajout dans le testbench des valeurs des entrées et des sorties du modèles. Les ports doivent être listé dans le même ordre que celui du fichier {\it ./src/XXX\_vhdl\_testbench\_port.cpp}.
\end{enumerate}
\end{enumerate}

	
%%+-------------------------------+---------------------------------------------------------------+
%%|	List of flags		|	exemple ( component : RegisterFile )			|
%%+-------------------------------+---------------------------------------------------------------+
%%|				|								|
%%|	@DIR_MORPHEO		|	../..							|
%%|				|								|
%%|	@COMPONENT		|	RegisterFile						|
%%|				|								|
%%|	Behavioural/@DIRECTORY		|	Behavioural/Generic/RegisterFile			|
%%|				|								|
%%|	behavioural_@DEFINE			|	behavioural_generic_registerfile			|
%%|				|								|
%%|	namespace behavioural {
%%@NAMESPACE_BEGIN	|	namespace behavioural                {			|
%%|				|	namespace generic                    {			|
%%|				|	namespace registerfile               {			|
%%|				|								|
%%|	@NAMESPACE_END
%%}; // end namespace behavioural		|	}; // end namespace registerfile 			|
%%|				|	}; // end namespace generic				|
%%|				|	}; // end namespace behavioural          		|
%%|				|								|
%%|	behavioural::@NAMESPACE_USE		|	behavioural::generic::registerfile			|
%%|				|								|
%%|	using namespace morpheo::behavioural;
%%@NAMESPACE_USING	|	using namespace morpheo::behavioural;			|
%%|				|	using namespace morpheo::behavioural::generic;		|
%%|				|								|
%%+-------------------------------+---------------------------------------------------------------+
