/* * $Id: test.cpp 88 2008-12-10 18:31:39Z rosiere $ * * [ Description ] * * Test */ #define NB_ITERATION 1 #define CYCLE_MAX (2048*NB_ITERATION) #include "Behavioural/Generic/Queue/SelfTest/include/test.h" #include "Common/include/Test.h" void test (string name, morpheo::behavioural::generic::queue::Parameters * _param) { cout << "<" << name << "> : Simulation SystemC" << endl; #ifdef STATISTICS morpheo::behavioural::Parameters_Statistics * _parameters_statistics = new morpheo::behavioural::Parameters_Statistics (5,50); #endif Tusage_t _usage = USE_ALL; // _usage = usage_unset(_usage,USE_SYSTEMC ); // _usage = usage_unset(_usage,USE_VHDL ); // _usage = usage_unset(_usage,USE_VHDL_TESTBENCH ); // _usage = usage_unset(_usage,USE_VHDL_TESTBENCH_ASSERT); // _usage = usage_unset(_usage,USE_POSITION ); // _usage = usage_unset(_usage,USE_STATISTICS ); // _usage = usage_unset(_usage,USE_INFORMATION ); Queue * _Queue = new Queue (name.c_str(), #ifdef STATISTICS _parameters_statistics, #endif _param, _usage); #ifdef SYSTEMC /********************************************************************* * Déclarations des signaux *********************************************************************/ string rename; sc_clock * in_CLOCK = new sc_clock ("clock", 1.0, 0.5); sc_signal * in_NRESET = new sc_signal ("NRESET"); sc_signal * in_INSERT_VAL = new sc_signal ( "in_INSERT_VAL" ); sc_signal * out_INSERT_ACK = new sc_signal ("out_INSERT_ACK" ); sc_signal * in_INSERT_DATA = new sc_signal ( "in_INSERT_DATA"); sc_signal * out_RETIRE_VAL = new sc_signal ("out_RETIRE_VAL" ); sc_signal * in_RETIRE_ACK = new sc_signal ( "in_RETIRE_ACK" ); sc_signal * out_RETIRE_DATA = new sc_signal ("out_RETIRE_DATA"); /******************************************************** * Instanciation ********************************************************/ cout << "<" << name << "> Instanciation of _Queue" << endl; (*(_Queue->in_CLOCK)) (*(in_CLOCK)); (*(_Queue->in_NRESET)) (*(in_NRESET)); (*(_Queue-> in_INSERT_VAL )) (*( in_INSERT_VAL )); (*(_Queue->out_INSERT_ACK )) (*(out_INSERT_ACK )); (*(_Queue-> in_INSERT_DATA)) (*( in_INSERT_DATA)); (*(_Queue->out_RETIRE_VAL )) (*(out_RETIRE_VAL )); (*(_Queue-> in_RETIRE_ACK )) (*( in_RETIRE_ACK )); (*(_Queue->out_RETIRE_DATA)) (*(out_RETIRE_DATA)); cout << "<" << name << "> Start Simulation ............" << endl; Time * _time = new Time(); /******************************************************** * Simulation - Begin ********************************************************/ // Initialisation const int32_t percent_insert_transaction = 75; const int32_t percent_retire_transaction = 75; const uint32_t nb_request = 3*_param->_size_queue; const uint32_t seed = 0; //const uint32_t seed = static_cast(time(NULL)); srand(seed); SC_START(0); LABEL("Initialisation"); in_INSERT_VAL -> write(0); in_RETIRE_ACK -> write(0); LABEL("Reset"); in_NRESET->write(0); SC_START(5); in_NRESET->write(1); LABEL("Loop of Test"); uint32_t data_in = 0; uint32_t data_out = 0; for (uint32_t iteration=0; iteration write((rand()%100) write(data_in); in_RETIRE_ACK -> write((rand()%100)read() and out_INSERT_ACK->read()) { LABEL ("Transaction with interface : INSERT"); data_in ++; } if (out_RETIRE_VAL->read() and in_RETIRE_ACK->read()) { LABEL ("Transaction with interface : RETIRE"); TEST(Tdata_t, out_RETIRE_DATA->read(), data_out); data_out++; } SC_START(1); } } /******************************************************** * Simulation - End ********************************************************/ TEST_OK ("End of Simulation"); delete _time; cout << "<" << name << "> ............ Stop Simulation" << endl; delete in_CLOCK; delete in_NRESET; #endif delete _Queue; #ifdef STATISTICS delete _parameters_statistics; #endif }