[100] | 1 | %------------------------------------------------------------------------------ |
---|
| 2 | % $Id: document-morpheo-vhdl_generation-fr-04_vhdl_structural.tex 113 2009-04-14 18:39:12Z rosiere $ |
---|
| 3 | %------------------------------------------------------------------------------ |
---|
| 4 | |
---|
| 5 | \Section{VHDL : structurelle}\label{vhdl_structural} |
---|
| 6 | |
---|
[113] | 7 | %\subSection{Description du fichier {\it Component\_vhdl.cpp}} |
---|
[100] | 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 | Pour la suite, nous allons supposer l'instanciation d'une FIFO. |
---|
| 14 | |
---|
| 15 | \subSection{Ajout d'une instance} |
---|
| 16 | |
---|
| 17 | \begin{enumerate} |
---|
[113] | 18 | \item Dans le fichier Component.h : inclure la définition de la classe désirée. |
---|
[100] | 19 | \lstparam{C++} |
---|
| 20 | \begin{lstlisting} |
---|
| 21 | #include "Behavioural/Generic/Queue/include/Queue.h" |
---|
| 22 | \end{lstlisting} |
---|
[113] | 23 | |
---|
| 24 | \item Dans le fichier Component.h : déclaré les paramètres et le component |
---|
[100] | 25 | \lstparam{C++} |
---|
| 26 | \begin{lstlisting} |
---|
[113] | 27 | morpheo::behavioural::generic::queue::Parameters * _param_queue; |
---|
| 28 | morpheo::behavioural::generic::queue::Queue * _component_queue; |
---|
| 29 | \end{lstlisting} |
---|
| 30 | |
---|
| 31 | \item Dans le fichier Component\_allocation.cpp : creer les paramètres du modèle. |
---|
| 32 | \lstparam{C++} |
---|
| 33 | \begin{lstlisting} |
---|
| 34 | _param_queue = new morpheo::behavioural::generic::queue::Parameters |
---|
[100] | 35 | (16, //size_queue |
---|
| 36 | 32);//size_data |
---|
| 37 | \end{lstlisting} |
---|
[113] | 38 | \item Dans le fichier Component\_allocation.cpp : creer le modèle |
---|
[100] | 39 | \lstparam{C++} |
---|
| 40 | \begin{lstlisting} |
---|
| 41 | std::string queue_name = _name + "_queue"; |
---|
| 42 | |
---|
[113] | 43 | _component_queue = new morpheo::behavioural::generic::queue::Queue |
---|
[100] | 44 | (queue_name.c_str() // nom du modèle |
---|
| 45 | #ifdef STATISTICS |
---|
| 46 | ,NULL // Pas paramètres pour les statistiques |
---|
| 47 | #endif |
---|
[113] | 48 | ,_param_queue // Paramètres de la file |
---|
[100] | 49 | ,USE_VHDL); // Utilisation du modèle VHDL |
---|
| 50 | \end{lstlisting} |
---|
[113] | 51 | \item Dans le fichier Component\_allocation.cpp : inclure le modèle dans la liste des composants internes |
---|
[100] | 52 | \lstparam{C++} |
---|
| 53 | \begin{lstlisting} |
---|
[113] | 54 | _component->set_component(_component_queue->_component |
---|
[100] | 55 | #ifdef POSITION |
---|
| 56 | , 20, 20, 20, 20 |
---|
| 57 | // Coordonée pour l'outil de visualisation |
---|
| 58 | #endif |
---|
| 59 | , INSTANCE_LIBRARY |
---|
| 60 | // Instancier uniquement les librairies |
---|
| 61 | ); |
---|
| 62 | \end{lstlisting} |
---|
[113] | 63 | \item Dans le fichier Makefile.deps : ajouter les dépendances du modèle. |
---|
[100] | 64 | \lstparam{make} |
---|
| 65 | \begin{lstlisting} |
---|
| 66 | # Inclure les dépendances |
---|
| 67 | ifndef Queue |
---|
| 68 | include $(DIR_MORPHEO)/Behavioural/Generic/Queue/Makefile.deps |
---|
| 69 | endif |
---|
| 70 | |
---|
| 71 | # Inclure les librairies |
---|
| 72 | Component_LIBRARY = -lComponent \ |
---|
| 73 | $(Queue_LIBRARY) |
---|
| 74 | |
---|
| 75 | # Les chemins vers les librairies |
---|
| 76 | Component_DIR_LIBRARY = -L$(Component_DIR)/lib \ |
---|
| 77 | $(Queue_DIR_LIBRARY) |
---|
| 78 | |
---|
| 79 | # Construction de la librairie ``Component'' |
---|
| 80 | Component_library : |
---|
| 81 | @\ |
---|
| 82 | $(MAKE) Queue_library; \ |
---|
| 83 | $(MAKE) --directory=$(Component_DIR) --makefile=Makefile; |
---|
| 84 | |
---|
| 85 | # Effacement des fichiers générés |
---|
| 86 | Component_library_clean : |
---|
| 87 | @\ |
---|
| 88 | $(MAKE) Queue_library_clean; \ |
---|
| 89 | $(MAKE) --directory=$(Component_DIR) --makefile=Makefile clean; |
---|
| 90 | \end{lstlisting} |
---|
[113] | 91 | \item Dans le fichier Component\_deallocation.cpp : détruire les modèles et leurs paramètres. |
---|
| 92 | \lstparam{C++} |
---|
| 93 | \begin{lstlisting} |
---|
| 94 | delete _component_queue; |
---|
| 95 | delete _param_queue; |
---|
| 96 | \end{lstlisting} |
---|
[100] | 97 | \end{enumerate} |
---|
| 98 | |
---|
| 99 | \subSection{Instanciation} |
---|
| 100 | L'instanciation ce fait comme avec des composants VHDL classiques : |
---|
| 101 | \lstparam{C++} |
---|
| 102 | \begin{lstlisting} |
---|
| 103 | vhdl->set_comment(0,""); |
---|
| 104 | vhdl->set_comment(0,"-----------------------------------"); |
---|
| 105 | vhdl->set_comment(0,"-- Instance queue "); |
---|
| 106 | vhdl->set_comment(0,"-----------------------------------"); |
---|
| 107 | vhdl->set_comment(0,""); |
---|
| 108 | |
---|
| 109 | vhdl->set_body (0,"instance_"+_name+"_queue : "+_name+"_queue"); |
---|
| 110 | vhdl->set_body (0,"port map ("); |
---|
| 111 | vhdl->set_body (1," in_CLOCK \t=>\t in_CLOCK "); |
---|
| 112 | vhdl->set_body (1,", in_NRESET \t=>\t in_NRESET"); |
---|
| 113 | vhdl->set_body (1,", in_INSERT_VAL \t=>\tinternal_QUEUE_INSERT_VAL"); |
---|
| 114 | vhdl->set_body (1,",out_INSERT_ACK \t=>\tinternal_QUEUE_INSERT_ACK"); |
---|
| 115 | vhdl->set_body (1,", in_INSERT_DATA \t=>\tinternal_QUEUE_INSERT_DATA"); |
---|
| 116 | vhdl->set_body (1,",out_RETIRE_VAL \t=>\tinternal_QUEUE_RETIRE_VAL"); |
---|
| 117 | vhdl->set_body (1,", in_RETIRE_ACK \t=>\tinternal_QUEUE_RETIRE_ACK"); |
---|
| 118 | vhdl->set_body (1,",out_RETIRE_DATA \t=>\tinternal_QUEUE_RETIRE_DATA"); |
---|
| 119 | vhdl->set_body (0,");"); |
---|
| 120 | \end{lstlisting} |
---|
[113] | 121 | |
---|