int sc_main(int ac, char *av[]) { //! ISA simulator // adicionados novos processadores mips mips1_proc1("mips1"); mips mips2_proc2("mips2"); mips mips3_proc3("mips3"); mips mips4_proc4("mips4"); mips mips5_proc5("mips5"); mips mips6_proc6("mips6"); mips mips7_proc7("mips7"); mips mips8_proc8("mips8"); //! Memory ac_tlm_mem mem("mem"); //! Novos modulos do P3 user::bw_hardware bw("bw_hardware1"); user::bar_mem bar("bar_mem1"); user::mutex_token mutex("mutex_token1"); bar.DM_port(mem.target_export); bar.BW_port(bw.target_export); bar.MUTEX_port(mutex.target_export); #ifdef AC_DEBUG ac_trace("mips1_proc1.trace"); #endif //conecta os processadores no barramento mips1_proc1.DM_port(bar.target_export1); mips2_proc2.DM_port(bar.target_export2); mips3_proc3.DM_port(bar.target_export3); mips4_proc4.DM_port(bar.target_export4); mips5_proc5.DM_port(bar.target_export5); mips6_proc6.DM_port(bar.target_export6); mips7_proc7.DM_port(bar.target_export7); mips8_proc8.DM_port(bar.target_export8); char * program = av[1]; //inicia os processadores mips1_proc1.init(ac, av); av[1] = program; mips2_proc2.init(ac, av); av[1] = program; mips3_proc3.init(ac, av); av[1] = program; mips4_proc4.init(ac, av); av[1] = program; mips5_proc5.init(ac, av); av[1] = program; mips6_proc6.init(ac, av); av[1] = program; mips7_proc7.init(ac, av); av[1] = program; mips8_proc8.init(ac, av); cerr << endl; sc_start(); //imprime o status dos processadores mips1_proc1.PrintStat(); mips2_proc2.PrintStat(); mips3_proc3.PrintStat(); mips4_proc4.PrintStat(); mips5_proc5.PrintStat(); mips6_proc6.PrintStat(); mips7_proc7.PrintStat(); mips8_proc8.PrintStat(); cerr << endl; #ifdef AC_STATS mips1_proc1.ac_sim_stats.time = sc_simulation_time(); mips1_proc1.ac_sim_stats.print(); #endif #ifdef AC_DEBUG ac_close_trace(); #endif return mips1_proc1.ac_exit_status; }
int sc_main(int ac, char *av[]) { //! ISA simulator // Cria todos os modulos mips1 mips1_proc0("mips0"); mips1 mips1_proc1("mips1"); mips1 mips1_proc2("mips2"); mips1 mips1_proc3("mips3"); mips1 mips1_proc4("mips4"); mips1 mips1_proc5("mips5"); mips1 mips1_proc6("mips6"); mips1 mips1_proc7("mips7"); ac_tlm_mem mem("mem"); ac_tlm_bus bus("bus"); ac_tlm_mutex mutex("mutex"); ac_tlm_offload offload("offload"); #ifdef AC_DEBUG ac_trace("mips1_proc0.trace"); ac_trace("mips1_proc1.trace"); ac_trace("mips1_proc2.trace"); ac_trace("mips1_proc3.trace"); ac_trace("mips1_proc4.trace"); ac_trace("mips1_proc5.trace"); ac_trace("mips1_proc6.trace"); ac_trace("mips1_proc7.trace"); #endif // Conecta as CPUs as bus mips1_proc0.DM_port(bus.cpu0_target_export); mips1_proc1.DM_port(bus.cpu1_target_export); mips1_proc2.DM_port(bus.cpu2_target_export); mips1_proc3.DM_port(bus.cpu3_target_export); mips1_proc4.DM_port(bus.cpu4_target_export); mips1_proc5.DM_port(bus.cpu5_target_export); mips1_proc6.DM_port(bus.cpu6_target_export); mips1_proc7.DM_port(bus.cpu7_target_export); // Conecta a bus aos outros modulos bus.mem_port(mem.target_export); bus.mutex_port(mutex.target_export); bus.offload_port(offload.target_export); // Gera argc e argv para os processadores char **av2 = (char **)malloc(ac*sizeof(char *)); for(int i = 0; i < ac; i++) av2[i] = (char *)malloc(strlen(av[i])*sizeof(char)); avcpy(ac, av2, av); mips1_proc0.init(ac, av2); avcpy(ac, av2, av); mips1_proc1.init(ac, av2); avcpy(ac, av2, av); mips1_proc2.init(ac, av2); avcpy(ac, av2, av); mips1_proc3.init(ac, av2); avcpy(ac, av2, av); mips1_proc4.init(ac, av2); avcpy(ac, av2, av); mips1_proc5.init(ac, av2); avcpy(ac, av2, av); mips1_proc6.init(ac, av2); avcpy(ac, av2, av); mips1_proc7.init(ac, av2); cerr << endl; sc_start(); mips1_proc0.PrintStat(); mips1_proc1.PrintStat(); mips1_proc2.PrintStat(); mips1_proc3.PrintStat(); mips1_proc4.PrintStat(); mips1_proc5.PrintStat(); mips1_proc6.PrintStat(); mips1_proc7.PrintStat(); cerr << endl; #ifdef AC_STATS mips1_proc0.ac_sim_stats.time = sc_simulation_time(); mips1_proc0.ac_sim_stats.print(); mips1_proc1.ac_sim_stats.print(); mips1_proc2.ac_sim_stats.print(); mips1_proc3.ac_sim_stats.print(); mips1_proc4.ac_sim_stats.print(); mips1_proc5.ac_sim_stats.print(); mips1_proc6.ac_sim_stats.print(); mips1_proc7.ac_sim_stats.print(); #endif #ifdef AC_DEBUG ac_close_trace(); #endif return mips1_proc0.ac_exit_status; }