source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Execute_loop_Glue/include/Execute_loop_Glue.h @ 136

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

1) Add new algo in ifetch queue
2) Add Cancel bit
3) new config

  • Property svn:keywords set to Id
File size: 7.4 KB
Line 
1#ifndef morpheo_behavioural_core_multi_execute_loop_execute_loop_execute_loop_glue_Execute_loop_Glue_h
2#define morpheo_behavioural_core_multi_execute_loop_execute_loop_execute_loop_glue_Execute_loop_Glue_h
3
4/*
5 * $Id: Execute_loop_Glue.h 136 2009-10-20 18:52:15Z rosiere $
6 *
7 * [ Description ]
8 *
9 */
10
11#ifdef SYSTEMC
12#include "systemc.h"
13#endif
14
15
16#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Execute_loop_Glue/include/Parameters.h"
17#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Execute_loop_Glue/include/Types.h"
18#ifdef STATISTICS
19#include "Behavioural/include/Stat.h"
20#endif
21#include "Behavioural/include/Component.h"
22#ifdef VHDL
23#include "Behavioural/include/Vhdl.h"
24#endif
25#include "Behavioural/include/Usage.h"
26
27#include "Common/include/ToString.h"
28#include "Common/include/Debug.h"
29
30#include <iostream>
31
32namespace morpheo {
33namespace behavioural {
34
35namespace core {
36namespace multi_execute_loop {
37namespace execute_loop {
38namespace execute_loop_glue {
39
40
41  class Execute_loop_Glue
42#if SYSTEMC
43    : public sc_module
44#endif
45  {
46    // -----[ fields ]----------------------------------------------------
47    // Parameters
48  protected : const std::string  _name;
49  protected : const Parameters * _param;
50  private   : const Tusage_t     _usage;
51
52#ifdef STATISTICS
53  public    : Stat                           * _stat;
54#endif
55
56  public    : Component                      * _component;
57  private   : Interfaces                     * _interfaces;
58
59#ifdef SYSTEMC
60    // ~~~~~[ Interface ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
61    // ~~~~~[ Interface : "" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
62  public    : SC_CLOCK                      *  in_CLOCK        ;
63  public    : SC_IN (Tcontrol_t)            *  in_NRESET       ;
64
65    // -----[ Interface "gpr_write_write_unit" ]--------------------------
66  public    : SC_IN (Tcontrol_t        )   **  in_GPR_WRITE_WRITE_UNIT_VAL               ;
67  public    : SC_OUT(Tcontrol_t        )   ** out_GPR_WRITE_WRITE_UNIT_ACK               ;
68  public    : SC_IN (Tcontext_t        )   **  in_GPR_WRITE_WRITE_UNIT_OOO_ENGINE_ID     ;
69  public    : SC_IN (Tgeneral_address_t)   **  in_GPR_WRITE_WRITE_UNIT_NUM_REG           ;
70  public    : SC_IN (Tgeneral_data_t   )   **  in_GPR_WRITE_WRITE_UNIT_DATA              ;
71
72    // -----[ Interface "gpr_write_register_file" ]-----------------------
73  public    : SC_OUT(Tcontrol_t        )   ** out_GPR_WRITE_REGISTER_FILE_VAL            ;
74  public    : SC_IN (Tcontrol_t        )   **  in_GPR_WRITE_REGISTER_FILE_ACK            ;
75  public    : SC_OUT(Tcontext_t        )   ** out_GPR_WRITE_REGISTER_FILE_OOO_ENGINE_ID  ;
76  public    : SC_OUT(Tgeneral_address_t)   ** out_GPR_WRITE_REGISTER_FILE_NUM_REG        ;
77  public    : SC_OUT(Tgeneral_data_t   )   ** out_GPR_WRITE_REGISTER_FILE_DATA           ;
78
79    // -----[ Interface "gpr_write_read_unit" ]---------------------------
80  public    : SC_OUT(Tcontrol_t        )   ** out_GPR_WRITE_READ_UNIT_VAL                ;
81  public    : SC_OUT(Tcontext_t        )   ** out_GPR_WRITE_READ_UNIT_OOO_ENGINE_ID      ;
82  public    : SC_OUT(Tgeneral_address_t)   ** out_GPR_WRITE_READ_UNIT_NUM_REG            ;
83  public    : SC_OUT(Tgeneral_data_t   )   ** out_GPR_WRITE_READ_UNIT_DATA               ;
84
85    // -----[ Interface "spr_write_write_unit" ]--------------------------
86  public    : SC_IN (Tcontrol_t        )   **  in_SPR_WRITE_WRITE_UNIT_VAL               ;
87  public    : SC_OUT(Tcontrol_t        )   ** out_SPR_WRITE_WRITE_UNIT_ACK               ;
88  public    : SC_IN (Tcontext_t        )   **  in_SPR_WRITE_WRITE_UNIT_OOO_ENGINE_ID     ;
89  public    : SC_IN (Tspecial_address_t)   **  in_SPR_WRITE_WRITE_UNIT_NUM_REG           ;
90  public    : SC_IN (Tspecial_data_t   )   **  in_SPR_WRITE_WRITE_UNIT_DATA              ;
91
92    // -----[ Interface "spr_write_register_file" ]-----------------------
93  public    : SC_OUT(Tcontrol_t        )   ** out_SPR_WRITE_REGISTER_FILE_VAL            ;
94  public    : SC_IN (Tcontrol_t        )   **  in_SPR_WRITE_REGISTER_FILE_ACK            ;
95  public    : SC_OUT(Tcontext_t        )   ** out_SPR_WRITE_REGISTER_FILE_OOO_ENGINE_ID  ;
96  public    : SC_OUT(Tspecial_address_t)   ** out_SPR_WRITE_REGISTER_FILE_NUM_REG        ;
97  public    : SC_OUT(Tspecial_data_t   )   ** out_SPR_WRITE_REGISTER_FILE_DATA           ;
98
99    // -----[ Interface "spr_write_read_unit" ]---------------------------
100  public    : SC_OUT(Tcontrol_t        )   ** out_SPR_WRITE_READ_UNIT_VAL                ;
101  public    : SC_OUT(Tcontext_t        )   ** out_SPR_WRITE_READ_UNIT_OOO_ENGINE_ID      ;
102  public    : SC_OUT(Tspecial_address_t)   ** out_SPR_WRITE_READ_UNIT_NUM_REG            ;
103  public    : SC_OUT(Tspecial_data_t   )   ** out_SPR_WRITE_READ_UNIT_DATA               ;
104
105    // -----[ Interface "issue" ]-----------------------------------------
106  public    : SC_IN (Tcontrol_t        )   **  in_ISSUE_VAL                              ;
107  public    : SC_OUT(Tcontrol_t        )   ** out_ISSUE_ACK                              ;
108
109  public    : SC_OUT(Tcontrol_t        )   ** out_ISSUE_READ_UNIT_VAL                    ;
110  public    : SC_IN (Tcontrol_t        )   **  in_ISSUE_READ_UNIT_ACK                    ;
111
112  public    : SC_OUT(Tcontrol_t        )   ** out_ISSUE_REGISTER_UNIT_VAL                ;
113  public    : SC_IN (Tcontrol_t        )   **  in_ISSUE_REGISTER_UNIT_ACK                ;
114   
115    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
116
117    // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
118
119    // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
120#endif
121
122    // -----[ Methods ]---------------------------------------------------
123
124#ifdef SYSTEMC
125    SC_HAS_PROCESS (Execute_loop_Glue);
126#endif
127  public  :          Execute_loop_Glue             
128  (
129#ifdef SYSTEMC
130   sc_module_name                                name,
131#else                                         
132   std::string                                   name,
133#endif                                         
134#ifdef STATISTICS
135   morpheo::behavioural::Parameters_Statistics * param_statistics,
136#endif
137   Parameters                                  * param,
138   morpheo::behavioural::Tusage_t                usage
139   );
140  public  :          ~Execute_loop_Glue             (void);
141                                               
142  private : void        allocation                (
143#ifdef STATISTICS
144                                                   morpheo::behavioural::Parameters_Statistics * param_statistics
145#else
146                                                   void
147#endif
148                                                   );
149  private : void        deallocation              (void);
150                                               
151#ifdef SYSTEMC                                 
152  public  : void        transition                (void);
153//public  : void        genMoore                  (void);
154  public  : void        genMealy_gpr_write        (void);
155  public  : void        genMealy_spr_write        (void);
156  public  : void        genMealy_issue            (void);
157#endif                                         
158
159#if VHDL                                       
160  public  : void        vhdl                      (void);
161  private : void        vhdl_declaration          (Vhdl * & vhdl);
162  private : void        vhdl_body                 (Vhdl * & vhdl);
163#endif                                         
164
165#ifdef STATISTICS
166  public  : void        statistics_allocation     (morpheo::behavioural::Parameters_Statistics * param_statistics);
167  public  : void        statistics_deallocation   (void);
168#endif
169#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
170  private : void        end_cycle                 (void);
171#endif
172  };
173
174}; // end namespace execute_loop_glue
175}; // end namespace execute_loop
176}; // end namespace multi_execute_loop
177}; // end namespace core
178
179}; // end namespace behavioural
180}; // end namespace morpheo             
181
182#endif
Note: See TracBrowser for help on using the repository browser.