source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Execute_loop_Glue/src/Execute_loop_Glue.cpp @ 123

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

1) Fix performance
2) add auto generation to SPECINT2000
3) add reset in genMoore and genMealy

  • Property svn:keywords set to Id
File size: 6.6 KB
Line 
1/*
2 * $Id: Execute_loop_Glue.cpp 123 2009-06-08 20:43:30Z rosiere $
3 *
4 * [ Description ]
5 *
6 */
7
8#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Execute_loop_Glue/include/Execute_loop_Glue.h"
9
10namespace morpheo                    {
11namespace behavioural {
12namespace core {
13namespace multi_execute_loop {
14namespace execute_loop {
15namespace execute_loop_glue {
16
17
18#undef  FUNCTION
19#define FUNCTION "Execute_loop_Glue::Execute_loop_Glue"
20  Execute_loop_Glue::Execute_loop_Glue
21  (
22#ifdef SYSTEMC
23   sc_module_name name,
24#else
25   string name,
26#endif
27#ifdef STATISTICS
28   morpheo::behavioural::Parameters_Statistics * param_statistics,
29#endif
30   morpheo::behavioural::core::multi_execute_loop::execute_loop::execute_loop_glue::Parameters * param,
31   morpheo::behavioural::Tusage_t usage
32   ):
33    _name              (name)
34    ,_param            (param)
35    ,_usage            (usage)
36  {
37    log_begin(Execute_loop_Glue,FUNCTION);
38
39    usage_environment(_usage);
40
41// #if DEBUG_Execute_loop_Glue == true
42//     log_printf(INFO,Execute_loop_Glue,FUNCTION,_("<%s> Parameters"),_name.c_str());
43
44//     std::cout << *param << std::endl;
45// #endif   
46
47    log_printf(INFO,Execute_loop_Glue,FUNCTION,_("<%s> : Allocation"),_name.c_str());
48
49    allocation (
50#ifdef STATISTICS
51                param_statistics
52#endif
53                );
54
55#ifdef STATISTICS
56    if (usage_is_set(_usage,USE_STATISTICS))
57      { 
58        log_printf(INFO,Execute_loop_Glue,FUNCTION,_("<%s> : Allocation of statistics"),_name.c_str());
59
60        statistics_allocation(param_statistics);
61      }
62#endif
63
64#ifdef VHDL
65    if (usage_is_set(_usage,USE_VHDL))
66      {
67        // generate the vhdl
68        log_printf(INFO,Execute_loop_Glue,FUNCTION,_("<%s> : Generate the vhdl"),_name.c_str());
69       
70        vhdl();
71      }
72#endif
73
74#ifdef SYSTEMC
75    if (usage_is_set(_usage,USE_SYSTEMC))
76      {
77        log_printf(INFO,Execute_loop_Glue,FUNCTION,_("<%s> : Method - transition"),_name.c_str());
78
79        SC_METHOD (transition);
80        dont_initialize ();
81        sensitive << (*(in_CLOCK)).pos();
82       
83# ifdef SYSTEMCASS_SPECIFIC
84        // List dependency information
85# endif   
86
87//      log_printf(INFO,Execute_loop_Glue,FUNCTION,_("<%s> : Method - genMoore"),_name.c_str());
88
89//      SC_METHOD (genMoore);
90//      dont_initialize ();
91//      sensitive << (*(in_CLOCK)).neg(); // need internal register
92       
93// # ifdef SYSTEMCASS_SPECIFIC
94//      // List dependency information
95// # endif   
96
97        log_printf(INFO,Execute_loop_Glue,FUNCTION,_("<%s> : Method - genMealy_gpr_write"),_name.c_str());
98
99        SC_METHOD (genMealy_gpr_write);
100        dont_initialize ();
101//      sensitive << (*(in_CLOCK)).neg(); // don't internal register
102       
103    for (uint32_t i=0; i<_param->_nb_gpr_write; i++)
104      {
105        sensitive <<(*(in_GPR_WRITE_WRITE_UNIT_VAL           [i]))
106                  <<(*(in_GPR_WRITE_WRITE_UNIT_NUM_REG       [i]))
107                  <<(*(in_GPR_WRITE_WRITE_UNIT_DATA          [i]))
108                  <<(*(in_GPR_WRITE_REGISTER_FILE_ACK        [i]));
109        if (_param->_have_port_ooo_engine_id)
110        sensitive <<(*(in_GPR_WRITE_WRITE_UNIT_OOO_ENGINE_ID [i]));
111      }
112
113# ifdef SYSTEMCASS_SPECIFIC
114        // List dependency information
115    for (uint32_t i=0; i<_param->_nb_gpr_write; i++)
116      {
117        (*(out_GPR_WRITE_WRITE_UNIT_ACK               [i])) (*( in_GPR_WRITE_REGISTER_FILE_ACK         [i]));
118        (*(out_GPR_WRITE_REGISTER_FILE_VAL            [i])) (*( in_GPR_WRITE_WRITE_UNIT_VAL            [i]));
119        if (_param->_have_port_ooo_engine_id)
120        (*(out_GPR_WRITE_REGISTER_FILE_OOO_ENGINE_ID  [i])) (*( in_GPR_WRITE_WRITE_UNIT_OOO_ENGINE_ID  [i]));
121        (*(out_GPR_WRITE_REGISTER_FILE_NUM_REG        [i])) (*( in_GPR_WRITE_WRITE_UNIT_NUM_REG        [i]));
122        (*(out_GPR_WRITE_REGISTER_FILE_DATA           [i])) (*( in_GPR_WRITE_WRITE_UNIT_DATA           [i]));
123        (*(out_GPR_WRITE_READ_UNIT_VAL                [i])) (*( in_GPR_WRITE_WRITE_UNIT_VAL            [i]));
124        (*(out_GPR_WRITE_READ_UNIT_VAL                [i])) (*( in_GPR_WRITE_REGISTER_FILE_ACK         [i]));
125        if (_param->_have_port_ooo_engine_id)
126        (*(out_GPR_WRITE_READ_UNIT_OOO_ENGINE_ID      [i])) (*( in_GPR_WRITE_WRITE_UNIT_OOO_ENGINE_ID  [i]));
127        (*(out_GPR_WRITE_READ_UNIT_NUM_REG            [i])) (*( in_GPR_WRITE_WRITE_UNIT_NUM_REG        [i]));
128        (*(out_GPR_WRITE_READ_UNIT_DATA               [i])) (*( in_GPR_WRITE_WRITE_UNIT_DATA           [i]));
129      }
130# endif   
131
132        log_printf(INFO,Execute_loop_Glue,FUNCTION,_("<%s> : Method - genMealy_spr_write"),_name.c_str());
133
134        SC_METHOD (genMealy_spr_write);
135        dont_initialize ();
136//      sensitive << (*(in_CLOCK)).neg(); // don't internal register
137       
138    for (uint32_t i=0; i<_param->_nb_spr_write; i++)
139      {
140        sensitive <<(*(in_SPR_WRITE_WRITE_UNIT_VAL           [i]))
141                  <<(*(in_SPR_WRITE_WRITE_UNIT_NUM_REG       [i]))
142                  <<(*(in_SPR_WRITE_WRITE_UNIT_DATA          [i]))
143                  <<(*(in_SPR_WRITE_REGISTER_FILE_ACK        [i]));
144        if (_param->_have_port_ooo_engine_id)
145        sensitive <<(*(in_SPR_WRITE_WRITE_UNIT_OOO_ENGINE_ID [i]));
146      }
147
148# ifdef SYSTEMCASS_SPECIFIC
149        // List dependency information
150    for (uint32_t i=0; i<_param->_nb_spr_write; i++)
151      {
152        (*(out_SPR_WRITE_WRITE_UNIT_ACK               [i])) (*( in_SPR_WRITE_REGISTER_FILE_ACK         [i]));
153        (*(out_SPR_WRITE_REGISTER_FILE_VAL            [i])) (*( in_SPR_WRITE_WRITE_UNIT_VAL            [i]));
154        if (_param->_have_port_ooo_engine_id)
155        (*(out_SPR_WRITE_REGISTER_FILE_OOO_ENGINE_ID  [i])) (*( in_SPR_WRITE_WRITE_UNIT_OOO_ENGINE_ID  [i]));
156        (*(out_SPR_WRITE_REGISTER_FILE_NUM_REG        [i])) (*( in_SPR_WRITE_WRITE_UNIT_NUM_REG        [i]));
157        (*(out_SPR_WRITE_REGISTER_FILE_DATA           [i])) (*( in_SPR_WRITE_WRITE_UNIT_DATA           [i]));
158        (*(out_SPR_WRITE_READ_UNIT_VAL                [i])) (*( in_SPR_WRITE_WRITE_UNIT_VAL            [i]));
159        (*(out_SPR_WRITE_READ_UNIT_VAL                [i])) (*( in_SPR_WRITE_REGISTER_FILE_ACK         [i]));
160        if (_param->_have_port_ooo_engine_id)
161        (*(out_SPR_WRITE_READ_UNIT_OOO_ENGINE_ID      [i])) (*( in_SPR_WRITE_WRITE_UNIT_OOO_ENGINE_ID  [i]));
162        (*(out_SPR_WRITE_READ_UNIT_NUM_REG            [i])) (*( in_SPR_WRITE_WRITE_UNIT_NUM_REG        [i]));
163        (*(out_SPR_WRITE_READ_UNIT_DATA               [i])) (*( in_SPR_WRITE_WRITE_UNIT_DATA           [i]));
164      }
165# endif   
166       
167#endif
168      }
169    log_end(Execute_loop_Glue,FUNCTION);
170  };
171   
172#undef  FUNCTION
173#define FUNCTION "Execute_loop_Glue::~Execute_loop_Glue"
174  Execute_loop_Glue::~Execute_loop_Glue (void)
175  {
176    log_begin(Execute_loop_Glue,FUNCTION);
177
178#ifdef STATISTICS
179    if (usage_is_set(_usage,USE_STATISTICS))
180      {
181        statistics_deallocation();
182      }
183#endif
184
185    log_printf(INFO,Execute_loop_Glue,FUNCTION,_("<%s> : Deallocation"),_name.c_str());
186    deallocation ();
187
188    log_end(Execute_loop_Glue,FUNCTION);
189  };
190
191}; // end namespace execute_loop_glue
192}; // end namespace execute_loop
193}; // end namespace multi_execute_loop
194}; // end namespace core
195
196}; // end namespace behavioural
197}; // end namespace morpheo             
Note: See TracBrowser for help on using the repository browser.