- Timestamp:
- Jan 24, 2011, 5:36:50 PM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/platforms/caba-ring-ccxcachev4_memcachev4-mips32el/top.cpp
r107 r134 1 2 1 #include <systemc> 3 2 #include <sys/time.h> 4 3 #include <iostream> 4 #include <sstream> 5 5 #include <cstdlib> 6 6 #include <cstdarg> 7 #include <stdint.h> 8 #include <fstream> 7 9 8 10 #include "mapping_table.h" 9 11 #include "mips32.h" 12 #include "vci_simhelper.h" 10 13 #include "vci_simple_ram.h" 11 14 #include "vci_multi_tty.h" 15 #include "vci_xicu.h" 12 16 #include "vci_simple_ring_network_2.h" 13 17 #include "vci_vgmn.h" 14 18 #include "vci_mem_cache_v4.h" 15 19 #include "vci_cc_xcache_wrapper_v4.h" 16 #include " vci_logger.h"20 #include "alloc_elems.h" 17 21 18 22 #include "iss/gdbserver.h" 19 23 20 //#define VCI_LOGGER21 24 #include "segmentation.h" 22 #define USE_VGMN 25 26 //=========================================== 27 // Define before include 28 //=========================================== 29 30 // Parameters 31 // * Platforms 32 # define PARAM_VCI 4,8,32,1,1,1,8,4,4,1 33 34 # define USE_OLD_XCACHE 1 35 # define USE_VGMN 1 36 # define NB_PROC_MIN 1 37 # define NB_PROC_MAX 15 38 // min_latency, fifo_depth 39 # define PARAM_VGMN_P 1 , 8 40 # define PARAM_VGMN_C 1 , 8 41 # define PARAM_VGMN_X 2 , 8 42 // wrapper_fifo_depth 43 # define PARAM_RING_P 2 44 # define PARAM_RING_C 2 45 # define PARAM_RING_X 2 46 // pti , hwi , wti, irq 47 # define PARAM_XICU nb_proc, nb_proc, 0 , nb_proc 48 49 // * Debug 50 # define DEBUG_TOP 0 51 # define SOCVIEW 0 52 # define STOP_SIMULATION_NB_FRZ_CYCLES 100000 53 54 // * Simulation 55 # define FILE_DEFAULT "configuration/default.cfg" 56 # define NCYCLES_DEFAULT 0 57 # define SOFT_DEFAULT "soft/bin.soft" 58 //=========================================== 59 60 void usage (char * funcname) 61 { 62 std::cout << funcname << " [nb_cycle [file [soft]]] " << std::endl; 63 std::cout << " * nb_cycle : number of simulated cycle, if 0 then no stop condition. (default : " << NCYCLES_DEFAULT << " cycle(s))" << endl; 64 std::cout << " * file : Configuration file : nb_proc, iways, isets, iwords, dways, dsets, dwords, wnwords, wnlines, wtimeout, memc_nways, memc_nsets, memc_words, memc_heap_size. (default : " << FILE_DEFAULT << " cycle(s))" << endl; 65 std::cout << " * soft : software executed by this platforms. (default : \"" << SOFT_DEFAULT << "\")" << endl; 66 67 exit(1); 68 } 23 69 24 70 int _main(int argc, char *argv[]) 25 71 { 72 if ((argc < 1) or (argc > 4)) 73 { 74 std::cout << "Invalid parameters number." << std::endl; 75 usage(argv[0]); 76 } 77 78 #if not SOCVIEW 79 int ncycles = 0; 80 81 if (argc >= 2) 82 ncycles = std::atoi(argv[1]); 83 else 84 ncycles = NCYCLES_DEFAULT; 85 86 if (ncycles == 0) 87 ncycles = -1; 88 #endif 89 90 uint32_t nb_proc; 91 uint32_t iways, isets, iwords; 92 uint32_t dways, dsets, dwords; 93 uint32_t wnwords, wnlines, wtimeout; 94 uint32_t memc_nways, memc_nsets, memc_words, memc_heap_size; 95 96 std::ifstream inFile; 97 const char * filename = (argc>=3)?argv[2]:FILE_DEFAULT; 98 99 inFile.open(filename); 100 101 if (!inFile) 102 { 103 std::cout << "Can't open file : \"" << filename << "\"." << std::endl; 104 usage(argv[0]); 105 } 106 107 std::string str; 108 if (not (inFile >> str)){std::cout << "Invalid parameters number in configuration file." << std::endl; usage(argv[0]);} 109 nb_proc =std::atoi(str.c_str()); 110 if (not (inFile >> str)){std::cout << "Invalid parameters number in configuration file." << std::endl; usage(argv[0]);} 111 iways =std::atoi(str.c_str()); 112 if (not (inFile >> str)){std::cout << "Invalid parameters number in configuration file." << std::endl; usage(argv[0]);} 113 isets =std::atoi(str.c_str()); 114 if (not (inFile >> str)){std::cout << "Invalid parameters number in configuration file." << std::endl; usage(argv[0]);} 115 iwords =std::atoi(str.c_str()); 116 if (not (inFile >> str)){std::cout << "Invalid parameters number in configuration file." << std::endl; usage(argv[0]);} 117 dways =std::atoi(str.c_str()); 118 if (not (inFile >> str)){std::cout << "Invalid parameters number in configuration file." << std::endl; usage(argv[0]);} 119 dsets =std::atoi(str.c_str()); 120 if (not (inFile >> str)){std::cout << "Invalid parameters number in configuration file." << std::endl; usage(argv[0]);} 121 dwords =std::atoi(str.c_str()); 122 if (not (inFile >> str)){std::cout << "Invalid parameters number in configuration file." << std::endl; usage(argv[0]);} 123 wnwords =std::atoi(str.c_str()); 124 if (not (inFile >> str)){std::cout << "Invalid parameters number in configuration file." << std::endl; usage(argv[0]);} 125 wnlines =std::atoi(str.c_str()); 126 if (not (inFile >> str)){std::cout << "Invalid parameters number in configuration file." << std::endl; usage(argv[0]);} 127 wtimeout =std::atoi(str.c_str()); 128 if (not (inFile >> str)){std::cout << "Invalid parameters number in configuration file." << std::endl; usage(argv[0]);} 129 memc_nways =std::atoi(str.c_str()); 130 if (not (inFile >> str)){std::cout << "Invalid parameters number in configuration file." << std::endl; usage(argv[0]);} 131 memc_nsets =std::atoi(str.c_str()); 132 if (not (inFile >> str)){std::cout << "Invalid parameters number in configuration file." << std::endl; usage(argv[0]);} 133 memc_words =std::atoi(str.c_str()); 134 if (not (inFile >> str)){std::cout << "Invalid parameters number in configuration file." << std::endl; usage(argv[0]);} 135 memc_heap_size =std::atoi(str.c_str()); 136 137 if ((nb_proc<NB_PROC_MIN) or 138 (nb_proc>NB_PROC_MAX)) 139 { 140 std::cout << "Parameters nb_proc is out of bound." << std::endl; 141 usage(argv[0]); 142 } 143 144 char * soft; 145 146 if (argc >= 4) 147 soft = argv[3]; 148 else 149 soft = SOFT_DEFAULT; 150 151 std::cout << " * Parameters : " << std::endl; 152 std::cout << " * nb_proc : " << nb_proc << std::endl; 153 std::cout << " * iways : " << iways << std::endl; 154 std::cout << " * isets : " << isets << std::endl; 155 std::cout << " * iwords : " << iwords << std::endl; 156 std::cout << " * dways : " << dways << std::endl; 157 std::cout << " * dsets : " << dsets << std::endl; 158 std::cout << " * dwords : " << dwords << std::endl; 159 std::cout << " * wnwords : " << wnwords << std::endl; 160 std::cout << " * wnlines : " << wnlines << std::endl; 161 std::cout << " * wtimeout : " << wtimeout << std::endl; 162 std::cout << " * memc_nways : " << memc_nways << std::endl; 163 std::cout << " * memc_nsets : " << memc_nsets << std::endl; 164 std::cout << " * memc_words : " << memc_words << std::endl; 165 std::cout << " * memc_heap_size : " << memc_heap_size << std::endl; 166 std::cout << " * Simulation : " << std::endl; 167 std::cout << " * ncycles : " << ncycles << std::endl; 168 std::cout << " * soft : " << soft << std::endl; 169 26 170 using namespace sc_core; 27 171 // Avoid repeating these everywhere … … 30 174 31 175 // Define VCI parameters 32 typedef soclib::caba::VciParams< 4,8,32,1,1,1,8,4,4,1> vci_param;176 typedef soclib::caba::VciParams<PARAM_VCI> vci_param; 33 177 typedef soclib::common::GdbServer<soclib::common::Mips32ElIss> proc_iss; 34 178 // Mapping table 35 179 36 soclib::common::MappingTable maptabp(32, IntTab(8), IntTab(8), 0x00300000); 37 38 maptabp.add(Segment("reset", RESET_BASE, RESET_SIZE, IntTab(2), true)); 39 maptabp.add(Segment("excep", EXCEP_BASE, EXCEP_SIZE, IntTab(2), true)); 40 maptabp.add(Segment("text" , TEXT_BASE , TEXT_SIZE , IntTab(2), true)); 41 maptabp.add(Segment("tty" , TTY_BASE , TTY_SIZE , IntTab(1), false)); 42 maptabp.add(Segment("mc_r" , MC_R_BASE , MC_R_SIZE , IntTab(2), false, true, IntTab(0))); 43 maptabp.add(Segment("mc_m" , MC_M_BASE , MC_M_SIZE , IntTab(2), true )); 44 maptabp.add(Segment("ptba" , PTD_ADDR , TAB_SIZE , IntTab(2), true)); 180 soclib::common::MappingTable maptabp(32, IntTab(8), IntTab(8), 0x00300000); // size, level_addr_bits, level_id_bits, cacheability_mask 181 182 maptabp.add(Segment("reset" , RESET_BASE , RESET_SIZE , IntTab(2), true)); 183 maptabp.add(Segment("excep" , EXCEP_BASE , EXCEP_SIZE , IntTab(2), true)); 184 185 maptabp.add(Segment("tty" , TTY_BASE , TTY_SIZE , IntTab(1), false)); 186 maptabp.add(Segment("text" , TEXT_BASE , TEXT_SIZE , IntTab(2), true)); 187 maptabp.add(Segment("mc_r" , MC_R_BASE , MC_R_SIZE , IntTab(2), false, true, IntTab(0))); 188 maptabp.add(Segment("mc_m" , MC_M_BASE , MC_M_SIZE , IntTab(2), true)); 189 // maptabp.add(Segment("ptba" , PTD_ADDR , TAB_SIZE , IntTab(2), true)); 190 maptabp.add(Segment("xicu" , XICU_BASE , XICU_SIZE , IntTab(3), false)); 191 maptabp.add(Segment("simhelper", SIMHELPER_BASE, SIMHELPER_SIZE, IntTab(4), false)); 45 192 46 193 std::cout << maptabp << std::endl; 47 194 48 195 soclib::common::MappingTable maptabc(32, IntTab(8), IntTab(8), 0x00300000); 49 maptabc.add(Segment("c_proc0" , C_PROC0_BASE , C_PROC0_SIZE , IntTab(0), false, true, IntTab(0))); 50 maptabc.add(Segment("c_proc1" , C_PROC1_BASE , C_PROC1_SIZE , IntTab(1), false, true, IntTab(1))); 51 maptabc.add(Segment("c_proc2" , C_PROC2_BASE , C_PROC2_SIZE , IntTab(2), false, true, IntTab(2))); 52 maptabc.add(Segment("c_proc3" , C_PROC3_BASE , C_PROC3_SIZE , IntTab(3), false, true, IntTab(3))); 53 maptabc.add(Segment("mc_r" , MC_R_BASE , MC_R_SIZE , IntTab(4), false, false)); 54 maptabc.add(Segment("mc_m" , MC_M_BASE , MC_M_SIZE , IntTab(4), false, false)); 55 maptabc.add(Segment("reset", RESET_BASE, RESET_SIZE, IntTab(4), false, false)); 56 maptabc.add(Segment("excep", EXCEP_BASE, EXCEP_SIZE, IntTab(4), false, false)); 57 maptabc.add(Segment("text" , TEXT_BASE , TEXT_SIZE , IntTab(4), false, false)); 58 maptabc.add(Segment("ptba" , PTD_ADDR , TAB_SIZE , IntTab(4), false, false)); 196 for (uint32_t i=0; i<nb_proc; ++i) 197 { 198 std::ostringstream str; 199 str << "c_proc_" << i; 200 maptabc.add(Segment(str.str().c_str(), C_PROC_BASE+i*C_PROC_SPAN, C_PROC_SIZE , IntTab(i), false, true, IntTab(i))); 201 } 202 maptabc.add(Segment("mc_r" , MC_R_BASE , MC_R_SIZE , IntTab(nb_proc), false, false)); 203 maptabc.add(Segment("mc_m" , MC_M_BASE , MC_M_SIZE , IntTab(nb_proc), false, false)); 204 maptabc.add(Segment("reset" , RESET_BASE , RESET_SIZE , IntTab(nb_proc), false, false)); 205 maptabc.add(Segment("excep" , EXCEP_BASE , EXCEP_SIZE , IntTab(nb_proc), false, false)); 206 maptabc.add(Segment("text" , TEXT_BASE , TEXT_SIZE , IntTab(nb_proc), false, false)); 207 // maptabc.add(Segment("ptba" , PTD_ADDR , TAB_SIZE , IntTab(nb_proc), false, false)); 59 208 60 209 std::cout << maptabc << std::endl; … … 65 214 maptabx.add(Segment("excep", EXCEP_BASE, EXCEP_SIZE, IntTab(0), false)); 66 215 maptabx.add(Segment("text" , TEXT_BASE , TEXT_SIZE , IntTab(0), false)); 67 maptabx.add(Segment("ptba" , PTD_ADDR , TAB_SIZE , IntTab(0), false));216 // maptabx.add(Segment("ptba" , PTD_ADDR , TAB_SIZE , IntTab(0), false)); 68 217 69 218 std::cout << maptabx << std::endl; … … 73 222 sc_signal<bool> signal_resetn("resetn"); 74 223 75 sc_signal<bool> signal_proc0_it0("proc0_it0"); 76 sc_signal<bool> signal_proc0_it1("proc0_it1"); 77 sc_signal<bool> signal_proc0_it2("proc0_it2"); 78 sc_signal<bool> signal_proc0_it3("proc0_it3"); 79 sc_signal<bool> signal_proc0_it4("proc0_it4"); 80 sc_signal<bool> signal_proc0_it5("proc0_it5"); 81 82 sc_signal<bool> signal_proc1_it0("proc1_it0"); 83 sc_signal<bool> signal_proc1_it1("proc1_it1"); 84 sc_signal<bool> signal_proc1_it2("proc1_it2"); 85 sc_signal<bool> signal_proc1_it3("proc1_it3"); 86 sc_signal<bool> signal_proc1_it4("proc1_it4"); 87 sc_signal<bool> signal_proc1_it5("proc1_it5"); 88 89 sc_signal<bool> signal_proc2_it0("proc2_it0"); 90 sc_signal<bool> signal_proc2_it1("proc2_it1"); 91 sc_signal<bool> signal_proc2_it2("proc2_it2"); 92 sc_signal<bool> signal_proc2_it3("proc2_it3"); 93 sc_signal<bool> signal_proc2_it4("proc2_it4"); 94 sc_signal<bool> signal_proc2_it5("proc2_it5"); 95 96 sc_signal<bool> signal_proc3_it0("proc3_it0"); 97 sc_signal<bool> signal_proc3_it1("proc3_it1"); 98 sc_signal<bool> signal_proc3_it2("proc3_it2"); 99 sc_signal<bool> signal_proc3_it3("proc3_it3"); 100 sc_signal<bool> signal_proc3_it4("proc3_it4"); 101 sc_signal<bool> signal_proc3_it5("proc3_it5"); 102 103 soclib::caba::VciSignals<vci_param> signal_vci_ini_rw_proc0("vci_ini_rw_proc0"); 104 soclib::caba::VciSignals<vci_param> signal_vci_ini_c_proc0("vci_ini_c_proc0"); 105 106 soclib::caba::VciSignals<vci_param> signal_vci_tgt_proc0("vci_tgt_proc0"); 107 108 soclib::caba::VciSignals<vci_param> signal_vci_ini_rw_proc1("vci_ini_rw_proc1"); 109 soclib::caba::VciSignals<vci_param> signal_vci_ini_c_proc1("vci_ini_c_proc1"); 110 111 soclib::caba::VciSignals<vci_param> signal_vci_tgt_proc1("vci_tgt_proc1"); 112 113 soclib::caba::VciSignals<vci_param> signal_vci_ini_rw_proc2("vci_ini_rw_proc2"); 114 soclib::caba::VciSignals<vci_param> signal_vci_ini_c_proc2("vci_ini_c_proc2"); 115 116 soclib::caba::VciSignals<vci_param> signal_vci_tgt_proc2("vci_tgt_proc2"); 117 118 soclib::caba::VciSignals<vci_param> signal_vci_ini_rw_proc3("vci_ini_rw_proc3"); 119 soclib::caba::VciSignals<vci_param> signal_vci_ini_c_proc3("vci_ini_c_proc3"); 120 121 soclib::caba::VciSignals<vci_param> signal_vci_tgt_proc3("vci_tgt_proc3"); 224 sc_signal<bool> ** signal_proc_it = soclib::common::alloc_elems<sc_signal<bool> >("proc_it", nb_proc, 6); 225 226 soclib::caba::VciSignals<vci_param> * signal_vci_ini_rw_proc = soclib::common::alloc_elems<soclib::caba::VciSignals<vci_param> >("vci_ini_rw_proc", nb_proc); 227 soclib::caba::VciSignals<vci_param> * signal_vci_ini_c_proc = soclib::common::alloc_elems<soclib::caba::VciSignals<vci_param> >("vci_ini_c_proc" , nb_proc); 228 soclib::caba::VciSignals<vci_param> * signal_vci_tgt_proc = soclib::common::alloc_elems<soclib::caba::VciSignals<vci_param> >("vci_tgt_proc" , nb_proc); 122 229 123 230 soclib::caba::VciSignals<vci_param> signal_vci_tgt_tty("vci_tgt_tty"); 124 231 232 soclib::caba::VciSignals<vci_param> signal_vci_tgt_simhelper("signal_vci_tgt_simhelper"); 233 125 234 soclib::caba::VciSignals<vci_param> signal_vci_tgt_rom("vci_tgt_rom"); 126 235 127 236 soclib::caba::VciSignals<vci_param> signal_vci_tgt_xram("vci_tgt_xram"); 237 238 soclib::caba::VciSignals<vci_param> signal_vci_tgt_xicu("vci_tgt_xicu"); 128 239 129 240 soclib::caba::VciSignals<vci_param> signal_vci_ixr_memc("vci_ixr_memc"); … … 132 243 soclib::caba::VciSignals<vci_param> signal_vci_tgt_cleanup_memc("vci_tgt_cleanup_memc"); 133 244 134 sc_signal<bool> signal_tty_irq0("signal_tty_irq0"); 135 sc_signal<bool> signal_tty_irq1("signal_tty_irq1"); 136 sc_signal<bool> signal_tty_irq2("signal_tty_irq2"); 137 sc_signal<bool> signal_tty_irq3("signal_tty_irq3"); 138 139 soclib::common::Loader loader("soft/bin.soft"); 140 141 soclib::common::GdbServer<soclib::common::Mips32ElIss>::set_loader(loader); 142 // init_rw init_c tgt 143 /* soclib::caba::VciCcXCacheWrapperV1<vci_param, proc_iss > 144 proc0("proc0", 0, maptabp, maptabc, IntTab(0),IntTab(0),IntTab(0),4,64,16,4,64,16); 145 146 soclib::caba::VciCcXCacheWrapperV1<vci_param, proc_iss > 147 proc1("proc1", 1, maptabp, maptabc, IntTab(1),IntTab(1),IntTab(1),4,64,16,4,64,16); 148 149 soclib::caba::VciCcXCacheWrapperV1<vci_param, proc_iss > 150 proc2("proc2", 2, maptabp, maptabc, IntTab(2),IntTab(2),IntTab(2),4,64,16,4,64,16); 151 152 soclib::caba::VciCcXCacheWrapperV1<vci_param, proc_iss > 153 proc3("proc3", 3, maptabp, maptabc, IntTab(3),IntTab(3),IntTab(3),4,64,16,4,64,16); 154 */ 155 156 soclib::caba::VciCcXCacheWrapperV4<vci_param, proc_iss > 157 proc0("proc0", 0, maptabp, maptabc, IntTab(0),IntTab(0),IntTab(0),1,8,16,1,8,16); 158 159 soclib::caba::VciCcXCacheWrapperV4<vci_param, proc_iss > 160 proc1("proc1", 1, maptabp, maptabc, IntTab(1),IntTab(1),IntTab(1),1,8,16,1,8,16); 161 162 soclib::caba::VciCcXCacheWrapperV4<vci_param, proc_iss > 163 proc2("proc2", 2, maptabp, maptabc, IntTab(2),IntTab(2),IntTab(2),1,8,16,1,8,16); 164 165 soclib::caba::VciCcXCacheWrapperV4<vci_param, proc_iss > 166 proc3("proc3", 3, maptabp, maptabc, IntTab(3),IntTab(3),IntTab(3),1,8,16,1,8,16); 167 245 sc_signal<bool> * signal_tty_irq = soclib::common::alloc_elems<sc_signal<bool> >("signal_tty_irq", nb_proc); 246 247 soclib::common::Loader loader(soft); 248 249 soclib::common::GdbServer<soclib::common::Mips32ElIss>::set_loader(loader); 250 251 soclib::caba::VciCcXCacheWrapperV4<vci_param, proc_iss > * proc [nb_proc]; 252 for (uint32_t i=0; i<nb_proc; ++i) 253 { 254 std::ostringstream str; 255 str << "proc_" << i; 256 257 proc[i] = new soclib::caba::VciCcXCacheWrapperV4<vci_param, proc_iss > (str.str().c_str(), i, maptabp, maptabc, IntTab(i),IntTab(i),IntTab(i) 258 #if USE_OLD_XCACHE 259 ,iways, isets, iwords 260 ,dways, dsets, dwords 261 #else 262 ,iways, isets, iwords 263 ,dways, dsets, dwords 264 ,wnwords, wnlines, wtimeout 265 #endif 266 ); 267 268 #if not USE_OLD_XCACHE 269 proc[i]->stop_simulation(STOP_SIMULATION_NB_FRZ_CYCLES); 270 #endif 271 } 168 272 169 273 soclib::caba::VciSimpleRam<vci_param> 170 rom ("rom", IntTab(0), maptabp, loader);274 rom ("rom", IntTab(0), maptabp, loader); 171 275 172 276 soclib::caba::VciSimpleRam<vci_param> 173 277 xram("xram", IntTab(0), maptabx, loader); 174 278 175 // x_init c_init p_tgt c_tgt279 // x_init c_init p_tgt c_tgt 176 280 soclib::caba::VciMemCacheV4<vci_param> 177 //memc("memc",maptabp,maptabc,maptabx,IntTab(0),IntTab(4),IntTab(2), IntTab(4),16,256,16); 178 //memc("memc",maptabp,maptabc,maptabx,IntTab(0),IntTab(4),IntTab(2), IntTab(4),4,16,16); 179 memc("memc",maptabp,maptabc,maptabx,IntTab(0),IntTab(4),IntTab(2), IntTab(4),4,4,16); 281 memc("memc",maptabp,maptabc,maptabx,IntTab(0),IntTab(nb_proc),IntTab(2),IntTab(nb_proc), memc_nways, memc_nsets, memc_words, memc_heap_size); 282 283 std::vector<std::string> tty_name; 284 for (uint32_t i=0; i<nb_proc; ++i) 285 { 286 std::ostringstream str; 287 str << "tty_" << i; 288 289 tty_name.push_back(str.str()); 290 } 180 291 181 292 soclib::caba::VciMultiTty<vci_param> 182 tty("tty",IntTab(1),maptabp,"tty0","tty1","tty2","tty3",NULL); 183 184 #ifdef VCI_LOGGER 185 soclib::caba::VciLogger<vci_param> vci_logger0("vci_logger0",maptabp); 293 tty("tty",IntTab(1),maptabp,tty_name); 294 295 soclib::caba::VciXicu<vci_param> 296 xicu("xicu", maptabp, IntTab(3), PARAM_XICU); 297 298 // soclib::caba::VciTimer<vci_param> 299 // timer("timer", IntTab(3), maptabp, nb_proc); 300 301 soclib::caba::VciSimhelper<vci_param> 302 simhelper("simhelper", IntTab(4), maptabp); 303 304 // initiatior | target 305 // interconnect_p : proc | rom, tty, memc, xicu, simhelper 306 // interconnect_c : proc, memc | proc, memc 307 // interconnect_x : memc | xram 308 309 #if USE_VGMN 310 soclib::caba::VciVgmn<vci_param> 311 interconnect_p("interconnect_p",maptabp, nb_proc , 5 , PARAM_VGMN_P); 312 313 soclib::caba::VciVgmn<vci_param> 314 interconnect_c("interconnect_c",maptabc, nb_proc+1, nb_proc+1, PARAM_VGMN_C); 315 316 soclib::caba::VciVgmn<vci_param> 317 interconnect_x("interconnect_x",maptabx, 1 , 1 , PARAM_VGMN_X); 318 #else 319 soclib::caba::VciSimpleRingNetwork2<vci_param,37,33> 320 interconnect_p("interconnect_p",maptabp, IntTab(), PARAM_RING_P,nb_proc , 5 ); 321 322 soclib::caba::VciSimpleRingNetwork2<vci_param,37,33> 323 interconnect_c("interconnect_c",maptabc, IntTab(), PARAM_RING_C,nb_proc+1, nb_proc+1); 324 325 soclib::caba::VciSimpleRingNetwork2<vci_param,37,33> 326 interconnect_x("interconnect_x",maptabx, IntTab(), PARAM_RING_X,1 , 1 ); 186 327 #endif 187 #ifdef USE_VGMN 188 soclib::caba::VciVgmn<vci_param> 189 ringp("ringp",maptabp, 4, 3, 1, 8); 190 191 soclib::caba::VciVgmn<vci_param> 192 ringc("ringc",maptabc, 5, 5, 1, 8); 193 194 soclib::caba::VciVgmn<vci_param> 195 ringx("ringx",maptabx, 1, 1, 2, 8); 196 #else 197 198 soclib::caba::VciSimpleRingNetwork2<vci_param,37,33> 199 ringp("ringp",maptabp, IntTab(), 2, 4, 3); 200 201 soclib::caba::VciSimpleRingNetwork2<vci_param,37,33> 202 ringc("ringc",maptabc, IntTab(), 2, 5, 5); 203 204 soclib::caba::VciSimpleRingNetwork2<vci_param,37,33> 205 ringx("ringx",maptabx, IntTab(), 2, 1, 1); 206 #endif 328 207 329 // Net-List 208 209 proc0.p_clk(signal_clk); 210 proc0.p_resetn(signal_resetn); 211 proc0.p_irq[0](signal_proc0_it0); 212 proc0.p_irq[1](signal_proc0_it1); 213 proc0.p_irq[2](signal_proc0_it2); 214 proc0.p_irq[3](signal_proc0_it3); 215 proc0.p_irq[4](signal_proc0_it4); 216 proc0.p_irq[5](signal_proc0_it5); 217 proc0.p_vci_ini_rw(signal_vci_ini_rw_proc0); 218 proc0.p_vci_ini_c(signal_vci_ini_c_proc0); 219 proc0.p_vci_tgt(signal_vci_tgt_proc0); 220 221 proc1.p_clk(signal_clk); 222 proc1.p_resetn(signal_resetn); 223 proc1.p_irq[0](signal_proc1_it0); 224 proc1.p_irq[1](signal_proc1_it1); 225 proc1.p_irq[2](signal_proc1_it2); 226 proc1.p_irq[3](signal_proc1_it3); 227 proc1.p_irq[4](signal_proc1_it4); 228 proc1.p_irq[5](signal_proc1_it5); 229 proc1.p_vci_ini_rw(signal_vci_ini_rw_proc1); 230 proc1.p_vci_ini_c(signal_vci_ini_c_proc1); 231 proc1.p_vci_tgt(signal_vci_tgt_proc1); 232 233 proc2.p_clk(signal_clk); 234 proc2.p_resetn(signal_resetn); 235 proc2.p_irq[0](signal_proc2_it0); 236 proc2.p_irq[1](signal_proc2_it1); 237 proc2.p_irq[2](signal_proc2_it2); 238 proc2.p_irq[3](signal_proc2_it3); 239 proc2.p_irq[4](signal_proc2_it4); 240 proc2.p_irq[5](signal_proc2_it5); 241 proc2.p_vci_ini_rw(signal_vci_ini_rw_proc2); 242 proc2.p_vci_ini_c(signal_vci_ini_c_proc2); 243 proc2.p_vci_tgt(signal_vci_tgt_proc2); 244 245 proc3.p_clk(signal_clk); 246 proc3.p_resetn(signal_resetn); 247 proc3.p_irq[0](signal_proc3_it0); 248 proc3.p_irq[1](signal_proc3_it1); 249 proc3.p_irq[2](signal_proc3_it2); 250 proc3.p_irq[3](signal_proc3_it3); 251 proc3.p_irq[4](signal_proc3_it4); 252 proc3.p_irq[5](signal_proc3_it5); 253 proc3.p_vci_ini_rw(signal_vci_ini_rw_proc3); 254 proc3.p_vci_ini_c(signal_vci_ini_c_proc3); 255 proc3.p_vci_tgt(signal_vci_tgt_proc3); 330 for (uint32_t i=0; i<nb_proc; ++i) 331 { 332 proc[i]->p_clk(signal_clk); 333 proc[i]->p_resetn(signal_resetn); 334 proc[i]->p_irq[0](signal_proc_it[i][0]); 335 proc[i]->p_irq[1](signal_proc_it[i][1]); 336 proc[i]->p_irq[2](signal_proc_it[i][2]); 337 proc[i]->p_irq[3](signal_proc_it[i][3]); 338 proc[i]->p_irq[4](signal_proc_it[i][4]); 339 proc[i]->p_irq[5](signal_proc_it[i][5]); 340 proc[i]->p_vci_ini_rw(signal_vci_ini_rw_proc[i]); 341 proc[i]->p_vci_ini_c(signal_vci_ini_c_proc[i]); 342 proc[i]->p_vci_tgt(signal_vci_tgt_proc[i]); 343 } 256 344 257 345 rom.p_clk(signal_clk); … … 259 347 rom.p_vci(signal_vci_tgt_rom); 260 348 261 #ifdef VCI_LOGGER262 vci_logger0.p_clk(signal_clk);263 vci_logger0.p_resetn(signal_resetn);264 vci_logger0.p_vci(signal_vci_ini_rw_proc2);265 #endif266 267 349 tty.p_clk(signal_clk); 268 350 tty.p_resetn(signal_resetn); 269 351 tty.p_vci(signal_vci_tgt_tty); 270 tty.p_irq[0](signal_tty_irq0); 271 tty.p_irq[1](signal_tty_irq1); 272 tty.p_irq[2](signal_tty_irq2); 273 tty.p_irq[3](signal_tty_irq3); 352 for (uint32_t i=0; i<nb_proc; ++i) 353 tty.p_irq[i](signal_tty_irq[i]); 354 355 xicu.p_clk(signal_clk); 356 xicu.p_resetn(signal_resetn); 357 xicu.p_vci(signal_vci_tgt_xicu); 358 for (uint32_t i=0; i<nb_proc; ++i) 359 { 360 xicu.p_hwi[i](signal_tty_irq[i]); 361 xicu.p_irq[i](signal_proc_it[i][0]); 362 } 363 364 simhelper.p_clk(signal_clk); 365 simhelper.p_resetn(signal_resetn); 366 simhelper.p_vci(signal_vci_tgt_simhelper); 274 367 275 368 memc.p_clk(signal_clk); … … 281 374 282 375 xram.p_clk(signal_clk); 283 376 xram.p_resetn(signal_resetn); 284 377 xram.p_vci(signal_vci_tgt_xram); 285 286 ringp.p_clk(signal_clk); 287 ringp.p_resetn(signal_resetn); 288 289 ringc.p_clk(signal_clk); 290 ringc.p_resetn(signal_resetn); 291 292 ringx.p_clk(signal_clk); 293 ringx.p_resetn(signal_resetn); 294 295 ringp.p_to_initiator[0](signal_vci_ini_rw_proc0); 296 ringp.p_to_initiator[1](signal_vci_ini_rw_proc1); 297 ringp.p_to_initiator[2](signal_vci_ini_rw_proc2); 298 ringp.p_to_initiator[3](signal_vci_ini_rw_proc3); 299 300 ringc.p_to_initiator[4](signal_vci_ini_memc); 301 ringc.p_to_initiator[0](signal_vci_ini_c_proc0); 302 ringc.p_to_initiator[1](signal_vci_ini_c_proc1); 303 ringc.p_to_initiator[2](signal_vci_ini_c_proc2); 304 ringc.p_to_initiator[3](signal_vci_ini_c_proc3); 305 306 ringx.p_to_initiator[0](signal_vci_ixr_memc); 307 308 ringp.p_to_target[0](signal_vci_tgt_rom); 309 ringp.p_to_target[1](signal_vci_tgt_tty); 310 ringp.p_to_target[2](signal_vci_tgt_memc); 311 312 ringc.p_to_target[0](signal_vci_tgt_proc0); 313 ringc.p_to_target[1](signal_vci_tgt_proc1); 314 ringc.p_to_target[2](signal_vci_tgt_proc2); 315 ringc.p_to_target[3](signal_vci_tgt_proc3); 316 ringc.p_to_target[4](signal_vci_tgt_cleanup_memc); 317 318 ringx.p_to_target[0](signal_vci_tgt_xram); 319 320 int ncycles; 321 322 #ifndef SOCVIEW 323 /* if (argc == 2) { 324 ncycles = std::atoi(argv[1]); 325 } else { 326 std::cerr 327 << std::endl 328 << "The number of simulation cycles must " 329 "be defined in the command line" 330 << std::endl; 331 exit(1); 332 } 333 */ 334 sc_start(sc_core::sc_time(0, SC_NS)); 335 signal_resetn = false; 336 337 sc_start(sc_core::sc_time(1, SC_NS)); 338 signal_resetn = true; 339 340 /* 341 while(1){ 342 char buf[2]; 343 std::cin.getline(buf,1); 344 sc_start(sc_core::sc_time(1, SC_NS)); 345 } 346 */ 347 348 for (int i = 0; ; i+=10000) { 349 sc_start(sc_core::sc_time(10000, SC_NS)); 350 // proc0.print_stats(); 351 // memc.print_stats(); 352 } 353 354 std::cout << "Hit ENTER to end simulation" << std::endl; 355 char buf[1]; 356 357 std::cin.getline(buf,1); 358 359 return EXIT_SUCCESS; 360 #else 361 ncycles = 1; 378 379 interconnect_p.p_clk(signal_clk); 380 interconnect_p.p_resetn(signal_resetn); 381 382 for (uint32_t i=0; i<nb_proc; ++i) 383 interconnect_p.p_to_initiator[i](signal_vci_ini_rw_proc[i]); 384 385 interconnect_p.p_to_target[0](signal_vci_tgt_rom); 386 interconnect_p.p_to_target[1](signal_vci_tgt_tty); 387 interconnect_p.p_to_target[2](signal_vci_tgt_memc); 388 interconnect_p.p_to_target[3](signal_vci_tgt_xicu); 389 interconnect_p.p_to_target[4](signal_vci_tgt_simhelper); 390 391 interconnect_c.p_clk(signal_clk); 392 interconnect_c.p_resetn(signal_resetn); 393 394 for (uint32_t i=0; i<nb_proc; ++i) 395 interconnect_c.p_to_initiator[i](signal_vci_ini_c_proc[i]); 396 interconnect_c.p_to_initiator[nb_proc](signal_vci_ini_memc); 397 398 for (uint32_t i=0; i<nb_proc; ++i) 399 interconnect_c.p_to_target[i](signal_vci_tgt_proc[i]); 400 interconnect_c.p_to_target[nb_proc](signal_vci_tgt_cleanup_memc); 401 402 interconnect_x.p_clk(signal_clk); 403 interconnect_x.p_resetn(signal_resetn); 404 405 interconnect_x.p_to_initiator[0](signal_vci_ixr_memc); 406 407 interconnect_x.p_to_target[0](signal_vci_tgt_xram); 408 362 409 sc_start(sc_core::sc_time(0, SC_NS)); 363 410 signal_resetn = false; … … 365 412 signal_resetn = true; 366 413 414 #if SOCVIEW 367 415 debug(); 416 #elif DEBUG_TOP 417 for (int32_t i=0; i<ncycles; ++i) 418 { 419 std::cout << std::endl 420 << std::dec << "===== [ cycle " << i << " ]======" << std::endl 421 << std::endl; 422 423 sc_start(sc_core::sc_time(1, SC_NS)); 424 425 // for (uint32_t i=0; i<nb_proc; ++i) 426 // proc[i]->print_trace(1); 427 } 428 #else 429 if (ncycles==-1) 430 sc_start(); 431 else 432 sc_start(sc_core::sc_time(ncycles, SC_NS)); 433 434 // std::cout << "Hit ENTER to end simulation" << std::endl; 435 // char buf[1]; 436 // std::cin.getline(buf,1); 437 #endif 438 for (uint32_t i=0; i<nb_proc; ++i) 439 proc[i]->print_cpi(); 440 for (uint32_t i=0; i<nb_proc; ++i) 441 proc[i]->print_stats(); 442 443 soclib::common::dealloc_elems<sc_signal<bool> >(signal_tty_irq , nb_proc); 444 soclib::common::dealloc_elems<soclib::caba::VciSignals<vci_param> >(signal_vci_tgt_proc , nb_proc); 445 soclib::common::dealloc_elems<soclib::caba::VciSignals<vci_param> >(signal_vci_ini_c_proc , nb_proc); 446 soclib::common::dealloc_elems<soclib::caba::VciSignals<vci_param> >(signal_vci_ini_rw_proc , nb_proc); 447 soclib::common::dealloc_elems<sc_signal<bool> >(signal_proc_it , nb_proc, 6); 448 449 for (uint32_t i=0; i<nb_proc; ++i) 450 delete proc[i]; 451 368 452 return EXIT_SUCCESS; 369 #endif370 453 } 371 454 372 455 int sc_main (int argc, char *argv[]) 373 456 { 374 375 376 377 378 379 380 381 382 457 try { 458 return _main(argc, argv); 459 } catch (std::exception &e) { 460 std::cout << e.what() << std::endl; 461 } catch (...) { 462 std::cout << "Unknown exception occured" << std::endl; 463 throw; 464 } 465 return 1; 383 466 }
Note: See TracChangeset
for help on using the changeset viewer.