Changeset 97 for trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Read_queue/src/Read_queue_vhdl_body.cpp
- Timestamp:
- Dec 19, 2008, 4:34:00 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Read_queue/src/Read_queue_vhdl_body.cpp
r81 r97 22 22 { 23 23 log_printf(FUNC,Read_queue,"vhdl_body","Begin"); 24 vhdl->set_body ("");25 vhdl->set_body( "");26 vhdl->set_body( "-----------------------------------");27 vhdl->set_body( "-- Instance queue ");28 vhdl->set_body( "-----------------------------------");29 vhdl->set_body( "");30 31 vhdl->set_body( "instance_"+_name+"_queue : "+_name+"_queue");32 vhdl->set_body( "port map (");33 vhdl->set_body( "\tin_CLOCK \t=>\t in_CLOCK ");34 vhdl->set_body( "\t, in_NRESET \t=>\t in_NRESET");35 vhdl->set_body( "\t, in_INSERT_VAL \t=>\tinternal_QUEUE_INSERT_VAL");36 vhdl->set_body( "\t,out_INSERT_ACK \t=>\tinternal_QUEUE_INSERT_ACK");37 vhdl->set_body( "\t, in_INSERT_DATA \t=>\tinternal_QUEUE_INSERT_DATA");38 vhdl->set_body( "\t,out_RETIRE_VAL \t=>\tinternal_QUEUE_RETIRE_VAL");39 vhdl->set_body( "\t, in_RETIRE_ACK \t=>\tinternal_QUEUE_RETIRE_ACK");40 vhdl->set_body( "\t,out_RETIRE_DATA \t=>\tinternal_QUEUE_RETIRE_DATA");41 vhdl->set_body( ");");42 43 vhdl->set_body( "");44 vhdl->set_body( "-----------------------------------");45 vhdl->set_body( "-- Queue_data ");46 vhdl->set_body( "-----------------------------------");47 vhdl->set_body( "");24 vhdl->set_body(0,""); 25 vhdl->set_body(0,""); 26 vhdl->set_body(0,"-----------------------------------"); 27 vhdl->set_body(0,"-- Instance queue "); 28 vhdl->set_body(0,"-----------------------------------"); 29 vhdl->set_body(0,""); 30 31 vhdl->set_body(0,"instance_"+_name+"_queue : "+_name+"_queue"); 32 vhdl->set_body(0,"port map ("); 33 vhdl->set_body(1," in_CLOCK \t=>\t in_CLOCK "); 34 vhdl->set_body(1,", in_NRESET \t=>\t in_NRESET"); 35 vhdl->set_body(1,", in_INSERT_VAL \t=>\tinternal_QUEUE_INSERT_VAL"); 36 vhdl->set_body(1,",out_INSERT_ACK \t=>\tinternal_QUEUE_INSERT_ACK"); 37 vhdl->set_body(1,", in_INSERT_DATA \t=>\tinternal_QUEUE_INSERT_DATA"); 38 vhdl->set_body(1,",out_RETIRE_VAL \t=>\tinternal_QUEUE_RETIRE_VAL"); 39 vhdl->set_body(1,", in_RETIRE_ACK \t=>\tinternal_QUEUE_RETIRE_ACK"); 40 vhdl->set_body(1,",out_RETIRE_DATA \t=>\tinternal_QUEUE_RETIRE_DATA"); 41 vhdl->set_body(0,");"); 42 43 vhdl->set_body(0,""); 44 vhdl->set_body(0,"-----------------------------------"); 45 vhdl->set_body(0,"-- Queue_data "); 46 vhdl->set_body(0,"-----------------------------------"); 47 vhdl->set_body(0,""); 48 48 49 49 uint32_t min = 0; … … 53 53 { 54 54 max = min-1+_param->_size_context_id; 55 vhdl->set_body ("internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_CONTEXT_ID;");55 vhdl->set_body(0,"internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_CONTEXT_ID;"); 56 56 min = max+1; 57 57 } … … 59 59 { 60 60 max = min-1+_param->_size_front_end_id; 61 vhdl->set_body ("internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_FRONT_END_ID;");61 vhdl->set_body(0,"internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_FRONT_END_ID;"); 62 62 min = max+1; 63 63 } … … 65 65 { 66 66 max = min-1+_param->_size_ooo_engine_id; 67 vhdl->set_body ("internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_OOO_ENGINE_ID;");67 vhdl->set_body(0,"internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_OOO_ENGINE_ID;"); 68 68 min = max+1; 69 69 } 70 if(_param->_have_port_rob_ id)71 { 72 max = min-1+_param->_size_rob_ id;73 vhdl->set_body ("internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_ROB_ID;");70 if(_param->_have_port_rob_ptr ) 71 { 72 max = min-1+_param->_size_rob_ptr ; 73 vhdl->set_body(0,"internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_ROB_ID;"); 74 74 min = max+1; 75 75 } 76 76 77 77 max = min-1+_param->_size_operation; 78 vhdl->set_body ("internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_OPERATION;");78 vhdl->set_body(0,"internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_OPERATION;"); 79 79 min = max+1; 80 80 81 81 max = min-1+_param->_size_type; 82 vhdl->set_body ("internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_TYPE;");83 min = max+1; 84 85 max = min; 86 vhdl->set_body ("internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_HAS_IMMEDIAT;");82 vhdl->set_body(0,"internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_TYPE;"); 83 min = max+1; 84 85 max = min; 86 vhdl->set_body(0,"internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_HAS_IMMEDIAT;"); 87 87 min = max+1; 88 88 89 89 max = min-1+_param->_size_general_data; 90 vhdl->set_body ("internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_IMMEDIAT;");91 min = max+1; 92 93 max = min; 94 vhdl->set_body ("internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_READ_RA;");90 vhdl->set_body(0,"internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_IMMEDIAT;"); 91 min = max+1; 92 93 max = min; 94 vhdl->set_body(0,"internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_READ_RA;"); 95 95 min = max+1; 96 96 97 97 max = min-1+_param->_size_general_register; 98 vhdl->set_body ("internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_NUM_REG_RA;");99 min = max+1; 100 101 max = min; 102 vhdl->set_body ("internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_READ_RB;");98 vhdl->set_body(0,"internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_NUM_REG_RA;"); 99 min = max+1; 100 101 max = min; 102 vhdl->set_body(0,"internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_READ_RB;"); 103 103 min = max+1; 104 104 105 105 max = min-1+_param->_size_general_register; 106 vhdl->set_body ("internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_NUM_REG_RB;");107 min = max+1; 108 109 max = min; 110 vhdl->set_body ("internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_READ_RC;");106 vhdl->set_body(0,"internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_NUM_REG_RB;"); 107 min = max+1; 108 109 max = min; 110 vhdl->set_body(0,"internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_READ_RC;"); 111 111 min = max+1; 112 112 113 113 max = min-1+_param->_size_special_register; 114 vhdl->set_body ("internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_NUM_REG_RC;");115 min = max+1; 116 117 max = min; 118 vhdl->set_body ("internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_WRITE_RD;");114 vhdl->set_body(0,"internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_NUM_REG_RC;"); 115 min = max+1; 116 117 max = min; 118 vhdl->set_body(0,"internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_WRITE_RD;"); 119 119 min = max+1; 120 120 121 121 max = min-1+_param->_size_general_register; 122 vhdl->set_body ("internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_NUM_REG_RD;");123 min = max+1; 124 125 max = min; 126 vhdl->set_body ("internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_WRITE_RE;");122 vhdl->set_body(0,"internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_NUM_REG_RD;"); 123 min = max+1; 124 125 max = min; 126 vhdl->set_body(0,"internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_WRITE_RE;"); 127 127 min = max+1; 128 128 129 129 max = min-1+_param->_size_special_register; 130 vhdl->set_body ("internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_NUM_REG_RE;");131 min = max+1; 132 133 vhdl->set_body ("internal_QUEUE_RETIRE_ACK <= internal_READ_QUEUE_OUT_VAL and in_READ_QUEUE_OUT_ACK;");134 135 vhdl->set_body( "");136 vhdl->set_body( "-----------------------------------");137 vhdl->set_body( "-- Interface read");138 vhdl->set_body( "-----------------------------------");139 vhdl->set_body( "");140 vhdl->set_body( "-- GPR");141 vhdl->set_body ("out_GPR_READ_0_VAL <= internal_QUEUE_RETIRE_VAL and internal_READ_RA_VAL;");142 vhdl->set_body ("out_GPR_READ_1_VAL <= internal_QUEUE_RETIRE_VAL and internal_READ_RB_VAL;");130 vhdl->set_body(0,"internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_NUM_REG_RE;"); 131 min = max+1; 132 133 vhdl->set_body(0,"internal_QUEUE_RETIRE_ACK <= internal_READ_QUEUE_OUT_VAL and in_READ_QUEUE_OUT_ACK;"); 134 135 vhdl->set_body(0,""); 136 vhdl->set_body(0,"-----------------------------------"); 137 vhdl->set_body(0,"-- Interface read"); 138 vhdl->set_body(0,"-----------------------------------"); 139 vhdl->set_body(0,""); 140 vhdl->set_body(0,"-- GPR"); 141 vhdl->set_body(0,"out_GPR_READ_0_VAL <= internal_QUEUE_RETIRE_VAL and internal_READ_RA_VAL;"); 142 vhdl->set_body(0,"out_GPR_READ_1_VAL <= internal_QUEUE_RETIRE_VAL and internal_READ_RB_VAL;"); 143 143 if(_param->_have_port_ooo_engine_id) 144 144 { 145 vhdl->set_body ("out_GPR_READ_0_OOO_ENGINE_ID <= internal_OOO_ENGINE_ID;");146 vhdl->set_body ("out_GPR_READ_1_OOO_ENGINE_ID <= internal_OOO_ENGINE_ID;");147 } 148 vhdl->set_body ("out_GPR_READ_0_NUM_REG <= internal_NUM_REG_RA;");149 vhdl->set_body ("out_GPR_READ_1_NUM_REG <= internal_NUM_REG_RB;");150 vhdl->set_body( "");151 152 vhdl->set_body( "-- SPR");153 vhdl->set_body ("out_SPR_READ_0_VAL <= internal_QUEUE_RETIRE_VAL and internal_READ_RC_VAL;");145 vhdl->set_body(0,"out_GPR_READ_0_OOO_ENGINE_ID <= internal_OOO_ENGINE_ID;"); 146 vhdl->set_body(0,"out_GPR_READ_1_OOO_ENGINE_ID <= internal_OOO_ENGINE_ID;"); 147 } 148 vhdl->set_body(0,"out_GPR_READ_0_NUM_REG <= internal_NUM_REG_RA;"); 149 vhdl->set_body(0,"out_GPR_READ_1_NUM_REG <= internal_NUM_REG_RB;"); 150 vhdl->set_body(0,""); 151 152 vhdl->set_body(0,"-- SPR"); 153 vhdl->set_body(0,"out_SPR_READ_0_VAL <= internal_QUEUE_RETIRE_VAL and internal_READ_RC_VAL;"); 154 154 if(_param->_have_port_ooo_engine_id) 155 155 { 156 vhdl->set_body ("out_SPR_READ_0_OOO_ENGINE_ID <= internal_OOO_ENGINE_ID;");157 } 158 vhdl->set_body ("out_SPR_READ_0_NUM_REG <= internal_NUM_REG_RC;");159 160 vhdl->set_body( "");161 vhdl->set_body( "-----------------------------------");162 vhdl->set_body( "-- Interface read_queue_out");163 vhdl->set_body( "-----------------------------------");164 vhdl->set_body( "");156 vhdl->set_body(0,"out_SPR_READ_0_OOO_ENGINE_ID <= internal_OOO_ENGINE_ID;"); 157 } 158 vhdl->set_body(0,"out_SPR_READ_0_NUM_REG <= internal_NUM_REG_RC;"); 159 160 vhdl->set_body(0,""); 161 vhdl->set_body(0,"-----------------------------------"); 162 vhdl->set_body(0,"-- Interface read_queue_out"); 163 vhdl->set_body(0,"-----------------------------------"); 164 vhdl->set_body(0,""); 165 165 166 166 if(_param->_have_port_context_id ) 167 vhdl->set_body ("out_READ_QUEUE_OUT_CONTEXT_ID <= internal_CONTEXT_ID ;");167 vhdl->set_body(0,"out_READ_QUEUE_OUT_CONTEXT_ID <= internal_CONTEXT_ID ;"); 168 168 if(_param->_have_port_front_end_id ) 169 vhdl->set_body ("out_READ_QUEUE_OUT_FRONT_END_ID <= internal_FRONT_END_ID ;");169 vhdl->set_body(0,"out_READ_QUEUE_OUT_FRONT_END_ID <= internal_FRONT_END_ID ;"); 170 170 if(_param->_have_port_ooo_engine_id ) 171 vhdl->set_body ("out_READ_QUEUE_OUT_OOO_ENGINE_ID <= internal_OOO_ENGINE_ID;");172 if(_param->_have_port_rob_ id)173 vhdl->set_body ("out_READ_QUEUE_OUT_ROB_ID <= internal_ROB_ID ;");174 vhdl->set_body ("out_READ_QUEUE_OUT_OPERATION <= internal_OPERATION ;");175 vhdl->set_body ("out_READ_QUEUE_OUT_TYPE <= internal_TYPE ;");176 vhdl->set_body ("out_READ_QUEUE_OUT_HAS_IMMEDIAT <= internal_HAS_IMMEDIAT ;");177 vhdl->set_body ("out_READ_QUEUE_OUT_IMMEDIAT <= internal_IMMEDIAT ;");178 vhdl->set_body ("out_READ_QUEUE_OUT_READ_RA <= internal_READ_RA ;");179 vhdl->set_body ("out_READ_QUEUE_OUT_NUM_REG_RA <= internal_NUM_REG_RA ;");180 vhdl->set_body ("out_READ_QUEUE_OUT_DATA_RA_VAL <= internal_NEXT_DATA_RA_VAL;");181 vhdl->set_body ("out_READ_QUEUE_OUT_DATA_RA <= internal_NEXT_DATA_RA ;");182 vhdl->set_body ("out_READ_QUEUE_OUT_READ_RB <= internal_READ_RB ;");183 vhdl->set_body ("out_READ_QUEUE_OUT_NUM_REG_RB <= internal_NUM_REG_RB ;");184 vhdl->set_body ("out_READ_QUEUE_OUT_DATA_RB_VAL <= internal_NEXT_DATA_RB_VAL;");185 vhdl->set_body ("out_READ_QUEUE_OUT_DATA_RB <= internal_NEXT_DATA_RB ;");186 vhdl->set_body ("out_READ_QUEUE_OUT_READ_RC <= internal_READ_RC ;");187 vhdl->set_body ("out_READ_QUEUE_OUT_NUM_REG_RC <= internal_NUM_REG_RC ;");188 vhdl->set_body ("out_READ_QUEUE_OUT_DATA_RC_VAL <= internal_NEXT_DATA_RC_VAL;");189 vhdl->set_body ("out_READ_QUEUE_OUT_DATA_RC <= internal_NEXT_DATA_RC ;");190 vhdl->set_body ("out_READ_QUEUE_OUT_WRITE_RD <= internal_WRITE_RD ;");191 vhdl->set_body ("out_READ_QUEUE_OUT_NUM_REG_RD <= internal_NUM_REG_RD ;");192 vhdl->set_body ("out_READ_QUEUE_OUT_WRITE_RE <= internal_WRITE_RE ;");193 vhdl->set_body ("out_READ_QUEUE_OUT_NUM_REG_RE <= internal_NUM_REG_RE ;");194 195 vhdl->set_body( "");196 vhdl->set_body( "-----------------------------------");197 vhdl->set_body( "-- next reg update");198 vhdl->set_body( "-----------------------------------");199 vhdl->set_body( "");200 vhdl->set_body( "-- read_rx_val - 1 : must access at the registerFile (after access, is set at 0)");201 202 { 203 vhdl->set_body( "");204 vhdl->set_body( "internal_NEXT_READ_RA_VAL <=");205 vhdl->set_body( "\t'0' when");206 // bypass 207 vhdl->set_body( "\t\t-- check bypass");208 for (int32_t i=_param->_nb_gpr_write-1; i>=0 ; i--) 209 { 210 std::string cmp; 211 212 if (_param->_have_port_ooo_engine_id) 213 cmp = "and (in_GPR_WRITE_"+toString(i)+"_OOO_ENGINE_ID=internal_OOO_ENGINE_ID) "; 214 else 215 cmp = ""; 216 217 vhdl->set_body( "\t\t((in_GPR_WRITE_"+toString(i)+"_VAL='1') "+cmp+"and (internal_NUM_REG_RA=in_GPR_WRITE_"+toString(i)+"_NUM_REG)) or");218 } 219 vhdl->set_body( "\t\tfalse else");220 vhdl->set_body( "\tinternal_READ_RA_VAL and not in_GPR_READ_0_ACK;");221 } 222 { 223 vhdl->set_body( "");224 vhdl->set_body( "internal_NEXT_READ_RB_VAL <=");225 vhdl->set_body( "\t'0' when");226 // bypass 227 vhdl->set_body( "\t\t-- check bypass");228 for (int32_t i=_param->_nb_gpr_write-1; i>=0 ; i--) 229 { 230 std::string cmp; 231 232 if (_param->_have_port_ooo_engine_id) 233 cmp = "and (in_GPR_WRITE_"+toString(i)+"_OOO_ENGINE_ID=internal_OOO_ENGINE_ID) "; 234 else 235 cmp = ""; 236 237 vhdl->set_body( "\t\t((in_GPR_WRITE_"+toString(i)+"_VAL='1') "+cmp+"and (internal_NUM_REG_RB=in_GPR_WRITE_"+toString(i)+"_NUM_REG)) or");238 } 239 vhdl->set_body( "\t\tfalse else");240 vhdl->set_body( "\tinternal_READ_RB_VAL and not in_GPR_READ_1_ACK;");241 } 242 { 243 vhdl->set_body( "");244 vhdl->set_body( "internal_NEXT_READ_RC_VAL <=");245 vhdl->set_body( "\t'0' when");246 // bypass 247 vhdl->set_body( "\t\t-- check bypass");171 vhdl->set_body(0,"out_READ_QUEUE_OUT_OOO_ENGINE_ID <= internal_OOO_ENGINE_ID;"); 172 if(_param->_have_port_rob_ptr ) 173 vhdl->set_body(0,"out_READ_QUEUE_OUT_ROB_ID <= internal_ROB_ID ;"); 174 vhdl->set_body(0,"out_READ_QUEUE_OUT_OPERATION <= internal_OPERATION ;"); 175 vhdl->set_body(0,"out_READ_QUEUE_OUT_TYPE <= internal_TYPE ;"); 176 vhdl->set_body(0,"out_READ_QUEUE_OUT_HAS_IMMEDIAT <= internal_HAS_IMMEDIAT ;"); 177 vhdl->set_body(0,"out_READ_QUEUE_OUT_IMMEDIAT <= internal_IMMEDIAT ;"); 178 // vhdl->set_body(0,"out_READ_QUEUE_OUT_READ_RA <= internal_READ_RA ;"); 179 vhdl->set_body(0,"out_READ_QUEUE_OUT_NUM_REG_RA <= internal_NUM_REG_RA ;"); 180 vhdl->set_body(0,"out_READ_QUEUE_OUT_DATA_RA_VAL <= internal_NEXT_DATA_RA_VAL;"); 181 vhdl->set_body(0,"out_READ_QUEUE_OUT_DATA_RA <= internal_NEXT_DATA_RA ;"); 182 // vhdl->set_body(0,"out_READ_QUEUE_OUT_READ_RB <= internal_READ_RB ;"); 183 vhdl->set_body(0,"out_READ_QUEUE_OUT_NUM_REG_RB <= internal_NUM_REG_RB ;"); 184 vhdl->set_body(0,"out_READ_QUEUE_OUT_DATA_RB_VAL <= internal_NEXT_DATA_RB_VAL;"); 185 vhdl->set_body(0,"out_READ_QUEUE_OUT_DATA_RB <= internal_NEXT_DATA_RB ;"); 186 // vhdl->set_body(0,"out_READ_QUEUE_OUT_READ_RC <= internal_READ_RC ;"); 187 vhdl->set_body(0,"out_READ_QUEUE_OUT_NUM_REG_RC <= internal_NUM_REG_RC ;"); 188 vhdl->set_body(0,"out_READ_QUEUE_OUT_DATA_RC_VAL <= internal_NEXT_DATA_RC_VAL;"); 189 vhdl->set_body(0,"out_READ_QUEUE_OUT_DATA_RC <= internal_NEXT_DATA_RC ;"); 190 vhdl->set_body(0,"out_READ_QUEUE_OUT_WRITE_RD <= internal_WRITE_RD ;"); 191 vhdl->set_body(0,"out_READ_QUEUE_OUT_NUM_REG_RD <= internal_NUM_REG_RD ;"); 192 vhdl->set_body(0,"out_READ_QUEUE_OUT_WRITE_RE <= internal_WRITE_RE ;"); 193 vhdl->set_body(0,"out_READ_QUEUE_OUT_NUM_REG_RE <= internal_NUM_REG_RE ;"); 194 195 vhdl->set_body(0,""); 196 vhdl->set_body(0,"-----------------------------------"); 197 vhdl->set_body(0,"-- next reg update"); 198 vhdl->set_body(0,"-----------------------------------"); 199 vhdl->set_body(0,""); 200 vhdl->set_body(0,"-- read_rx_val - 1 : must access at the registerFile (after access, is set at 0)"); 201 202 { 203 vhdl->set_body(0,""); 204 vhdl->set_body(0,"internal_NEXT_READ_RA_VAL <="); 205 vhdl->set_body(1,"'0' when"); 206 // bypass 207 vhdl->set_body(2,"-- check bypass"); 208 for (int32_t i=_param->_nb_gpr_write-1; i>=0 ; i--) 209 { 210 std::string cmp; 211 212 if (_param->_have_port_ooo_engine_id) 213 cmp = "and (in_GPR_WRITE_"+toString(i)+"_OOO_ENGINE_ID=internal_OOO_ENGINE_ID) "; 214 else 215 cmp = ""; 216 217 vhdl->set_body(2,"((in_GPR_WRITE_"+toString(i)+"_VAL='1') "+cmp+"and (internal_NUM_REG_RA=in_GPR_WRITE_"+toString(i)+"_NUM_REG)) or"); 218 } 219 vhdl->set_body(2,"false else"); 220 vhdl->set_body(1,"internal_READ_RA_VAL and not in_GPR_READ_0_ACK;"); 221 } 222 { 223 vhdl->set_body(0,""); 224 vhdl->set_body(0,"internal_NEXT_READ_RB_VAL <="); 225 vhdl->set_body(1,"'0' when"); 226 // bypass 227 vhdl->set_body(2,"-- check bypass"); 228 for (int32_t i=_param->_nb_gpr_write-1; i>=0 ; i--) 229 { 230 std::string cmp; 231 232 if (_param->_have_port_ooo_engine_id) 233 cmp = "and (in_GPR_WRITE_"+toString(i)+"_OOO_ENGINE_ID=internal_OOO_ENGINE_ID) "; 234 else 235 cmp = ""; 236 237 vhdl->set_body(2,"((in_GPR_WRITE_"+toString(i)+"_VAL='1') "+cmp+"and (internal_NUM_REG_RB=in_GPR_WRITE_"+toString(i)+"_NUM_REG)) or"); 238 } 239 vhdl->set_body(2,"false else"); 240 vhdl->set_body(1,"internal_READ_RB_VAL and not in_GPR_READ_1_ACK;"); 241 } 242 { 243 vhdl->set_body(0,""); 244 vhdl->set_body(0,"internal_NEXT_READ_RC_VAL <="); 245 vhdl->set_body(1,"'0' when"); 246 // bypass 247 vhdl->set_body(2,"-- check bypass"); 248 248 for (int32_t i=_param->_nb_spr_write-1; i>=0 ; i--) 249 249 { … … 255 255 cmp = ""; 256 256 257 vhdl->set_body( "\t\t((in_SPR_WRITE_"+toString(i)+"_VAL='1') "+cmp+"and (internal_NUM_REG_RC=in_SPR_WRITE_"+toString(i)+"_NUM_REG)) or");258 } 259 vhdl->set_body( "\t\tfalse else");260 vhdl->set_body( "\tinternal_READ_RC_VAL and not in_SPR_READ_0_ACK;");261 } 262 { 263 vhdl->set_body( "");264 vhdl->set_body( "internal_READ_QUEUE_OUT_VAL <= not internal_NEXT_READ_RA_VAL and not internal_NEXT_READ_RB_VAL and not internal_NEXT_READ_RC_VAL;");265 vhdl->set_body( " out_READ_QUEUE_OUT_VAL <= internal_READ_QUEUE_OUT_VAL and internal_QUEUE_RETIRE_VAL;");257 vhdl->set_body(2,"((in_SPR_WRITE_"+toString(i)+"_VAL='1') "+cmp+"and (internal_NUM_REG_RC=in_SPR_WRITE_"+toString(i)+"_NUM_REG)) or"); 258 } 259 vhdl->set_body(2,"false else"); 260 vhdl->set_body(1,"internal_READ_RC_VAL and not in_SPR_READ_0_ACK;"); 261 } 262 { 263 vhdl->set_body(0,""); 264 vhdl->set_body(0,"internal_READ_QUEUE_OUT_VAL <= not internal_NEXT_READ_RA_VAL and not internal_NEXT_READ_RB_VAL and not internal_NEXT_READ_RC_VAL;"); 265 vhdl->set_body(0," out_READ_QUEUE_OUT_VAL <= internal_READ_QUEUE_OUT_VAL and internal_QUEUE_RETIRE_VAL;"); 266 266 267 267 } 268 268 269 vhdl->set_body( "");270 vhdl->set_body( "-- data_rx_val - 1 : the read of registerFile is valid");271 272 { 273 vhdl->set_body( "");274 vhdl->set_body( "internal_NEXT_DATA_RA_VAL <=");275 vhdl->set_body( "\t'1' when");276 // bypass 277 vhdl->set_body( "\t\t-- check bypass");269 vhdl->set_body(0,""); 270 vhdl->set_body(0,"-- data_rx_val - 1 : the read of registerFile is valid"); 271 272 { 273 vhdl->set_body(0,""); 274 vhdl->set_body(0,"internal_NEXT_DATA_RA_VAL <="); 275 vhdl->set_body(1,"'1' when"); 276 // bypass 277 vhdl->set_body(2,"-- check bypass"); 278 278 for (int32_t i=_param->_nb_gpr_write-1; i>=0 ; i--) 279 279 { … … 285 285 cmp = ""; 286 286 287 vhdl->set_body( "\t\t((in_GPR_WRITE_"+toString(i)+"_VAL='1') "+cmp+"and (internal_NUM_REG_RA=in_GPR_WRITE_"+toString(i)+"_NUM_REG)) or");288 } 289 vhdl->set_body( "\t\tfalse else");290 vhdl->set_body( "\tinternal_DATA_RA_VAL or (internal_READ_RA_VAL and in_GPR_READ_0_ACK and in_GPR_READ_0_DATA_VAL);");291 } 292 { 293 vhdl->set_body( "");294 vhdl->set_body( "internal_NEXT_DATA_RB_VAL <=");295 vhdl->set_body( "\t'1' when");296 // bypass 297 vhdl->set_body( "\t\t-- check bypass");287 vhdl->set_body(2,"((in_GPR_WRITE_"+toString(i)+"_VAL='1') "+cmp+"and (internal_NUM_REG_RA=in_GPR_WRITE_"+toString(i)+"_NUM_REG)) or"); 288 } 289 vhdl->set_body(2,"false else"); 290 vhdl->set_body(1,"internal_DATA_RA_VAL or (internal_READ_RA_VAL and in_GPR_READ_0_ACK and in_GPR_READ_0_DATA_VAL);"); 291 } 292 { 293 vhdl->set_body(0,""); 294 vhdl->set_body(0,"internal_NEXT_DATA_RB_VAL <="); 295 vhdl->set_body(1,"'1' when"); 296 // bypass 297 vhdl->set_body(2,"-- check bypass"); 298 298 for (int32_t i=_param->_nb_gpr_write-1; i>=0 ; i--) 299 299 { … … 305 305 cmp = ""; 306 306 307 vhdl->set_body( "\t\t((in_GPR_WRITE_"+toString(i)+"_VAL='1') "+cmp+"and (internal_NUM_REG_RB=in_GPR_WRITE_"+toString(i)+"_NUM_REG)) or");308 } 309 vhdl->set_body( "\t\tfalse else");310 vhdl->set_body( "\tinternal_DATA_RB_VAL or (internal_READ_RB_VAL and in_GPR_READ_1_ACK and in_GPR_READ_1_DATA_VAL);");311 } 312 { 313 vhdl->set_body( "");314 vhdl->set_body( "internal_NEXT_DATA_RC_VAL <=");315 vhdl->set_body( "\t'1' when");316 // bypass 317 vhdl->set_body( "\t\t-- check bypass");307 vhdl->set_body(2,"((in_GPR_WRITE_"+toString(i)+"_VAL='1') "+cmp+"and (internal_NUM_REG_RB=in_GPR_WRITE_"+toString(i)+"_NUM_REG)) or"); 308 } 309 vhdl->set_body(2,"false else"); 310 vhdl->set_body(1,"internal_DATA_RB_VAL or (internal_READ_RB_VAL and in_GPR_READ_1_ACK and in_GPR_READ_1_DATA_VAL);"); 311 } 312 { 313 vhdl->set_body(0,""); 314 vhdl->set_body(0,"internal_NEXT_DATA_RC_VAL <="); 315 vhdl->set_body(1,"'1' when"); 316 // bypass 317 vhdl->set_body(2,"-- check bypass"); 318 318 for (int32_t i=_param->_nb_spr_write-1; i>=0 ; i--) 319 319 { … … 325 325 cmp = ""; 326 326 327 vhdl->set_body( "\t\t((in_SPR_WRITE_"+toString(i)+"_VAL='1') "+cmp+"and (internal_NUM_REG_RC=in_SPR_WRITE_"+toString(i)+"_NUM_REG)) or");328 } 329 vhdl->set_body( "\t\tfalse else");330 vhdl->set_body( "\tinternal_DATA_RC_VAL or (internal_READ_RC_VAL and in_SPR_READ_0_ACK and in_SPR_READ_0_DATA_VAL);");331 } 332 333 vhdl->set_body( "");334 vhdl->set_body( "-- data_rx - data read");335 { 336 vhdl->set_body( "");337 vhdl->set_body( "internal_NEXT_DATA_RA <=");327 vhdl->set_body(2,"((in_SPR_WRITE_"+toString(i)+"_VAL='1') "+cmp+"and (internal_NUM_REG_RC=in_SPR_WRITE_"+toString(i)+"_NUM_REG)) or"); 328 } 329 vhdl->set_body(2,"false else"); 330 vhdl->set_body(1,"internal_DATA_RC_VAL or (internal_READ_RC_VAL and in_SPR_READ_0_ACK and in_SPR_READ_0_DATA_VAL);"); 331 } 332 333 vhdl->set_body(0,""); 334 vhdl->set_body(0,"-- data_rx - data read"); 335 { 336 vhdl->set_body(0,""); 337 vhdl->set_body(0,"internal_NEXT_DATA_RA <="); 338 338 #ifdef SYSTEMC_VHDL_COMPATIBILITY 339 vhdl->set_body( "\t"+std_logic_others(_param->_size_general_data,0)+" when internal_READ_RA='0' else");339 vhdl->set_body(1,""+std_logic_others(_param->_size_general_data,0)+" when internal_READ_RA='0' else"); 340 340 #endif 341 341 // bypass 342 vhdl->set_body( "\t\t-- check bypass");342 vhdl->set_body(2,"-- check bypass"); 343 343 for (int32_t i=_param->_nb_gpr_write-1; i>=0 ; i--) 344 344 { … … 350 350 cmp = ""; 351 351 352 vhdl->set_body( "\tin_GPR_WRITE_"+toString(i)+"_DATA when ((in_GPR_WRITE_"+toString(i)+"_VAL='1') "+cmp+"and (internal_NUM_REG_RA=in_GPR_WRITE_"+toString(i)+"_NUM_REG)) else");353 } 354 vhdl->set_body( "\treg_DATA_RA when (internal_DATA_RA_VAL='1') else");355 vhdl->set_body( "\tin_GPR_READ_0_DATA;");356 } 357 { 358 vhdl->set_body( "");359 vhdl->set_body( "internal_NEXT_DATA_RB <=");352 vhdl->set_body(1,"in_GPR_WRITE_"+toString(i)+"_DATA when ((in_GPR_WRITE_"+toString(i)+"_VAL='1') "+cmp+"and (internal_NUM_REG_RA=in_GPR_WRITE_"+toString(i)+"_NUM_REG)) else"); 353 } 354 vhdl->set_body(1,"reg_DATA_RA when (internal_DATA_RA_VAL='1') else"); 355 vhdl->set_body(1,"in_GPR_READ_0_DATA;"); 356 } 357 { 358 vhdl->set_body(0,""); 359 vhdl->set_body(0,"internal_NEXT_DATA_RB <="); 360 360 #ifdef SYSTEMC_VHDL_COMPATIBILITY 361 vhdl->set_body( "\t"+std_logic_others(_param->_size_general_data,0)+" when internal_READ_RB='0' else");361 vhdl->set_body(1,""+std_logic_others(_param->_size_general_data,0)+" when internal_READ_RB='0' else"); 362 362 #endif 363 363 // bypass 364 vhdl->set_body( "\t\t-- check bypass");364 vhdl->set_body(2,"-- check bypass"); 365 365 for (int32_t i=_param->_nb_gpr_write-1; i>=0 ; i--) 366 366 { … … 372 372 cmp = ""; 373 373 374 vhdl->set_body( "\tin_GPR_WRITE_"+toString(i)+"_DATA when ((in_GPR_WRITE_"+toString(i)+"_VAL='1') "+cmp+"and (internal_NUM_REG_RB=in_GPR_WRITE_"+toString(i)+"_NUM_REG)) else");375 } 376 vhdl->set_body( "\treg_DATA_RB when (internal_DATA_RB_VAL='1') else");377 vhdl->set_body( "\tin_GPR_READ_1_DATA;");378 } 379 { 380 vhdl->set_body( "");381 vhdl->set_body( "internal_NEXT_DATA_RC <=");374 vhdl->set_body(1,"in_GPR_WRITE_"+toString(i)+"_DATA when ((in_GPR_WRITE_"+toString(i)+"_VAL='1') "+cmp+"and (internal_NUM_REG_RB=in_GPR_WRITE_"+toString(i)+"_NUM_REG)) else"); 375 } 376 vhdl->set_body(1,"reg_DATA_RB when (internal_DATA_RB_VAL='1') else"); 377 vhdl->set_body(1,"in_GPR_READ_1_DATA;"); 378 } 379 { 380 vhdl->set_body(0,""); 381 vhdl->set_body(0,"internal_NEXT_DATA_RC <="); 382 382 #ifdef SYSTEMC_VHDL_COMPATIBILITY 383 vhdl->set_body( "\t"+std_logic_others(_param->_size_special_data,0)+" when internal_READ_RC='0' else");383 vhdl->set_body(1,""+std_logic_others(_param->_size_special_data,0)+" when internal_READ_RC='0' else"); 384 384 #endif 385 385 // bypass 386 vhdl->set_body( "\t\t-- check bypass");386 vhdl->set_body(2,"-- check bypass"); 387 387 for (int32_t i=_param->_nb_spr_write-1; i>=0 ; i--) 388 388 { … … 394 394 cmp = ""; 395 395 396 vhdl->set_body( "\tin_SPR_WRITE_"+toString(i)+"_DATA when ((in_SPR_WRITE_"+toString(i)+"_VAL='1') "+cmp+"and (in_SPR_WRITE_"+toString(i)+"_NUM_REG=internal_NUM_REG_RC)) else");397 } 398 vhdl->set_body( "\treg_DATA_RC when (internal_DATA_RC_VAL='1') else");399 vhdl->set_body( "\tin_SPR_READ_0_DATA;");400 401 vhdl->set_body( "");402 vhdl->set_body( "-----------------------------------");403 vhdl->set_body( "-- transition");404 vhdl->set_body( "-----------------------------------");405 vhdl->set_body( "");406 vhdl->set_body( "-- need a new head if :");407 vhdl->set_body( "-- * queue is empty");408 vhdl->set_body( "-- * pop with queue");409 vhdl->set_body ("internal_NEXT_NEED_NEW_HEAD <= not internal_QUEUE_RETIRE_VAL or (internal_QUEUE_RETIRE_VAL and internal_QUEUE_RETIRE_ACK);");410 411 vhdl->set_body ("internal_READ_RA_VAL <= internal_READ_RA when reg_NEED_NEW_HEAD='1' else reg_READ_RA_VAL;");412 vhdl->set_body ("internal_READ_RB_VAL <= internal_READ_RB when reg_NEED_NEW_HEAD='1' else reg_READ_RB_VAL;");413 vhdl->set_body ("internal_READ_RC_VAL <= internal_READ_RC when reg_NEED_NEW_HEAD='1' else reg_READ_RC_VAL;");414 vhdl->set_body ("internal_DATA_RA_VAL <= not internal_READ_RA when reg_NEED_NEW_HEAD='1' else reg_DATA_RA_VAL;");415 vhdl->set_body ("internal_DATA_RB_VAL <= not internal_READ_RB when reg_NEED_NEW_HEAD='1' else reg_DATA_RB_VAL;");416 vhdl->set_body ("internal_DATA_RC_VAL <= not internal_READ_RC when reg_NEED_NEW_HEAD='1' else reg_DATA_RC_VAL;");417 418 419 vhdl->set_body ("");420 vhdl->set_body ("transition: process (in_CLOCK)");421 vhdl->set_body ("begin -- process transition");422 vhdl->set_body ("\tif in_CLOCK'event and in_CLOCK = '1' then");423 vhdl->set_body ("");424 vhdl->set_body ("\t\tif (in_NRESET = '0') then");425 vhdl->set_body ("\t\t\treg_NEED_NEW_HEAD <= '1';");426 vhdl->set_body ("\t\telse");427 vhdl->set_body ("\t\t\treg_NEED_NEW_HEAD <= internal_NEXT_NEED_NEW_HEAD;");428 vhdl->set_body ("\t\t\treg_READ_RA_VAL <= internal_NEXT_READ_RA_VAL;");429 vhdl->set_body ("\t\t\treg_READ_RB_VAL <= internal_NEXT_READ_RB_VAL;");430 vhdl->set_body ("\t\t\treg_READ_RC_VAL <= internal_NEXT_READ_RC_VAL;");431 vhdl->set_body ("\t\t\treg_DATA_RA_VAL <= internal_NEXT_DATA_RA_VAL;");432 vhdl->set_body ("\t\t\treg_DATA_RB_VAL <= internal_NEXT_DATA_RB_VAL;");433 vhdl->set_body ("\t\t\treg_DATA_RC_VAL <= internal_NEXT_DATA_RC_VAL;");434 vhdl->set_body ("\t\t\treg_DATA_RA <= internal_NEXT_DATA_RA ;");435 vhdl->set_body ("\t\t\treg_DATA_RB <= internal_NEXT_DATA_RB ;");436 vhdl->set_body ("\t\t\treg_DATA_RC <= internal_NEXT_DATA_RC ;");437 438 vhdl->set_body ("\t\tend if;");439 vhdl->set_body ("");440 vhdl->set_body ("\tend if;");441 vhdl->set_body ("end process transition;");396 vhdl->set_body(1,"in_SPR_WRITE_"+toString(i)+"_DATA when ((in_SPR_WRITE_"+toString(i)+"_VAL='1') "+cmp+"and (in_SPR_WRITE_"+toString(i)+"_NUM_REG=internal_NUM_REG_RC)) else"); 397 } 398 vhdl->set_body(1,"reg_DATA_RC when (internal_DATA_RC_VAL='1') else"); 399 vhdl->set_body(1,"in_SPR_READ_0_DATA;"); 400 401 vhdl->set_body(0,""); 402 vhdl->set_body(0,"-----------------------------------"); 403 vhdl->set_body(0,"-- transition"); 404 vhdl->set_body(0,"-----------------------------------"); 405 vhdl->set_body(0,""); 406 vhdl->set_body(0,"-- need a new head if :"); 407 vhdl->set_body(0,"-- * queue is empty"); 408 vhdl->set_body(0,"-- * pop with queue"); 409 vhdl->set_body(0,"internal_NEXT_NEED_NEW_HEAD <= not internal_QUEUE_RETIRE_VAL or (internal_QUEUE_RETIRE_VAL and internal_QUEUE_RETIRE_ACK);"); 410 411 vhdl->set_body(0,"internal_READ_RA_VAL <= internal_READ_RA when reg_NEED_NEW_HEAD='1' else reg_READ_RA_VAL;"); 412 vhdl->set_body(0,"internal_READ_RB_VAL <= internal_READ_RB when reg_NEED_NEW_HEAD='1' else reg_READ_RB_VAL;"); 413 vhdl->set_body(0,"internal_READ_RC_VAL <= internal_READ_RC when reg_NEED_NEW_HEAD='1' else reg_READ_RC_VAL;"); 414 vhdl->set_body(0,"internal_DATA_RA_VAL <= not internal_READ_RA when reg_NEED_NEW_HEAD='1' else reg_DATA_RA_VAL;"); 415 vhdl->set_body(0,"internal_DATA_RB_VAL <= not internal_READ_RB when reg_NEED_NEW_HEAD='1' else reg_DATA_RB_VAL;"); 416 vhdl->set_body(0,"internal_DATA_RC_VAL <= not internal_READ_RC when reg_NEED_NEW_HEAD='1' else reg_DATA_RC_VAL;"); 417 418 419 vhdl->set_body(0,""); 420 vhdl->set_body(0,"transition: process (in_CLOCK)"); 421 vhdl->set_body(0,"begin -- process transition"); 422 vhdl->set_body(1,"if in_CLOCK'event and in_CLOCK = '1' then"); 423 vhdl->set_body(0,""); 424 vhdl->set_body(2,"if (in_NRESET = '0') then"); 425 vhdl->set_body(3,"reg_NEED_NEW_HEAD <= '1';"); 426 vhdl->set_body(2,"else"); 427 vhdl->set_body(3,"reg_NEED_NEW_HEAD <= internal_NEXT_NEED_NEW_HEAD;"); 428 vhdl->set_body(3,"reg_READ_RA_VAL <= internal_NEXT_READ_RA_VAL;"); 429 vhdl->set_body(3,"reg_READ_RB_VAL <= internal_NEXT_READ_RB_VAL;"); 430 vhdl->set_body(3,"reg_READ_RC_VAL <= internal_NEXT_READ_RC_VAL;"); 431 vhdl->set_body(3,"reg_DATA_RA_VAL <= internal_NEXT_DATA_RA_VAL;"); 432 vhdl->set_body(3,"reg_DATA_RB_VAL <= internal_NEXT_DATA_RB_VAL;"); 433 vhdl->set_body(3,"reg_DATA_RC_VAL <= internal_NEXT_DATA_RC_VAL;"); 434 vhdl->set_body(3,"reg_DATA_RA <= internal_NEXT_DATA_RA ;"); 435 vhdl->set_body(3,"reg_DATA_RB <= internal_NEXT_DATA_RB ;"); 436 vhdl->set_body(3,"reg_DATA_RC <= internal_NEXT_DATA_RC ;"); 437 438 vhdl->set_body(2,"end if;"); 439 vhdl->set_body(0,""); 440 vhdl->set_body(1,"end if;"); 441 vhdl->set_body(0,"end process transition;"); 442 442 443 443 }
Note: See TracChangeset
for help on using the changeset viewer.