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 | |
---|
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 | Pour la suite, nous allons supposer l'instanciation d'une FIFO. |
---|
14 | |
---|
15 | \subSection{Ajout d'une instance} |
---|
16 | |
---|
17 | \begin{enumerate} |
---|
18 | \item Dans le fichier Component.h : inclure la définition de la classe désirée. |
---|
19 | \lstparam{C++} |
---|
20 | \begin{lstlisting} |
---|
21 | #include "Behavioural/Generic/Queue/include/Queue.h" |
---|
22 | \end{lstlisting} |
---|
23 | |
---|
24 | \item Dans le fichier Component.h : déclaré les paramètres et le component |
---|
25 | \lstparam{C++} |
---|
26 | \begin{lstlisting} |
---|
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 |
---|
35 | (16, //size_queue |
---|
36 | 32);//size_data |
---|
37 | \end{lstlisting} |
---|
38 | \item Dans le fichier Component\_allocation.cpp : creer le modèle |
---|
39 | \lstparam{C++} |
---|
40 | \begin{lstlisting} |
---|
41 | std::string queue_name = _name + "_queue"; |
---|
42 | |
---|
43 | _component_queue = new morpheo::behavioural::generic::queue::Queue |
---|
44 | (queue_name.c_str() // nom du modèle |
---|
45 | #ifdef STATISTICS |
---|
46 | ,NULL // Pas paramètres pour les statistiques |
---|
47 | #endif |
---|
48 | ,_param_queue // Paramètres de la file |
---|
49 | ,USE_VHDL); // Utilisation du modèle VHDL |
---|
50 | \end{lstlisting} |
---|
51 | \item Dans le fichier Component\_allocation.cpp : inclure le modèle dans la liste des composants internes |
---|
52 | \lstparam{C++} |
---|
53 | \begin{lstlisting} |
---|
54 | _component->set_component(_component_queue->_component |
---|
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} |
---|
63 | \item Dans le fichier Makefile.deps : ajouter les dépendances du modèle. |
---|
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} |
---|
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} |
---|
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} |
---|
121 | |
---|