Changeset 100 for trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/SelfTest/src/test.cpp
Legend:
- Unmodified
- Added
- Removed
-
trunk
-
Property
svn:ignore
set to
Makefile.flags
Makefile.tools
Makefile.tools_path
-
Property
svn:ignore
set to
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/SelfTest/src/test.cpp
r95 r100 125 125 126 126 // Initialisation 127 127 const bool test1 = true; 128 const bool test2 = true; 129 const bool test3 = true; 130 const bool test4 = true; 131 128 132 const uint32_t seed = 0; 129 133 //const uint32_t seed = static_cast<uint32_t>(time(NULL)); … … 144 148 { 145 149 LABEL("Iteration %d",iteration); 146 147 if ( 1)150 151 if (test1) 148 152 { 149 uint32_t port = rand()%_param->_nb_inst_predict; 150 151 LABEL("PREDICT - PUSH"); 153 uint32_t port = rand()%_param->_nb_inst_predict; 154 155 LABEL("PREDICT - PUSH"); 156 157 in_PREDICT_VAL [port]->write(1); 158 in_PREDICT_PUSH [port]->write(1); 159 160 for (uint32_t i=0; i<_param->_nb_context; i++) 161 for (uint32_t j=0; j<_param->_size_queue[i]; j++) 162 { 163 in_PREDICT_CONTEXT_ID [port]->write(i); 164 in_PREDICT_ADDRESS_PUSH [port]->write(0xdeadbeef+j); 165 166 SC_START(0); 167 168 TEST(Tcontrol_t, out_PREDICT_ACK [port]->read(), 1); 169 TEST(Tptr_t , out_PREDICT_INDEX[port]->read(),(j+1)%_param->_size_queue[i]); 170 171 SC_START(1); 172 173 } 174 in_PREDICT_VAL [port]->write(0); 175 176 SC_START(1); 177 178 in_PREDICT_VAL [port]->write(1); 179 in_PREDICT_PUSH [port]->write(1); 180 for (uint32_t i=0; i<_param->_nb_context; i++) 181 for (uint32_t j=0; j<_param->_size_queue[i]; j++) 182 { 183 in_PREDICT_CONTEXT_ID [port]->write(i); 184 in_PREDICT_ADDRESS_PUSH [port]->write(0x21071981+j); 185 186 SC_START(0); 187 188 TEST(Tcontrol_t, out_PREDICT_ACK [port]->read(), 1); 189 TEST(Tptr_t , out_PREDICT_INDEX [port]->read(),(j+1)%_param->_size_queue[i]); 190 TEST(Taddress_t, out_PREDICT_ADDRESS_POP[port]->read(),0xdeadbeef+j); 191 192 SC_START(1); 193 } 194 in_PREDICT_VAL [port]->write(0); 195 196 LABEL("PREDICT - POP"); 197 198 in_PREDICT_VAL [port]->write(1); 199 in_PREDICT_PUSH [port]->write(0); 200 for (uint32_t i=0; i<_param->_nb_context; i++) 201 for (uint32_t j=0; j< _param->_size_queue[i]; j++) 202 { 203 in_PREDICT_CONTEXT_ID [port]->write(i); 204 in_PREDICT_ADDRESS_PUSH [port]->write(0xbabedead); 205 206 SC_START(0); 207 208 TEST(Tcontrol_t, out_PREDICT_ACK [port]->read(), 1); 209 TEST(Tcontrol_t, out_PREDICT_HIT [port]->read(), 1); 210 uint32_t k=(_param->_size_queue[i]-j)%_param->_size_queue[i]; 211 TEST(Tptr_t , out_PREDICT_INDEX [port]->read(), k); 212 TEST(Taddress_t, out_PREDICT_ADDRESS_POP[port]->read(),(0x21071981+((k==0)?(_param->_size_queue[i]-1):(k-1)))); 213 214 SC_START(1); 215 } 216 in_PREDICT_VAL [port]->write(0); 217 218 // Now, the stack is empty 219 } 220 221 if (test2) 222 { 223 uint32_t port = rand()%_param->_nb_inst_decod; 224 225 LABEL("DECOD - without predict"); 226 227 LABEL("DECOD - PUSH"); 228 229 in_DECOD_VAL [port]->write(1); 230 in_DECOD_PUSH [port]->write(1); 231 in_DECOD_MISS_PREDICTION [port]->write(0); 232 233 for (uint32_t i=0; i<_param->_nb_context; i++) 234 for (uint32_t j=0; j<_param->_size_queue[i]; j++) 235 { 236 in_DECOD_CONTEXT_ID [port]->write(i); 237 in_DECOD_ADDRESS_PUSH [port]->write(0xbeefcaca+j); 238 239 SC_START(0); 240 241 TEST(Tcontrol_t, out_DECOD_ACK [port]->read(), 1); 242 TEST(Tptr_t , out_DECOD_INDEX[port]->read(),(j+1)%_param->_size_queue[i]); 243 244 SC_START(1); 245 246 } 247 in_DECOD_VAL [port]->write(0); 152 248 153 in_PREDICT_VAL [port]->write(1); 154 in_PREDICT_PUSH [port]->write(1); 155 for (uint32_t i=0; i<_param->_nb_context; i++) 156 for (uint32_t j=0; j<_param->_size_queue[i]; j++) 157 { 158 in_PREDICT_CONTEXT_ID [port]->write(i); 159 in_PREDICT_ADDRESS_PUSH [port]->write(0xdeadbeef+j); 160 161 SC_START(0); 162 163 TEST(Tcontrol_t, out_PREDICT_ACK [port]->read(), 1); 164 TEST(Tptr_t , out_PREDICT_INDEX[port]->read(),(j+1)%_param->_size_queue[i]); 165 166 SC_START(1); 167 168 } 169 in_PREDICT_VAL [port]->write(0); 170 171 SC_START(1); 172 173 in_PREDICT_VAL [port]->write(1); 174 in_PREDICT_PUSH [port]->write(1); 175 for (uint32_t i=0; i<_param->_nb_context; i++) 176 for (uint32_t j=0; j<_param->_size_queue[i]; j++) 177 { 178 in_PREDICT_CONTEXT_ID [port]->write(i); 179 in_PREDICT_ADDRESS_PUSH [port]->write(0x21071981+j); 180 181 SC_START(0); 182 183 TEST(Tcontrol_t, out_PREDICT_ACK [port]->read(), 1); 184 TEST(Tptr_t , out_PREDICT_INDEX [port]->read(),(j+1)%_param->_size_queue[i]); 185 TEST(Taddress_t, out_PREDICT_ADDRESS_POP[port]->read(),0xdeadbeef+j); 186 187 SC_START(1); 188 } 189 in_PREDICT_VAL [port]->write(0); 190 191 LABEL("PREDICT - POP"); 192 193 in_PREDICT_VAL [port]->write(1); 194 in_PREDICT_PUSH [port]->write(0); 195 for (uint32_t i=0; i<_param->_nb_context; i++) 196 for (uint32_t j=0; j< _param->_size_queue[i]; j++) 197 { 198 in_PREDICT_CONTEXT_ID [port]->write(i); 199 in_PREDICT_ADDRESS_PUSH [port]->write(0xbabedead); 200 201 SC_START(0); 202 203 TEST(Tcontrol_t, out_PREDICT_ACK [port]->read(), 1); 204 TEST(Tcontrol_t, out_PREDICT_HIT [port]->read(), 1); 205 uint32_t k=(_param->_size_queue[i]-j)%_param->_size_queue[i]; 206 TEST(Tptr_t , out_PREDICT_INDEX [port]->read(), k); 207 TEST(Taddress_t, out_PREDICT_ADDRESS_POP[port]->read(),(0x21071981+((k==0)?(_param->_size_queue[i]-1):(k-1)))); 208 209 SC_START(1); 210 } 211 in_PREDICT_VAL [port]->write(0); 212 } 213 214 // Now, the stack is empty 215 216 if (1) 217 { 218 uint32_t port1 = rand()%_param->_nb_inst_decod; 219 uint32_t port2 = rand()%_param->_nb_inst_predict; 220 221 LABEL("DECOD - without predict"); 222 223 LABEL("DECOD - PUSH"); 224 225 in_DECOD_VAL [port1]->write(1); 226 in_DECOD_PUSH [port1]->write(1); 227 in_DECOD_MISS_PREDICTION [port1]->write(0); 228 229 for (uint32_t i=0; i<_param->_nb_context; i++) 230 for (uint32_t j=0; j<_param->_size_queue[i]; j++) 231 { 232 in_DECOD_CONTEXT_ID [port1]->write(i); 233 in_DECOD_ADDRESS_PUSH [port1]->write(0xbeefcaca+j); 234 235 SC_START(0); 236 237 TEST(Tcontrol_t, out_DECOD_ACK [port1]->read(), 1); 238 TEST(Tptr_t , out_DECOD_INDEX[port1]->read(),(j+1)%_param->_size_queue[i]); 239 240 SC_START(1); 241 242 } 243 in_DECOD_VAL [port1]->write(0); 244 245 SC_START(1); 246 247 in_DECOD_VAL [port1]->write(1); 248 in_DECOD_PUSH [port1]->write(1); 249 for (uint32_t i=0; i<_param->_nb_context; i++) 250 for (uint32_t j=0; j<_param->_size_queue[i]; j++) 251 { 252 in_DECOD_CONTEXT_ID [port1]->write(i); 253 in_DECOD_ADDRESS_PUSH [port1]->write(0x21071981+j); 254 255 SC_START(0); 256 257 TEST(Tcontrol_t, out_DECOD_ACK [port1]->read(), 1); 258 TEST(Tptr_t , out_DECOD_INDEX [port1]->read(),(j+1)%_param->_size_queue[i]); 259 TEST(Taddress_t, out_DECOD_ADDRESS_POP[port1]->read(),0xbeefcaca+j); 260 261 SC_START(1); 262 } 263 in_DECOD_VAL [port1]->write(0); 264 265 LABEL("DECOD - POP"); 266 267 in_DECOD_VAL [port1]->write(1); 268 in_DECOD_PUSH [port1]->write(0); 269 for (uint32_t i=0; i<_param->_nb_context; i++) 270 for (uint32_t j=0; j< _param->_size_queue[i]; j++) 271 { 272 in_DECOD_CONTEXT_ID [port1]->write(i); 273 in_DECOD_ADDRESS_PUSH [port1]->write(0xbabedead); 274 275 SC_START(0); 276 277 TEST(Tcontrol_t, out_DECOD_ACK [port1]->read(), 1); 278 TEST(Tcontrol_t, out_DECOD_HIT [port1]->read(), 1); 279 uint32_t k=(_param->_size_queue[i]-j)%_param->_size_queue[i]; 280 TEST(Tptr_t , out_DECOD_INDEX [port1]->read(), k); 281 TEST(Taddress_t, out_DECOD_ADDRESS_POP[port1]->read(),(0x21071981+((k==0)?(_param->_size_queue[i]-1):(k-1)))); 282 283 SC_START(1); 284 } 285 in_DECOD_VAL [port1]->write(0); 286 287 LABEL("DECOD - with predict"); 288 289 LABEL("DECOD - PUSH (size_queue/2)"); 290 291 in_DECOD_VAL [port1]->write(1); 292 in_DECOD_PUSH [port1]->write(1); 293 in_DECOD_MISS_PREDICTION [port1]->write(1); 294 295 for (uint32_t i=0; i<_param->_nb_context; i++) 296 for (uint32_t j=0; j<_param->_size_queue[i]/2;j++) 297 { 298 in_DECOD_CONTEXT_ID [port1]->write(i); 299 in_DECOD_ADDRESS_PUSH [port1]->write(0x01234567+j); 300 301 SC_START(0); 302 303 TEST(Tcontrol_t, out_DECOD_ACK [port1]->read(), 1); 304 TEST(Tptr_t , out_DECOD_INDEX[port1]->read(),(j+1)%_param->_size_queue[i]); 305 306 SC_START(1); 307 308 } 309 in_DECOD_VAL [port1]->write(0); 310 311 LABEL("PREDICT - PUSH (size_queue/2)"); 312 313 in_PREDICT_VAL [port2]->write(1); 314 in_PREDICT_PUSH [port2]->write(1); 315 316 for (uint32_t i=0; i<_param->_nb_context; i++) 317 for (uint32_t j=0; j<_param->_size_queue[i]/2;j++) 318 { 319 in_PREDICT_CONTEXT_ID [port2]->write(i); 320 in_PREDICT_ADDRESS_PUSH [port2]->write((0x89abcdef+j)+(_param->_size_queue[i]/2)); 321 322 SC_START(0); 323 324 TEST(Tcontrol_t, out_PREDICT_ACK [port2]->read(), 1); 325 TEST(Tptr_t , out_PREDICT_INDEX[port2]->read(),(j+1+(_param->_size_queue[i]/2))%_param->_size_queue[i]); 326 327 SC_START(1); 328 } 329 330 in_PREDICT_VAL [port2]->write(0); 331 332 LABEL("PREDICT - POP (size_queue/2)"); 333 334 in_PREDICT_VAL [port2]->write(1); 335 in_PREDICT_PUSH [port2]->write(0); 336 for (uint32_t i=0; i<_param->_nb_context; i++) 337 { 338 for (uint32_t j=0; j< _param->_size_queue[i]/2; j++) 339 { 340 in_PREDICT_CONTEXT_ID [port2]->write(i); 341 in_PREDICT_ADDRESS_PUSH [port2]->write(0xbabedead); 342 343 SC_START(0); 344 345 TEST(Tcontrol_t, out_PREDICT_ACK [port2]->read(), 1); 346 TEST(Tcontrol_t, out_PREDICT_HIT [port2]->read(), 1); 347 uint32_t k= (_param->_size_queue[i]-j)%_param->_size_queue[i]; 348 TEST(Tptr_t , out_PREDICT_INDEX [port2]->read(), k); 349 350 Taddress_t res = (0x89abcdef+((k==0)?(_param->_size_queue[i]-1):(k-1))); 351 LABEL("k : %d",k); 352 LABEL("res : %x",res); 353 LABEL("@_pop : %x",out_PREDICT_ADDRESS_POP[port2]->read()); 354 355 TEST(Taddress_t, out_PREDICT_ADDRESS_POP[port2]->read(),res); 356 357 SC_START(1); 358 } 359 360 for (uint32_t j=0; j< _param->_size_queue[i]/2; j++) 361 { 362 in_PREDICT_CONTEXT_ID [port2]->write(i); 363 in_PREDICT_ADDRESS_PUSH [port2]->write(0xbabedead); 364 365 SC_START(0); 366 367 TEST(Tcontrol_t, out_PREDICT_ACK [port2]->read(), 1); 368 TEST(Tcontrol_t, out_PREDICT_HIT [port2]->read(), 1); 369 uint32_t k=(_param->_size_queue[i]/2-j)%_param->_size_queue[i]; 370 TEST(Tptr_t , out_PREDICT_INDEX [port2]->read(), k); 371 372 Taddress_t res = (0x01234567+((k==0)?(_param->_size_queue[i]/2-1):(k-1))); 373 374 LABEL("k : %d",k); 375 LABEL("res : %x",res); 376 LABEL("@_pop : %x",out_PREDICT_ADDRESS_POP[port2]->read()); 377 378 TEST(Taddress_t, out_PREDICT_ADDRESS_POP[port2]->read(),res); 379 380 SC_START(1); 381 } 382 } 383 384 in_PREDICT_VAL [port2]->write(0); 385 386 in_DECOD_VAL [port1]->write(1); 387 in_DECOD_PUSH [port1]->write(0); 388 in_DECOD_MISS_PREDICTION [port1]->write(0); 389 390 for (uint32_t i=0; i<_param->_nb_context; i++) 391 { 392 for (uint32_t j=0; j< _param->_size_queue[i]/2; j++) 393 { 394 in_DECOD_CONTEXT_ID [port1]->write(i); 395 in_DECOD_ADDRESS_PUSH [port1]->write(0xbabedead); 396 397 SC_START(0); 398 399 TEST(Tcontrol_t, out_DECOD_ACK [port1]->read(), 1); 400 TEST(Tcontrol_t, out_DECOD_HIT [port1]->read(), 1); 401 uint32_t k=(_param->_size_queue[i]/2-j)%_param->_size_queue[i]; 402 TEST(Tptr_t , out_DECOD_INDEX [port1]->read(), k); 403 404 Taddress_t res = (0x01234567+((k==0)?(_param->_size_queue[i]/2-1):(k-1))); 405 406 LABEL("k : %d",k); 407 LABEL("res : %x",res); 408 LABEL("@_pop : %x",out_DECOD_ADDRESS_POP[port1]->read()); 409 410 TEST(Taddress_t, out_DECOD_ADDRESS_POP[port1]->read(),res); 411 412 SC_START(1); 413 } 414 } 415 416 in_DECOD_VAL [port1]->write(0); 249 SC_START(1); 250 251 in_DECOD_VAL [port]->write(1); 252 in_DECOD_PUSH [port]->write(1); 253 for (uint32_t i=0; i<_param->_nb_context; i++) 254 for (uint32_t j=0; j<_param->_size_queue[i]; j++) 255 { 256 in_DECOD_CONTEXT_ID [port]->write(i); 257 in_DECOD_ADDRESS_PUSH [port]->write(0x21071981+j); 258 259 SC_START(0); 260 261 TEST(Tcontrol_t, out_DECOD_ACK [port]->read(), 1); 262 TEST(Tptr_t , out_DECOD_INDEX [port]->read(),(j+1)%_param->_size_queue[i]); 263 TEST(Taddress_t, out_DECOD_ADDRESS_POP[port]->read(),0xbeefcaca+j); 264 265 SC_START(1); 266 } 267 in_DECOD_VAL [port]->write(0); 268 269 LABEL("DECOD - POP"); 270 271 in_DECOD_VAL [port]->write(1); 272 in_DECOD_PUSH [port]->write(0); 273 for (uint32_t i=0; i<_param->_nb_context; i++) 274 for (uint32_t j=0; j< _param->_size_queue[i]; j++) 275 { 276 in_DECOD_CONTEXT_ID [port]->write(i); 277 in_DECOD_ADDRESS_PUSH [port]->write(0xbabedead); 278 279 SC_START(0); 280 281 TEST(Tcontrol_t, out_DECOD_ACK [port]->read(), 1); 282 TEST(Tcontrol_t, out_DECOD_HIT [port]->read(), 1); 283 uint32_t k=(_param->_size_queue[i]-j)%_param->_size_queue[i]; 284 TEST(Tptr_t , out_DECOD_INDEX [port]->read(), k); 285 TEST(Taddress_t, out_DECOD_ADDRESS_POP[port]->read(),(0x21071981+((k==0)?(_param->_size_queue[i]-1):(k-1)))); 286 287 SC_START(1); 288 } 289 in_DECOD_VAL [port]->write(0); 290 // Now, the stack is empty 291 } 292 293 if (test3) 294 { 295 uint32_t port1 = rand()%_param->_nb_inst_predict; 296 uint32_t port2 = rand()%_param->_nb_inst_decod; 297 uint32_t port3 = rand()%_param->_nb_inst_update; 298 299 LABEL("Test UPDATE"); 300 301 LABEL("Predict"); 302 in_PREDICT_VAL [port1]->write(1); 303 in_PREDICT_PUSH [port1]->write(1); 304 for (uint32_t i=0; i<_param->_nb_context; i++) 305 for (uint32_t j=0; j<_param->_size_queue[i]; j++) 306 { 307 in_PREDICT_CONTEXT_ID [port1]->write(i); 308 in_PREDICT_ADDRESS_PUSH [port1]->write(0x25071959+j); 309 310 SC_START(0); 311 312 TEST(Tcontrol_t, out_PREDICT_ACK [port1]->read(), 1); 313 TEST(Tptr_t , out_PREDICT_INDEX [port1]->read(),(j+1)%_param->_size_queue[i]); 314 // TEST(Taddress_t, out_PREDICT_ADDRESS_POP[port1]->read(),0xdeadbeef+j); 315 316 SC_START(1); 317 } 318 in_PREDICT_VAL [port1]->write(0); 319 320 LABEL("Decod"); 321 in_DECOD_VAL [port2]->write(1); 322 in_DECOD_PUSH [port2]->write(1); 323 for (uint32_t i=0; i<_param->_nb_context; i++) 324 for (uint32_t j=0; j<_param->_size_queue[i]/2; j++) 325 { 326 in_DECOD_CONTEXT_ID [port2]->write(i); 327 in_DECOD_ADDRESS_PUSH [port2]->write(0x25071959+j); 328 in_DECOD_MISS_PREDICTION [port2]->write(0); 329 330 SC_START(0); 331 332 TEST(Tcontrol_t, out_DECOD_ACK [port2]->read(), 1); 333 TEST(Tptr_t , out_DECOD_INDEX [port2]->read(),(j+1)%_param->_size_queue[i]); 334 TEST(Taddress_t, out_DECOD_ADDRESS_POP[port2]->read(),0x25071959+j); 335 336 SC_START(1); 337 } 338 in_DECOD_VAL [port2]->write(0); 339 340 LABEL("Update Decod OK"); 341 in_UPDATE_VAL [port3]->write(1); 342 in_UPDATE_PUSH [port3]->write(1); 343 in_UPDATE_FLUSH[port3]->write(0); 344 for (uint32_t i=0; i<_param->_nb_context; i++) 345 for (uint32_t j=0; j<_param->_size_queue[i]/2; j++) 346 { 347 uint32_t x=(_param->_size_queue[i]/2)-1; 348 in_UPDATE_CONTEXT_ID [port3]->write(i); 349 in_UPDATE_MISS_PREDICTION [port3]->write(0); 350 in_UPDATE_PREDICTION_IFETCH [port3]->write(0); 351 in_UPDATE_INDEX [port3]->write((x+1)%_param->_size_queue[i]); 352 in_UPDATE_ADDRESS [port3]->write(0x25071959+x); 353 354 SC_START(0); 355 356 TEST(Tcontrol_t, out_UPDATE_ACK [port3]->read(), 1); 357 358 SC_START(1); 359 } 360 in_UPDATE_VAL [port3]->write(0); 361 362 LABEL("Update FLUSH"); 363 in_UPDATE_VAL [port3]->write(1); 364 in_UPDATE_FLUSH[port3]->write(1); 365 for (uint32_t i=0; i<_param->_nb_context; i++) 366 for (uint32_t j=0; j<_param->_size_queue[i]/2; j++) 367 { 368 in_UPDATE_CONTEXT_ID [port3]->write(i); 369 SC_START(1); 370 TEST(Tcontrol_t, out_UPDATE_ACK [port3]->read(), 1); 371 } 372 in_UPDATE_VAL [port3]->write(0); 373 374 375 // Tcontrol_t, in_UPDATE_VAL 376 // Tcontrol_t,out_UPDATE_ACK 377 // Tcontext_t, in_UPDATE_CONTEXT_ID 378 // Tcontrol_t, in_UPDATE_PUSH 379 // Tcontrol_t, in_UPDATE_FLUSH 380 // Tptr_t , in_UPDATE_INDEX 381 // Taddress_t, in_UPDATE_ADDRESS 382 // Tcontrol_t, in_UPDATE_MISS_PREDICTION 383 // Tcontrol_t, in_UPDATE_PREDICTION_IFETCH 384 385 386 } 387 388 if (test4) 389 { 390 uint32_t port1 = rand()%_param->_nb_inst_predict; 391 uint32_t port2 = rand()%_param->_nb_inst_decod; 392 uint32_t port3 = rand()%_param->_nb_inst_update; 393 394 LABEL("Test UPDATE"); 395 396 LABEL("Predict"); 397 in_PREDICT_VAL [port1]->write(1); 398 in_PREDICT_PUSH [port1]->write(1); 399 for (uint32_t i=0; i<_param->_nb_context; i++) 400 for (uint32_t j=0; j<_param->_size_queue[i]; j++) 401 { 402 in_PREDICT_CONTEXT_ID [port1]->write(i); 403 in_PREDICT_ADDRESS_PUSH [port1]->write(0x14011959+j); 404 405 SC_START(0); 406 407 TEST(Tcontrol_t, out_PREDICT_ACK [port1]->read(), 1); 408 TEST(Tptr_t , out_PREDICT_INDEX [port1]->read(),(j+1)%_param->_size_queue[i]); 409 // TEST(Taddress_t, out_PREDICT_ADDRESS_POP[port1]->read(),0xdeadbeef+j); 410 411 SC_START(1); 412 } 413 in_PREDICT_VAL [port1]->write(0); 414 415 LABEL("Decod"); 416 in_DECOD_VAL [port2]->write(1); 417 in_DECOD_PUSH [port2]->write(1); 418 for (uint32_t i=0; i<_param->_nb_context; i++) 419 for (uint32_t j=0; j<_param->_size_queue[i]/2; j++) 420 { 421 in_DECOD_CONTEXT_ID [port2]->write(i); 422 in_DECOD_ADDRESS_PUSH [port2]->write(0x14011959+j); 423 in_DECOD_MISS_PREDICTION [port2]->write(0); 424 425 SC_START(0); 426 427 TEST(Tcontrol_t, out_DECOD_ACK [port2]->read(), 1); 428 TEST(Tptr_t , out_DECOD_INDEX [port2]->read(),(j+1)%_param->_size_queue[i]); 429 TEST(Taddress_t, out_DECOD_ADDRESS_POP[port2]->read(),0x14011959+j); 430 431 SC_START(1); 432 } 433 in_DECOD_VAL [port2]->write(0); 434 435 LABEL("Update Decod KO"); 436 in_UPDATE_VAL [port3]->write(1); 437 in_UPDATE_PUSH [port3]->write(1); 438 in_UPDATE_FLUSH[port3]->write(0); 439 for (uint32_t i=0; i<_param->_nb_context; i++) 440 for (uint32_t j=0; j<_param->_size_queue[i]/2; j++) 441 { 442 uint32_t x=(_param->_size_queue[i]/2); 443 in_UPDATE_CONTEXT_ID [port3]->write(i); 444 in_UPDATE_MISS_PREDICTION [port3]->write(1); 445 in_UPDATE_PREDICTION_IFETCH [port3]->write(0); 446 in_UPDATE_INDEX [port3]->write((x-j)%_param->_size_queue[i]); 447 in_UPDATE_ADDRESS [port3]->write(0xffffffff+x); 448 449 SC_START(0); 450 451 TEST(Tcontrol_t, out_UPDATE_ACK [port3]->read(), 1); 452 453 SC_START(1); 454 } 455 in_UPDATE_VAL [port3]->write(0); 456 457 LABEL("Decod"); 458 in_DECOD_VAL [port2]->write(1); 459 in_DECOD_PUSH [port2]->write(1); 460 for (uint32_t i=0; i<_param->_nb_context; i++) 461 for (uint32_t j=0; j<_param->_size_queue[i]/2; j++) 462 { 463 in_DECOD_CONTEXT_ID [port2]->write(i); 464 in_DECOD_ADDRESS_PUSH [port2]->write(0x14011959+j); 465 in_DECOD_MISS_PREDICTION [port2]->write(0); 466 467 SC_START(0); 468 469 TEST(Tcontrol_t, out_DECOD_ACK [port2]->read(), 1); 470 TEST(Tptr_t , out_DECOD_INDEX [port2]->read(),(j+1)%_param->_size_queue[i]); 471 TEST(Taddress_t, out_DECOD_ADDRESS_POP[port2]->read(),0x14011959+j); 472 473 SC_START(1); 474 } 475 in_DECOD_VAL [port2]->write(0); 476 477 478 LABEL("Update Decod KO"); 479 in_UPDATE_VAL [port3]->write(1); 480 in_UPDATE_PUSH [port3]->write(1); 481 in_UPDATE_FLUSH[port3]->write(0); 482 for (uint32_t i=0; i<_param->_nb_context; i++) 483 for (uint32_t j=0; j<_param->_size_queue[i]/2; j++) 484 { 485 uint32_t x=(_param->_size_queue[i]/2); 486 in_UPDATE_CONTEXT_ID [port3]->write(i); 487 in_UPDATE_MISS_PREDICTION [port3]->write(1); 488 in_UPDATE_PREDICTION_IFETCH [port3]->write(0); 489 in_UPDATE_INDEX [port3]->write((x-j)%_param->_size_queue[i]); 490 in_UPDATE_ADDRESS [port3]->write(0xffffffff+x); 491 492 SC_START(0); 493 494 TEST(Tcontrol_t, out_UPDATE_ACK [port3]->read(), 1); 495 496 SC_START(1); 497 } 498 in_UPDATE_VAL [port3]->write(0); 499 500 LABEL("Update Predict KO"); 501 in_UPDATE_VAL [port3]->write(1); 502 in_UPDATE_PUSH [port3]->write(1); 503 in_UPDATE_FLUSH[port3]->write(0); 504 for (uint32_t i=0; i<_param->_nb_context; i++) 505 for (uint32_t j=0; j<_param->_size_queue[i]; j++) 506 { 507 uint32_t x=(_param->_size_queue[i]); 508 in_UPDATE_CONTEXT_ID [port3]->write(i); 509 in_UPDATE_MISS_PREDICTION [port3]->write(1); 510 in_UPDATE_PREDICTION_IFETCH [port3]->write(1); 511 in_UPDATE_INDEX [port3]->write((x-j)%_param->_size_queue[i]); 512 in_UPDATE_ADDRESS [port3]->write(0xffffffff+x); 513 514 SC_START(0); 515 516 TEST(Tcontrol_t, out_UPDATE_ACK [port3]->read(), 1); 517 518 SC_START(1); 519 } 520 in_UPDATE_VAL [port3]->write(0); 521 522 LABEL("Predict"); 523 in_PREDICT_VAL [port1]->write(1); 524 in_PREDICT_PUSH [port1]->write(1); 525 for (uint32_t i=0; i<_param->_nb_context; i++) 526 for (uint32_t j=0; j<_param->_size_queue[i]; j++) 527 { 528 in_PREDICT_CONTEXT_ID [port1]->write(i); 529 in_PREDICT_ADDRESS_PUSH [port1]->write(0x14011959+j); 530 531 SC_START(0); 532 533 TEST(Tcontrol_t, out_PREDICT_ACK [port1]->read(), 1); 534 TEST(Tptr_t , out_PREDICT_INDEX [port1]->read(),(j+1)%_param->_size_queue[i]); 535 TEST(Taddress_t, out_PREDICT_ADDRESS_POP[port1]->read(),0x14011959+j); 536 537 SC_START(1); 538 } 539 in_PREDICT_VAL [port1]->write(0); 540 541 LABEL("Update Predict KO"); 542 in_UPDATE_VAL [port3]->write(1); 543 in_UPDATE_PUSH [port3]->write(0); 544 in_UPDATE_FLUSH[port3]->write(0); 545 for (uint32_t i=0; i<_param->_nb_context; i++) 546 for (uint32_t j=0; j<_param->_size_queue[i]; j++) 547 { 548 uint32_t x=(_param->_size_queue[i]); 549 in_UPDATE_CONTEXT_ID [port3]->write(i); 550 in_UPDATE_MISS_PREDICTION [port3]->write(1); 551 in_UPDATE_PREDICTION_IFETCH [port3]->write(1); 552 in_UPDATE_INDEX [port3]->write((x+j+1)%_param->_size_queue[i]); 553 in_UPDATE_ADDRESS [port3]->write(0x87654321+j); 554 555 SC_START(0); 556 557 TEST(Tcontrol_t, out_UPDATE_ACK [port3]->read(), 1); 558 559 SC_START(1); 560 } 561 in_UPDATE_VAL [port3]->write(0); 562 563 LABEL("Predict"); 564 in_PREDICT_VAL [port1]->write(1); 565 in_PREDICT_PUSH [port1]->write(1); 566 for (uint32_t i=0; i<_param->_nb_context; i++) 567 for (uint32_t j=0; j<_param->_size_queue[i]; j++) 568 { 569 in_PREDICT_CONTEXT_ID [port1]->write(i); 570 in_PREDICT_ADDRESS_PUSH [port1]->write(0x14011959+j); 571 572 SC_START(0); 573 574 TEST(Tcontrol_t, out_PREDICT_ACK [port1]->read(), 1); 575 TEST(Tptr_t , out_PREDICT_INDEX [port1]->read(),(j+1)%_param->_size_queue[i]); 576 TEST(Taddress_t, out_PREDICT_ADDRESS_POP[port1]->read(),0x87654321+j); 577 578 SC_START(1); 579 } 580 in_PREDICT_VAL [port1]->write(0); 581 582 LABEL("Update FLUSH"); 583 in_UPDATE_VAL [port3]->write(1); 584 in_UPDATE_FLUSH[port3]->write(1); 585 for (uint32_t i=0; i<_param->_nb_context; i++) 586 for (uint32_t j=0; j<_param->_size_queue[i]/2; j++) 587 { 588 in_UPDATE_CONTEXT_ID [port3]->write(i); 589 SC_START(1); 590 TEST(Tcontrol_t, out_UPDATE_ACK [port3]->read(), 1); 591 } 592 in_UPDATE_VAL [port3]->write(0); 417 593 } 418 594 }
Note: See TracChangeset
for help on using the changeset viewer.