/* * $Id$ * * [ Description ] * * Test */ #define NB_ITERATION 64 #include "Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/Two_Level_Branch_Predictor_Glue/SelfTest/include/test.h" #include "Common/include/BitManipulation.h" #include "Common/include/Test.h" void test (string name, morpheo::behavioural::stage_1_ifetch::predictor::meta_predictor::two_level_branch_predictor::two_level_branch_predictor_glue::Parameters param) { cout << "<" << name << "> : Simulation SystemC" << endl; try { cout << param.print(1); param.test(); } catch (morpheo::ErrorMorpheo & error) { cout << "<" << name << "> : " << error.what (); return; } catch (...) { cerr << "<" << name << "> : This test must generate a error" << endl; exit (EXIT_FAILURE); } Two_Level_Branch_Predictor_Glue * _Two_Level_Branch_Predictor_Glue = new Two_Level_Branch_Predictor_Glue (name.c_str(), #ifdef STATISTICS morpheo::behavioural::Parameters_Statistics(5,50), #endif param); #ifdef SYSTEMC /********************************************************************* * Déclarations des signaux *********************************************************************/ sc_clock CLOCK ("clock", 1.0, 0.5); sc_signal NRESET; sc_signal PREDICT_BHT_ACK [param._nb_prediction]; sc_signal PREDICT_PHT_ACK [param._nb_prediction]; sc_signal PREDICT_ACK [param._nb_prediction]; sc_signal PREDICT_ADDRESS [param._nb_prediction]; sc_signal PREDICT_BHT_HISTORY [param._nb_prediction]; sc_signal PREDICT_BHT_ADDRESS [param._nb_prediction]; sc_signal PREDICT_PHT_ADDRESS [param._nb_prediction]; sc_signal BRANCH_COMPLETE_BHT_ACK [param._nb_branch_complete]; sc_signal BRANCH_COMPLETE_PHT_ACK [param._nb_branch_complete]; sc_signal BRANCH_COMPLETE_ACK [param._nb_branch_complete]; sc_signal BRANCH_COMPLETE_ADDRESS [param._nb_branch_complete]; sc_signal BRANCH_COMPLETE_BHT_HISTORY [param._nb_branch_complete]; sc_signal BRANCH_COMPLETE_BHT_ADDRESS [param._nb_branch_complete]; sc_signal BRANCH_COMPLETE_PHT_ADDRESS [param._nb_branch_complete]; /******************************************************** * Instanciation ********************************************************/ cout << "<" << name << "> Instanciation of _Two_Level_Branch_Predictor_Glue" << endl; (*(_Two_Level_Branch_Predictor_Glue->in_CLOCK)) (CLOCK); (*(_Two_Level_Branch_Predictor_Glue->in_NRESET)) (NRESET); for (uint32_t i=0; i in_PREDICT_BHT_ACK [i])) (PREDICT_BHT_ACK [i]); (*(_Two_Level_Branch_Predictor_Glue->out_PREDICT_BHT_ADDRESS [i])) (PREDICT_BHT_ADDRESS [i]); } if (param._have_bht and param._have_pht) (*(_Two_Level_Branch_Predictor_Glue-> in_PREDICT_BHT_HISTORY [i])) (PREDICT_BHT_HISTORY [i]); if (param._have_pht) { (*(_Two_Level_Branch_Predictor_Glue-> in_PREDICT_PHT_ACK [i])) (PREDICT_PHT_ACK [i]); (*(_Two_Level_Branch_Predictor_Glue->out_PREDICT_PHT_ADDRESS [i])) (PREDICT_PHT_ADDRESS [i]); } (*(_Two_Level_Branch_Predictor_Glue->out_PREDICT_ACK [i])) (PREDICT_ACK [i]); (*(_Two_Level_Branch_Predictor_Glue-> in_PREDICT_ADDRESS [i])) (PREDICT_ADDRESS [i]); } for (uint32_t i=0; i in_BRANCH_COMPLETE_BHT_ACK [i])) (BRANCH_COMPLETE_BHT_ACK [i]); (*(_Two_Level_Branch_Predictor_Glue->out_BRANCH_COMPLETE_BHT_ADDRESS [i])) (BRANCH_COMPLETE_BHT_ADDRESS [i]); } if (param._have_bht and param._have_pht) (*(_Two_Level_Branch_Predictor_Glue-> in_BRANCH_COMPLETE_BHT_HISTORY [i])) (BRANCH_COMPLETE_BHT_HISTORY [i]); if (param._have_pht) { (*(_Two_Level_Branch_Predictor_Glue-> in_BRANCH_COMPLETE_PHT_ACK [i])) (BRANCH_COMPLETE_PHT_ACK [i]); (*(_Two_Level_Branch_Predictor_Glue->out_BRANCH_COMPLETE_PHT_ADDRESS [i])) (BRANCH_COMPLETE_PHT_ADDRESS [i]); } (*(_Two_Level_Branch_Predictor_Glue->out_BRANCH_COMPLETE_ACK [i])) (BRANCH_COMPLETE_ACK [i]); (*(_Two_Level_Branch_Predictor_Glue-> in_BRANCH_COMPLETE_ADDRESS [i])) (BRANCH_COMPLETE_ADDRESS [i]); } /******************************************************** * Simulation - Begin ********************************************************/ cout << "<" << name << "> Start Simulation ............" << endl; // Initialisation Tcontrol_t predict_bht_ack; Tcontrol_t predict_pht_ack; Tcontrol_t branch_complete_bht_ack; Tcontrol_t branch_complete_pht_ack; srand(0); //srand(time(NULL)); sc_start(0); cout << "{"+toString(static_cast(sc_simulation_time()))+"} Initialisation" << endl; NRESET.write(1); cout << "{"+toString(static_cast(sc_simulation_time()))+"} Test ack" << endl; for (uint32_t iteration=0; iteration(sc_simulation_time()))+"} Test address" << endl; for (uint32_t iteration=0; iteration(param._bht_size_address))); for (uint32_t i=0; i(param._bht_size_address))); } // Pattern History Table if (param._have_pht) { uint32_t shift = (param._have_bht==false)?0:(param._pht_size_address_shift); for (uint32_t i=0; i(param._pht_size_address))); for (uint32_t i=0; i(param._pht_size_address))); } sc_start(1); } /******************************************************** * Simulation - End ********************************************************/ cout << "<" << name << "> ............ Stop Simulation" << endl; #endif delete _Two_Level_Branch_Predictor_Glue; }