[100] | 1 | %------------------------------------------------------------------------------ |
---|
| 2 | % $Id: document-morpheo-vhdl_generation-fr-04_vhdl_structural.tex 100 2009-01-08 13:06:27Z rosiere $ |
---|
| 3 | %------------------------------------------------------------------------------ |
---|
| 4 | |
---|
| 5 | \Section{VHDL : structurelle}\label{vhdl_structural} |
---|
| 6 | |
---|
| 7 | \subSection{Description du fichier {\it Component\_vhdl.cpp}} |
---|
| 8 | Les modèles systemC structurels sont des modèles qui instancient d'autres modèles. Il n'y a pas de description comportementale. Ces modèles sont générés automatiquement. |
---|
| 9 | Par contre, les modèles systemC comportementaux peuvent être décrit par un modèle VHDL mixte (incluant une description comportementale et des instances d'autre composant). |
---|
| 10 | |
---|
| 11 | Les modèles génériques sont dans le répertoire {\it IPs/systemC/processor/Morpheo/Behavioural/Generic}. |
---|
| 12 | |
---|
| 13 | \lstparam{C++} |
---|
| 14 | \begin{lstlisting}[caption={Component\_vhdl.cpp}, label=component_vhdl.cpp] |
---|
| 15 | void component::vhdl (void) |
---|
| 16 | { |
---|
| 17 | Vhdl * vhdl = new Vhdl (_name); |
---|
| 18 | |
---|
| 19 | _interfaces->set_port(vhdl); |
---|
| 20 | _component->vhdl_instance(vhdl); |
---|
| 21 | |
---|
| 22 | vhdl_declaration (vhdl); |
---|
| 23 | vhdl_body (vhdl); |
---|
| 24 | |
---|
| 25 | vhdl->generate_file(); |
---|
| 26 | |
---|
| 27 | delete vhdl; |
---|
| 28 | }; |
---|
| 29 | \end{lstlisting} |
---|
| 30 | |
---|
| 31 | |
---|
| 32 | La première étape est d'éditer le fichier {\it Component\_vhdl.cpp}. Le listing \ref{component_vhdl.cpp} représente le contenu de ce fichier. |
---|
| 33 | \begin{itemize} |
---|
| 34 | \item Ligne 3 : Déclaration et construction de la variable {\it vhdl} qui est du type {\it Vhdl}. |
---|
| 35 | \item Ligne 5 : Ajout dans le modèle VHDL des interfaces présentes dans le modèle SystemC. (cf fichiers Component.h). |
---|
| 36 | \item Ligne 6 : Ajout dans le modèle VHDL des composants internes dans le modèle SystemC. (cf fichiers Component.h et Component\_allocation.cpp). |
---|
| 37 | \item Ligne 8 : Ajout dans le modèle VHDL des déclarations définit dans le fichiers Component\_vhdl\_declaration.cpp (cf section \ref{vhdl_declaration}). |
---|
| 38 | \item Ligne 9 : Ajout dans le modèle VHDL de la description comportemental définit dans le fichiers Component\_vhdl\_body.cpp (cf section \ref{vhdl_body}). |
---|
| 39 | \item Ligne 11 : Génération des fichiers VHDL. Le nom du fichier est construit à partir du nom fourni lors de la construction de la variable {\it vhdl}. |
---|
| 40 | \item Ligne 13 : Destruction de l'objet. |
---|
| 41 | \end{itemize} |
---|
| 42 | |
---|
| 43 | Pour la suite, nous allons supposer l'instanciation d'une FIFO. |
---|
| 44 | |
---|
| 45 | \subSection{Ajout d'une instance} |
---|
| 46 | |
---|
| 47 | Dans le fichier Component\_vhdl.cpp : |
---|
| 48 | \begin{enumerate} |
---|
| 49 | \item Inclure la définition de la classe désirée. |
---|
| 50 | \lstparam{C++} |
---|
| 51 | \begin{lstlisting} |
---|
| 52 | #include "Behavioural/Generic/Queue/include/Queue.h" |
---|
| 53 | \end{lstlisting} |
---|
| 54 | \item Creer les paramètres du modèle. |
---|
| 55 | \lstparam{C++} |
---|
| 56 | \begin{lstlisting} |
---|
| 57 | morpheo::behavioural::generic::queue::Parameters * param_queue; |
---|
| 58 | param_queue = new morpheo::behavioural::generic::queue::Parameters |
---|
| 59 | (16, //size_queue |
---|
| 60 | 32);//size_data |
---|
| 61 | \end{lstlisting} |
---|
| 62 | \item Creer le modèle |
---|
| 63 | \lstparam{C++} |
---|
| 64 | \begin{lstlisting} |
---|
| 65 | morpheo::behavioural::generic::queue::Queue * queue; |
---|
| 66 | std::string queue_name = _name + "_queue"; |
---|
| 67 | |
---|
| 68 | queue = new morpheo::behavioural::generic::queue::Queue |
---|
| 69 | (queue_name.c_str() // nom du modèle |
---|
| 70 | #ifdef STATISTICS |
---|
| 71 | ,NULL // Pas paramètres pour les statistiques |
---|
| 72 | #endif |
---|
| 73 | ,param_queue // Paramètres de la file |
---|
| 74 | ,USE_VHDL); // Utilisation du modèle VHDL |
---|
| 75 | \end{lstlisting} |
---|
| 76 | \item Inclure le modèle dans la liste des composants internes |
---|
| 77 | \lstparam{C++} |
---|
| 78 | \begin{lstlisting} |
---|
| 79 | _component->set_component(queue->_component |
---|
| 80 | #ifdef POSITION |
---|
| 81 | , 20, 20, 20, 20 |
---|
| 82 | // Coordonée pour l'outil de visualisation |
---|
| 83 | #endif |
---|
| 84 | , INSTANCE_LIBRARY |
---|
| 85 | // Instancier uniquement les librairies |
---|
| 86 | ); |
---|
| 87 | \end{lstlisting} |
---|
| 88 | \item indiquer dans le fichier Makefile.deps que le composant dépend de ce modèle. |
---|
| 89 | \lstparam{make} |
---|
| 90 | \begin{lstlisting} |
---|
| 91 | # Inclure les dépendances |
---|
| 92 | ifndef Queue |
---|
| 93 | include $(DIR_MORPHEO)/Behavioural/Generic/Queue/Makefile.deps |
---|
| 94 | endif |
---|
| 95 | |
---|
| 96 | # Inclure les librairies |
---|
| 97 | Component_LIBRARY = -lComponent \ |
---|
| 98 | $(Queue_LIBRARY) |
---|
| 99 | |
---|
| 100 | # Les chemins vers les librairies |
---|
| 101 | Component_DIR_LIBRARY = -L$(Component_DIR)/lib \ |
---|
| 102 | $(Queue_DIR_LIBRARY) |
---|
| 103 | |
---|
| 104 | # Construction de la librairie ``Component'' |
---|
| 105 | Component_library : |
---|
| 106 | @\ |
---|
| 107 | $(MAKE) Queue_library; \ |
---|
| 108 | $(MAKE) --directory=$(Component_DIR) --makefile=Makefile; |
---|
| 109 | |
---|
| 110 | # Effacement des fichiers générés |
---|
| 111 | Component_library_clean : |
---|
| 112 | @\ |
---|
| 113 | $(MAKE) Queue_library_clean; \ |
---|
| 114 | $(MAKE) --directory=$(Component_DIR) --makefile=Makefile clean; |
---|
| 115 | \end{lstlisting} |
---|
| 116 | \end{enumerate} |
---|
| 117 | |
---|
| 118 | \subSection{Instanciation} |
---|
| 119 | L'instanciation ce fait comme avec des composants VHDL classiques : |
---|
| 120 | \lstparam{C++} |
---|
| 121 | \begin{lstlisting} |
---|
| 122 | vhdl->set_comment(0,""); |
---|
| 123 | vhdl->set_comment(0,"-----------------------------------"); |
---|
| 124 | vhdl->set_comment(0,"-- Instance queue "); |
---|
| 125 | vhdl->set_comment(0,"-----------------------------------"); |
---|
| 126 | vhdl->set_comment(0,""); |
---|
| 127 | |
---|
| 128 | vhdl->set_body (0,"instance_"+_name+"_queue : "+_name+"_queue"); |
---|
| 129 | vhdl->set_body (0,"port map ("); |
---|
| 130 | vhdl->set_body (1," in_CLOCK \t=>\t in_CLOCK "); |
---|
| 131 | vhdl->set_body (1,", in_NRESET \t=>\t in_NRESET"); |
---|
| 132 | vhdl->set_body (1,", in_INSERT_VAL \t=>\tinternal_QUEUE_INSERT_VAL"); |
---|
| 133 | vhdl->set_body (1,",out_INSERT_ACK \t=>\tinternal_QUEUE_INSERT_ACK"); |
---|
| 134 | vhdl->set_body (1,", in_INSERT_DATA \t=>\tinternal_QUEUE_INSERT_DATA"); |
---|
| 135 | vhdl->set_body (1,",out_RETIRE_VAL \t=>\tinternal_QUEUE_RETIRE_VAL"); |
---|
| 136 | vhdl->set_body (1,", in_RETIRE_ACK \t=>\tinternal_QUEUE_RETIRE_ACK"); |
---|
| 137 | vhdl->set_body (1,",out_RETIRE_DATA \t=>\tinternal_QUEUE_RETIRE_DATA"); |
---|
| 138 | vhdl->set_body (0,");"); |
---|
| 139 | \end{lstlisting} |
---|