Changeset 118 for trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Write_queue
- Timestamp:
- May 21, 2009, 12:01:32 AM (15 years ago)
- Location:
- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Write_queue
- Files:
-
- 1 added
- 7 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Write_queue/include/Parameters.h
r115 r118 24 24 25 25 26 26 27 class Parameters : public morpheo::behavioural::Parameters 27 28 { 28 29 //-----[ fields ]------------------------------------------------------------ 29 public : uint32_t _size_queue;30 public : uint32_t _nb_context;31 public : uint32_t _nb_front_end;32 public : uint32_t _nb_ooo_engine;33 public : uint32_t _nb_packet;34 //public : uint32_t _size_general_data;35 public : uint32_t _nb_general_register;36 //public : uint32_t _size_special_data;37 public : uint32_t _nb_special_register;38 public : uint32_t _nb_bypass_write;39 public : Twrite_queue_scheme_t _queue_scheme;40 41 public : uint32_t _nb_gpr_write;42 public : uint32_t _nb_spr_write;43 44 //public : uint32_t _size_context_id;45 //public : uint32_t _size_front_end_id;46 //public : uint32_t _size_ooo_engine_id;47 //public : uint32_t _size_packet_id;48 //public : uint32_t _size_general_register;49 //public : uint32_t _size_special_register;50 public : uint32_t _size_internal_queue;51 52 //public : bool _have_port_context_id;53 //public : bool _have_port_front_end_id;54 //public : bool _have_port_ooo_engine_id;55 //public : bool _have_port_packet_id;30 public : uint32_t _size_queue ; 31 public : uint32_t _nb_context ; 32 public : uint32_t _nb_front_end ; 33 public : uint32_t _nb_ooo_engine ; 34 public : uint32_t _nb_packet ; 35 //public : uint32_t _size_general_data ; 36 public : uint32_t _nb_general_register ; 37 //public : uint32_t _size_special_data ; 38 public : uint32_t _nb_special_register ; 39 public : uint32_t _nb_bypass_write ; 40 public : Twrite_queue_scheme_t _queue_scheme ; 41 public : Tbypass_write_scheme_t _bypass_write_scheme ; 42 public : uint32_t _nb_gpr_write ; 43 public : uint32_t _nb_spr_write ; 44 45 //public : uint32_t _size_context_id ; 46 //public : uint32_t _size_front_end_id ; 47 //public : uint32_t _size_ooo_engine_id ; 48 //public : uint32_t _size_packet_id ; 49 //public : uint32_t _size_general_register ; 50 //public : uint32_t _size_special_register ; 51 public : uint32_t _size_internal_queue ; 52 53 //public : bool _have_port_context_id ; 54 //public : bool _have_port_front_end_id ; 55 //public : bool _have_port_ooo_engine_id; 56 //public : bool _have_port_packet_id ; 56 57 57 58 //-----[ methods ]----------------------------------------------------------- -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Write_queue/include/Types.h
r115 r118 25 25 ,WRITE_QUEUE_SCHEME_MEALY // Write register and pop can be in same cycle 26 26 } Twrite_queue_scheme_t; 27 28 typedef enum 29 { 30 BYPASS_WRITE_FROM_ALU, 31 BYPASS_WRITE_FROM_QUEUE 32 } Tbypass_write_scheme_t; 27 33 28 34 class write_queue_entry_t … … 108 114 }; 109 115 116 template<> inline std::string toString<morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_write_unit::write_unit::write_queue::Tbypass_write_scheme_t>(const morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_write_unit::write_unit::write_queue::Tbypass_write_scheme_t& x) 117 { 118 switch (x) 119 { 120 case morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_write_unit::write_unit::write_queue::BYPASS_WRITE_FROM_ALU : return "alu" ; break; 121 case morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_write_unit::write_unit::write_queue::BYPASS_WRITE_FROM_QUEUE : return "queue"; break; 122 default : return ""; break; 123 } 124 }; 125 126 template<> inline morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_write_unit::write_unit::write_queue::Tbypass_write_scheme_t fromString<morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_write_unit::write_unit::write_queue::Tbypass_write_scheme_t>(const std::string& x) 127 { 128 if ( (x.compare(toString(static_cast<uint32_t>(morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_write_unit::write_unit::write_queue::BYPASS_WRITE_FROM_ALU))) == 0) or 129 (x.compare("alu") == 0)) 130 return morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_write_unit::write_unit::write_queue::BYPASS_WRITE_FROM_ALU; 131 if ( (x.compare(toString(static_cast<uint32_t>(morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_write_unit::write_unit::write_queue::BYPASS_WRITE_FROM_QUEUE))) == 0) or 132 (x.compare("queue") == 0)) 133 return morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_write_unit::write_unit::write_queue::BYPASS_WRITE_FROM_QUEUE; 134 135 throw (ErrorMorpheo ("<fromString> : Unknow string : \""+x+"\"")); 136 }; 137 110 138 }; // end namespace morpheo 111 139 -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Write_queue/include/Write_queue.h
r115 r118 172 172 public : void transition (void); 173 173 public : void genMoore (void); 174 public : void genMealy (void); 174 public : void genMealy_write (void); 175 public : void genMealy_bypass (void); 175 176 #endif 176 177 #ifdef STATISTICS -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Write_queue/src/Parameters.cpp
r115 r118 45 45 _nb_bypass_write = nb_bypass_write ; 46 46 _queue_scheme = queue_scheme ; 47 _bypass_write_scheme = BYPASS_WRITE_FROM_ALU; 48 // _bypass_write_scheme = BYPASS_WRITE_FROM_QUEUE; 47 49 48 50 _nb_gpr_write = 1; -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Write_queue/src/Parameters_msg_error.cpp
r113 r118 28 28 Parameters_test test (_type); 29 29 30 if ( _nb_bypass_write > _size_queue)30 if ((_bypass_write_scheme == BYPASS_WRITE_FROM_ALU) and (_nb_bypass_write > _size_queue)) 31 31 test.error("The write_queue can't have more bypass_write than entry in the queue.\n"); 32 if ((_bypass_write_scheme == BYPASS_WRITE_FROM_QUEUE) and (_nb_bypass_write > _size_queue-1)) 33 test.error("The write_queue can't have more bypass_write than entry in the queue -1 (the write_queue[0] is unnecessary).\n"); 32 34 33 35 log_printf(FUNC,Write_queue,FUNCTION,"End"); -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Write_queue/src/Write_queue.cpp
r115 r118 92 92 if (_param->_queue_scheme == WRITE_QUEUE_SCHEME_MEALY) 93 93 { 94 log_printf(INFO,Write_queue,FUNCTION,"Method - genMealy ");94 log_printf(INFO,Write_queue,FUNCTION,"Method - genMealy_write"); 95 95 96 SC_METHOD (genMealy );96 SC_METHOD (genMealy_write); 97 97 dont_initialize (); 98 98 sensitive << (*(in_CLOCK)).neg(); // need internal register … … 106 106 # endif 107 107 } 108 109 if ((_param->_bypass_write_scheme == BYPASS_WRITE_FROM_ALU) and 110 (_param->_nb_bypass_write > 0)) 111 { 112 log_printf(INFO,Write_queue,FUNCTION,"Method - genMealy_bypass"); 113 114 SC_METHOD (genMealy_bypass); 115 dont_initialize (); 116 // sensitive << (*(in_CLOCK)).neg(); // don't need internal register 117 sensitive << (*(in_WRITE_QUEUE_IN_VAL )) 118 << (*(in_WRITE_QUEUE_IN_WRITE_RD )) 119 << (*(in_WRITE_QUEUE_IN_NUM_REG_RD )) 120 << (*(in_WRITE_QUEUE_IN_DATA_RD )) 121 << (*(in_WRITE_QUEUE_IN_WRITE_RE )) 122 << (*(in_WRITE_QUEUE_IN_NUM_REG_RE )) 123 << (*(in_WRITE_QUEUE_IN_DATA_RE )); 124 if (_param->_have_port_ooo_engine_id) 125 sensitive << (*(in_WRITE_QUEUE_IN_OOO_ENGINE_ID)); 126 127 128 # ifdef SYSTEMCASS_SPECIFIC 129 // List dependency information 130 # endif 131 } 108 132 109 133 #endif -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Write_queue/src/Write_queue_genMealy_write.cpp
r116 r118 20 20 21 21 #undef FUNCTION 22 #define FUNCTION "Write_queue::genMealy "23 void Write_queue::genMealy (void)22 #define FUNCTION "Write_queue::genMealy_write" 23 void Write_queue::genMealy_write (void) 24 24 { 25 25 log_begin(Write_queue,FUNCTION); -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Write_queue/src/Write_queue_genMoore.cpp
r117 r118 29 29 { 30 30 std::list<write_queue_entry_t *>::iterator it = _queue->begin(); 31 for (uint32_t i=0; i<_param->_nb_bypass_write; i++) 31 32 // first bypass is the write_queue_in 33 uint32_t first_index = ((_param->_bypass_write_scheme == BYPASS_WRITE_FROM_ALU)?1:0); 34 for (uint32_t i=first_index; i<_param->_nb_bypass_write; i++) 32 35 { 33 bool val = i < _queue->size(); 34 36 // before because first slot is on {GPR|SPR}_WRITE. Also, take next 37 if (it != _queue->end()) 38 it++; 39 40 uint32_t index = i; 41 // bool val = (i+1) < _queue->size(); 42 bool val = (it != _queue->end()); 43 35 44 if (val) 36 45 { 37 46 if (_param->_have_port_ooo_engine_id) 38 PORT_WRITE(out_BYPASS_WRITE_OOO_ENGINE_ID [i ], (*it)->_ooo_engine_id);39 PORT_WRITE(out_BYPASS_WRITE_GPR_NUM_REG [i ], (*it)->_num_reg_rd);40 PORT_WRITE(out_BYPASS_WRITE_GPR_DATA [i ], (*it)->_data_rd );41 PORT_WRITE(out_BYPASS_WRITE_SPR_NUM_REG [i ], (*it)->_num_reg_re);42 PORT_WRITE(out_BYPASS_WRITE_SPR_DATA [i ], (*it)->_data_re );47 PORT_WRITE(out_BYPASS_WRITE_OOO_ENGINE_ID [index], (*it)->_ooo_engine_id); 48 PORT_WRITE(out_BYPASS_WRITE_GPR_NUM_REG [index], (*it)->_num_reg_rd); 49 PORT_WRITE(out_BYPASS_WRITE_GPR_DATA [index], (*it)->_data_rd ); 50 PORT_WRITE(out_BYPASS_WRITE_SPR_NUM_REG [index], (*it)->_num_reg_re); 51 PORT_WRITE(out_BYPASS_WRITE_SPR_DATA [index], (*it)->_data_re ); 43 52 } 44 53 #ifdef SYSTEMC_VHDL_COMPATIBILITY … … 46 55 { 47 56 if (_param->_have_port_ooo_engine_id) 48 PORT_WRITE(out_BYPASS_WRITE_OOO_ENGINE_ID [i ], 0);49 PORT_WRITE(out_BYPASS_WRITE_GPR_NUM_REG [i ], 0);50 PORT_WRITE(out_BYPASS_WRITE_GPR_DATA [i ], 0);51 PORT_WRITE(out_BYPASS_WRITE_SPR_NUM_REG [i ], 0);52 PORT_WRITE(out_BYPASS_WRITE_SPR_DATA [i ], 0);57 PORT_WRITE(out_BYPASS_WRITE_OOO_ENGINE_ID [index], 0); 58 PORT_WRITE(out_BYPASS_WRITE_GPR_NUM_REG [index], 0); 59 PORT_WRITE(out_BYPASS_WRITE_GPR_DATA [index], 0); 60 PORT_WRITE(out_BYPASS_WRITE_SPR_NUM_REG [index], 0); 61 PORT_WRITE(out_BYPASS_WRITE_SPR_DATA [index], 0); 53 62 } 54 63 #endif 55 64 56 PORT_WRITE(out_BYPASS_WRITE_GPR_VAL [i], val and (*it)->_write_rd ); 57 PORT_WRITE(out_BYPASS_WRITE_SPR_VAL [i], val and (*it)->_write_re ); 58 59 if (it != _queue->end()) 60 it++; 65 PORT_WRITE(out_BYPASS_WRITE_GPR_VAL [index], val and (*it)->_write_rd ); 66 PORT_WRITE(out_BYPASS_WRITE_SPR_VAL [index], val and (*it)->_write_re ); 61 67 } 62 68 }
Note: See TracChangeset
for help on using the changeset viewer.