source: trunk/IPs/systemC/processor/Morpheo/Documentation/doc/document-morpheo-vhdl_generation/tex/document-morpheo-vhdl_generation-fr-04_vhdl_structural.tex @ 100

Last change on this file since 100 was 100, checked in by rosiere, 15 years ago

1) Bug fix (Operation, Instruction)
2) Modif Return Address Stack
3) Add Soft Test
4) Add Soc Test

  • Property svn:keywords set to Id
File size: 5.6 KB
Line 
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}}
8Les 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.
9Par 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
11Les 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
32La 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
43Pour la suite, nous allons supposer l'instanciation d'une FIFO.
44
45\subSection{Ajout d'une instance}
46
47Dans 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
92ifndef Queue
93include  $(DIR_MORPHEO)/Behavioural/Generic/Queue/Makefile.deps
94endif
95
96# Inclure les librairies
97Component_LIBRARY       = -lComponent     \
98                          $(Queue_LIBRARY)
99
100# Les chemins vers les librairies
101Component_DIR_LIBRARY   = -L$(Component_DIR)/lib  \
102                          $(Queue_DIR_LIBRARY)
103
104# Construction de la librairie ``Component''
105Component_library       :
106                        @\
107                        $(MAKE) Queue_library; \
108                        $(MAKE) --directory=$(Component_DIR) --makefile=Makefile;
109
110# Effacement des fichiers générés
111Component_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}
119L'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}
Note: See TracBrowser for help on using the repository browser.