Ignore:
Timestamp:
Dec 31, 2008, 11:18:08 AM (16 years ago)
Author:
rosiere
Message:

1) Fix bug (read unit, RAT -> write in R0, SPR desallocation ...)
2) Change VHDL Execute_queue -> use Generic/Queue?
3) Complete document on VHDL generation
4) Add soc test

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/IPs/systemC/processor/Morpheo/Documentation/doc/document-morpheo-vhdl_generation/tex/document-morpheo-vhdl_generation-fr.tex

    r95 r98  
    6262
    6363Par exemple pour la 2 ème interface de lecture d'un banc de registre :
    64 \begin{verbatim}
     64\lstparam{VHDL}
     65\begin{lstlisting}
    6566 in_READ_1_VAL     : in  std_logic;
    6667out_READ_1_ACK     : out std_logic;
    6768 in_READ_1_ADDRESS : in  std_logic_vector(8 downto 0);
    6869out_READ_1_DATA    : out std_logic_vector(31 downto 0);
    69 \end{verbatim}
     70\end{lstlisting}
    7071
    7172Chaque composent (aussi bien combinatoire que séquentielle) possède un signal d'horloge et un signal de reset. (Ce dernier est actif à l'état bas). Ils ont tout les deux le même nom quelque soit le composant.
    72 \begin{verbatim}
     73\lstparam{VHDL}
     74\begin{lstlisting}
    7375 in_CLOCK  : in std_logic;
    7476 in_NRESET : in std_logic;
    75 \end{verbatim}
     77\end{lstlisting}
    7678
    7779\subSection{Types}
     
    7981Le type de base utilisé est le {\it std\_logic\_vector} (ou std\_logic si le vecteur est sur un seul bit). Pour cela on utilise la fonction suivante :
    8082
    81 \begin{verbatim}
     83\lstparam{C++}
     84\begin{lstlisting}
    8285std::string std_logic (uint32_t size);
    83 \end{verbatim}
     86\end{lstlisting}
    8487
    8588Pour accéder à une partie du vecteur on utilise la fonction {\it std\_logic\_range}. Elle a les prototypes suivant :
    86 \begin{verbatim}
    87 std::string std_logic_range (uint32_t size,
    88                              uint32_t max ,
    89                              uint32_t min ,
    90                              bool force=false);
    91 std::string std_logic_range (uint32_t max ,
    92                              uint32_t min ,
    93                              bool force=false);
    94 std::string std_logic_range (uint32_t size,
    95                              bool force=false);
    96 \end{verbatim}
     89\lstparam{C++}
     90\begin{lstlisting}
     91std::string std_logic_range  (uint32_t size,
     92                              uint32_t max ,
     93                              uint32_t min);
     94std::string std_logic_range  (uint32_t max ,
     95                              uint32_t min);
     96std::string std_logic_range  (uint32_t size);
     97std::string _std_logic_range (uint32_t size,
     98                              uint32_t max ,
     99                              uint32_t min);
     100std::string _std_logic_range (uint32_t max ,
     101                              uint32_t min);
     102std::string _std_logic_range (uint32_t size);
     103\end{lstlisting}
    97104
    98105La première fonction fais un test sur la taille que la seconde ne fait pas.
    99106L'argument de la troisième définit la taille (ce qui implique que la borne minimum est 0 et la borne maximum est size-1).
    100 Toute les surcharges ont le bolléen optionnel {\it force}. S'il est à faux, alors des tests seront effectués sur les bornes et la taille, sinon aucun test n'est effectué.
     107Toute les fonctions avec préfixé par un underscore n'effectue pas de test sur les bornes.
    101108
    102109Par exemple :
    103110\begin{verbatim}
    104 std_logic_range(4,false) renvoie "(3 downto 0)".
    105 std_logic_range(1,false) renvoie "(0)".
    106 std_logic_range(1,true ) renvoie "(0 downto 0)".
     111 std_logic_range(4) renvoie "(3 downto 0)".
     112 std_logic_range(1) renvoie "(0)".
     113_std_logic_range(1) renvoie "(0 downto 0)".
    107114\end{verbatim}
    108115
    109116Pour les types plus complexe, la classe {\it Vhdl} possède une méthode générique. Le premier argument est le nom du type le second est le type.
    110117
    111 \begin{verbatim}
     118\lstparam{C++}
     119\begin{lstlisting}
    112120void set_type (std::string name,
    113121               std::string type);
    114 \end{verbatim}
     122\end{lstlisting}
    115123
    116124L'exemple suivant définit un type représentat un tableau de {\it nb\_word} mots de {\it size\_word} bit chacun :
    117 \begin{verbatim}
     125\lstparam{C++}
     126\begin{lstlisting}
    118127vhdl->set_type ("Tregfile",
    119128                "array "+std_logic_range(nb_word)+" of "+std_logic(size_word));
    120 \end{verbatim}
     129\end{lstlisting}
    121130
    122131\subSection{Constantes}
     
    124133La déclaration de constante, ce fait avec la méthode {\it set\_constant} de la classe {\it Vhdl}. Les différentes surcharges de cette méthode est le type des arguments {\it type} et {\it init}.
    125134
    126 \begin{verbatim}
     135\lstparam{C++}
     136\begin{lstlisting}
    127137void set_constant (std::string name,
    128138                   std::string type,
     
    134144                   uint32_t    size,
    135145                   uint32_t    init);
    136 \end{verbatim}
     146\end{lstlisting}
    137147
    138148Par exemple pour coder les états d'un automate à 5 états en One Hot :
    139 \begin{verbatim}
     149\lstparam{C++}
     150\begin{lstlisting}
    140151vhdl->set_constant ("State_idle",5,1);
    141 \end{verbatim}
     152\end{lstlisting}
    142153
    143154Dans le cas de signaux de type {\it std\_logic}, au lieu de déclarer des constantes, il existe deux fonctions permettant d'utiliser des constantes directement dans le corps du composant.
    144155La première est {\it std\_logic\_others}. Elle permet de définir des constantes dont soit les bits sont à pleins un soit à plein zéro.
    145156
    146 \begin{verbatim}
     157\lstparam{C++}
     158\begin{lstlisting}
    147159std::string std_logic_others (uint32_t size,
    148160                              bool cst  );
    149 \end{verbatim}
     161\end{lstlisting}
    150162
    151163Pour toute les autres constantes, la méthode {\it std\_logic\_conv} transforme un entier en {\it std\_logic\_vector}.
    152164
    153 \begin{verbatim}
     165\lstparam{C++}
     166\begin{lstlisting}
    154167std::string std_logic_conv (uint32_t    size,
    155168                            std::string value);
    156169std::string std_logic_conv (uint32_t    size,
    157170                            uint32_t    value);
    158 \end{verbatim}
     171\end{lstlisting}
    159172
    160173
     
    162175
    163176Les signaux internes sont définit grâce au méthode {\it set\_signal}. Le premier argument est le nom du signal. Le second est soit un type soit une taille (dans le cas où le type est un  {\it std\_logic\_vector}).
    164 \begin{verbatim}
     177\lstparam{C++}
     178\begin{lstlisting}
    165179void set_signal (std::string name,
    166180                 std::string type);
    167181void set_signal (std::string name,
    168182                 uint32_t    size);
    169 \end{verbatim}
     183\end{lstlisting}
    170184
    171185La méthode est également surchargé si le signal à besoin d'une initialisation.
    172186
    173 \begin{verbatim}
     187\lstparam{C++}
     188\begin{lstlisting}
    174189void set_signal (std::string name,
    175190                 std::string type,
     
    181196                 uint32_t    size,
    182197                 uint32_t    init);
    183 \end{verbatim}
     198\end{lstlisting}
    184199
    185200En vhdl il est possible de renommer une champ d'un signal. Ceci ce fait à l'aide de la fonction {\it set\_alias}. Elle prend 4 arguments. Le premier étant le nom du signal après le renommage. le second est soit le type, soit la taille du {\it std\_logic\_vector} du signal rénommé. Les deux derniers conserné le signal à renommé : le nom de ce dernier ainsi que l'intervalle. Pour le dernier paramètre il est recommandé d'utilisé la fonction {\it std\_logic\_range}.
    186201
    187 \begin{verbatim}
     202\lstparam{C++}
     203\begin{lstlisting}
    188204void set_alias (std::string name1 ,
    189205                std::string type1 ,
     
    194210                std::string name2 ,
    195211                std::string range2);
    196 \end{verbatim}
    197 
     212\end{lstlisting}
    198213
    199214\Section{VHDL : comportement}\label{vhdl_body}
     
    203218Il n'y a pas de fonction aidant à l'écriture du Vhdl.
    204219La méthode {\it set\_body} permet de définir une ligne de code VHDL. Un retour à la ligne est automatiquement inséré. Le premier argument est pour l'indentation.
    205 \begin{verbatim}
     220\lstparam{C++}
     221\begin{lstlisting}
    206222void set_body (uint32_t    depth,
    207223               std::string text );
    208224void set_body (std::string text );
    209 \end{verbatim}
     225\end{lstlisting}
    210226
    211227Pour les commentaires, il y a la fonction {\it set\_comment}.
    212 \begin{verbatim}
     228\lstparam{C++}
     229\begin{lstlisting}
    213230void set_comment (uint32_t    depth,
    214231                  std::string text );
    215232void set_comment (std::string text );
    216 \end{verbatim}
    217 
    218 
     233\end{lstlisting}
    219234
    220235\Section{VHDL : structurelle}\label{vhdl_structural}
    221236
     237\subSection{Description du fichier {\it Component\_vhdl.cpp}}
     238Les modèles systemC structurelle sont des modèles qui instancie d'autre modèle. Il n'y a pas de description comportementale. Ces modèles sont générés automatiquement.
     239Par contre les modèles systemC comportementales peuvent être décrit par un modèle VHDL mixte (incluant une description comportementale et des instances d'autre composant).
     240
     241Les modèles génériques sont dans le répertoire {\it IPs/systemC/processor/Morpheo/Behavioural/Generic}.
     242
     243\lstparam{C++}
     244\begin{lstlisting}[caption={Component\_vhdl.cpp}, label=component_vhdl.cpp]
     245  void component::vhdl (void)
     246  {
     247    Vhdl * vhdl = new Vhdl (_name);
     248
     249    _interfaces->set_port(vhdl);
     250    _component->vhdl_instance(vhdl);
     251
     252    vhdl_declaration (vhdl);
     253    vhdl_body        (vhdl);
     254
     255    vhdl->generate_file();
     256
     257    delete vhdl;
     258  };
     259\end{lstlisting}
     260
     261
     262La 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.
     263\begin{itemize}
     264\item Ligne 3 : Déclaration et construction de la variable {\it vhdl} qui est du  type {\it Vhdl}.
     265\item Ligne 5 : Ajout dans le modèle VHDL des interfaces présentes dans le modèle SystemC. (cf fichiers Component.h).
     266\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).
     267\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}).
     268\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}).
     269\item Ligne 11 : Génération des fichiers VHDL. Le nom du fichier est construit à partir du nom fournit lors de la construction de la variable {\it vhdl}.
     270\item Ligne 13 : Destruction de l'objet.
     271\end{itemize}
     272
     273Pour la suite, nous allons supposer l'instanciation d'une FIFO.
     274
     275\subSection{Ajout d'une instance}
     276
     277Dans le fichier Component\_vhdl.cpp :
     278\begin{enumerate}
     279\item Inclure la définition de la classe désirée.
     280\lstparam{C++}
     281\begin{lstlisting}
     282#include "Behavioural/Generic/Queue/include/Queue.h"
     283\end{lstlisting}
     284\item Creer les paramètres du modèles.
     285\lstparam{C++}
     286\begin{lstlisting}
     287    morpheo::behavioural::generic::queue::Parameters * param_queue;
     288    param_queue = new morpheo::behavioural::generic::queue::Parameters
     289      (16, //size_queue
     290       32);//size_data
     291\end{lstlisting}
     292\item Creer le modèle
     293\lstparam{C++}
     294\begin{lstlisting}
     295    morpheo::behavioural::generic::queue::Queue      * queue;
     296    std::string queue_name = _name + "_queue";
     297
     298    queue = new morpheo::behavioural::generic::queue::Queue
     299      (queue_name.c_str() // nom du modèle
     300#ifdef STATISTICS
     301       ,NULL              // Pas paramètres pour les statistiques
     302#endif
     303       ,param_queue       // Paramètres de la file
     304       ,USE_VHDL);        // Utilisation du modèle VHDL
     305\end{lstlisting}
     306\item Inclure le modèle dans la liste des composants internes
     307\lstparam{C++}
     308\begin{lstlisting}
     309    _component->set_component(queue->_component
     310#ifdef POSITION
     311                              , 20, 20, 20, 20   
     312                              // Coordonée pour l'outil de visualisation
     313#endif
     314                              , INSTANCE_LIBRARY
     315                              // Instancier uniquement les libraries
     316                              );
     317\end{lstlisting}
     318\item Indiquer dans le fichier Makefile.deps que le composant dépends de ce modèle.
     319\lstparam{make}
     320\begin{lstlisting}
     321# Inclure les dépendances
     322ifndef Queue
     323include  $(DIR_MORPHEO)/Behavioural/Generic/Queue/Makefile.deps
     324endif
     325
     326# Inclure les librairies
     327Component_LIBRARY       = -lComponent     \
     328                          $(Queue_LIBRARY)
     329
     330# Les chemins vers les libraries
     331Component_DIR_LIBRARY   = -L$(Component_DIR)/lib  \
     332                          $(Queue_DIR_LIBRARY)
     333
     334# Construction de la librarie ``Component''
     335Component_library       :
     336                        @\
     337                        $(MAKE) Queue_library; \
     338                        $(MAKE) --directory=$(Component_DIR) --makefile=Makefile;
     339
     340# Effacement des fichiers générés
     341Component_library_clean :
     342                        @\
     343                        $(MAKE) Queue_library_clean; \
     344                        $(MAKE) --directory=$(Component_DIR) --makefile=Makefile clean;
     345\end{lstlisting}
     346\end{enumerate}
     347
     348\subSection{Instanciation}
     349L'instanciation ce fait comme avec des composants VHDL classique :
     350\lstparam{C++}
     351\begin{lstlisting}
     352    vhdl->set_comment(0,"");
     353    vhdl->set_comment(0,"-----------------------------------");
     354    vhdl->set_comment(0,"-- Instance queue                  ");
     355    vhdl->set_comment(0,"-----------------------------------");
     356    vhdl->set_comment(0,"");
     357
     358    vhdl->set_body   (0,"instance_"+_name+"_queue : "+_name+"_queue");
     359    vhdl->set_body   (0,"port map (");
     360    vhdl->set_body   (1,"  in_CLOCK       \t=>\t      in_CLOCK ");
     361    vhdl->set_body   (1,", in_NRESET      \t=>\t      in_NRESET");
     362    vhdl->set_body   (1,", in_INSERT_VAL  \t=>\tinternal_QUEUE_INSERT_VAL");
     363    vhdl->set_body   (1,",out_INSERT_ACK  \t=>\tinternal_QUEUE_INSERT_ACK");
     364    vhdl->set_body   (1,", in_INSERT_DATA \t=>\tinternal_QUEUE_INSERT_DATA");
     365    vhdl->set_body   (1,",out_RETIRE_VAL  \t=>\tinternal_QUEUE_RETIRE_VAL");
     366    vhdl->set_body   (1,", in_RETIRE_ACK  \t=>\tinternal_QUEUE_RETIRE_ACK");
     367    vhdl->set_body   (1,",out_RETIRE_DATA \t=>\tinternal_QUEUE_RETIRE_DATA");
     368    vhdl->set_body   (0,");");
     369\end{lstlisting}
     370
    222371\Section{Exemples}\label{example}
    223372
    224373\subSection{Banc de Registres Monolithique}
    225374
     375\subsubSection{Fichier RegisterFile\_Monolithic\_vhdl.cpp}
     376
     377\lstparam{C++}
     378\begin{lstlisting}[caption={RegisterFile\_Monolithic\_vhdl.cpp}]
     379void RegisterFile_Monolithic::vhdl (void)
     380{
     381  Vhdl * vhdl = new Vhdl (_name);
     382
     383  _interfaces->set_port     (vhdl);
     384  _component ->vhdl_instance(vhdl);
     385
     386  vhdl_declaration (vhdl);
     387  vhdl_body        (vhdl);
     388
     389  vhdl->generate_file();
     390
     391  delete vhdl;
     392};
     393\end{lstlisting}
     394
     395
    226396\subsubSection{Fichier RegisterFile\_Monolithic\_vhdl\_declaration.cpp}
    227 \begin{verbatim}
     397
     398\lstparam{C++}
     399\begin{lstlisting}[caption={RegisterFile\_Monolithic\_vhdl\_declaration.cpp}]
    228400void RegisterFile_Monolithic::vhdl_declaration (Vhdl * & vhdl)
    229401{
     
    234406  vhdl->set_signal ("reg_DATA", "Tregfile");
    235407};
    236 \end{verbatim}
     408\end{lstlisting}
     409
    237410\subsubSection{Fichier RegisterFile\_Monolithic\_vhdl\_body.cpp}
    238 \begin{verbatim}
     411
     412\lstparam{C++}
     413\begin{lstlisting}[caption={RegisterFile\_Monolithic\_vhdl\_body.cpp}]
    239414void RegisterFile_Monolithic::vhdl_body (Vhdl * & vhdl)
    240415{
    241416  vhdl->set_body   (0,"");
    242417  vhdl->set_comment(0,"---------------------------------------------------");
    243   vhdl->set_comment(0," Ackitement");
     418  vhdl->set_comment(0," Ack");
    244419  vhdl->set_comment(0,"---------------------------------------------------");
    245420  vhdl->set_body   (0,"");
     
    295470  vhdl->set_body   (0,"end process RegisterFile_write;");
    296471};
    297 \end{verbatim}
     472\end{lstlisting}
    298473
    299474\subsubSection{Fichier RegisterFile\_Monolithic.vhdl}
    300 \begin{verbatim}
    301 library ieee;
     475
     476\lstparam{VHDL}
     477\begin{lstlisting}[caption={RegisterFile\_Monolithic.cpp}]
     478  library ieee;
    302479  use ieee.numeric_bit.all;       
    303480  use ieee.numeric_std.all;       
     
    362539  end process RegisterFile_write;
    363540end behavioural;
    364 
    365 \end{verbatim}
     541\end{lstlisting}
     542
     543\subSection{Tampon entre la boucle d'exécutione et le buffer de réordonnancement}
     544
     545\subsubSection{Fichier Execute\_queue\_vhdl.cpp}
     546
     547\lstparam{C++}
     548\begin{lstlisting}[caption={Execute\_queue\_vhdl.cpp}]
     549void Execute_queue::vhdl (void)
     550{
     551  morpheo::behavioural::generic::queue::Parameters * param_queue;
     552 
     553  param_queue = new morpheo::behavioural::generic::queue::Parameters
     554    (_param->_size_queue,
     555     _param->_size_internal_queue
     556     );
     557 
     558  morpheo::behavioural::generic::queue::Queue      * queue;
     559
     560  std::string queue_name = _name + "_queue";
     561  queue = new morpheo::behavioural::generic::queue::Queue
     562    (queue_name.c_str()
     563#ifdef STATISTICS
     564     ,NULL
     565#endif
     566     ,param_queue
     567     ,USE_VHDL);
     568 
     569  _component->set_component(queue->_component
     570#ifdef POSITION
     571                            , 50, 50, 50, 50
     572#endif
     573                            , INSTANCE_LIBRARY
     574                            );
     575
     576  Vhdl * vhdl = new Vhdl (_name);
     577
     578  _interfaces->set_port(vhdl);
     579  _component->vhdl_instance(vhdl);
     580
     581  vhdl_declaration (vhdl);
     582  vhdl_body        (vhdl);
     583
     584  vhdl->generate_file();
     585
     586  delete vhdl;
     587};
     588\end{lstlisting}
     589
     590\subsubSection{Fichier Execute\_queue\_vhdl\_declaration.cpp}
     591
     592\lstparam{C++}
     593\begin{lstlisting}[caption={Execute\_queue\_vhdl\_declaration.cpp}]
     594void Execute_queue::vhdl_declaration (Vhdl * & vhdl)
     595{
     596  vhdl->set_alias  ("internal_QUEUE_INSERT_VAL ",
     597                    1,
     598                    " in_EXECUTE_QUEUE_IN_VAL",
     599                    std_logic_range(1));
     600  vhdl->set_alias  ("internal_QUEUE_INSERT_ACK ",
     601                    1,
     602                    "out_EXECUTE_QUEUE_IN_ACK",
     603                    std_logic_range(1));
     604  vhdl->set_signal ("internal_QUEUE_INSERT_DATA",
     605                    _param->_size_internal_queue);
     606  vhdl->set_signal ("internal_QUEUE_RETIRE_DATA",
     607                    _param->_size_internal_queue);
     608  vhdl->set_alias  ("internal_QUEUE_RETIRE_VAL ",
     609                    1,
     610                    "out_EXECUTE_QUEUE_OUT_VAL",
     611                    std_logic_range(1));
     612  vhdl->set_alias  ("internal_QUEUE_RETIRE_ACK ",
     613                    1,
     614                    " in_EXECUTE_QUEUE_OUT_ACK",
     615                    std_logic_range(1));
     616
     617  uint32_t min = 0;
     618  uint32_t max, size;
     619
     620  if(_param->_have_port_context_id   )
     621    {
     622  size = _param->_size_context_id;
     623  max = min-1+size;
     624  vhdl->set_alias ("internal_EXECUTE_QUEUE_OUT_CONTEXT_ID           ",
     625                   std_logic(size),
     626                   "internal_QUEUE_RETIRE_DATA",
     627                   std_logic_range(_param->_size_internal_queue,max,min));
     628  min = max+1;
     629    }
     630  if(_param->_have_port_front_end_id   )
     631    {
     632  size = _param->_size_front_end_id;
     633  max = min-1+size;
     634  vhdl->set_alias ("internal_EXECUTE_QUEUE_OUT_FRONT_END_ID         ",
     635                   std_logic(size),
     636                   "internal_QUEUE_RETIRE_DATA",
     637                   std_logic_range(_param->_size_internal_queue,max,min));
     638  min = max+1;
     639    }
     640  if(_param->_have_port_ooo_engine_id   )
     641    {
     642  size = _param->_size_ooo_engine_id;
     643  max = min-1+size;
     644  vhdl->set_alias ("internal_EXECUTE_QUEUE_OUT_OOO_ENGINE_ID        ",
     645                   std_logic(size),
     646                   "internal_QUEUE_RETIRE_DATA",
     647                   std_logic_range(_param->_size_internal_queue,max,min));
     648  min = max+1;
     649    }
     650  if(_param->_have_port_rob_ptr)
     651    {
     652  size = _param->_size_rob_ptr;
     653  max = min-1+size;
     654  vhdl->set_alias ("internal_EXECUTE_QUEUE_OUT_PACKET_ID            ",
     655                   std_logic(size),
     656                   "internal_QUEUE_RETIRE_DATA",
     657                   std_logic_range(_param->_size_internal_queue,max,min));
     658  min = max+1;
     659    }
     660
     661  size = _param->_size_special_data;
     662  max = min-1+size;
     663  vhdl->set_alias ("internal_EXECUTE_QUEUE_OUT_FLAGS                ",
     664                   std_logic(size),
     665                   "internal_QUEUE_RETIRE_DATA",
     666                   std_logic_range(_param->_size_internal_queue,max,min));
     667  min = max+1;
     668
     669  size = _param->_size_exception;   
     670  max = min-1+size;
     671  vhdl->set_alias ("internal_EXECUTE_QUEUE_OUT_EXCEPTION            ",
     672                   std_logic(size),
     673                   "internal_QUEUE_RETIRE_DATA",
     674                   std_logic_range(_param->_size_internal_queue,max,min));
     675  min = max+1;
     676
     677  size = 1;
     678  max = min-1+size;
     679  vhdl->set_alias ("internal_EXECUTE_QUEUE_OUT_NO_SEQUENCE          ",
     680                   std_logic(size),
     681                   "internal_QUEUE_RETIRE_DATA",
     682                   std_logic_range(_param->_size_internal_queue,max,min));
     683  min = max+1;
     684
     685  size = _param->_size_instruction_address;
     686  max = min-1+size;
     687  vhdl->set_alias ("internal_EXECUTE_QUEUE_OUT_ADDRESS              ",
     688                   std_logic(size),
     689                   "internal_QUEUE_RETIRE_DATA",
     690                   std_logic_range(_param->_size_internal_queue,max,min));
     691  min = max+1;
     692
     693  size = _param->_size_general_data;
     694  max = min-1+size;
     695  vhdl->set_alias ("internal_EXECUTE_QUEUE_OUT_DATA                 ",
     696                   std_logic(size),
     697                   "internal_QUEUE_RETIRE_DATA",
     698                   std_logic_range(_param->_size_internal_queue,max,min));
     699  min = max+1;
     700};
     701\end{lstlisting}
     702
     703\subsubSection{Fichier Execute\_queue\_vhdl\_body.cpp}
     704
     705\lstparam{C++}
     706\begin{lstlisting}[caption={Execute\_queue\_vhdl\_body.cpp}]
     707void Execute_queue::vhdl_body (Vhdl * & vhdl)
     708{
     709  vhdl->set_comment(0,"");
     710  vhdl->set_comment(0,"-----------------------------------");
     711  vhdl->set_comment(0,"-- Instance queue                  ");
     712  vhdl->set_comment(0,"-----------------------------------");
     713  vhdl->set_comment(0,"");
     714
     715  vhdl->set_body   (0,"instance_"+_name+"_queue : "+_name+"_queue");
     716  vhdl->set_body   (0,"port map (");
     717  vhdl->set_body   (1,"  in_CLOCK       \t=>\t      in_CLOCK ");
     718  vhdl->set_body   (1,", in_NRESET      \t=>\t      in_NRESET");
     719  vhdl->set_body   (1,", in_INSERT_VAL  \t=>\tinternal_QUEUE_INSERT_VAL");
     720  vhdl->set_body   (1,",out_INSERT_ACK  \t=>\tinternal_QUEUE_INSERT_ACK");
     721  vhdl->set_body   (1,", in_INSERT_DATA \t=>\tinternal_QUEUE_INSERT_DATA");
     722  vhdl->set_body   (1,",out_RETIRE_VAL  \t=>\tinternal_QUEUE_RETIRE_VAL");
     723  vhdl->set_body   (1,", in_RETIRE_ACK  \t=>\tinternal_QUEUE_RETIRE_ACK");
     724  vhdl->set_body   (1,",out_RETIRE_DATA \t=>\tinternal_QUEUE_RETIRE_DATA");
     725  vhdl->set_body   (0,");");
     726
     727  vhdl->set_comment(0,"");
     728  vhdl->set_comment(0,"-----------------------------------");
     729  vhdl->set_comment(0,"-- Input  Buffer                   ");
     730  vhdl->set_comment(0,"-----------------------------------");
     731  vhdl->set_comment(0,"");
     732
     733  {
     734  uint32_t min = 0;
     735  uint32_t max, size;
     736  uint32_t size_queue = _param->_size_internal_queue;
     737
     738  if(_param->_have_port_context_id   )
     739    {
     740  size = _param->_size_context_id;
     741  max = min-1+size;
     742  vhdl->set_body   (0,"internal_QUEUE_INSERT_DATA "+std_logic_range(size_queue,max,min)+
     743                      " <= in_EXECUTE_QUEUE_IN_CONTEXT_ID;");
     744  min = max+1;
     745    }
     746  if(_param->_have_port_front_end_id   )
     747    {
     748  size = _param->_size_front_end_id;
     749  max = min-1+size;
     750  vhdl->set_body   (0,"internal_QUEUE_INSERT_DATA "+std_logic_range(size_queue,max,min)+
     751                      " <= in_EXECUTE_QUEUE_IN_FRONT_END_ID;");
     752  min = max+1;
     753    }
     754  if(_param->_have_port_ooo_engine_id   )
     755    {
     756  size = _param->_size_ooo_engine_id;
     757  max = min-1+size;
     758  vhdl->set_body   (0,"internal_QUEUE_INSERT_DATA "+std_logic_range(size_queue,max,min)+
     759                      " <= in_EXECUTE_QUEUE_IN_OOO_ENGINE_ID;");
     760  min = max+1;
     761    }
     762  if(_param->_have_port_rob_ptr)
     763    {
     764  size = _param->_size_rob_ptr;
     765  max = min-1+size;
     766  vhdl->set_body   (0,"internal_QUEUE_INSERT_DATA "+std_logic_range(size_queue,max,min)+
     767                      " <= in_EXECUTE_QUEUE_IN_PACKET_ID;");
     768  min = max+1;
     769    }
     770
     771  size = _param->_size_special_data;
     772  max = min-1+size;
     773  vhdl->set_body   (0,"internal_QUEUE_INSERT_DATA "+std_logic_range(size_queue,max,min)+
     774                      " <= in_EXECUTE_QUEUE_IN_FLAGS;");
     775  min = max+1;
     776
     777  size = _param->_size_exception;   
     778  max = min-1+size;
     779  vhdl->set_body   (0,"internal_QUEUE_INSERT_DATA "+std_logic_range(size_queue,max,min)+
     780                      " <= in_EXECUTE_QUEUE_IN_EXCEPTION;");
     781  min = max+1;
     782
     783  size = 1;
     784  max = min-1+size;
     785  vhdl->set_body   (0,"internal_QUEUE_INSERT_DATA "+std_logic_range(size_queue,max,min)+
     786                      " <= in_EXECUTE_QUEUE_IN_NO_SEQUENCE;");
     787  min = max+1;
     788
     789  size = _param->_size_instruction_address;
     790  max = min-1+size;
     791  vhdl->set_body   (0,"internal_QUEUE_INSERT_DATA "+std_logic_range(size_queue,max,min)+
     792                      " <= in_EXECUTE_QUEUE_IN_ADDRESS;");
     793  min = max+1;
     794
     795  size = _param->_size_general_data;
     796  max = min-1+size;
     797  vhdl->set_body   (0,"internal_QUEUE_INSERT_DATA "+std_logic_range(size_queue,max,min)+
     798                      " <= in_EXECUTE_QUEUE_IN_DATA;");
     799  min = max+1;
     800  }
     801
     802  vhdl->set_comment(0,"");
     803  vhdl->set_comment(0,"-----------------------------------");
     804  vhdl->set_comment(0,"-- Output Buffer                   ");
     805  vhdl->set_comment(0,"-----------------------------------");
     806  vhdl->set_comment(0,"");
     807
     808  if(_param->_have_port_context_id)
     809  vhdl->set_body   (0,"out_EXECUTE_QUEUE_OUT_CONTEXT_ID   "+
     810                      " <= internal_EXECUTE_QUEUE_OUT_CONTEXT_ID   ;");
     811  if(_param->_have_port_front_end_id)
     812  vhdl->set_body   (0,"out_EXECUTE_QUEUE_OUT_FRONT_END_ID "+
     813                      " <= internal_EXECUTE_QUEUE_OUT_FRONT_END_ID ;");
     814  if(_param->_have_port_ooo_engine_id)
     815  vhdl->set_body   (0,"out_EXECUTE_QUEUE_OUT_OOO_ENGINE_ID"+
     816                      " <= internal_EXECUTE_QUEUE_OUT_OOO_ENGINE_ID;");
     817  if(_param->_have_port_rob_ptr)
     818  vhdl->set_body   (0,"out_EXECUTE_QUEUE_OUT_PACKET_ID    "+
     819                      " <= internal_EXECUTE_QUEUE_OUT_PACKET_ID    ;");
     820  vhdl->set_body   (0,"out_EXECUTE_QUEUE_OUT_FLAGS        "+
     821                      " <= internal_EXECUTE_QUEUE_OUT_FLAGS        ;");
     822  vhdl->set_body   (0,"out_EXECUTE_QUEUE_OUT_EXCEPTION    "+
     823                      " <= internal_EXECUTE_QUEUE_OUT_EXCEPTION    ;");
     824  vhdl->set_body   (0,"out_EXECUTE_QUEUE_OUT_NO_SEQUENCE  "+
     825                      " <= internal_EXECUTE_QUEUE_OUT_NO_SEQUENCE  ;");
     826  vhdl->set_body   (0,"out_EXECUTE_QUEUE_OUT_ADDRESS      "+
     827                      " <= internal_EXECUTE_QUEUE_OUT_ADDRESS      ;");
     828  vhdl->set_body   (0,"out_EXECUTE_QUEUE_OUT_DATA         "+
     829                      " <= internal_EXECUTE_QUEUE_OUT_DATA         ;");
     830};
     831\end{lstlisting}
     832
     833\subsubSection{Fichier Execute\_queue.vhdl}
     834
     835\lstparam{VHDL}
     836\begin{lstlisting}[caption={Execute\_queue.cpp}]
     837library ieee;
     838  use ieee.numeric_bit.all;       
     839  use ieee.numeric_std.all;       
     840  use ieee.std_logic_1164.all;   
     841  use ieee.std_logic_arith.all;   
     842  use ieee.std_logic_misc.all;   
     843--use ieee.std_logic_signed.all; 
     844  use ieee.std_logic_unsigned.all;
     845--use ieee.std_logic_textio.all; 
     846
     847library work;
     848use work.Execute_queue_0_Pack.all;
     849use work.Execute_queue_0_queue_Pack.all;
     850
     851entity Execute_queue_0 is
     852  port (
     853   in_CLOCK                           : in  std_logic;
     854   in_NRESET                          : in  std_logic;
     855   in_EXECUTE_QUEUE_IN_VAL            : in  std_logic;
     856  out_EXECUTE_QUEUE_IN_ACK            : out std_logic;
     857   in_EXECUTE_QUEUE_IN_CONTEXT_ID     : in  std_logic;
     858   in_EXECUTE_QUEUE_IN_FRONT_END_ID   : in  std_logic;
     859   in_EXECUTE_QUEUE_IN_OOO_ENGINE_ID  : in  std_logic;
     860   in_EXECUTE_QUEUE_IN_PACKET_ID      : in  std_logic_vector(5 downto 0);
     861   in_EXECUTE_QUEUE_IN_FLAGS          : in  std_logic_vector(1 downto 0);
     862   in_EXECUTE_QUEUE_IN_EXCEPTION      : in  std_logic_vector(4 downto 0);
     863   in_EXECUTE_QUEUE_IN_NO_SEQUENCE    : in  std_logic;
     864   in_EXECUTE_QUEUE_IN_ADDRESS        : in  std_logic_vector(31 downto 0);
     865   in_EXECUTE_QUEUE_IN_DATA           : in  std_logic_vector(31 downto 0);
     866  out_EXECUTE_QUEUE_OUT_VAL           : out std_logic;
     867   in_EXECUTE_QUEUE_OUT_ACK           : in  std_logic;
     868  out_EXECUTE_QUEUE_OUT_CONTEXT_ID    : out std_logic;
     869  out_EXECUTE_QUEUE_OUT_FRONT_END_ID  : out std_logic;
     870  out_EXECUTE_QUEUE_OUT_OOO_ENGINE_ID : out std_logic;
     871  out_EXECUTE_QUEUE_OUT_PACKET_ID     : out std_logic_vector(5 downto 0);
     872  out_EXECUTE_QUEUE_OUT_FLAGS         : out std_logic_vector(1 downto 0);
     873  out_EXECUTE_QUEUE_OUT_EXCEPTION     : out std_logic_vector(4 downto 0);
     874  out_EXECUTE_QUEUE_OUT_NO_SEQUENCE   : out std_logic;
     875  out_EXECUTE_QUEUE_OUT_ADDRESS       : out std_logic_vector(31 downto 0);
     876  out_EXECUTE_QUEUE_OUT_DATA          : out std_logic_vector(31 downto 0)
     877  );
     878end Execute_queue_0;
     879
     880architecture behavioural of Execute_queue_0 is
     881
     882  signal internal_QUEUE_INSERT_DATA              : std_logic_vector(80 downto 0);
     883  signal internal_QUEUE_RETIRE_DATA              : std_logic_vector(80 downto 0);
     884
     885  alias internal_QUEUE_INSERT_VAL                : std_logic                     is
     886          in_EXECUTE_QUEUE_IN_VAL;
     887  alias internal_QUEUE_INSERT_ACK                : std_logic                     is
     888         out_EXECUTE_QUEUE_IN_ACK;
     889  alias internal_QUEUE_RETIRE_VAL                : std_logic                     is
     890        out_EXECUTE_QUEUE_OUT_VAL;
     891  alias internal_QUEUE_RETIRE_ACK                : std_logic                     is
     892         in_EXECUTE_QUEUE_OUT_ACK;
     893  alias internal_EXECUTE_QUEUE_OUT_CONTEXT_ID    : std_logic                     is
     894        internal_QUEUE_RETIRE_DATA   (0);
     895  alias internal_EXECUTE_QUEUE_OUT_FRONT_END_ID  : std_logic                     is
     896        internal_QUEUE_RETIRE_DATA   (1);
     897  alias internal_EXECUTE_QUEUE_OUT_OOO_ENGINE_ID : std_logic                     is
     898        internal_QUEUE_RETIRE_DATA   (2);
     899  alias internal_EXECUTE_QUEUE_OUT_PACKET_ID     : std_logic_vector(5 downto 0)  is
     900        internal_QUEUE_RETIRE_DATA   (8 downto 3);
     901  alias internal_EXECUTE_QUEUE_OUT_FLAGS         : std_logic_vector(1 downto 0)  is
     902        internal_QUEUE_RETIRE_DATA   (10 downto 9);
     903  alias internal_EXECUTE_QUEUE_OUT_EXCEPTION     : std_logic_vector(4 downto 0)  is
     904        internal_QUEUE_RETIRE_DATA   (15 downto 11);
     905  alias internal_EXECUTE_QUEUE_OUT_NO_SEQUENCE   : std_logic                     is
     906        internal_QUEUE_RETIRE_DATA   (16);
     907  alias internal_EXECUTE_QUEUE_OUT_ADDRESS       : std_logic_vector(31 downto 0) is
     908        internal_QUEUE_RETIRE_DATA   (48 downto 17);
     909  alias internal_EXECUTE_QUEUE_OUT_DATA          : std_logic_vector(31 downto 0) is
     910        internal_QUEUE_RETIRE_DATA   (80 downto 49);
     911
     912begin
     913  --
     914  -- -----------------------------------
     915  -- -- Instance queue                 
     916  -- -----------------------------------
     917  --
     918  instance_Execute_queue_0_queue : Execute_queue_0_queue
     919  port map (
     920            in_CLOCK              =>            in_CLOCK
     921          , in_NRESET             =>            in_NRESET
     922          , in_INSERT_VAL         =>      internal_QUEUE_INSERT_VAL
     923          ,out_INSERT_ACK         =>      internal_QUEUE_INSERT_ACK
     924          , in_INSERT_DATA        =>      internal_QUEUE_INSERT_DATA
     925          ,out_RETIRE_VAL         =>      internal_QUEUE_RETIRE_VAL
     926          , in_RETIRE_ACK         =>      internal_QUEUE_RETIRE_ACK
     927          ,out_RETIRE_DATA        =>      internal_QUEUE_RETIRE_DATA
     928  );
     929  --
     930  -- -----------------------------------
     931  -- -- Input  Buffer                   
     932  -- -----------------------------------
     933  --
     934  internal_QUEUE_INSERT_DATA (0)            <= in_EXECUTE_QUEUE_IN_CONTEXT_ID;
     935  internal_QUEUE_INSERT_DATA (1)            <= in_EXECUTE_QUEUE_IN_FRONT_END_ID;
     936  internal_QUEUE_INSERT_DATA (2)            <= in_EXECUTE_QUEUE_IN_OOO_ENGINE_ID;
     937  internal_QUEUE_INSERT_DATA (8 downto 3)   <= in_EXECUTE_QUEUE_IN_PACKET_ID;
     938  internal_QUEUE_INSERT_DATA (10 downto 9)  <= in_EXECUTE_QUEUE_IN_FLAGS;
     939  internal_QUEUE_INSERT_DATA (15 downto 11) <= in_EXECUTE_QUEUE_IN_EXCEPTION;
     940  internal_QUEUE_INSERT_DATA (16)           <= in_EXECUTE_QUEUE_IN_NO_SEQUENCE;
     941  internal_QUEUE_INSERT_DATA (48 downto 17) <= in_EXECUTE_QUEUE_IN_ADDRESS;
     942  internal_QUEUE_INSERT_DATA (80 downto 49) <= in_EXECUTE_QUEUE_IN_DATA;
     943  --
     944  -- -----------------------------------
     945  -- -- Output Buffer                   
     946  -- -----------------------------------
     947  --
     948  out_EXECUTE_QUEUE_OUT_CONTEXT_ID    <= internal_EXECUTE_QUEUE_OUT_CONTEXT_ID;
     949  out_EXECUTE_QUEUE_OUT_FRONT_END_ID  <= internal_EXECUTE_QUEUE_OUT_FRONT_END_ID;
     950  out_EXECUTE_QUEUE_OUT_OOO_ENGINE_ID <= internal_EXECUTE_QUEUE_OUT_OOO_ENGINE_ID;
     951  out_EXECUTE_QUEUE_OUT_PACKET_ID     <= internal_EXECUTE_QUEUE_OUT_PACKET_ID;
     952  out_EXECUTE_QUEUE_OUT_FLAGS         <= internal_EXECUTE_QUEUE_OUT_FLAGS;
     953  out_EXECUTE_QUEUE_OUT_EXCEPTION     <= internal_EXECUTE_QUEUE_OUT_EXCEPTION;
     954  out_EXECUTE_QUEUE_OUT_NO_SEQUENCE   <= internal_EXECUTE_QUEUE_OUT_NO_SEQUENCE;
     955  out_EXECUTE_QUEUE_OUT_ADDRESS       <= internal_EXECUTE_QUEUE_OUT_ADDRESS;
     956  out_EXECUTE_QUEUE_OUT_DATA          <= internal_EXECUTE_QUEUE_OUT_DATA;
     957
     958end behavioural;
     959\end{lstlisting}
     960
    366961
    367962\Section {Test du VHDL}\label{testbench}
     
    388983\item Nous ne vérifions pas la compatibilité au bit près des données présente sur une interface qui ne fait pas de transaction lors d'un cycle.
    389984\end{itemize}
     985
     986\lstparam{VHDL}
     987\begin{lstlisting}[caption={Execute\_queue\_Testbench.vhdl}]
     988library ieee;
     989  use ieee.numeric_bit.all;       
     990  use ieee.numeric_std.all;       
     991  use ieee.std_logic_1164.all;   
     992  use ieee.std_logic_arith.all;   
     993  use ieee.std_logic_misc.all;   
     994--use ieee.std_logic_signed.all; 
     995  use ieee.std_logic_unsigned.all;
     996--use ieee.std_logic_textio.all; 
     997
     998library work;
     999use work.Execute_queue_0_Pack.all;
     1000
     1001entity Execute_queue_0_Testbench is
     1002end Execute_queue_0_Testbench;
     1003
     1004architecture behavioural of Execute_queue_0_Testbench is
     1005
     1006  signal  in_CLOCK                              : std_logic := '0';
     1007  signal  in_NRESET                             : std_logic := '0';
     1008  signal  in_EXECUTE_QUEUE_IN_VAL               : std_logic;
     1009  signal out_EXECUTE_QUEUE_IN_ACK               : std_logic;
     1010  signal out_EXECUTE_QUEUE_IN_ACK_test          : std_logic;
     1011  signal  in_EXECUTE_QUEUE_IN_PACKET_ID         : std_logic_vector(3 downto 0);
     1012  signal  in_EXECUTE_QUEUE_IN_FLAGS             : std_logic_vector(1 downto 0);
     1013  signal  in_EXECUTE_QUEUE_IN_EXCEPTION         : std_logic_vector(4 downto 0);
     1014  signal  in_EXECUTE_QUEUE_IN_NO_SEQUENCE       : std_logic;
     1015  signal  in_EXECUTE_QUEUE_IN_ADDRESS           : std_logic_vector(31 downto 0);
     1016  signal  in_EXECUTE_QUEUE_IN_DATA              : std_logic_vector(31 downto 0);
     1017  signal out_EXECUTE_QUEUE_OUT_VAL              : std_logic;
     1018  signal out_EXECUTE_QUEUE_OUT_VAL_test         : std_logic;
     1019  signal  in_EXECUTE_QUEUE_OUT_ACK              : std_logic;
     1020  signal out_EXECUTE_QUEUE_OUT_PACKET_ID        : std_logic_vector(3 downto 0);
     1021  signal out_EXECUTE_QUEUE_OUT_PACKET_ID_test   : std_logic_vector(3 downto 0);
     1022  signal out_EXECUTE_QUEUE_OUT_FLAGS            : std_logic_vector(1 downto 0);
     1023  signal out_EXECUTE_QUEUE_OUT_FLAGS_test       : std_logic_vector(1 downto 0);
     1024  signal out_EXECUTE_QUEUE_OUT_EXCEPTION        : std_logic_vector(4 downto 0);
     1025  signal out_EXECUTE_QUEUE_OUT_EXCEPTION_test   : std_logic_vector(4 downto 0);
     1026  signal out_EXECUTE_QUEUE_OUT_NO_SEQUENCE      : std_logic;
     1027  signal out_EXECUTE_QUEUE_OUT_NO_SEQUENCE_test : std_logic;
     1028  signal out_EXECUTE_QUEUE_OUT_ADDRESS          : std_logic_vector(31 downto 0);
     1029  signal out_EXECUTE_QUEUE_OUT_ADDRESS_test     : std_logic_vector(31 downto 0);
     1030  signal out_EXECUTE_QUEUE_OUT_DATA             : std_logic_vector(31 downto 0);
     1031  signal out_EXECUTE_QUEUE_OUT_DATA_test        : std_logic_vector(31 downto 0);
     1032
     1033  signal counter                                      : natural;
     1034  signal test                                         : std_logic;
     1035  signal interface_test                               : std_logic;
     1036  signal interface_test_ok                            : std_logic;
     1037  signal interface_execute_queue_in_test              : std_logic;
     1038  signal interface_execute_queue_in_test_ok           : std_logic;
     1039  signal interface_execute_queue_in_test_transaction  : std_logic;
     1040  signal interface_execute_queue_in_test_tmp          : std_logic;
     1041  signal interface_execute_queue_out_test             : std_logic;
     1042  signal interface_execute_queue_out_test_ok          : std_logic;
     1043  signal interface_execute_queue_out_test_transaction : std_logic;
     1044  signal interface_execute_queue_out_test_tmp         : std_logic;
     1045
     1046begin
     1047 
     1048  ------------------------------------------------------
     1049  -- Component - Intanciation
     1050  ------------------------------------------------------
     1051 
     1052  instance_Execute_queue_0 : Execute_queue_0
     1053  port map (
     1054      in_CLOCK                         =>  in_CLOCK
     1055    , in_NRESET                        =>  in_NRESET
     1056    , in_EXECUTE_QUEUE_IN_VAL          =>  in_EXECUTE_QUEUE_IN_VAL
     1057    ,out_EXECUTE_QUEUE_IN_ACK          => out_EXECUTE_QUEUE_IN_ACK
     1058    , in_EXECUTE_QUEUE_IN_PACKET_ID    =>  in_EXECUTE_QUEUE_IN_PACKET_ID
     1059    , in_EXECUTE_QUEUE_IN_FLAGS        =>  in_EXECUTE_QUEUE_IN_FLAGS
     1060    , in_EXECUTE_QUEUE_IN_EXCEPTION    =>  in_EXECUTE_QUEUE_IN_EXCEPTION
     1061    , in_EXECUTE_QUEUE_IN_NO_SEQUENCE  =>  in_EXECUTE_QUEUE_IN_NO_SEQUENCE
     1062    , in_EXECUTE_QUEUE_IN_ADDRESS      =>  in_EXECUTE_QUEUE_IN_ADDRESS
     1063    , in_EXECUTE_QUEUE_IN_DATA         =>  in_EXECUTE_QUEUE_IN_DATA
     1064    ,out_EXECUTE_QUEUE_OUT_VAL         => out_EXECUTE_QUEUE_OUT_VAL
     1065    , in_EXECUTE_QUEUE_OUT_ACK         =>  in_EXECUTE_QUEUE_OUT_ACK
     1066    ,out_EXECUTE_QUEUE_OUT_PACKET_ID   => out_EXECUTE_QUEUE_OUT_PACKET_ID
     1067    ,out_EXECUTE_QUEUE_OUT_FLAGS       => out_EXECUTE_QUEUE_OUT_FLAGS
     1068    ,out_EXECUTE_QUEUE_OUT_EXCEPTION   => out_EXECUTE_QUEUE_OUT_EXCEPTION
     1069    ,out_EXECUTE_QUEUE_OUT_NO_SEQUENCE => out_EXECUTE_QUEUE_OUT_NO_SEQUENCE
     1070    ,out_EXECUTE_QUEUE_OUT_ADDRESS     => out_EXECUTE_QUEUE_OUT_ADDRESS
     1071    ,out_EXECUTE_QUEUE_OUT_DATA        => out_EXECUTE_QUEUE_OUT_DATA
     1072     );
     1073  ------------------------------------------------------
     1074  -- interface ""
     1075  ------------------------------------------------------
     1076 
     1077  -- Test exhaustive
     1078 
     1079  interface_test_ok <= '1' when true
     1080    else '0';
     1081 
     1082  interface_test <= '1' when (in_NRESET = '0') else interface_test_ok;
     1083  ------------------------------------------------------
     1084  -- interface "execute_queue_in"
     1085  ------------------------------------------------------
     1086 
     1087  with counter select
     1088    in_EXECUTE_QUEUE_IN_VAL <=
     1089    '0' when 0,
     1090    '0' when 1,
     1091    '0' when 2,
     1092    '0' when 3,
     1093    '0' when 4,
     1094    '1' when 5,
     1095    '1' when 6,
     1096    '0' when 7,
     1097    '0' when 8,
     1098    '1' when 9,
     1099    '1' when 10,
     1100    '1' when 11,
     1101    '1' when 12,
     1102    '1' when 13,
     1103    '1' when 14,
     1104    '1' when 15,
     1105    '1' when 16,
     1106    '0' when 17,
     1107    '1' when 18,
     1108    '1' when 19,
     1109    '1' when 20,
     1110    '0' when 21,
     1111    '1' when 22,
     1112    '1' when 23,
     1113    '0' when 24,
     1114    '1' when 25,
     1115    '0' when 26,
     1116    '0' when others;
     1117 
     1118  with counter select
     1119    out_EXECUTE_QUEUE_IN_ACK_test <=
     1120    '0' when 0,
     1121    '1' when 1,
     1122    '1' when 2,
     1123    '1' when 3,
     1124    '1' when 4,
     1125    '1' when 5,
     1126    '1' when 6,
     1127    '1' when 7,
     1128    '1' when 8,
     1129    '1' when 9,
     1130    '1' when 10,
     1131    '1' when 11,
     1132    '1' when 12,
     1133    '1' when 13,
     1134    '1' when 14,
     1135    '1' when 15,
     1136    '1' when 16,
     1137    '1' when 17,
     1138    '1' when 18,
     1139    '1' when 19,
     1140    '1' when 20,
     1141    '1' when 21,
     1142    '1' when 22,
     1143    '1' when 23,
     1144    '1' when 24,
     1145    '1' when 25,
     1146    '1' when 26,
     1147    '0' when others;
     1148 
     1149  with counter select
     1150    in_EXECUTE_QUEUE_IN_PACKET_ID <=
     1151    "0000" when 0,
     1152    "0000" when 1,
     1153    "0000" when 2,
     1154    "0000" when 3,
     1155    "0000" when 4,
     1156    "0000" when 5,
     1157    "0001" when 6,
     1158    "0001" when 7,
     1159    "0001" when 8,
     1160    "0010" when 9,
     1161    "0011" when 10,
     1162    "0100" when 11,
     1163    "0101" when 12,
     1164    "0110" when 13,
     1165    "0111" when 14,
     1166    "1000" when 15,
     1167    "1001" when 16,
     1168    "1001" when 17,
     1169    "1010" when 18,
     1170    "1011" when 19,
     1171    "1100" when 20,
     1172    "1100" when 21,
     1173    "1101" when 22,
     1174    "1110" when 23,
     1175    "1110" when 24,
     1176    "1111" when 25,
     1177    "1111" when 26,
     1178    (others => '0') when others;
     1179 
     1180  with counter select
     1181    in_EXECUTE_QUEUE_IN_FLAGS <=
     1182    "00" when 0,
     1183    "00" when 1,
     1184    "00" when 2,
     1185    "00" when 3,
     1186    "00" when 4,
     1187    "11" when 5,
     1188    "11" when 6,
     1189    "11" when 7,
     1190    "11" when 8,
     1191    "00" when 9,
     1192    "11" when 10,
     1193    "11" when 11,
     1194    "11" when 12,
     1195    "10" when 13,
     1196    "01" when 14,
     1197    "01" when 15,
     1198    "11" when 16,
     1199    "11" when 17,
     1200    "10" when 18,
     1201    "00" when 19,
     1202    "11" when 20,
     1203    "11" when 21,
     1204    "10" when 22,
     1205    "01" when 23,
     1206    "01" when 24,
     1207    "01" when 25,
     1208    "01" when 26,
     1209    (others => '0') when others;
     1210 
     1211  with counter select
     1212    in_EXECUTE_QUEUE_IN_EXCEPTION <=
     1213    "00000" when 0,
     1214    "00000" when 1,
     1215    "00000" when 2,
     1216    "00000" when 3,
     1217    "00000" when 4,
     1218    "10001" when 5,
     1219    "10010" when 6,
     1220    "10010" when 7,
     1221    "10010" when 8,
     1222    "11011" when 9,
     1223    "10011" when 10,
     1224    "10001" when 11,
     1225    "11000" when 12,
     1226    "11011" when 13,
     1227    "00001" when 14,
     1228    "00001" when 15,
     1229    "01010" when 16,
     1230    "01010" when 17,
     1231    "01100" when 18,
     1232    "01100" when 19,
     1233    "11011" when 20,
     1234    "11011" when 21,
     1235    "00101" when 22,
     1236    "01001" when 23,
     1237    "01001" when 24,
     1238    "10001" when 25,
     1239    "10001" when 26,
     1240    (others => '0') when others;
     1241 
     1242  with counter select
     1243    in_EXECUTE_QUEUE_IN_NO_SEQUENCE <=
     1244    '0' when 0,
     1245    '0' when 1,
     1246    '0' when 2,
     1247    '0' when 3,
     1248    '0' when 4,
     1249    '1' when 5,
     1250    '1' when 6,
     1251    '1' when 7,
     1252    '1' when 8,
     1253    '1' when 9,
     1254    '1' when 10,
     1255    '1' when 11,
     1256    '1' when 12,
     1257    '1' when 13,
     1258    '1' when 14,
     1259    '1' when 15,
     1260    '1' when 16,
     1261    '1' when 17,
     1262    '1' when 18,
     1263    '1' when 19,
     1264    '1' when 20,
     1265    '1' when 21,
     1266    '1' when 22,
     1267    '1' when 23,
     1268    '1' when 24,
     1269    '1' when 25,
     1270    '1' when 26,
     1271    '0' when others;
     1272 
     1273  with counter select
     1274    in_EXECUTE_QUEUE_IN_ADDRESS <=
     1275    "00000000000000000000000000000000" when 0,
     1276    "00000000000000000000000000000000" when 1,
     1277    "00000000000000000000000000000000" when 2,
     1278    "00000000000000000000000000000000" when 3,
     1279    "00000000000000000000000000000000" when 4,
     1280    "00101010111010001001010001001010" when 5,
     1281    "01111001111000101010100111100011" when 6,
     1282    "01111001111000101010100111100011" when 7,
     1283    "01111001111000101010100111100011" when 8,
     1284    "00010001100100001100110111100111" when 9,
     1285    "01000001101001111100010011001001" when 10,
     1286    "00100101011100010011000010100011" when 11,
     1287    "01100111011000111000010001011110" when 12,
     1288    "01110001111100110010010001010100" when 13,
     1289    "01110011011110111000110111011100" when 14,
     1290    "01000100000010111010110111111100" when 15,
     1291    "01010001111010101101001101101011" when 16,
     1292    "01010001111010101101001101101011" when 17,
     1293    "00011101010011101101010000111011" when 18,
     1294    "00111000010000110111111111011011" when 19,
     1295    "01111001101000011101111010101010" when 20,
     1296    "01111001101000011101111010101010" when 21,
     1297    "01100100100110111011011101111100" when 22,
     1298    "00010101101101011010111101011100" when 23,
     1299    "00010101101101011010111101011100" when 24,
     1300    "01010111100110111110010011110001" when 25,
     1301    "01010111100110111110010011110001" when 26,
     1302    (others => '0') when others;
     1303 
     1304  with counter select
     1305    in_EXECUTE_QUEUE_IN_DATA <=
     1306    "00000000000000000000000000000000" when 0,
     1307    "00000000000000000000000000000000" when 1,
     1308    "00000000000000000000000000000000" when 2,
     1309    "00000000000000000000000000000000" when 3,
     1310    "00000000000000000000000000000000" when 4,
     1311    "01100010010101010101100011101100" when 5,
     1312    "01110101010001011110000101000110" when 6,
     1313    "01110101010001011110000101000110" when 7,
     1314    "01110101010001011110000101000110" when 8,
     1315    "01100110111011110100001110001101" when 9,
     1316    "01101011011010000000011110011010" when 10,
     1317    "01100010101110111101100101011010" when 11,
     1318    "01110101101000101010100011010100" when 12,
     1319    "00101100101010001000011000010001" when 13,
     1320    "01101100111010101111000010000111" when 14,
     1321    "00000101000001110010001101100111" when 15,
     1322    "00101101010100010111011110010110" when 16,
     1323    "00101101010100010111011110010110" when 17,
     1324    "01110010010110100000011011111011" when 18,
     1325    "01110110010001001010010001011100" when 19,
     1326    "01110101110001101100001100111010" when 20,
     1327    "01110101110001101100001100111010" when 21,
     1328    "00100111010110101100011110010100" when 22,
     1329    "01110100000100100010011010111011" when 23,
     1330    "01110100000100100010011010111011" when 24,
     1331    "00110001000011000101000010110011" when 25,
     1332    "00110001000011000101000010110011" when 26,
     1333    (others => '0') when others;
     1334 
     1335  -- Test partial
     1336 
     1337  interface_execute_queue_in_test_ok <= '1' when true
     1338    and out_EXECUTE_QUEUE_IN_ACK = out_EXECUTE_QUEUE_IN_ACK_test
     1339    else '0';
     1340 
     1341  interface_execute_queue_in_test_transaction <= '1'
     1342    and in_EXECUTE_QUEUE_IN_VAL
     1343    and out_EXECUTE_QUEUE_IN_ACK
     1344    ;
     1345 
     1346  with counter select
     1347    interface_execute_queue_in_test_tmp <=
     1348    interface_execute_queue_in_test_transaction and interface_execute_queue_in_test_ok
     1349      when 5,
     1350    interface_execute_queue_in_test_transaction and interface_execute_queue_in_test_ok
     1351      when 6,
     1352    interface_execute_queue_in_test_transaction and interface_execute_queue_in_test_ok
     1353      when 9,
     1354    interface_execute_queue_in_test_transaction and interface_execute_queue_in_test_ok
     1355      when 10,
     1356    interface_execute_queue_in_test_transaction and interface_execute_queue_in_test_ok
     1357      when 11,
     1358    interface_execute_queue_in_test_transaction and interface_execute_queue_in_test_ok
     1359      when 12,
     1360    interface_execute_queue_in_test_transaction and interface_execute_queue_in_test_ok
     1361      when 13,
     1362    interface_execute_queue_in_test_transaction and interface_execute_queue_in_test_ok
     1363      when 14,
     1364    interface_execute_queue_in_test_transaction and interface_execute_queue_in_test_ok
     1365      when 15,
     1366    interface_execute_queue_in_test_transaction and interface_execute_queue_in_test_ok
     1367      when 16,
     1368    interface_execute_queue_in_test_transaction and interface_execute_queue_in_test_ok
     1369      when 18,
     1370    interface_execute_queue_in_test_transaction and interface_execute_queue_in_test_ok
     1371      when 19,
     1372    interface_execute_queue_in_test_transaction and interface_execute_queue_in_test_ok
     1373      when 20,
     1374    interface_execute_queue_in_test_transaction and interface_execute_queue_in_test_ok
     1375      when 22,
     1376    interface_execute_queue_in_test_transaction and interface_execute_queue_in_test_ok
     1377      when 23,
     1378    interface_execute_queue_in_test_transaction and interface_execute_queue_in_test_ok
     1379      when 25,
     1380    not interface_execute_queue_in_test_transaction when others;
     1381 
     1382  interface_execute_queue_in_test <= '1' when (in_NRESET = '0') else
     1383                                     interface_execute_queue_in_test_tmp;
     1384  ------------------------------------------------------
     1385  -- interface "execute_queue_out"
     1386  ------------------------------------------------------
     1387 
     1388  with counter select
     1389    out_EXECUTE_QUEUE_OUT_VAL_test <=
     1390    '0' when 0,
     1391    '0' when 1,
     1392    '0' when 2,
     1393    '0' when 3,
     1394    '0' when 4,
     1395    '0' when 5,
     1396    '1' when 6,
     1397    '1' when 7,
     1398    '0' when 8,
     1399    '0' when 9,
     1400    '1' when 10,
     1401    '1' when 11,
     1402    '1' when 12,
     1403    '1' when 13,
     1404    '1' when 14,
     1405    '1' when 15,
     1406    '1' when 16,
     1407    '1' when 17,
     1408    '0' when 18,
     1409    '1' when 19,
     1410    '1' when 20,
     1411    '1' when 21,
     1412    '1' when 22,
     1413    '1' when 23,
     1414    '1' when 24,
     1415    '0' when 25,
     1416    '1' when 26,
     1417    '0' when others;
     1418 
     1419  with counter select
     1420    in_EXECUTE_QUEUE_OUT_ACK <=
     1421    '0' when 0,
     1422    '0' when 1,
     1423    '0' when 2,
     1424    '0' when 3,
     1425    '0' when 4,
     1426    '1' when 5,
     1427    '1' when 6,
     1428    '1' when 7,
     1429    '1' when 8,
     1430    '0' when 9,
     1431    '1' when 10,
     1432    '1' when 11,
     1433    '1' when 12,
     1434    '1' when 13,
     1435    '1' when 14,
     1436    '1' when 15,
     1437    '1' when 16,
     1438    '1' when 17,
     1439    '1' when 18,
     1440    '1' when 19,
     1441    '1' when 20,
     1442    '0' when 21,
     1443    '1' when 22,
     1444    '1' when 23,
     1445    '1' when 24,
     1446    '1' when 25,
     1447    '1' when 26,
     1448    '0' when others;
     1449 
     1450  with counter select
     1451    out_EXECUTE_QUEUE_OUT_PACKET_ID_test <=
     1452    "0000" when 0,
     1453    "0000" when 1,
     1454    "0000" when 2,
     1455    "0000" when 3,
     1456    "0000" when 4,
     1457    "0000" when 5,
     1458    "0000" when 6,
     1459    "0001" when 7,
     1460    "0001" when 8,
     1461    "0001" when 9,
     1462    "0010" when 10,
     1463    "0011" when 11,
     1464    "0100" when 12,
     1465    "0101" when 13,
     1466    "0110" when 14,
     1467    "0111" when 15,
     1468    "1000" when 16,
     1469    "1001" when 17,
     1470    "1001" when 18,
     1471    "1010" when 19,
     1472    "1011" when 20,
     1473    "1100" when 21,
     1474    "1100" when 22,
     1475    "1101" when 23,
     1476    "1110" when 24,
     1477    "1110" when 25,
     1478    "1111" when 26,
     1479    (others => '0') when others;
     1480 
     1481  with counter select
     1482    out_EXECUTE_QUEUE_OUT_FLAGS_test <=
     1483    "00" when 0,
     1484    "00" when 1,
     1485    "00" when 2,
     1486    "00" when 3,
     1487    "00" when 4,
     1488    "00" when 5,
     1489    "11" when 6,
     1490    "11" when 7,
     1491    "11" when 8,
     1492    "11" when 9,
     1493    "00" when 10,
     1494    "11" when 11,
     1495    "11" when 12,
     1496    "11" when 13,
     1497    "10" when 14,
     1498    "01" when 15,
     1499    "01" when 16,
     1500    "11" when 17,
     1501    "11" when 18,
     1502    "10" when 19,
     1503    "00" when 20,
     1504    "11" when 21,
     1505    "11" when 22,
     1506    "10" when 23,
     1507    "01" when 24,
     1508    "01" when 25,
     1509    "01" when 26,
     1510    (others => '0') when others;
     1511 
     1512  with counter select
     1513    out_EXECUTE_QUEUE_OUT_EXCEPTION_test <=
     1514    "00000" when 0,
     1515    "00000" when 1,
     1516    "00000" when 2,
     1517    "00000" when 3,
     1518    "00000" when 4,
     1519    "00000" when 5,
     1520    "10001" when 6,
     1521    "10010" when 7,
     1522    "10010" when 8,
     1523    "10010" when 9,
     1524    "11011" when 10,
     1525    "10011" when 11,
     1526    "10001" when 12,
     1527    "11000" when 13,
     1528    "11011" when 14,
     1529    "00001" when 15,
     1530    "00001" when 16,
     1531    "01010" when 17,
     1532    "01010" when 18,
     1533    "01100" when 19,
     1534    "01100" when 20,
     1535    "11011" when 21,
     1536    "11011" when 22,
     1537    "00101" when 23,
     1538    "01001" when 24,
     1539    "01001" when 25,
     1540    "10001" when 26,
     1541    (others => '0') when others;
     1542 
     1543  with counter select
     1544    out_EXECUTE_QUEUE_OUT_NO_SEQUENCE_test <=
     1545    '0' when 0,
     1546    '0' when 1,
     1547    '0' when 2,
     1548    '0' when 3,
     1549    '0' when 4,
     1550    '0' when 5,
     1551    '1' when 6,
     1552    '1' when 7,
     1553    '1' when 8,
     1554    '1' when 9,
     1555    '1' when 10,
     1556    '1' when 11,
     1557    '1' when 12,
     1558    '1' when 13,
     1559    '1' when 14,
     1560    '1' when 15,
     1561    '1' when 16,
     1562    '1' when 17,
     1563    '1' when 18,
     1564    '1' when 19,
     1565    '1' when 20,
     1566    '1' when 21,
     1567    '1' when 22,
     1568    '1' when 23,
     1569    '1' when 24,
     1570    '1' when 25,
     1571    '1' when 26,
     1572    '0' when others;
     1573 
     1574  with counter select
     1575    out_EXECUTE_QUEUE_OUT_ADDRESS_test <=
     1576    "00000000000000000000000000000000" when 0,
     1577    "00000000000000000000000000000000" when 1,
     1578    "00000000000000000000000000000000" when 2,
     1579    "00000000000000000000000000000000" when 3,
     1580    "00000000000000000000000000000000" when 4,
     1581    "00000000000000000000000000000000" when 5,
     1582    "00101010111010001001010001001010" when 6,
     1583    "01111001111000101010100111100011" when 7,
     1584    "01111001111000101010100111100011" when 8,
     1585    "01111001111000101010100111100011" when 9,
     1586    "00010001100100001100110111100111" when 10,
     1587    "01000001101001111100010011001001" when 11,
     1588    "00100101011100010011000010100011" when 12,
     1589    "01100111011000111000010001011110" when 13,
     1590    "01110001111100110010010001010100" when 14,
     1591    "01110011011110111000110111011100" when 15,
     1592    "01000100000010111010110111111100" when 16,
     1593    "01010001111010101101001101101011" when 17,
     1594    "01010001111010101101001101101011" when 18,
     1595    "00011101010011101101010000111011" when 19,
     1596    "00111000010000110111111111011011" when 20,
     1597    "01111001101000011101111010101010" when 21,
     1598    "01111001101000011101111010101010" when 22,
     1599    "01100100100110111011011101111100" when 23,
     1600    "00010101101101011010111101011100" when 24,
     1601    "00010101101101011010111101011100" when 25,
     1602    "01010111100110111110010011110001" when 26,
     1603    (others => '0') when others;
     1604 
     1605  with counter select
     1606    out_EXECUTE_QUEUE_OUT_DATA_test <=
     1607    "00000000000000000000000000000000" when 0,
     1608    "00000000000000000000000000000000" when 1,
     1609    "00000000000000000000000000000000" when 2,
     1610    "00000000000000000000000000000000" when 3,
     1611    "00000000000000000000000000000000" when 4,
     1612    "00000000000000000000000000000000" when 5,
     1613    "01100010010101010101100011101100" when 6,
     1614    "01110101010001011110000101000110" when 7,
     1615    "01110101010001011110000101000110" when 8,
     1616    "01110101010001011110000101000110" when 9,
     1617    "01100110111011110100001110001101" when 10,
     1618    "01101011011010000000011110011010" when 11,
     1619    "01100010101110111101100101011010" when 12,
     1620    "01110101101000101010100011010100" when 13,
     1621    "00101100101010001000011000010001" when 14,
     1622    "01101100111010101111000010000111" when 15,
     1623    "00000101000001110010001101100111" when 16,
     1624    "00101101010100010111011110010110" when 17,
     1625    "00101101010100010111011110010110" when 18,
     1626    "01110010010110100000011011111011" when 19,
     1627    "01110110010001001010010001011100" when 20,
     1628    "01110101110001101100001100111010" when 21,
     1629    "01110101110001101100001100111010" when 22,
     1630    "00100111010110101100011110010100" when 23,
     1631    "01110100000100100010011010111011" when 24,
     1632    "01110100000100100010011010111011" when 25,
     1633    "00110001000011000101000010110011" when 26,
     1634    (others => '0') when others;
     1635 
     1636  -- Test partial
     1637 
     1638  interface_execute_queue_out_test_ok <= '1' when true
     1639    and out_EXECUTE_QUEUE_OUT_VAL = out_EXECUTE_QUEUE_OUT_VAL_test
     1640    and out_EXECUTE_QUEUE_OUT_PACKET_ID = out_EXECUTE_QUEUE_OUT_PACKET_ID_test
     1641    and out_EXECUTE_QUEUE_OUT_FLAGS = out_EXECUTE_QUEUE_OUT_FLAGS_test
     1642    and out_EXECUTE_QUEUE_OUT_EXCEPTION = out_EXECUTE_QUEUE_OUT_EXCEPTION_test
     1643    and out_EXECUTE_QUEUE_OUT_NO_SEQUENCE = out_EXECUTE_QUEUE_OUT_NO_SEQUENCE_test
     1644    and out_EXECUTE_QUEUE_OUT_ADDRESS = out_EXECUTE_QUEUE_OUT_ADDRESS_test
     1645    and out_EXECUTE_QUEUE_OUT_DATA = out_EXECUTE_QUEUE_OUT_DATA_test
     1646    else '0';
     1647 
     1648  interface_execute_queue_out_test_transaction <= '1'
     1649    and out_EXECUTE_QUEUE_OUT_VAL
     1650    and in_EXECUTE_QUEUE_OUT_ACK
     1651    ;
     1652 
     1653  with counter select
     1654    interface_execute_queue_out_test_tmp <=
     1655    interface_execute_queue_out_test_transaction and interface_execute_queue_out_test_ok
     1656      when 6,
     1657    interface_execute_queue_out_test_transaction and interface_execute_queue_out_test_ok
     1658      when 7,
     1659    interface_execute_queue_out_test_transaction and interface_execute_queue_out_test_ok
     1660      when 10,
     1661    interface_execute_queue_out_test_transaction and interface_execute_queue_out_test_ok
     1662      when 11,
     1663    interface_execute_queue_out_test_transaction and interface_execute_queue_out_test_ok
     1664      when 12,
     1665    interface_execute_queue_out_test_transaction and interface_execute_queue_out_test_ok
     1666      when 13,
     1667    interface_execute_queue_out_test_transaction and interface_execute_queue_out_test_ok
     1668      when 14,
     1669    interface_execute_queue_out_test_transaction and interface_execute_queue_out_test_ok
     1670      when 15,
     1671    interface_execute_queue_out_test_transaction and interface_execute_queue_out_test_ok
     1672      when 16,
     1673    interface_execute_queue_out_test_transaction and interface_execute_queue_out_test_ok
     1674      when 17,
     1675    interface_execute_queue_out_test_transaction and interface_execute_queue_out_test_ok
     1676      when 19,
     1677    interface_execute_queue_out_test_transaction and interface_execute_queue_out_test_ok
     1678      when 20,
     1679    interface_execute_queue_out_test_transaction and interface_execute_queue_out_test_ok
     1680      when 22,
     1681    interface_execute_queue_out_test_transaction and interface_execute_queue_out_test_ok
     1682      when 23,
     1683    interface_execute_queue_out_test_transaction and interface_execute_queue_out_test_ok
     1684      when 24,
     1685    interface_execute_queue_out_test_transaction and interface_execute_queue_out_test_ok
     1686      when 26,
     1687    not interface_execute_queue_out_test_transaction when others;
     1688 
     1689  interface_execute_queue_out_test <= '1' when (in_NRESET = '0') else
     1690                                      interface_execute_queue_out_test_tmp;
     1691 
     1692  ------------------------------------------------------
     1693  -- Test
     1694  ------------------------------------------------------
     1695 
     1696  test <= '1'
     1697           and interface_test
     1698           and interface_execute_queue_in_test
     1699           and interface_execute_queue_out_test;
     1700 
     1701  ------------------------------------------------------
     1702  -- reset
     1703  ------------------------------------------------------
     1704 
     1705  -- if the systemC simulate have multiple reset, we make the last
     1706  in_NRESET <= '1' after 150 ns;
     1707 
     1708  ------------------------------------------------------
     1709  -- process clock_name
     1710  ------------------------------------------------------
     1711 
     1712  in_CLOCK <= not in_CLOCK after 50 ns;
     1713 
     1714  process (in_CLOCK)
     1715  begin
     1716    if (in_CLOCK'event and in_CLOCK = '1') then
     1717 
     1718      if (in_NRESET = '0') then
     1719        counter <= 4;
     1720      else
     1721        counter <= counter+1;
     1722
     1723        assert not (counter >= 27) report "Test OK" severity FAILURE;
     1724        assert not (test = '0') report "Test KO" severity FAILURE;
     1725      end if;
     1726    end if;
     1727  end process;
     1728end behavioural;
     1729\end{lstlisting}
Note: See TracChangeset for help on using the changeset viewer.