source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Execution_unit_to_Write_unit/include/Execution_unit_to_Write_unit.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: 6.9 KB
Line 
1#ifndef morpheo_behavioural_core_multi_execute_loop_execute_loop_network_execution_unit_to_write_unit_Execution_unit_to_Write_unit_h
2#define morpheo_behavioural_core_multi_execute_loop_execute_loop_network_execution_unit_to_write_unit_Execution_unit_to_Write_unit_h
3
4/*
5 * $Id: Execution_unit_to_Write_unit.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#include <iostream>
16#include <list>
17#include "Common/include/ToString.h"
18#include "Common/include/Debug.h"
19#include "Behavioural/include/Identification.h"
20
21#include "Behavioural/include/Types.h"
22#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Execution_unit_to_Write_unit/include/Parameters.h"
23#ifdef STATISTICS
24#include "Behavioural/include/Stat.h"
25#endif
26#include "Behavioural/include/Component.h"
27#ifdef VHDL
28#include "Behavioural/include/Vhdl.h"
29#endif
30#include "Behavioural/include/Usage.h"
31
32namespace morpheo {
33namespace behavioural {
34
35namespace core {
36namespace multi_execute_loop {
37namespace execute_loop {
38namespace network {
39namespace execution_unit_to_write_unit {
40
41
42  class Execution_unit_to_Write_unit
43#if SYSTEMC
44    : public sc_module
45#endif
46  {
47    // -----[ fields ]----------------------------------------------------
48    // Parameters
49  protected : const std::string  _name;
50  protected : const Parameters * _param;
51  private   : const Tusage_t     _usage;
52
53#ifdef STATISTICS
54  public    : Stat                           * _stat;
55#endif
56
57  public    : Component                      * _component;
58  private   : Interfaces                     * _interfaces;
59
60#ifdef SYSTEMC
61    // ~~~~~[ Interface ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
62    // Interface
63  public    : SC_CLOCK                      *  in_CLOCK        ;
64  public    : SC_IN (Tcontrol_t)            *  in_NRESET       ;
65
66    // ~~~~~[ Interface "execute_unit_out" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
67  public    : SC_IN (Tcontrol_t        )  ***  in_EXECUTE_UNIT_OUT_VAL            ;
68  public    : SC_OUT(Tcontrol_t        )  *** out_EXECUTE_UNIT_OUT_ACK            ;
69  public    : SC_IN (Tcontext_t        )  ***  in_EXECUTE_UNIT_OUT_CONTEXT_ID     ;
70  public    : SC_IN (Tcontext_t        )  ***  in_EXECUTE_UNIT_OUT_FRONT_END_ID   ;
71  public    : SC_IN (Tcontext_t        )  ***  in_EXECUTE_UNIT_OUT_OOO_ENGINE_ID  ;
72  public    : SC_IN (Tpacket_t         )  ***  in_EXECUTE_UNIT_OUT_PACKET_ID      ;
73//public    : SC_IN (Toperation_t      )  ***  in_EXECUTE_UNIT_OUT_OPERATION      ;
74//public    : SC_IN (Ttype_t           )  ***  in_EXECUTE_UNIT_OUT_TYPE           ;
75  public    : SC_IN (Tcontrol_t        )  ***  in_EXECUTE_UNIT_OUT_CANCEL         ;
76  public    : SC_IN (Tcontrol_t        )  ***  in_EXECUTE_UNIT_OUT_WRITE_RD       ;
77  public    : SC_IN (Tgeneral_address_t)  ***  in_EXECUTE_UNIT_OUT_NUM_REG_RD     ;
78  public    : SC_IN (Tgeneral_data_t   )  ***  in_EXECUTE_UNIT_OUT_DATA_RD        ;
79  public    : SC_IN (Tcontrol_t        )  ***  in_EXECUTE_UNIT_OUT_WRITE_RE       ;
80  public    : SC_IN (Tspecial_address_t)  ***  in_EXECUTE_UNIT_OUT_NUM_REG_RE     ;
81  public    : SC_IN (Tspecial_data_t   )  ***  in_EXECUTE_UNIT_OUT_DATA_RE        ;
82  public    : SC_IN (Texception_t      )  ***  in_EXECUTE_UNIT_OUT_EXCEPTION      ;
83  public    : SC_IN (Tcontrol_t        )  ***  in_EXECUTE_UNIT_OUT_NO_SEQUENCE    ;
84  public    : SC_IN (Taddress_t        )  ***  in_EXECUTE_UNIT_OUT_ADDRESS        ;
85
86    // ~~~~~[ Interface "write_unit_in" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
87  public    : SC_OUT(Tcontrol_t        )   ** out_WRITE_UNIT_IN_VAL            ;
88  public    : SC_IN (Tcontrol_t        )   **  in_WRITE_UNIT_IN_ACK            ;
89  public    : SC_OUT(Tcontext_t        )   ** out_WRITE_UNIT_IN_CONTEXT_ID     ;
90  public    : SC_OUT(Tcontext_t        )   ** out_WRITE_UNIT_IN_FRONT_END_ID   ;
91  public    : SC_OUT(Tcontext_t        )   ** out_WRITE_UNIT_IN_OOO_ENGINE_ID  ;
92  public    : SC_OUT(Tpacket_t         )   ** out_WRITE_UNIT_IN_PACKET_ID      ;
93//public    : SC_OUT(Toperation_t      )   ** out_WRITE_UNIT_IN_OPERATION      ;
94//public    : SC_OUT(Ttype_t           )   ** out_WRITE_UNIT_IN_TYPE           ;
95  public    : SC_OUT(Tcontrol_t        )   ** out_WRITE_UNIT_IN_CANCEL         ;
96  public    : SC_OUT(Tcontrol_t        )   ** out_WRITE_UNIT_IN_WRITE_RD       ;
97  public    : SC_OUT(Tgeneral_address_t)   ** out_WRITE_UNIT_IN_NUM_REG_RD     ;
98  public    : SC_OUT(Tgeneral_data_t   )   ** out_WRITE_UNIT_IN_DATA_RD        ;
99  public    : SC_OUT(Tcontrol_t        )   ** out_WRITE_UNIT_IN_WRITE_RE       ;
100  public    : SC_OUT(Tspecial_address_t)   ** out_WRITE_UNIT_IN_NUM_REG_RE     ;
101  public    : SC_OUT(Tspecial_data_t   )   ** out_WRITE_UNIT_IN_DATA_RE        ;
102  public    : SC_OUT(Texception_t      )   ** out_WRITE_UNIT_IN_EXCEPTION      ;
103  public    : SC_OUT(Tcontrol_t        )   ** out_WRITE_UNIT_IN_NO_SEQUENCE    ;
104  public    : SC_OUT(Taddress_t        )   ** out_WRITE_UNIT_IN_ADDRESS        ;
105
106    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
107
108    // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
109
110    // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
111  private   : std::list<uint32_t> *** _destination; //[nb_execute_unit][nb_execute_unit_port][nb_thread];
112#endif
113
114    // -----[ Methods ]---------------------------------------------------
115
116#ifdef SYSTEMC
117    SC_HAS_PROCESS (Execution_unit_to_Write_unit);
118#endif
119  public  :          Execution_unit_to_Write_unit             
120  (
121#ifdef SYSTEMC
122   sc_module_name                                name,
123#else                                         
124   std::string                                   name,
125#endif                                         
126#ifdef STATISTICS
127   morpheo::behavioural::Parameters_Statistics * param_statistics,
128#endif
129   Parameters                                  * param,
130   morpheo::behavioural::Tusage_t                usage
131   );
132  public  :          ~Execution_unit_to_Write_unit             (void);
133                                               
134  private : void        allocation                (
135#ifdef STATISTICS
136                                                   morpheo::behavioural::Parameters_Statistics * param_statistics
137#else
138                                                   void
139#endif
140                                                   );
141  private : void        deallocation              (void);
142                                               
143#ifdef SYSTEMC                                 
144  public  : void        transition                (void);
145  public  : void        genMealy                  (void);
146#endif                                         
147
148#if VHDL                                       
149  public  : void        vhdl                      (void);
150  private : void        vhdl_declaration          (Vhdl * & vhdl);
151  private : void        vhdl_body                 (Vhdl * & vhdl);
152#endif                                         
153
154#ifdef STATISTICS
155  public  : void        statistics_declaration    (morpheo::behavioural::Parameters_Statistics * param_statistics);
156#endif
157#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
158  private : void        end_cycle                 (void);
159#endif
160  };
161
162}; // end namespace execution_unit_to_write_unit
163}; // end namespace network
164}; // end namespace execute_loop
165}; // end namespace multi_execute_loop
166}; // end namespace core
167
168}; // end namespace behavioural
169}; // end namespace morpheo             
170
171#endif
Note: See TracBrowser for help on using the repository browser.