| [3] | 1 |  | 
|---|
|  | 2 | #include <systemc> | 
|---|
|  | 3 | #include <sys/time.h> | 
|---|
|  | 4 | #include <iostream> | 
|---|
|  | 5 | #include <cstdlib> | 
|---|
|  | 6 | #include <cstdarg> | 
|---|
|  | 7 |  | 
|---|
|  | 8 | #include "mapping_table.h" | 
|---|
|  | 9 | #include "mips32.h" | 
|---|
|  | 10 | #include "iss2_simhelper.h" | 
|---|
|  | 11 | #include "vci_simple_ram.h" | 
|---|
|  | 12 | #include "vci_multi_tty.h" | 
|---|
|  | 13 | #include "vci_simple_ring_network.h" | 
|---|
|  | 14 | #include "vci_mem_cache2.h" | 
|---|
|  | 15 | #include "vci_cc_vcache_wrapper2_ring.h" | 
|---|
|  | 16 |  | 
|---|
|  | 17 | #ifdef USE_GDB_SERVER | 
|---|
|  | 18 | #include "iss/gdbserver.h" | 
|---|
|  | 19 | #endif | 
|---|
|  | 20 |  | 
|---|
|  | 21 | #include "segmentation.h" | 
|---|
|  | 22 |  | 
|---|
|  | 23 | int _main(int argc, char *argv[]) | 
|---|
|  | 24 | { | 
|---|
|  | 25 | using namespace sc_core; | 
|---|
|  | 26 | // Avoid repeating these everywhere | 
|---|
|  | 27 | using soclib::common::IntTab; | 
|---|
|  | 28 | using soclib::common::Segment; | 
|---|
|  | 29 |  | 
|---|
|  | 30 | // Define VCI parameters | 
|---|
|  | 31 | typedef soclib::caba::VciParams<4,8,32,1,1,1,14,4,4,1> vci_param; | 
|---|
|  | 32 | typedef soclib::common::Iss2Simhelper<soclib::common::Mips32ElIss> proc_iss; | 
|---|
|  | 33 | // Mapping table | 
|---|
|  | 34 |  | 
|---|
|  | 35 | soclib::common::MappingTable maptabp(32, IntTab(8), IntTab(8), 0x00300000); | 
|---|
|  | 36 |  | 
|---|
|  | 37 | maptabp.add(Segment("reset", RESET_BASE, RESET_SIZE, IntTab(2), true)); | 
|---|
|  | 38 | maptabp.add(Segment("excep", EXCEP_BASE, EXCEP_SIZE, IntTab(2), true)); | 
|---|
|  | 39 | maptabp.add(Segment("text" , TEXT_BASE , TEXT_SIZE , IntTab(2), true)); | 
|---|
|  | 40 | maptabp.add(Segment("tty"  , TTY_BASE  , TTY_SIZE  , IntTab(1), false)); | 
|---|
|  | 41 | maptabp.add(Segment("mc_r" , MC_R_BASE , MC_R_SIZE , IntTab(2), false, true, IntTab(0))); | 
|---|
|  | 42 | maptabp.add(Segment("mc_m" , MC_M_BASE , MC_M_SIZE , IntTab(2), true )); | 
|---|
|  | 43 | maptabp.add(Segment("ptba" , PTD_ADDR , TAB_SIZE   , IntTab(2), true)); | 
|---|
|  | 44 |  | 
|---|
|  | 45 | //      std::cout << maptabp << std::endl; | 
|---|
|  | 46 |  | 
|---|
|  | 47 | soclib::common::MappingTable maptabc(32, IntTab(8), IntTab(8), 0x00300000); | 
|---|
|  | 48 | maptabc.add(Segment("c_proc0" , C_PROC0_BASE , C_PROC0_SIZE , IntTab(0), false, true, IntTab(0))); | 
|---|
|  | 49 | maptabc.add(Segment("c_proc1" , C_PROC1_BASE , C_PROC1_SIZE , IntTab(1), false, true, IntTab(1))); | 
|---|
|  | 50 | maptabc.add(Segment("c_proc2" , C_PROC2_BASE , C_PROC2_SIZE , IntTab(2), false, true, IntTab(2))); | 
|---|
|  | 51 | maptabc.add(Segment("c_proc3" , C_PROC3_BASE , C_PROC3_SIZE , IntTab(3), false, true, IntTab(3))); | 
|---|
|  | 52 | maptabc.add(Segment("mc_r"    , MC_R_BASE , MC_R_SIZE , IntTab(4), false, false)); | 
|---|
|  | 53 | maptabc.add(Segment("mc_m"  , MC_M_BASE , MC_M_SIZE  , IntTab(4), false, false)); | 
|---|
|  | 54 | maptabc.add(Segment("reset", RESET_BASE, RESET_SIZE, IntTab(4), false, false)); | 
|---|
|  | 55 | maptabc.add(Segment("excep", EXCEP_BASE, EXCEP_SIZE, IntTab(4), false, false)); | 
|---|
|  | 56 | maptabc.add(Segment("text" , TEXT_BASE , TEXT_SIZE , IntTab(4), false, false)); | 
|---|
|  | 57 | maptabc.add(Segment("ptba" , PTD_ADDR  , TAB_SIZE  , IntTab(4), false, false)); | 
|---|
|  | 58 |  | 
|---|
|  | 59 | //      std::cout << maptabc << std::endl; | 
|---|
|  | 60 |  | 
|---|
|  | 61 | soclib::common::MappingTable maptabx(32, IntTab(8), IntTab(8), 0x00300000); | 
|---|
|  | 62 | maptabx.add(Segment("xram" , MC_M_BASE , MC_M_SIZE , IntTab(0), false)); | 
|---|
|  | 63 | maptabx.add(Segment("reset", RESET_BASE, RESET_SIZE, IntTab(0), false)); | 
|---|
|  | 64 | maptabx.add(Segment("excep", EXCEP_BASE, EXCEP_SIZE, IntTab(0), false)); | 
|---|
|  | 65 | maptabx.add(Segment("text" , TEXT_BASE , TEXT_SIZE , IntTab(0), false)); | 
|---|
|  | 66 | maptabx.add(Segment("ptba" , PTD_ADDR  , TAB_SIZE  , IntTab(0), false)); | 
|---|
|  | 67 |  | 
|---|
|  | 68 | //      std::cout << maptabx << std::endl; | 
|---|
|  | 69 |  | 
|---|
|  | 70 | // Signals | 
|---|
|  | 71 | sc_clock        signal_clk("clk"); | 
|---|
|  | 72 | sc_signal<bool> signal_resetn("resetn"); | 
|---|
|  | 73 |  | 
|---|
|  | 74 | sc_signal<bool> signal_proc0_it0("proc0_it0"); | 
|---|
|  | 75 | sc_signal<bool> signal_proc0_it1("proc0_it1"); | 
|---|
|  | 76 | sc_signal<bool> signal_proc0_it2("proc0_it2"); | 
|---|
|  | 77 | sc_signal<bool> signal_proc0_it3("proc0_it3"); | 
|---|
|  | 78 | sc_signal<bool> signal_proc0_it4("proc0_it4"); | 
|---|
|  | 79 | sc_signal<bool> signal_proc0_it5("proc0_it5"); | 
|---|
|  | 80 |  | 
|---|
|  | 81 | sc_signal<bool> signal_proc1_it0("proc1_it0"); | 
|---|
|  | 82 | sc_signal<bool> signal_proc1_it1("proc1_it1"); | 
|---|
|  | 83 | sc_signal<bool> signal_proc1_it2("proc1_it2"); | 
|---|
|  | 84 | sc_signal<bool> signal_proc1_it3("proc1_it3"); | 
|---|
|  | 85 | sc_signal<bool> signal_proc1_it4("proc1_it4"); | 
|---|
|  | 86 | sc_signal<bool> signal_proc1_it5("proc1_it5"); | 
|---|
|  | 87 |  | 
|---|
|  | 88 | sc_signal<bool> signal_proc2_it0("proc2_it0"); | 
|---|
|  | 89 | sc_signal<bool> signal_proc2_it1("proc2_it1"); | 
|---|
|  | 90 | sc_signal<bool> signal_proc2_it2("proc2_it2"); | 
|---|
|  | 91 | sc_signal<bool> signal_proc2_it3("proc2_it3"); | 
|---|
|  | 92 | sc_signal<bool> signal_proc2_it4("proc2_it4"); | 
|---|
|  | 93 | sc_signal<bool> signal_proc2_it5("proc2_it5"); | 
|---|
|  | 94 |  | 
|---|
|  | 95 | sc_signal<bool> signal_proc3_it0("proc3_it0"); | 
|---|
|  | 96 | sc_signal<bool> signal_proc3_it1("proc3_it1"); | 
|---|
|  | 97 | sc_signal<bool> signal_proc3_it2("proc3_it2"); | 
|---|
|  | 98 | sc_signal<bool> signal_proc3_it3("proc3_it3"); | 
|---|
|  | 99 | sc_signal<bool> signal_proc3_it4("proc3_it4"); | 
|---|
|  | 100 | sc_signal<bool> signal_proc3_it5("proc3_it5"); | 
|---|
|  | 101 |  | 
|---|
|  | 102 | soclib::caba::VciSignals<vci_param> signal_vci_ini_rw_proc0("vci_ini_rw_proc0"); | 
|---|
|  | 103 | soclib::caba::VciSignals<vci_param> signal_vci_ini_c_proc0("vci_ini_c_proc0"); | 
|---|
|  | 104 |  | 
|---|
|  | 105 | soclib::caba::VciSignals<vci_param> signal_vci_tgt_proc0("vci_tgt_proc0"); | 
|---|
|  | 106 |  | 
|---|
|  | 107 | soclib::caba::VciSignals<vci_param> signal_vci_ini_rw_proc1("vci_ini_rw_proc1"); | 
|---|
|  | 108 | soclib::caba::VciSignals<vci_param> signal_vci_ini_c_proc1("vci_ini_c_proc1"); | 
|---|
|  | 109 |  | 
|---|
|  | 110 | soclib::caba::VciSignals<vci_param> signal_vci_tgt_proc1("vci_tgt_proc1"); | 
|---|
|  | 111 |  | 
|---|
|  | 112 | soclib::caba::VciSignals<vci_param> signal_vci_ini_rw_proc2("vci_ini_rw_proc2"); | 
|---|
|  | 113 | soclib::caba::VciSignals<vci_param> signal_vci_ini_c_proc2("vci_ini_c_proc2"); | 
|---|
|  | 114 |  | 
|---|
|  | 115 | soclib::caba::VciSignals<vci_param> signal_vci_tgt_proc2("vci_tgt_proc2"); | 
|---|
|  | 116 |  | 
|---|
|  | 117 | soclib::caba::VciSignals<vci_param> signal_vci_ini_rw_proc3("vci_ini_rw_proc3"); | 
|---|
|  | 118 | soclib::caba::VciSignals<vci_param> signal_vci_ini_c_proc3("vci_ini_c_proc3"); | 
|---|
|  | 119 |  | 
|---|
|  | 120 | soclib::caba::VciSignals<vci_param> signal_vci_tgt_proc3("vci_tgt_proc3"); | 
|---|
|  | 121 |  | 
|---|
|  | 122 | soclib::caba::VciSignals<vci_param> signal_vci_tgt_tty("vci_tgt_tty"); | 
|---|
|  | 123 |  | 
|---|
|  | 124 | soclib::caba::VciSignals<vci_param> signal_vci_tgt_rom("vci_tgt_rom"); | 
|---|
|  | 125 |  | 
|---|
|  | 126 | soclib::caba::VciSignals<vci_param> signal_vci_tgt_xram("vci_tgt_xram"); | 
|---|
|  | 127 |  | 
|---|
|  | 128 | soclib::caba::VciSignals<vci_param> signal_vci_ixr_memc("vci_ixr_memc"); | 
|---|
|  | 129 | soclib::caba::VciSignals<vci_param> signal_vci_ini_memc("vci_ini_memc"); | 
|---|
|  | 130 | soclib::caba::VciSignals<vci_param> signal_vci_tgt_memc("vci_tgt_memc"); | 
|---|
|  | 131 | soclib::caba::VciSignals<vci_param> signal_vci_tgt_cleanup_memc("vci_tgt_cleanup_memc"); | 
|---|
|  | 132 |  | 
|---|
|  | 133 | sc_signal<bool> signal_tty_irq0("signal_tty_irq0"); | 
|---|
|  | 134 | sc_signal<bool> signal_tty_irq1("signal_tty_irq1"); | 
|---|
|  | 135 | sc_signal<bool> signal_tty_irq2("signal_tty_irq2"); | 
|---|
|  | 136 | sc_signal<bool> signal_tty_irq3("signal_tty_irq3"); | 
|---|
|  | 137 |  | 
|---|
|  | 138 | soclib::common::Loader loader("soft/bin.soft"); | 
|---|
|  | 139 |  | 
|---|
|  | 140 | //                                  init_rw   init_c   tgt | 
|---|
|  | 141 | soclib::caba::VciCcVCacheWrapper2Ring<vci_param, proc_iss > | 
|---|
|  | 142 | proc0("proc0", 0, maptabp, maptabc, IntTab(0),IntTab(0),IntTab(0),4,16,4,16,4,64,16,4,64,16,16); | 
|---|
|  | 143 |  | 
|---|
|  | 144 | soclib::caba::VciCcVCacheWrapper2Ring<vci_param, proc_iss > | 
|---|
|  | 145 | proc1("proc1", 1, maptabp, maptabc, IntTab(1),IntTab(1),IntTab(1),4,16,4,16,4,64,16,4,64,16,16); | 
|---|
|  | 146 |  | 
|---|
|  | 147 | soclib::caba::VciCcVCacheWrapper2Ring<vci_param, proc_iss > | 
|---|
|  | 148 | proc2("proc2", 2, maptabp, maptabc, IntTab(2),IntTab(2),IntTab(2),4,16,4,16,4,64,16,4,64,16,16); | 
|---|
|  | 149 |  | 
|---|
|  | 150 | soclib::caba::VciCcVCacheWrapper2Ring<vci_param, proc_iss > | 
|---|
|  | 151 | proc3("proc3", 3, maptabp, maptabc, IntTab(3),IntTab(3),IntTab(3),4,16,4,16,4,64,16,4,64,16,16); | 
|---|
|  | 152 |  | 
|---|
|  | 153 | soclib::caba::VciSimpleRam<vci_param> | 
|---|
|  | 154 | rom("rom", IntTab(0), maptabp, loader); | 
|---|
|  | 155 |  | 
|---|
|  | 156 | soclib::caba::VciSimpleRam<vci_param> | 
|---|
|  | 157 | xram("xram", IntTab(0), maptabx, loader); | 
|---|
|  | 158 |  | 
|---|
|  | 159 | //                                  x_init    c_init    p_tgt     c_tgt | 
|---|
|  | 160 | soclib::caba::VciMemCache2<vci_param> | 
|---|
|  | 161 | memc("memc",maptabp,maptabc,maptabx,IntTab(0),IntTab(4),IntTab(2), IntTab(4),16,256,16); | 
|---|
|  | 162 | //memc("memc",maptabp,maptabc,maptabx,IntTab(0),IntTab(4),IntTab(2), IntTab(4),4,16,16); | 
|---|
|  | 163 |  | 
|---|
|  | 164 | soclib::caba::VciMultiTty<vci_param> | 
|---|
|  | 165 | tty("tty",IntTab(1),maptabp,"tty0","tty1","tty2","tty3",NULL); | 
|---|
|  | 166 |  | 
|---|
|  | 167 | soclib::caba::VciSimpleRingNetwork<vci_param> | 
|---|
|  | 168 | ringp("ringp",maptabp, IntTab(), 2, 4, 3); | 
|---|
|  | 169 |  | 
|---|
|  | 170 | soclib::caba::VciSimpleRingNetwork<vci_param> | 
|---|
|  | 171 | ringc("ringc",maptabc, IntTab(), 2, 5, 5); | 
|---|
|  | 172 |  | 
|---|
|  | 173 | soclib::caba::VciSimpleRingNetwork<vci_param> | 
|---|
|  | 174 | ringx("ringx",maptabx, IntTab(), 2, 1, 1); | 
|---|
|  | 175 |  | 
|---|
|  | 176 | // Net-List | 
|---|
|  | 177 |  | 
|---|
|  | 178 | proc0.p_clk(signal_clk); | 
|---|
|  | 179 | proc0.p_resetn(signal_resetn); | 
|---|
|  | 180 | proc0.p_irq[0](signal_proc0_it0); | 
|---|
|  | 181 | proc0.p_irq[1](signal_proc0_it1); | 
|---|
|  | 182 | proc0.p_irq[2](signal_proc0_it2); | 
|---|
|  | 183 | proc0.p_irq[3](signal_proc0_it3); | 
|---|
|  | 184 | proc0.p_irq[4](signal_proc0_it4); | 
|---|
|  | 185 | proc0.p_irq[5](signal_proc0_it5); | 
|---|
|  | 186 | proc0.p_vci_ini_rw(signal_vci_ini_rw_proc0); | 
|---|
|  | 187 | proc0.p_vci_ini_c(signal_vci_ini_c_proc0); | 
|---|
|  | 188 | proc0.p_vci_tgt(signal_vci_tgt_proc0); | 
|---|
|  | 189 |  | 
|---|
|  | 190 | proc1.p_clk(signal_clk); | 
|---|
|  | 191 | proc1.p_resetn(signal_resetn); | 
|---|
|  | 192 | proc1.p_irq[0](signal_proc1_it0); | 
|---|
|  | 193 | proc1.p_irq[1](signal_proc1_it1); | 
|---|
|  | 194 | proc1.p_irq[2](signal_proc1_it2); | 
|---|
|  | 195 | proc1.p_irq[3](signal_proc1_it3); | 
|---|
|  | 196 | proc1.p_irq[4](signal_proc1_it4); | 
|---|
|  | 197 | proc1.p_irq[5](signal_proc1_it5); | 
|---|
|  | 198 | proc1.p_vci_ini_rw(signal_vci_ini_rw_proc1); | 
|---|
|  | 199 | proc1.p_vci_ini_c(signal_vci_ini_c_proc1); | 
|---|
|  | 200 | proc1.p_vci_tgt(signal_vci_tgt_proc1); | 
|---|
|  | 201 |  | 
|---|
|  | 202 | proc2.p_clk(signal_clk); | 
|---|
|  | 203 | proc2.p_resetn(signal_resetn); | 
|---|
|  | 204 | proc2.p_irq[0](signal_proc2_it0); | 
|---|
|  | 205 | proc2.p_irq[1](signal_proc2_it1); | 
|---|
|  | 206 | proc2.p_irq[2](signal_proc2_it2); | 
|---|
|  | 207 | proc2.p_irq[3](signal_proc2_it3); | 
|---|
|  | 208 | proc2.p_irq[4](signal_proc2_it4); | 
|---|
|  | 209 | proc2.p_irq[5](signal_proc2_it5); | 
|---|
|  | 210 | proc2.p_vci_ini_rw(signal_vci_ini_rw_proc2); | 
|---|
|  | 211 | proc2.p_vci_ini_c(signal_vci_ini_c_proc2); | 
|---|
|  | 212 | proc2.p_vci_tgt(signal_vci_tgt_proc2); | 
|---|
|  | 213 |  | 
|---|
|  | 214 | proc3.p_clk(signal_clk); | 
|---|
|  | 215 | proc3.p_resetn(signal_resetn); | 
|---|
|  | 216 | proc3.p_irq[0](signal_proc3_it0); | 
|---|
|  | 217 | proc3.p_irq[1](signal_proc3_it1); | 
|---|
|  | 218 | proc3.p_irq[2](signal_proc3_it2); | 
|---|
|  | 219 | proc3.p_irq[3](signal_proc3_it3); | 
|---|
|  | 220 | proc3.p_irq[4](signal_proc3_it4); | 
|---|
|  | 221 | proc3.p_irq[5](signal_proc3_it5); | 
|---|
|  | 222 | proc3.p_vci_ini_rw(signal_vci_ini_rw_proc3); | 
|---|
|  | 223 | proc3.p_vci_ini_c(signal_vci_ini_c_proc3); | 
|---|
|  | 224 | proc3.p_vci_tgt(signal_vci_tgt_proc3); | 
|---|
|  | 225 |  | 
|---|
|  | 226 | rom.p_clk(signal_clk); | 
|---|
|  | 227 | rom.p_resetn(signal_resetn); | 
|---|
|  | 228 | rom.p_vci(signal_vci_tgt_rom); | 
|---|
|  | 229 |  | 
|---|
|  | 230 | tty.p_clk(signal_clk); | 
|---|
|  | 231 | tty.p_resetn(signal_resetn); | 
|---|
|  | 232 | tty.p_vci(signal_vci_tgt_tty); | 
|---|
|  | 233 | tty.p_irq[0](signal_tty_irq0); | 
|---|
|  | 234 | tty.p_irq[1](signal_tty_irq1); | 
|---|
|  | 235 | tty.p_irq[2](signal_tty_irq2); | 
|---|
|  | 236 | tty.p_irq[3](signal_tty_irq3); | 
|---|
|  | 237 |  | 
|---|
|  | 238 | memc.p_clk(signal_clk); | 
|---|
|  | 239 | memc.p_resetn(signal_resetn); | 
|---|
|  | 240 | memc.p_vci_tgt(signal_vci_tgt_memc); | 
|---|
|  | 241 | memc.p_vci_tgt_cleanup(signal_vci_tgt_cleanup_memc); | 
|---|
|  | 242 | memc.p_vci_ini(signal_vci_ini_memc); | 
|---|
|  | 243 | memc.p_vci_ixr(signal_vci_ixr_memc); | 
|---|
|  | 244 |  | 
|---|
|  | 245 | xram.p_clk(signal_clk); | 
|---|
|  | 246 | xram.p_resetn(signal_resetn); | 
|---|
|  | 247 | xram.p_vci(signal_vci_tgt_xram); | 
|---|
|  | 248 |  | 
|---|
|  | 249 | ringp.p_clk(signal_clk); | 
|---|
|  | 250 | ringp.p_resetn(signal_resetn); | 
|---|
|  | 251 |  | 
|---|
|  | 252 | ringc.p_clk(signal_clk); | 
|---|
|  | 253 | ringc.p_resetn(signal_resetn); | 
|---|
|  | 254 |  | 
|---|
|  | 255 | ringx.p_clk(signal_clk); | 
|---|
|  | 256 | ringx.p_resetn(signal_resetn); | 
|---|
|  | 257 |  | 
|---|
|  | 258 | ringp.p_to_initiator[0](signal_vci_ini_rw_proc0); | 
|---|
|  | 259 | ringp.p_to_initiator[1](signal_vci_ini_rw_proc1); | 
|---|
|  | 260 | ringp.p_to_initiator[2](signal_vci_ini_rw_proc2); | 
|---|
|  | 261 | ringp.p_to_initiator[3](signal_vci_ini_rw_proc3); | 
|---|
|  | 262 |  | 
|---|
|  | 263 | ringc.p_to_initiator[4](signal_vci_ini_memc); | 
|---|
|  | 264 | ringc.p_to_initiator[0](signal_vci_ini_c_proc0); | 
|---|
|  | 265 | ringc.p_to_initiator[1](signal_vci_ini_c_proc1); | 
|---|
|  | 266 | ringc.p_to_initiator[2](signal_vci_ini_c_proc2); | 
|---|
|  | 267 | ringc.p_to_initiator[3](signal_vci_ini_c_proc3); | 
|---|
|  | 268 |  | 
|---|
|  | 269 | ringx.p_to_initiator[0](signal_vci_ixr_memc); | 
|---|
|  | 270 |  | 
|---|
|  | 271 | ringp.p_to_target[0](signal_vci_tgt_rom); | 
|---|
|  | 272 | ringp.p_to_target[1](signal_vci_tgt_tty); | 
|---|
|  | 273 | ringp.p_to_target[2](signal_vci_tgt_memc); | 
|---|
|  | 274 |  | 
|---|
|  | 275 | ringc.p_to_target[0](signal_vci_tgt_proc0); | 
|---|
|  | 276 | ringc.p_to_target[1](signal_vci_tgt_proc1); | 
|---|
|  | 277 | ringc.p_to_target[2](signal_vci_tgt_proc2); | 
|---|
|  | 278 | ringc.p_to_target[3](signal_vci_tgt_proc3); | 
|---|
|  | 279 | ringc.p_to_target[4](signal_vci_tgt_cleanup_memc); | 
|---|
|  | 280 |  | 
|---|
|  | 281 | ringx.p_to_target[0](signal_vci_tgt_xram); | 
|---|
|  | 282 |  | 
|---|
|  | 283 | int ncycles; | 
|---|
|  | 284 |  | 
|---|
|  | 285 | #ifndef SOCVIEW | 
|---|
|  | 286 | if (argc == 2) { | 
|---|
|  | 287 | ncycles = std::atoi(argv[1]); | 
|---|
|  | 288 | } else { | 
|---|
|  | 289 | std::cerr | 
|---|
|  | 290 | << std::endl | 
|---|
|  | 291 | << "The number of simulation cycles must " | 
|---|
|  | 292 | "be defined in the command line" | 
|---|
|  | 293 | << std::endl; | 
|---|
|  | 294 | exit(1); | 
|---|
|  | 295 | } | 
|---|
|  | 296 |  | 
|---|
|  | 297 | sc_start(sc_core::sc_time(0, SC_NS)); | 
|---|
|  | 298 | signal_resetn = false; | 
|---|
|  | 299 |  | 
|---|
|  | 300 | sc_start(sc_core::sc_time(1, SC_NS)); | 
|---|
|  | 301 | signal_resetn = true; | 
|---|
|  | 302 |  | 
|---|
|  | 303 | for (int i = 0; i < ncycles ; i+=1000) { | 
|---|
|  | 304 | sc_start(sc_core::sc_time(1000, SC_NS)); | 
|---|
|  | 305 | //proc.print_stats(); | 
|---|
|  | 306 | //memc.print_stats(); | 
|---|
|  | 307 | } | 
|---|
|  | 308 |  | 
|---|
|  | 309 | std::cout << "Hit ENTER to end simulation" << std::endl; | 
|---|
|  | 310 | char buf[1]; | 
|---|
|  | 311 |  | 
|---|
|  | 312 | std::cin.getline(buf,1); | 
|---|
|  | 313 |  | 
|---|
|  | 314 | return EXIT_SUCCESS; | 
|---|
|  | 315 | #else | 
|---|
|  | 316 | ncycles = 1; | 
|---|
|  | 317 | sc_start(sc_core::sc_time(0, SC_NS)); | 
|---|
|  | 318 | signal_resetn = false; | 
|---|
|  | 319 | sc_start(sc_core::sc_time(1, SC_NS)); | 
|---|
|  | 320 | signal_resetn = true; | 
|---|
|  | 321 |  | 
|---|
|  | 322 | debug(); | 
|---|
|  | 323 | return EXIT_SUCCESS; | 
|---|
|  | 324 | #endif | 
|---|
|  | 325 | } | 
|---|
|  | 326 |  | 
|---|
|  | 327 | int sc_main (int argc, char *argv[]) | 
|---|
|  | 328 | { | 
|---|
|  | 329 | try { | 
|---|
|  | 330 | return _main(argc, argv); | 
|---|
|  | 331 | } catch (std::exception &e) { | 
|---|
|  | 332 | std::cout << e.what() << std::endl; | 
|---|
|  | 333 | } catch (...) { | 
|---|
|  | 334 | std::cout << "Unknown exception occured" << std::endl; | 
|---|
|  | 335 | throw; | 
|---|
|  | 336 | } | 
|---|
|  | 337 | return 1; | 
|---|
|  | 338 | } | 
|---|