Changeset 109 for trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit
- Timestamp:
- Feb 16, 2009, 9:28:31 PM (15 years ago)
- Location:
- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/Makefile.deps
r81 r109 14 14 endif 15 15 16 ifndef Priority 17 include $(DIR_MORPHEO)/Behavioural/Generic/Priority/Makefile.deps 18 endif 19 16 20 #-----[ Directory ]---------------------------------------- 17 21 18 Free_List_unit_DIR 22 Free_List_unit_DIR = $(DIR_MORPHEO)/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit 19 23 20 24 #-----[ Library ]------------------------------------------ 21 25 22 Free_List_unit_LIBRARY = -lFree_List_unit \ 26 Free_List_unit_LIBRARY = -lFree_List_unit \ 27 $(Priority_LIBRARY) \ 23 28 $(Behavioural_LIBRARY) 24 29 25 Free_List_unit_DIR_LIBRARY = -L$(Free_List_unit_DIR)/lib \ 30 Free_List_unit_DIR_LIBRARY = -L$(Free_List_unit_DIR)/lib \ 31 $(Priority_DIR_LIBRARY) \ 26 32 $(Behavioural_DIR_LIBRARY) 27 33 … … 31 37 @\ 32 38 $(MAKE) Behavioural_library; \ 39 $(MAKE) Priority_library; \ 33 40 $(MAKE) --directory=$(Free_List_unit_DIR) --makefile=Makefile; 34 41 … … 36 43 @\ 37 44 $(MAKE) Behavioural_library_clean; \ 45 $(MAKE) Priority_library_clean; \ 38 46 $(MAKE) --directory=$(Free_List_unit_DIR) --makefile=Makefile clean; -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/SelfTest/src/test.cpp
r88 r109 7 7 */ 8 8 9 #define NB_ITERATION 1 9 #define NB_ITERATION 16 10 10 #define CYCLE_MAX (128*NB_ITERATION) 11 11 … … 190 190 TEST(bool, gpr_free[reg],true); 191 191 192 Tgeneral_address_t bank = reg >> _param->_bank_gpr_size_slot;193 TEST(bool, (bank >= (i*_param->_nb_bank_by_pop)) and (bank < ((i+1)*_param->_nb_bank_by_pop)), true);192 // Tgeneral_address_t bank = reg >> _param->_bank_gpr_size_slot; 193 // TEST(bool, (bank >= (i*_param->_nb_bank_by_pop)) and (bank < ((i+1)*_param->_nb_bank_by_pop)), true); 194 194 195 195 gpr_free[reg] = false; … … 202 202 TEST(bool,spr_free[reg],true); 203 203 204 Tspecial_address_t bank = reg >> _param->_bank_spr_size_slot;205 TEST(bool, (bank >= (i*_param->_nb_bank_by_pop)) and (bank < ((i+1)*_param->_nb_bank_by_pop)), true);204 // Tspecial_address_t bank = reg >> _param->_bank_spr_size_slot; 205 // TEST(bool, (bank >= (i*_param->_nb_bank_by_pop)) and (bank < ((i+1)*_param->_nb_bank_by_pop)), true); 206 206 207 207 spr_free[reg] = false; -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/include/Free_List_unit.h
r108 r109 28 28 #endif 29 29 #include "Behavioural/include/Usage.h" 30 31 #include "Behavioural/Generic/Priority/include/Priority.h" 30 32 31 33 namespace morpheo { … … 83 85 84 86 // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 87 private : generic::priority::Priority * _priority_gpr; 88 private : generic::priority::Priority * _priority_spr; 85 89 86 90 // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 89 93 90 94 // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 91 private : uint32_t reg_BANK_PRIORITY;92 93 95 private : Tcontrol_t * internal_POP_ACK ; //[nb_pop] 94 96 private : uint32_t * internal_POP_GPR_BANK ; //[nb_pop] -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/include/Parameters.h
r88 r109 37 37 //public : uint32_t _size_special_register; 38 38 39 public : uint32_t _nb_bank_by_pop ;39 // public : uint32_t _nb_bank_by_pop ; 40 40 public : uint32_t _bank_gpr_nb_slot ; 41 41 public : uint32_t _bank_gpr_size_slot ; -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/src/Free_List_unit_allocation.cpp
r88 r109 101 101 } 102 102 // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 103 _priority_gpr = new generic::priority::Priority (_name+"_priority_gpr", 104 _param->_priority, 105 _param->_nb_bank, 106 _param->_nb_bank); 107 108 _priority_spr = new generic::priority::Priority (_name+"_priority_spr", 109 _param->_priority, 110 _param->_nb_bank, 111 _param->_nb_bank); 103 112 104 113 #ifdef POSITION -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/src/Free_List_unit_deallocation.cpp
r88 r109 58 58 59 59 // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 60 61 delete _component; 62 60 delete _priority_gpr; 61 delete _priority_spr; 62 63 delete _component; 64 63 65 log_printf(FUNC,Free_List_unit,FUNCTION,"End"); 64 66 }; -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/src/Free_List_unit_genMealy_pop.cpp
r108 r109 26 26 log_function(Free_List_unit,FUNCTION,_name.c_str()); 27 27 28 std::list<generic::priority::select_t> * select_gpr = _priority_gpr->select(); 29 std::list<generic::priority::select_t>::iterator it_gpr=select_gpr->begin(); 30 31 std::list<generic::priority::select_t> * select_spr = _priority_spr->select(); 32 std::list<generic::priority::select_t>::iterator it_spr=select_spr->begin(); 33 28 34 for (uint32_t i=0; i<_param->_nb_pop; i++) 29 35 { 30 36 log_printf(TRACE,Free_List_unit,FUNCTION," * POP [%d]",i); 31 32 uint32_t offset = i*_param->_nb_bank_by_pop; 33 37 34 38 // GPR 35 39 bool gpr_ack = not PORT_READ(in_POP_GPR_VAL[i]); 36 40 37 41 log_printf(TRACE,Free_List_unit,FUNCTION," * GPR_VAL : %d",PORT_READ(in_POP_GPR_VAL[i])); 38 42 39 43 if (not gpr_ack) 40 for (uint32_t j=0; j<_param->_nb_bank_by_pop; j++) 41 { 42 uint32_t bank = offset+((j+reg_BANK_PRIORITY)%_param->_nb_bank_by_pop 43 ); 44 45 log_printf(TRACE,Free_List_unit,FUNCTION," * bank : %d",bank); 46 47 if (not _gpr_list[bank].empty()) 48 { 49 // find 50 log_printf(TRACE,Free_List_unit,FUNCTION," * find : %d",_gpr_list[bank].front()); 51 52 gpr_ack = true; 53 internal_POP_GPR_BANK [i] = bank; 54 PORT_WRITE(out_POP_GPR_NUM_REG [i], 55 //(bank << _param->_shift) | // only in VHDL 56 _gpr_list[bank].front()); 57 58 break; 59 } 60 } 44 { 45 // scan all bank 46 for (; 47 it_gpr!=select_gpr->end(); 48 ++it_gpr) 49 { 50 uint32_t num_bank = it_gpr->grp; 51 52 log_printf(TRACE,Free_List_unit,FUNCTION," * num_bank: %d",num_bank); 53 54 if (not _gpr_list[num_bank].empty()) 55 { 56 // find 57 log_printf(TRACE,Free_List_unit,FUNCTION," * find : %d",_gpr_list[num_bank].front()); 58 59 gpr_ack = true; 60 internal_POP_GPR_BANK [i] = num_bank; 61 PORT_WRITE(out_POP_GPR_NUM_REG [i], 62 //(num_bank << _param->_shift) | // only in VHDL 63 _gpr_list[num_bank].front()); 64 65 ++it_gpr; 66 break; 67 } 68 } 69 } 61 70 62 71 // SPR 63 72 bool spr_ack = not PORT_READ(in_POP_SPR_VAL[i]); 73 74 log_printf(TRACE,Free_List_unit,FUNCTION," * SPR_VAL : %d",PORT_READ(in_POP_SPR_VAL[i])); 75 76 if (not spr_ack) 77 { 78 // scan all bank 79 for (; 80 it_spr!=select_spr->end(); 81 ++it_spr) 82 { 83 uint32_t num_bank = it_spr->grp; 84 85 log_printf(TRACE,Free_List_unit,FUNCTION," * num_bank: %d",num_bank); 86 87 if (not _spr_list[num_bank].empty()) 88 { 89 // find 90 log_printf(TRACE,Free_List_unit,FUNCTION," * find : %d",_spr_list[num_bank].front()); 91 92 spr_ack = true; 93 internal_POP_SPR_BANK [i] = num_bank; 94 PORT_WRITE(out_POP_SPR_NUM_REG [i], 95 //(num_bank << _param->_shift) | // only in VHDL 96 _spr_list[num_bank].front()); 97 98 ++it_spr; 99 break; 100 } 101 } 102 } 64 103 65 log_printf(TRACE,Free_List_unit,FUNCTION," * SPR_VAL : %d",PORT_READ(in_POP_SPR_VAL[i]));66 67 if (not spr_ack)68 for (uint32_t j=0; j<_param->_nb_bank_by_pop; j++)69 {70 uint32_t bank = offset+((j+reg_BANK_PRIORITY)%_param->_nb_bank_by_pop71 );72 73 log_printf(TRACE,Free_List_unit,FUNCTION," * bank : %d",bank);74 75 if (not _spr_list[bank].empty())76 {77 // find78 log_printf(TRACE,Free_List_unit,FUNCTION," * find : %d",_spr_list[bank].front());79 80 spr_ack = true;81 internal_POP_SPR_BANK [i] = bank;82 PORT_WRITE(out_POP_SPR_NUM_REG [i],83 //(bank << _param->_shift) | // only in VHDL84 _spr_list[bank].front());85 86 break;87 }88 }89 104 90 105 internal_POP_ACK [i] = gpr_ack and spr_ack; 91 92 106 PORT_WRITE(out_POP_ACK [i], internal_POP_ACK [i]); 93 107 } 108 109 // for (uint32_t i=0; i<_param->_nb_pop; i++) 110 // { 111 // log_printf(TRACE,Free_List_unit,FUNCTION," * POP [%d]",i); 112 113 // uint32_t offset = (i*_param->_nb_bank_by_pop) + reg_BANK_PRIORITY; 114 115 // // GPR 116 // bool gpr_ack = not PORT_READ(in_POP_GPR_VAL[i]); 117 118 // log_printf(TRACE,Free_List_unit,FUNCTION," * GPR_VAL : %d",PORT_READ(in_POP_GPR_VAL[i])); 119 120 // if (not gpr_ack) 121 // { 122 // for (uint32_t j=0; j<_param->_nb_bank_by_pop; j++) 123 // { 124 // uint32_t bank = (offset+((j+reg_BANK_BY_POP_PRIORITY)%_param->_nb_bank_by_pop))%_param->_nb_bank; 125 126 // log_printf(TRACE,Free_List_unit,FUNCTION," * bank : %d",bank); 127 128 // if (not _gpr_list[bank].empty()) 129 // { 130 // // find 131 // log_printf(TRACE,Free_List_unit,FUNCTION," * find : %d",_gpr_list[bank].front()); 132 133 // gpr_ack = true; 134 // internal_POP_GPR_BANK [i] = bank; 135 // PORT_WRITE(out_POP_GPR_NUM_REG [i], 136 // //(bank << _param->_shift) | // only in VHDL 137 // _gpr_list[bank].front()); 138 139 // break; 140 // } 141 // } 142 // } 143 144 // // SPR 145 // bool spr_ack = not PORT_READ(in_POP_SPR_VAL[i]); 146 147 // log_printf(TRACE,Free_List_unit,FUNCTION," * SPR_VAL : %d",PORT_READ(in_POP_SPR_VAL[i])); 148 149 // if (not spr_ack) 150 // { 151 // uint32_t offset = (i*_param->_nb_bank_by_pop) + reg_BANK_PRIORITY; 152 153 // for (uint32_t j=0; j<_param->_nb_bank_by_pop; j++) 154 // { 155 // uint32_t bank = (offset+((j+reg_BANK_BY_POP_PRIORITY)%_param->_nb_bank_by_pop))%_param->_nb_bank; 156 157 // log_printf(TRACE,Free_List_unit,FUNCTION," * bank : %d",bank); 158 159 // if (not _spr_list[bank].empty()) 160 // { 161 // // find 162 // log_printf(TRACE,Free_List_unit,FUNCTION," * find : %d",_spr_list[bank].front()); 163 164 // spr_ack = true; 165 // internal_POP_SPR_BANK [i] = bank; 166 // PORT_WRITE(out_POP_SPR_NUM_REG [i], 167 // //(bank << _param->_shift) | // only in VHDL 168 // _spr_list[bank].front()); 169 170 // break; 171 // } 172 // } 173 // } 174 175 // internal_POP_ACK [i] = gpr_ack and spr_ack; 176 177 // PORT_WRITE(out_POP_ACK [i], internal_POP_ACK [i]); 178 // } 94 179 95 180 -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/src/Free_List_unit_transition.cpp
r108 r109 28 28 if (PORT_READ(in_NRESET) == 0) 29 29 { 30 reg_BANK_PRIORITY = 0; 30 _priority_gpr->reset(); 31 _priority_spr->reset(); 32 31 33 for (uint32_t i=0; i<_param->_nb_bank; i++) 32 34 { … … 37 39 else 38 40 { 41 _priority_gpr->transition(); 42 _priority_spr->transition(); 43 39 44 // ================================================== 40 45 // =====[ POP ]====================================== … … 76 81 _spr_list [internal_PUSH_SPR_BANK[i]].push_back(PORT_READ(in_PUSH_SPR_NUM_REG [i])); 77 82 } 78 79 if (_param->_priority == PRIORITY_ROUND_ROBIN)80 reg_BANK_PRIORITY = (reg_BANK_PRIORITY+1)%_param->_nb_bank_by_pop;81 83 82 84 #if (DEBUG >= DEBUG_TRACE) and (DEBUG_Free_List_unit == true) -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/src/Parameters.cpp
r108 r109 45 45 uint32_t size_special_register = log2(nb_special_register); 46 46 47 _nb_bank_by_pop = _nb_bank / _nb_pop;47 // _nb_bank_by_pop = _nb_bank / _nb_pop; 48 48 49 49 uint32_t gpr_nb_slot = nb_general_register - nb_thread*_nb_general_register_logic;
Note: See TracChangeset
for help on using the changeset viewer.