Changeset 81 for trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack
- Timestamp:
- Apr 15, 2008, 8:40:01 PM (16 years ago)
- Location:
- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack
- Files:
-
- 39 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/Makefile
-
Property
svn:keywords
set to
Id
-
Property
svn:keywords
set to
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/Makefile.defs
-
Property
svn:keywords
set to
Id
-
Property
svn:keywords
set to
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/Makefile.deps
-
Property
svn:keywords
set to
Id
-
Property
svn:keywords
set to
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/SelfTest/Makefile
-
Property
svn:keywords
set to
Id
-
Property
svn:keywords
set to
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/SelfTest/config_mono_context.cfg
-
Property
svn:keywords
set to
Id
r78 r81 1 1 Return_Address_Stack 2 2 1 1 +1 # nb_context 3 2 2*2 # size_queue [0]3 2 4 *2 # size_queue [0] 4 4 32 32 *2 # size_address 5 5 1 1 +1 # nb_inst_predict -
Property
svn:keywords
set to
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/SelfTest/config_multi_context.cfg
-
Property
svn:keywords
set to
Id
-
Property
svn:keywords
set to
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/SelfTest/include/test.h
-
Property
svn:keywords
set to
Id
-
Property
svn:keywords
set to
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/SelfTest/src/main.cpp
-
Property
svn:keywords
set to
Id
-
Property
svn:keywords
set to
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/SelfTest/src/test.cpp
-
Property
svn:keywords
set to
Id
r78 r81 11 11 #include "Behavioural/include/Allocation.h" 12 12 13 #define NB_ITERATION 1 02414 #define CYCLE_MAX (1 28*NB_ITERATION)13 #define NB_ITERATION 16 14 #define CYCLE_MAX (1024*NB_ITERATION) 15 15 16 16 #define LABEL(str...) \ … … 21 21 } while(0) 22 22 23 #define SC_START(cycle_offset) \ 24 do \ 25 { \ 26 /*cout << "SC_START (begin)" << endl;*/ \ 27 \ 28 uint32_t cycle_current = static_cast<uint32_t>(sc_simulation_time()); \ 29 if (cycle_offset != 0) \ 30 { \ 31 cout << "##########[ cycle "<< cycle_current+cycle_offset << " ]" << endl; \ 32 } \ 33 \ 34 if (cycle_current > CYCLE_MAX) \ 35 { \ 36 TEST_KO("Maximal cycles Reached"); \ 37 } \ 38 \ 39 sc_start(cycle_offset); \ 40 \ 41 /*cout << "SC_START (end )" << endl;*/ \ 23 #define SC_START(cycle_offset) \ 24 do \ 25 { \ 26 uint32_t cycle_current = static_cast<uint32_t>(sc_simulation_time()); \ 27 if (cycle_offset != 0) \ 28 { \ 29 cout << "##########[ cycle "<< cycle_current+cycle_offset << " ]"; \ 30 cout << " (" << __LINE__ << ")" << endl; \ 31 } \ 32 \ 33 if (cycle_current > CYCLE_MAX) \ 34 { \ 35 TEST_KO("Maximal cycles Reached"); \ 36 } \ 37 \ 38 sc_start(cycle_offset); \ 39 \ 42 40 } while(0) 43 41 … … 90 88 ALLOC1_SC_SIGNAL( in_UPDATE_ADDRESS ," in_UPDATE_ADDRESS ",Taddress_t,_param->_nb_inst_update ); 91 89 ALLOC1_SC_SIGNAL( in_UPDATE_MISS_PREDICTION," in_UPDATE_MISS_PREDICTION",Tcontrol_t,_param->_nb_inst_update ); 90 ALLOC1_SC_SIGNAL( in_UPDATE_PREDICTION_IFETCH," in_UPDATE_PREDICTION_IFETCH",Tcontrol_t,_param->_nb_inst_update ); 92 91 93 92 /******************************************************** … … 127 126 INSTANCE1_SC_SIGNAL(_Return_Address_Stack, in_UPDATE_ADDRESS ,_param->_nb_inst_update ); 128 127 INSTANCE1_SC_SIGNAL(_Return_Address_Stack, in_UPDATE_MISS_PREDICTION,_param->_nb_inst_update ); 128 INSTANCE1_SC_SIGNAL(_Return_Address_Stack, in_UPDATE_PREDICTION_IFETCH,_param->_nb_inst_update ); 129 129 130 130 msg(_("<%s> : Start Simulation ............\n"),name.c_str()); … … 157 157 LABEL("Iteration %d",iteration); 158 158 159 SC_START(1); 159 if (1) 160 { 161 uint32_t port = rand()%_param->_nb_inst_predict; 162 163 LABEL("PREDICT - PUSH"); 164 165 in_PREDICT_VAL [port]->write(1); 166 in_PREDICT_PUSH [port]->write(1); 167 for (uint32_t i=0; i<_param->_nb_context; i++) 168 for (uint32_t j=0; j<_param->_size_queue[i]; j++) 169 { 170 in_PREDICT_CONTEXT_ID [port]->write(i); 171 in_PREDICT_ADDRESS_PUSH [port]->write(0xdeadbeef+j); 172 173 SC_START(0); 174 175 TEST(Tcontrol_t, out_PREDICT_ACK [port]->read(), 1); 176 TEST(Tptr_t , out_PREDICT_INDEX[port]->read(),(j+1)%_param->_size_queue[i]); 177 178 SC_START(1); 179 180 } 181 in_PREDICT_VAL [port]->write(0); 182 183 SC_START(1); 184 185 in_PREDICT_VAL [port]->write(1); 186 in_PREDICT_PUSH [port]->write(1); 187 for (uint32_t i=0; i<_param->_nb_context; i++) 188 for (uint32_t j=0; j<_param->_size_queue[i]; j++) 189 { 190 in_PREDICT_CONTEXT_ID [port]->write(i); 191 in_PREDICT_ADDRESS_PUSH [port]->write(0x21071981+j); 192 193 SC_START(0); 194 195 TEST(Tcontrol_t, out_PREDICT_ACK [port]->read(), 1); 196 TEST(Tptr_t , out_PREDICT_INDEX [port]->read(),(j+1)%_param->_size_queue[i]); 197 TEST(Taddress_t, out_PREDICT_ADDRESS_POP[port]->read(),0xdeadbeef+j); 198 199 SC_START(1); 200 } 201 in_PREDICT_VAL [port]->write(0); 202 203 LABEL("PREDICT - POP"); 204 205 in_PREDICT_VAL [port]->write(1); 206 in_PREDICT_PUSH [port]->write(0); 207 for (uint32_t i=0; i<_param->_nb_context; i++) 208 for (uint32_t j=0; j< _param->_size_queue[i]; j++) 209 { 210 in_PREDICT_CONTEXT_ID [port]->write(i); 211 in_PREDICT_ADDRESS_PUSH [port]->write(0xbabedead); 212 213 SC_START(0); 214 215 TEST(Tcontrol_t, out_PREDICT_ACK [port]->read(), 1); 216 TEST(Tcontrol_t, out_PREDICT_HIT [port]->read(), 1); 217 uint32_t k=(_param->_size_queue[i]-j)%_param->_size_queue[i]; 218 TEST(Tptr_t , out_PREDICT_INDEX [port]->read(), k); 219 TEST(Taddress_t, out_PREDICT_ADDRESS_POP[port]->read(),(0x21071981+((k==0)?(_param->_size_queue[i]-1):(k-1)))); 220 221 SC_START(1); 222 } 223 in_PREDICT_VAL [port]->write(0); 224 } 225 226 // Now, the stack is empty 227 228 if (1) 229 { 230 uint32_t port1 = rand()%_param->_nb_inst_decod; 231 uint32_t port2 = rand()%_param->_nb_inst_predict; 232 233 LABEL("DECOD - without predict"); 234 235 LABEL("DECOD - PUSH"); 236 237 in_DECOD_VAL [port1]->write(1); 238 in_DECOD_PUSH [port1]->write(1); 239 in_DECOD_MISS_PREDICTION [port1]->write(0); 240 241 for (uint32_t i=0; i<_param->_nb_context; i++) 242 for (uint32_t j=0; j<_param->_size_queue[i]; j++) 243 { 244 in_DECOD_CONTEXT_ID [port1]->write(i); 245 in_DECOD_ADDRESS_PUSH [port1]->write(0xbeefcaca+j); 246 247 SC_START(0); 248 249 TEST(Tcontrol_t, out_DECOD_ACK [port1]->read(), 1); 250 TEST(Tptr_t , out_DECOD_INDEX[port1]->read(),(j+1)%_param->_size_queue[i]); 251 252 SC_START(1); 253 254 } 255 in_DECOD_VAL [port1]->write(0); 256 257 SC_START(1); 258 259 in_DECOD_VAL [port1]->write(1); 260 in_DECOD_PUSH [port1]->write(1); 261 for (uint32_t i=0; i<_param->_nb_context; i++) 262 for (uint32_t j=0; j<_param->_size_queue[i]; j++) 263 { 264 in_DECOD_CONTEXT_ID [port1]->write(i); 265 in_DECOD_ADDRESS_PUSH [port1]->write(0x21071981+j); 266 267 SC_START(0); 268 269 TEST(Tcontrol_t, out_DECOD_ACK [port1]->read(), 1); 270 TEST(Tptr_t , out_DECOD_INDEX [port1]->read(),(j+1)%_param->_size_queue[i]); 271 TEST(Taddress_t, out_DECOD_ADDRESS_POP[port1]->read(),0xbeefcaca+j); 272 273 SC_START(1); 274 } 275 in_DECOD_VAL [port1]->write(0); 276 277 LABEL("DECOD - POP"); 278 279 in_DECOD_VAL [port1]->write(1); 280 in_DECOD_PUSH [port1]->write(0); 281 for (uint32_t i=0; i<_param->_nb_context; i++) 282 for (uint32_t j=0; j< _param->_size_queue[i]; j++) 283 { 284 in_DECOD_CONTEXT_ID [port1]->write(i); 285 in_DECOD_ADDRESS_PUSH [port1]->write(0xbabedead); 286 287 SC_START(0); 288 289 TEST(Tcontrol_t, out_DECOD_ACK [port1]->read(), 1); 290 TEST(Tcontrol_t, out_DECOD_HIT [port1]->read(), 1); 291 uint32_t k=(_param->_size_queue[i]-j)%_param->_size_queue[i]; 292 TEST(Tptr_t , out_DECOD_INDEX [port1]->read(), k); 293 TEST(Taddress_t, out_DECOD_ADDRESS_POP[port1]->read(),(0x21071981+((k==0)?(_param->_size_queue[i]-1):(k-1)))); 294 295 SC_START(1); 296 } 297 in_DECOD_VAL [port1]->write(0); 298 299 LABEL("DECOD - with predict"); 300 301 LABEL("DECOD - PUSH (size_queue/2)"); 302 303 in_DECOD_VAL [port1]->write(1); 304 in_DECOD_PUSH [port1]->write(1); 305 in_DECOD_MISS_PREDICTION [port1]->write(1); 306 307 for (uint32_t i=0; i<_param->_nb_context; i++) 308 for (uint32_t j=0; j<_param->_size_queue[i]/2;j++) 309 { 310 in_DECOD_CONTEXT_ID [port1]->write(i); 311 in_DECOD_ADDRESS_PUSH [port1]->write(0x01234567+j); 312 313 SC_START(0); 314 315 TEST(Tcontrol_t, out_DECOD_ACK [port1]->read(), 1); 316 TEST(Tptr_t , out_DECOD_INDEX[port1]->read(),(j+1)%_param->_size_queue[i]); 317 318 SC_START(1); 319 320 } 321 in_DECOD_VAL [port1]->write(0); 322 323 LABEL("PREDICT - PUSH (size_queue/2)"); 324 325 in_PREDICT_VAL [port2]->write(1); 326 in_PREDICT_PUSH [port2]->write(1); 327 328 for (uint32_t i=0; i<_param->_nb_context; i++) 329 for (uint32_t j=0; j<_param->_size_queue[i]/2;j++) 330 { 331 in_PREDICT_CONTEXT_ID [port2]->write(i); 332 in_PREDICT_ADDRESS_PUSH [port2]->write((0x89abcdef+j)+(_param->_size_queue[i]/2)); 333 334 SC_START(0); 335 336 TEST(Tcontrol_t, out_PREDICT_ACK [port2]->read(), 1); 337 TEST(Tptr_t , out_PREDICT_INDEX[port2]->read(),(j+1+(_param->_size_queue[i]/2))%_param->_size_queue[i]); 338 339 SC_START(1); 340 } 341 342 in_PREDICT_VAL [port2]->write(0); 343 344 LABEL("PREDICT - POP (size_queue/2)"); 345 346 in_PREDICT_VAL [port2]->write(1); 347 in_PREDICT_PUSH [port2]->write(0); 348 for (uint32_t i=0; i<_param->_nb_context; i++) 349 { 350 for (uint32_t j=0; j< _param->_size_queue[i]/2; j++) 351 { 352 in_PREDICT_CONTEXT_ID [port2]->write(i); 353 in_PREDICT_ADDRESS_PUSH [port2]->write(0xbabedead); 354 355 SC_START(0); 356 357 TEST(Tcontrol_t, out_PREDICT_ACK [port2]->read(), 1); 358 TEST(Tcontrol_t, out_PREDICT_HIT [port2]->read(), 1); 359 uint32_t k= (_param->_size_queue[i]-j)%_param->_size_queue[i]; 360 TEST(Tptr_t , out_PREDICT_INDEX [port2]->read(), k); 361 362 Taddress_t res = (0x89abcdef+((k==0)?(_param->_size_queue[i]-1):(k-1))); 363 LABEL("k : %d",k); 364 LABEL("res : %x",res); 365 LABEL("@_pop : %x",out_PREDICT_ADDRESS_POP[port2]->read()); 366 367 TEST(Taddress_t, out_PREDICT_ADDRESS_POP[port2]->read(),res); 368 369 SC_START(1); 370 } 371 372 for (uint32_t j=0; j< _param->_size_queue[i]/2; j++) 373 { 374 in_PREDICT_CONTEXT_ID [port2]->write(i); 375 in_PREDICT_ADDRESS_PUSH [port2]->write(0xbabedead); 376 377 SC_START(0); 378 379 TEST(Tcontrol_t, out_PREDICT_ACK [port2]->read(), 1); 380 TEST(Tcontrol_t, out_PREDICT_HIT [port2]->read(), 1); 381 uint32_t k=(_param->_size_queue[i]/2-j)%_param->_size_queue[i]; 382 TEST(Tptr_t , out_PREDICT_INDEX [port2]->read(), k); 383 384 Taddress_t res = (0x01234567+((k==0)?(_param->_size_queue[i]/2-1):(k-1))); 385 386 LABEL("k : %d",k); 387 LABEL("res : %x",res); 388 LABEL("@_pop : %x",out_PREDICT_ADDRESS_POP[port2]->read()); 389 390 TEST(Taddress_t, out_PREDICT_ADDRESS_POP[port2]->read(),res); 391 392 SC_START(1); 393 } 394 } 395 396 in_PREDICT_VAL [port2]->write(0); 397 398 in_DECOD_VAL [port1]->write(1); 399 in_DECOD_PUSH [port1]->write(0); 400 in_DECOD_MISS_PREDICTION [port1]->write(0); 401 402 for (uint32_t i=0; i<_param->_nb_context; i++) 403 { 404 for (uint32_t j=0; j< _param->_size_queue[i]/2; j++) 405 { 406 in_DECOD_CONTEXT_ID [port1]->write(i); 407 in_DECOD_ADDRESS_PUSH [port1]->write(0xbabedead); 408 409 SC_START(0); 410 411 TEST(Tcontrol_t, out_DECOD_ACK [port1]->read(), 1); 412 TEST(Tcontrol_t, out_DECOD_HIT [port1]->read(), 1); 413 uint32_t k=(_param->_size_queue[i]/2-j)%_param->_size_queue[i]; 414 TEST(Tptr_t , out_DECOD_INDEX [port1]->read(), k); 415 416 Taddress_t res = (0x01234567+((k==0)?(_param->_size_queue[i]/2-1):(k-1))); 417 418 LABEL("k : %d",k); 419 LABEL("res : %x",res); 420 LABEL("@_pop : %x",out_DECOD_ADDRESS_POP[port1]->read()); 421 422 TEST(Taddress_t, out_DECOD_ADDRESS_POP[port1]->read(),res); 423 424 SC_START(1); 425 } 426 } 427 428 in_DECOD_VAL [port1]->write(0); 429 430 } 160 431 } 161 432 … … 195 466 delete [] in_UPDATE_INDEX ; 196 467 delete [] in_UPDATE_ADDRESS ; 468 delete [] in_UPDATE_MISS_PREDICTION; 469 delete [] in_UPDATE_PREDICTION_IFETCH; 197 470 198 471 #endif -
Property
svn:keywords
set to
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/doc/Makefile
-
Property
svn:keywords
set to
Id
-
Property
svn:keywords
set to
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/doc/Return_Address_Stack.tex
-
Property
svn:keywords
set to
Id
-
Property
svn:keywords
set to
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/doc/sty/header.sty
-
Property
svn:keywords
set to
Id
-
Property
svn:keywords
set to
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/doc/tex/01_introduction.tex
-
Property
svn:keywords
set to
Id
-
Property
svn:keywords
set to
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/doc/tex/02_features.tex
-
Property
svn:keywords
set to
Id
-
Property
svn:keywords
set to
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/doc/tex/03_description.tex
-
Property
svn:keywords
set to
Id
-
Property
svn:keywords
set to
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/doc/tex/04_pinout.tex
-
Property
svn:keywords
set to
Id
-
Property
svn:keywords
set to
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/doc/tex/05_parameters.tex
-
Property
svn:keywords
set to
Id
-
Property
svn:keywords
set to
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/doc/tex/06_performance.tex
-
Property
svn:keywords
set to
Id
-
Property
svn:keywords
set to
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/doc/tex/07_details.tex
-
Property
svn:keywords
set to
Id
-
Property
svn:keywords
set to
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/doc/tex/08_history.tex
-
Property
svn:keywords
set to
Id
-
Property
svn:keywords
set to
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/doc/tex/root.tex
-
Property
svn:keywords
set to
Id
-
Property
svn:keywords
set to
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/include/Parameters.h
-
Property
svn:keywords
set to
Id
-
Property
svn:keywords
set to
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/include/Return_Address_Stack.h
-
Property
svn:keywords
set to
Id
r78 r81 84 84 85 85 // ~~~~~[ Interface : "update" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 86 public : SC_IN (Tcontrol_t) ** in_UPDATE_VAL ; //[nb_inst_update] 87 public : SC_OUT(Tcontrol_t) ** out_UPDATE_ACK ; //[nb_inst_update] 88 public : SC_IN (Tcontext_t) ** in_UPDATE_CONTEXT_ID ; //[nb_inst_update] 89 public : SC_IN (Tcontrol_t) ** in_UPDATE_PUSH ; //[nb_inst_update] 1 = push, else pop 90 public : SC_IN (Taddress_t) ** in_UPDATE_ADDRESS ; //[nb_inst_update] 91 public : SC_IN (Tptr_t ) ** in_UPDATE_INDEX ; //[nb_inst_update] 92 public : SC_IN (Tcontrol_t) ** in_UPDATE_MISS_PREDICTION; //[nb_inst_update] 86 public : SC_IN (Tcontrol_t) ** in_UPDATE_VAL ; //[nb_inst_update] 87 public : SC_OUT(Tcontrol_t) ** out_UPDATE_ACK ; //[nb_inst_update] 88 public : SC_IN (Tcontext_t) ** in_UPDATE_CONTEXT_ID ; //[nb_inst_update] 89 public : SC_IN (Tcontrol_t) ** in_UPDATE_PUSH ; //[nb_inst_update] 1 = push, else pop 90 public : SC_IN (Taddress_t) ** in_UPDATE_ADDRESS ; //[nb_inst_update] 91 public : SC_IN (Tptr_t ) ** in_UPDATE_INDEX ; //[nb_inst_update] 92 public : SC_IN (Tcontrol_t) ** in_UPDATE_MISS_PREDICTION ; //[nb_inst_update] 93 public : SC_IN (Tcontrol_t) ** in_UPDATE_PREDICTION_IFETCH; //[nb_inst_update] // prediction only ifetch 93 94 94 95 // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 98 99 private : Tptr_t * reg_TOP ; //[nb_context] 99 100 private : Tptr_t * reg_BOTTOM ; //[nb_context] 100 private : T control_t * reg_EMPTY; //[nb_context]101 private : Tptr_t * reg_NB_ELT ; //[nb_context] 101 102 private : Tptr_t * reg_PREDICT_TOP ; //[nb_context] 102 103 private : Tptr_t * reg_PREDICT_BOTTOM; //[nb_context] 103 private : T control_t * reg_PREDICT_EMPTY; //[nb_context]104 private : Tptr_t * reg_PREDICT_NB_ELT; //[nb_context] 104 105 105 106 // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 143 144 public : void transition (void); 144 145 public : void genMealy_predict (void); 145 //public : void genMealy_decod (void);146 public : void genMealy_decod (void); 146 147 // public : void genMealy_update (void); 147 148 #endif -
Property
svn:keywords
set to
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/include/Types.h
-
Property
svn:keywords
set to
Id
-
Property
svn:keywords
set to
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/src/Parameters.cpp
-
Property
svn:keywords
set to
Id
-
Property
svn:keywords
set to
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/src/Parameters_msg_error.cpp
-
Property
svn:keywords
set to
Id
-
Property
svn:keywords
set to
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/src/Parameters_print.cpp
-
Property
svn:keywords
set to
Id
-
Property
svn:keywords
set to
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/src/Return_Address_Stack.cpp
-
Property
svn:keywords
set to
Id
r78 r81 94 94 # endif 95 95 96 log_printf(INFO,Return_Address_Stack,FUNCTION,"Method - genMealy_decod"); 97 98 SC_METHOD (genMealy_decod); 99 dont_initialize (); 100 sensitive << (*(in_CLOCK)).neg(); // use internal registers 101 for (uint32_t i=0; i<_param->_nb_inst_decod; i++) 102 { 103 if (_param->_have_port_context_id) 104 sensitive << (*( in_DECOD_CONTEXT_ID [i])); 105 sensitive << (*( in_DECOD_PUSH [i])); 106 } 107 108 # ifdef SYSTEMCASS_SPECIFIC 109 // List dependency information 110 for (uint32_t i=0; i<_param->_nb_inst_decod; i++) 111 { 112 if (_param->_have_port_context_id) 113 (*(out_DECOD_HIT [i])) (*( in_DECOD_CONTEXT_ID [i])); 114 (*(out_DECOD_HIT [i])) (*( in_DECOD_PUSH [i])); 115 116 if (_param->_have_port_context_id) 117 (*(out_DECOD_ADDRESS_POP [i])) (*( in_DECOD_CONTEXT_ID [i])); 118 (*(out_DECOD_ADDRESS_POP [i])) (*( in_DECOD_PUSH [i])); 119 120 if (_param->_have_port_context_id) 121 (*(out_DECOD_INDEX [i])) (*( in_DECOD_CONTEXT_ID [i])); 122 (*(out_DECOD_INDEX [i])) (*( in_DECOD_PUSH [i])); 123 } 124 # endif 125 96 126 log_printf(INFO,Return_Address_Stack,FUNCTION,"Method - genMealy_predict"); 97 127 … … 122 152 (*(out_PREDICT_INDEX [i])) (*( in_PREDICT_PUSH [i])); 123 153 } 124 # endif 154 # endif 125 155 #endif 126 156 } -
Property
svn:keywords
set to
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/src/Return_Address_Stack_allocation.cpp
-
Property
svn:keywords
set to
Id
r78 r81 96 96 ALLOC1_SIGNAL_IN ( in_UPDATE_INDEX ,"index" ,Tptr_t ,_param->_size_index); 97 97 ALLOC1_SIGNAL_IN ( in_UPDATE_MISS_PREDICTION,"miss_prediction",Tcontrol_t,1); 98 ALLOC1_SIGNAL_IN ( in_UPDATE_PREDICTION_IFETCH,"prediction_ifetch",Tcontrol_t,1); 98 99 } 99 100 … … 106 107 reg_TOP = new Tptr_t [_param->_nb_context]; 107 108 reg_BOTTOM = new Tptr_t [_param->_nb_context]; 108 reg_ EMPTY = new Tcontrol_t[_param->_nb_context];109 reg_NB_ELT = new Tptr_t [_param->_nb_context]; 109 110 110 111 reg_PREDICT_TOP = new Tptr_t [_param->_nb_context]; 111 112 reg_PREDICT_BOTTOM = new Tptr_t [_param->_nb_context]; 112 reg_PREDICT_ EMPTY = new Tcontrol_t[_param->_nb_context];113 reg_PREDICT_NB_ELT = new Tptr_t [_param->_nb_context]; 113 114 114 115 internal_PREDICT_ACK = new Tcontrol_t [_param->_nb_inst_predict]; -
Property
svn:keywords
set to
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/src/Return_Address_Stack_deallocation.cpp
-
Property
svn:keywords
set to
Id
r78 r81 1 */*1 /* 2 2 * $Id$ 3 3 * … … 54 54 delete [] in_UPDATE_INDEX ; 55 55 delete [] in_UPDATE_ADDRESS ; 56 delete [] in_UPDATE_MISS_PREDICTION; 57 delete [] in_UPDATE_PREDICTION_IFETCH; 56 58 } 57 59 … … 61 63 delete [] reg_TOP; 62 64 delete [] reg_BOTTOM; 63 delete [] reg_ EMPTY;65 delete [] reg_NB_ELT; 64 66 delete [] reg_PREDICT_TOP; 65 67 delete [] reg_PREDICT_BOTTOM; 66 delete [] reg_PREDICT_ EMPTY;68 delete [] reg_PREDICT_NB_ELT; 67 69 68 70 delete [] internal_PREDICT_ACK; -
Property
svn:keywords
set to
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/src/Return_Address_Stack_end_cycle.cpp
-
Property
svn:keywords
set to
Id
-
Property
svn:keywords
set to
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/src/Return_Address_Stack_genMealy_decod.cpp
-
Property
svn:keywords
set to
Id
r78 r81 48 48 // if push : value is hit 49 49 // if pop : val and not miss 50 internal_DECOD_HIT [i] = (push or (reg_stack[context][top]._val and not reg_stack[context][top]._miss)); 50 // when the predictor : if hit = 0, wait (is not accurate) 51 internal_DECOD_HIT [i] = (push or (reg_stack[context][top]._val and not reg_stack[context][top]._miss and (reg_NB_ELT[context]>0))); 51 52 PORT_WRITE(out_DECOD_HIT [i], internal_DECOD_HIT [i]); 52 53 -
Property
svn:keywords
set to
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/src/Return_Address_Stack_genMealy_predict.cpp
-
Property
svn:keywords
set to
Id
r78 r81 48 48 // if push : value is hit 49 49 // if pop : val and not miss 50 internal_PREDICT_HIT [i] = (push or (reg_stack[context][top]._val and not reg_stack[context][top]._miss ));50 internal_PREDICT_HIT [i] = (push or (reg_stack[context][top]._val and not reg_stack[context][top]._miss and (reg_PREDICT_NB_ELT[context]>0))); 51 51 PORT_WRITE(out_PREDICT_HIT [i], internal_PREDICT_HIT [i]); 52 52 -
Property
svn:keywords
set to
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/src/Return_Address_Stack_statistics_allocation.cpp
-
Property
svn:keywords
set to
Id
-
Property
svn:keywords
set to
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/src/Return_Address_Stack_statistics_deallocation.cpp
-
Property
svn:keywords
set to
Id
-
Property
svn:keywords
set to
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/src/Return_Address_Stack_transition.cpp
-
Property
svn:keywords
set to
Id
r78 r81 24 24 log_printf(FUNC,Return_Address_Stack,FUNCTION,"Begin"); 25 25 26 if (PORT_READ(in_NRESET) )26 if (PORT_READ(in_NRESET)==0) 27 27 { 28 28 for (uint32_t i=0; i<_param->_nb_context; i++) … … 30 30 reg_TOP [i] = 0; 31 31 reg_BOTTOM [i] = 0; 32 reg_NB_ELT [i] = 0; 32 33 33 34 reg_PREDICT_TOP [i] = 0; 34 35 reg_PREDICT_BOTTOM [i] = 0; 36 reg_PREDICT_NB_ELT [i] = 0; 35 37 36 38 for (uint32_t j=0; j<_param->_size_queue [i]; j++) 37 reg_stack[i][j]._val = false; 39 { 40 reg_stack[i][j]._val = false; 41 reg_stack[i][j]._predict = false; 42 reg_stack[i][j]._miss = false; 43 } 38 44 } 39 45 } … … 46 52 if (PORT_READ(in_PREDICT_VAL [i]) and internal_PREDICT_ACK [i]) 47 53 { 48 Tcontrol_t context = (_param->_have_port_context_id)?PORT_READ(in_PREDICT_CONTEXT_ID [i]):0; 49 Tcontrol_t push = PORT_READ(in_PREDICT_PUSH [i]); 50 Tptr_t top_old = reg_PREDICT_TOP [i]; 51 Tptr_t top_new; 52 54 log_printf(TRACE,Return_Address_Stack,FUNCTION,"PREDICT[%d] : Transaction",i); 55 Tcontext_t context = (_param->_have_port_context_id)?PORT_READ(in_PREDICT_CONTEXT_ID [i]):0; 56 Tcontrol_t push = PORT_READ(in_PREDICT_PUSH [i]); 57 Tptr_t top_old = reg_PREDICT_TOP [context]; 58 Tptr_t top_new = top_old; 59 Tptr_t bottom_old = reg_PREDICT_BOTTOM [context]; 60 61 log_printf(TRACE,Return_Address_Stack,FUNCTION," * context : %d",context); 62 63 // Hit : push or (val and not miss and not empty) 64 // Miss : ifetch is stall, no update 53 65 if (internal_PREDICT_HIT [i]) 54 66 { 67 log_printf(TRACE,Return_Address_Stack,FUNCTION," * before"); 68 log_printf(TRACE,Return_Address_Stack,FUNCTION," * reg_predict_top : %d",reg_PREDICT_TOP [context]); 69 log_printf(TRACE,Return_Address_Stack,FUNCTION," * reg_predict_bottom : %d",reg_PREDICT_BOTTOM [context]); 70 log_printf(TRACE,Return_Address_Stack,FUNCTION," * reg_predict_nb_elt : %d",reg_PREDICT_NB_ELT [context]); 71 55 72 if (push) 56 73 { 57 // push 74 // push : increase the top (circular) 58 75 top_new = (top_old+1)%_param->_size_queue[context]; 59 76 60 77 reg_stack [context][top_new]._val = true; // New addr 61 reg_stack [context][top_new]._predict = true; // Is speculative (erase a old addr )78 reg_stack [context][top_new]._predict = true; // Is speculative (erase a old addr (or not)) 62 79 //reg_stack [context][top_new]._miss = ; 63 80 reg_stack [context][top_new]._address = PORT_READ(in_PREDICT_ADDRESS_PUSH [i]); 64 81 65 82 // the stack is full, erase the most old stack 66 if (top_new == reg_PREDICT_BOTTOM [i]) 67 reg_PREDICT_BOTTOM [i] = (reg_PREDICT_BOTTOM [i]+1)%_param->_size_queue[context]; 83 84 // Test if full 85 if (reg_PREDICT_NB_ELT[context]==_param->_size_queue[context]) 86 reg_PREDICT_BOTTOM [context] = (bottom_old+1)%_param->_size_queue[context]; 87 // A new data is write : the stack is not empty 88 if (reg_PREDICT_NB_ELT[context]< _param->_size_queue[context]) 89 reg_PREDICT_NB_ELT[context]++; 68 90 } 69 91 else 70 92 { 71 93 // pop 72 top_new = (top_old==0)?(_param->_size_queue[context]-1):(top_old-1);94 // top_new = (top_old==0)?(_param->_size_queue[context]-1):(top_old-1); 73 95 74 96 //reg_stack [context][top_new]._val = ; … … 78 100 79 101 // the stack is empty 80 if (top_old == reg_PREDICT_BOTTOM [i]) 81 reg_PREDICT_BOTTOM [i] = top_new; 82 102 if (reg_PREDICT_NB_ELT[context]>0) 103 { 104 top_new = (top_old==0)?(_param->_size_queue[context]-1):(top_old-1); 105 reg_PREDICT_NB_ELT[context] --; 106 } 83 107 } 84 108 85 reg_PREDICT_TOP [i] = top_new; 109 reg_PREDICT_TOP [context] = top_new; 110 111 log_printf(TRACE,Return_Address_Stack,FUNCTION," * after"); 112 log_printf(TRACE,Return_Address_Stack,FUNCTION," * reg_predict_top : %d",reg_PREDICT_TOP [context]); 113 log_printf(TRACE,Return_Address_Stack,FUNCTION," * reg_predict_bottom : %d",reg_PREDICT_BOTTOM [context]); 114 log_printf(TRACE,Return_Address_Stack,FUNCTION," * reg_predict_nb_elt : %d",reg_PREDICT_NB_ELT [context]); 86 115 } 87 116 } 88 117 89 // // =================================================================== 90 // // =====[ DECOD ]===================================================== 91 // // =================================================================== 92 // for (uint32_t i=0; i<_param->_nb_inst_decod; i++) 93 // if (PORT_READ(in_DECOD_VAL [i]) and internal_DECOD_ACK [i]) 94 // { 95 // Tcontrol_t context = (_param->_have_port_context_id)?PORT_READ(in_DECOD_CONTEXT_ID [i]):0; 96 // Tcontrol_t push = PORT_READ(in_DECOD_PUSH [i]); 97 // Tptr_t top_old = reg_TOP [i]; 98 // Tptr_t top_new; 99 100 // Tcontrol_t hit = PORT_READ(in_DECOD_HIT [i]); 101 // Tcontrol_t miss = PORT_READ(in_DECOD_MISS_PREDICTION [i]); 102 103 // if (push) 104 // { 105 // // push 106 // top_new = (top_old+1)%_param->_size_queue[context]; 107 108 // reg_stack [context][top_new]._val = true; 109 // reg_stack [context][top_new]._predict = false; 110 // reg_stack [context][top_new]._miss = false; 111 // reg_stack [context][top_new]._address = PORT_READ(in_DECOD_ADDRESS_PUSH [i]); 112 113 // // the stack is full, erase the most old stack 114 // if (top_old == reg_BOTTOM [i]) 115 // reg_BOTTOM [i] = top_new; 116 // } 117 // else 118 // { 119 // // pop 118 // =================================================================== 119 // =====[ DECOD ]===================================================== 120 // =================================================================== 121 for (uint32_t i=0; i<_param->_nb_inst_decod; i++) 122 if (PORT_READ(in_DECOD_VAL [i]) and internal_DECOD_ACK [i]) 123 { 124 log_printf(TRACE,Return_Address_Stack,FUNCTION,"DECOD[%d] : Transaction",i); 125 Tcontext_t context = (_param->_have_port_context_id)?PORT_READ(in_DECOD_CONTEXT_ID [i]):0; 126 Tcontrol_t push = PORT_READ(in_DECOD_PUSH [i]); 127 Tptr_t top_old = reg_TOP [context]; 128 Tptr_t top_new = top_old; 129 Tptr_t bottom_old = reg_BOTTOM [context]; 130 //Tcontrol_t hit = internal_DECOD_HIT [i]; 131 Tcontrol_t miss = PORT_READ(in_DECOD_MISS_PREDICTION [i]); 132 133 log_printf(TRACE,Return_Address_Stack,FUNCTION," * context : %d",context); 134 135 log_printf(TRACE,Return_Address_Stack,FUNCTION," * before"); 136 log_printf(TRACE,Return_Address_Stack,FUNCTION," * reg_top : %d",reg_TOP [context]); 137 log_printf(TRACE,Return_Address_Stack,FUNCTION," * reg_bottom : %d",reg_BOTTOM [context]); 138 log_printf(TRACE,Return_Address_Stack,FUNCTION," * reg_nb_elt : %d",reg_NB_ELT [context]); 139 140 if (push) 141 { 142 // push : increase the top (circular) 143 top_new = (top_old+1)%_param->_size_queue[context]; 144 145 reg_stack [context][top_new]._val = true; // New address 146 reg_stack [context][top_new]._predict = false; // No speculative 147 reg_stack [context][top_new]._miss = false; 148 reg_stack [context][top_new]._address = PORT_READ(in_DECOD_ADDRESS_PUSH [i]); 149 150 // Test if full : if true, then icrease the bottom (erase the most old stack) 151 if (reg_NB_ELT[context]==_param->_size_queue[context]) 152 reg_BOTTOM [context] = (bottom_old+1)%_param->_size_queue[context]; 153 // A new data is write : the stack is not empty 154 if (reg_NB_ELT[context]< _param->_size_queue[context]) 155 reg_NB_ELT[context]++; 156 } 157 else 158 { 159 // pop 120 160 // top_new = (top_old==0)?(_param->_size_queue[context]-1):(top_old-1); 121 161 122 // //reg_stack [context][top_new]._val = ; 123 // //reg_stack [context][top_new]._predict = ; 124 // //reg_stack [context][top_new]._miss = ; 125 // //reg_stack [context][top_new]._address = ; 126 // } 127 128 // reg_TOP [i] = top_new; 129 130 // // have previous miss of ifetch ? 131 // // 2 miss : 132 // // 1) miss predict : is very limited (local at context), can be update very quickly 133 // // 2) miss decod : result is in commit stage ... 134 // if (miss) 135 // { 136 // reg_PREDICT_BOTTOM [i] = reg_BOTTOM [i]; 137 // reg_PREDICT_TOP [i] = reg_TOP [i]; 138 139 // for (uint32_t j=0; j<_param->_size_queue [i]; j++) 140 // if (reg_stack [context][top_new]._predict) 141 // { 142 // reg_stack [context][top_new]._predict = false; 143 // reg_stack [context][top_new]._miss = true; 144 // } 145 // } 146 // } 162 //reg_stack [context][top_new]._val = ; 163 //reg_stack [context][top_new]._predict = ; 164 //reg_stack [context][top_new]._miss = ; 165 //reg_stack [context][top_new]._address = ; 166 167 // the stack is empty 168 if (reg_NB_ELT[context]>0) 169 { 170 top_new = (top_old==0)?(_param->_size_queue[context]-1):(top_old-1); 171 reg_NB_ELT[context] --; 172 } 173 } 174 175 reg_TOP [context] = top_new; 176 177 log_printf(TRACE,Return_Address_Stack,FUNCTION," * after"); 178 log_printf(TRACE,Return_Address_Stack,FUNCTION," * reg_top : %d",reg_TOP [context]); 179 log_printf(TRACE,Return_Address_Stack,FUNCTION," * reg_bottom : %d",reg_BOTTOM [context]); 180 log_printf(TRACE,Return_Address_Stack,FUNCTION," * reg_nb_elt : %d",reg_NB_ELT [context]); 181 182 // have previous miss of ifetch ? 183 // 2 miss : 184 // 1) miss predict : is very limited (local at context), can be update very quickly 185 // 2) miss decod : result is in commit stage ... 186 if (miss) 187 { 188 reg_PREDICT_BOTTOM [context] = reg_BOTTOM [context]; 189 reg_PREDICT_TOP [context] = reg_TOP [context]; 190 reg_PREDICT_NB_ELT [context] = reg_NB_ELT [context]; 191 192 // Scan full assoc !!! 193 for (uint32_t j=0; j<_param->_size_queue [i]; j++) 194 // Test if this slot is tagged with "predict" : if true, tagged as miss 195 if (reg_stack [context][j]._predict) 196 { 197 reg_stack [context][j]._predict = false; 198 reg_stack [context][j]._miss = true; 199 } 200 } 201 } 147 202 148 203 // =================================================================== … … 152 207 if (PORT_READ(in_UPDATE_VAL [i]) and internal_UPDATE_ACK [i]) 153 208 { 154 Tcontrol_t context = (_param->_have_port_context_id)?PORT_READ(in_UPDATE_CONTEXT_ID [i]):0; 155 Tcontrol_t push = PORT_READ(in_UPDATE_PUSH [i]); 156 Tptr_t index = PORT_READ(in_UPDATE_INDEX [i]); 209 ERRORMORPHEO(FUNCTION,"Fonction à implémenter !!!!!!!!!!!!"); 157 210 158 if (PORT_READ(in_UPDATE_MISS_PREDICTION [i])) 159 { 160 if (push) 161 { 162 // push 163 top_new = (top_old+1)%_param->_size_queue[context]; 211 212 // Tcontrol_t miss = PORT_READ(in_UPDATE_MISS_PREDICTION [i]); 213 // // 214 // if (miss) 215 // { 216 // Tcontrol_t context = (_param->_have_port_context_id)?PORT_READ(in_UPDATE_CONTEXT_ID [i]):0; 217 // Tcontrol_t ifetch = PORT_READ(in_UPDATE_PREDICTION_IFETCH [i]); 218 // Tcontrol_t push = PORT_READ(in_UPDATE_PUSH [i]); 219 // Tptr_t index = PORT_READ(in_UPDATE_INDEX [i]); 220 // Taddress_t address = PORT_READ(in_UPDATE_ADDRESS [i]); 221 222 // if (push) 223 // { 224 // // // push 225 // // top_new = (top_old+1)%_param->_size_queue[context]; 164 226 165 reg_stack [context][index]._val = true;166 reg_stack [context][index]._predict = false;167 reg_stack [context][index]._miss = false;168 reg_stack [context][index]._address = PORT_READ(in_UPDATE_ADDRESS [i]);169 170 }171 else172 {173 //reg_stack [context][top_new]._val = ;174 //reg_stack [context][top_new]._predict = ;175 //reg_stack [context][top_new]._miss = ;176 //reg_stack [context][top_new]._address = ;177 }178 179 // Mouais bof .......180 reg_PREDICT_TOP [i] = index;181 }227 // // reg_stack [context][index]._val = true; 228 // // reg_stack [context][index]._predict = false; 229 // // reg_stack [context][index]._miss = false; 230 // // reg_stack [context][index]._address = PORT_READ(in_UPDATE_ADDRESS [i]); 231 232 // } 233 // else 234 // { 235 // // //reg_stack [context][top_new]._val = ; 236 // // //reg_stack [context][top_new]._predict = ; 237 // // //reg_stack [context][top_new]._miss = ; 238 // // //reg_stack [context][top_new]._address = ; 239 // } 240 241 // // // // Mouais bof ....... 242 // // // reg_PREDICT_TOP [context] = index; 243 // } 182 244 } 183 245 } -
Property
svn:keywords
set to
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/src/Return_Address_Stack_vhdl.cpp
-
Property
svn:keywords
set to
Id
-
Property
svn:keywords
set to
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/src/Return_Address_Stack_vhdl_body.cpp
-
Property
svn:keywords
set to
Id
-
Property
svn:keywords
set to
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/src/Return_Address_Stack_vhdl_declaration.cpp
-
Property
svn:keywords
set to
Id
-
Property
svn:keywords
set to
Note: See TracChangeset
for help on using the changeset viewer.