/* * $Id: main.cpp 131 2009-07-08 18:40:08Z rosiere $ * * [ Description ] * */ #include "Behavioural/Core/Multi_Execute_loop/Execute_loop/SelfTest/include/test.h" #include "Behavioural/include/Allocation.h" #define NB_PARAMS 18 void usage (int argc, char * argv[]) { err (_(" %s name_instance list_params.\n"),argv[0]); err (_("list_params is :\n")); err (_(" * nb_read_unit (uint32_t )\n")); err (_(" * nb_functionnal_unit (uint32_t )\n")); err (_(" * nb_load_store_unit (uint32_t )\n")); err (_(" * nb_write_unit (uint32_t )\n")); err (_(" * nb_context (uint32_t )\n")); err (_(" * nb_front_end (uint32_t )\n")); err (_(" * nb_ooo_engine (uint32_t )\n")); err (_(" * nb_packet (uint32_t )\n")); err (_(" * size_general_data (uint32_t )\n")); err (_(" * size_special_data (uint32_t )\n")); err (_(" * size_read_queue [nb_read_unit] (uint32_t )\n")); err (_(" * size_reservation_station [nb_read_unit] (uint32_t )\n")); err (_(" * nb_inst_retire [nb_read_unit] (uint32_t )\n")); err (_(" * nb_inst_functionnal_unit [nb_functionnal_unit] (uint32_t )\n")); err (_(" * size_store_queue [nb_load_store_unit] (uint32_t )\n")); err (_(" * size_load_queue [nb_load_store_unit] (uint32_t )\n")); err (_(" * size_speculative_access_queue [nb_load_store_unit] (uint32_t )\n")); err (_(" * nb_port_check [nb_load_store_unit] (uint32_t )\n")); err (_(" * speculative_load [nb_load_store_unit] (Tspeculative_load_t)\n")); err (_(" * nb_bypass_memory [nb_load_store_unit] (uint32_t )\n")); err (_(" * nb_cache_port [nb_load_store_unit] (uint32_t )\n")); err (_(" * nb_inst_memory [nb_load_store_unit] (uint32_t )\n")); err (_(" * size_write_queue [nb_write_unit] (uint32_t )\n")); err (_(" * size_execute_queue [nb_write_unit] (uint32_t )\n")); err (_(" * nb_bypass_write [nb_write_unit] (uint32_t )\n")); err (_(" * write_queue_scheme [nb_write_unit] (Twrite_queue_scheme_t)\n")); err (_(" * nb_gpr_bank (uint32_t )\n")); err (_(" * nb_gpr_port_read_by_bank (uint32_t )\n")); err (_(" * nb_gpr_port_write_by_bank (uint32_t )\n")); err (_(" * nb_spr_bank (uint32_t )\n")); err (_(" * nb_spr_port_read_by_bank (uint32_t )\n")); err (_(" * nb_spr_port_write_by_bank (uint32_t )\n")); err (_(" * nb_general_register [nb_ooo_engine] (uint32_t )\n")); err (_(" * nb_special_register [nb_ooo_engine] (uint32_t )\n")); err (_(" * nb_inst_insert_rob [nb_ooo_engine] (uint32_t )\n")); err (_(" * nb_inst_retire_rob [nb_ooo_engine] (uint32_t )\n")); err (_(" * execution_unit_to_write_unit_priority (Tpriority_t )\n")); err (_(" * execution_unit_to_write_unit_table_routing[nb_execute_unit][nb_execute_unit_port][nb_write_unit] (bool )\n")); err (_(" * execution_unit_to_write_unit_table_thread [nb_write_unit][nb_thread] (bool )\n")); err (_(" * read_unit_to_execution_unit_priority (Tpriority_t )\n")); err (_(" * read_unit_to_execution_unit_table_routing [nb_read_unit][nb_execute_unit][nb_execute_unit_port] (bool )\n")); err (_(" * read_unit_to_execution_unit_table_thread [nb_execute_unit][nb_thread] (bool )\n")); err (_(" * is_load_store_unit [nb_execute_unit] (bool )\n")); err (_(" * translate_num_execute_unit [nb_execute_unit] (uint32_t )\n")); exit (1); } #ifndef SYSTEMC int main (int argc, char * argv[]) #else int sc_main (int argc, char * argv[]) #endif { // Command for (int32_t i=0; i(argv[x++]); uint32_t * nb_bypass_memory = new uint32_t [nb_load_store_unit]; for (uint32_t i=0; i(argv[x++]); uint32_t nb_gpr_bank = atoi(argv[x++]); uint32_t nb_gpr_port_read_by_bank = atoi(argv[x++]); uint32_t nb_gpr_port_write_by_bank = atoi(argv[x++]); uint32_t nb_spr_bank = atoi(argv[x++]); uint32_t nb_spr_port_read_by_bank = atoi(argv[x++]); uint32_t nb_spr_port_write_by_bank = atoi(argv[x++]); uint32_t * nb_general_register = new uint32_t [nb_ooo_engine]; for (uint32_t i=0; i(argv[x++]); bool *** execution_unit_to_write_unit_table_routing = new bool ** [nb_execute_unit]; for (uint32_t i=0; i(argv[x++]); bool *** read_unit_to_execution_unit_table_routing = new bool ** [nb_read_unit]; for (uint32_t i=0; i(argv[x++]); uint32_t * translate_num_execute_unit = new uint32_t [nb_execute_unit]; for (uint32_t i=0; i(argv[x++]); execute_timing_t *** timing = new execute_timing_t ** [nb_functionnal_unit]; // alloc and reset timing array for (uint32_t i=0; i< nb_functionnal_unit; i++) { timing [i] = new execute_timing_t * [MAX_TYPE]; for (uint32_t j=0; j< MAX_TYPE; j++) { timing [i][j]= new execute_timing_t [MAX_OPERATION]; for (uint32_t k=0; k< MAX_OPERATION; k++) timing[i][j][k]._delay = timing[i][j][k]._latence = 0; } } for (uint32_t i=0; i< nb_functionnal_unit; i++) for (uint32_t j=0; j< MAX_TYPE; j++) { if ( (j != TYPE_MEMORY) and not ((i!=0) and ((j == TYPE_SPECIAL) or (j == TYPE_CUSTOM)))) for (uint32_t k=0; k< MAX_OPERATION; k++) timing[i][j][k]._delay = timing[i][j][k]._latence = 1; } morpheo::behavioural::custom::custom_information_t (*get_custom_information) (void) = &(morpheo::behavioural::custom::default_get_custom_information); bool * num_thread_valid; ALLOC1(num_thread_valid ,bool, nb_thread); for (uint32_t i=0; i :\n%s"),name.c_str(), error.what ()); _return = EXIT_FAILURE; } try { if (_return == EXIT_SUCCESS) TEST_OK("OOO_Engine : no error"); else TEST_KO("OOO_Engine : a lot of error"); } catch (morpheo::ErrorMorpheo & error) { // msg (_("<%s> :\n%s"),name.c_str(), error.what ()); _return = EXIT_FAILURE; } for (uint32_t i=0; i< nb_functionnal_unit; i++) { for (uint32_t j=0; j< MAX_TYPE; j++) delete [] timing [i][j]; delete [] timing [i]; } delete [] timing; DELETE1(translate_num_execute_unit ,_nb_execute_unit); DELETE1(is_load_store_unit ,_nb_execute_unit); for (uint32_t i=0; i