[97] | 1 | |
---|
[103] | 2 | #include <stdint.h> |
---|
[97] | 3 | #include <systemc> |
---|
| 4 | #include <sys/time.h> |
---|
| 5 | #include <iostream> |
---|
| 6 | #include <cstdlib> |
---|
| 7 | #include <cstdarg> |
---|
| 8 | |
---|
[103] | 9 | #include "arithmetics.h" |
---|
[97] | 10 | #include "mapping_table.h" |
---|
| 11 | #include "alloc_elems.h" |
---|
[103] | 12 | #include "vci_simple_ram.h" |
---|
[99] | 13 | //#include "vci_multi_tty.h" |
---|
| 14 | #include "vci_local_ring_fast.h" |
---|
| 15 | #include "virtual_dspin_router.h" |
---|
[97] | 16 | #include "vci_synthetic_initiator.h" |
---|
| 17 | |
---|
| 18 | // MESH SIZE |
---|
| 19 | #define X_MAX 2 |
---|
| 20 | #define Y_MAX 2 |
---|
| 21 | #define N_CLUSTERS X_MAX*Y_MAX |
---|
| 22 | // FLIT_WIDTH |
---|
| 23 | #define WIDTH_CMD 40 |
---|
| 24 | #define WIDTH_RSP 33 |
---|
| 25 | // Face of each DSPIN Router |
---|
| 26 | #define NORTH 0 |
---|
| 27 | #define SOUTH 1 |
---|
| 28 | #define EAST 2 |
---|
| 29 | #define WEST 3 |
---|
| 30 | #define LOCAL 4 |
---|
| 31 | |
---|
| 32 | |
---|
| 33 | int _main(int argc, char *argv[]) |
---|
| 34 | { |
---|
| 35 | using namespace sc_core; |
---|
| 36 | // Avoid repeating these everywhere |
---|
| 37 | using soclib::common::IntTab; |
---|
| 38 | using soclib::common::Segment; |
---|
| 39 | |
---|
[99] | 40 | using soclib::common::uint32_log2; |
---|
| 41 | |
---|
[97] | 42 | // Define VCI parameters |
---|
[103] | 43 | typedef soclib::caba::VciParams<4,8,40,1,1,1,8,4,4,1> vci_param; |
---|
[97] | 44 | |
---|
[103] | 45 | |
---|
| 46 | soclib::common::Loader loader(NULL); |
---|
[97] | 47 | // Mapping table primary network |
---|
[103] | 48 | |
---|
| 49 | soclib::common::MappingTable maptab0(40, IntTab(2,10), IntTab(2,3), 0x00C00000); |
---|
| 50 | soclib::common::MappingTable maptab1(40, IntTab(2,10), IntTab(2,3), 0x00C00000); |
---|
[97] | 51 | |
---|
| 52 | |
---|
[103] | 53 | //maptab0.add(Segment("mc_r0" , MC0_R_BASE , MC0_R_SIZE , IntTab(0,0), false, true, IntTab(0,0))); |
---|
| 54 | //maptab0.add(Segment("mc_m0" , MC0_M_BASE , MC0_M_SIZE , IntTab(0,0), true )); |
---|
| 55 | //maptab0.add(Segment("mc_r1" , MC1_R_BASE , MC1_R_SIZE , IntTab(1,0), false, true, IntTab(1,0))); |
---|
| 56 | //maptab0.add(Segment("mc_m1" , MC1_M_BASE , MC1_M_SIZE , IntTab(1,0), true )); |
---|
| 57 | //maptab0.add(Segment("mc_r2" , MC2_R_BASE , MC2_R_SIZE , IntTab(2,0), false, true, IntTab(2,0))); |
---|
| 58 | //maptab0.add(Segment("mc_m2" , MC2_M_BASE , MC2_M_SIZE , IntTab(2,0), true )); |
---|
| 59 | //maptab0.add(Segment("mc_r3" , MC3_R_BASE , MC3_R_SIZE , IntTab(3,0), false, true, IntTab(3,0))); |
---|
| 60 | //maptab0.add(Segment("mc_m3" , MC3_M_BASE , MC3_M_SIZE , IntTab(3,0), true )); |
---|
[97] | 61 | |
---|
[103] | 62 | std::cout << maptab0 << std::endl; |
---|
[97] | 63 | // Signals |
---|
| 64 | |
---|
| 65 | sc_clock signal_clk("clk"); |
---|
| 66 | sc_signal<bool> signal_resetn("resetn"); |
---|
| 67 | |
---|
[103] | 68 | soclib::caba::VciSignals<vci_param> ** signal_vci_ini_synth_c0 = soclib::common::alloc_elems<soclib::caba::VciSignals<vci_param> >("signal_vci_ini_synth", 2, N_CLUSTERS); |
---|
| 69 | soclib::caba::VciSignals<vci_param> ** signal_vci_ini_synth_c1 = soclib::common::alloc_elems<soclib::caba::VciSignals<vci_param> >("signal_vci_ini_synth", 2, N_CLUSTERS); |
---|
[99] | 70 | /////////////////////////////////////////////////////////////// |
---|
| 71 | // VDSPIN Signals : one level for in and out, one level for X length in the mesh, |
---|
| 72 | // one level for Y length in the mesh, last level for each port of the router |
---|
| 73 | /////////////////////////////////////////////////////////////// |
---|
[103] | 74 | soclib::caba::DspinSignals<WIDTH_CMD> **** dspin_signals_cmd_c0 = soclib::common::alloc_elems<soclib::caba::DspinSignals<WIDTH_CMD> >("Dspin_cmd_signals_channel_0", 2, Y_MAX, X_MAX, 5 ); |
---|
| 75 | soclib::caba::DspinSignals<WIDTH_CMD> **** dspin_signals_cmd_c1 = soclib::common::alloc_elems<soclib::caba::DspinSignals<WIDTH_CMD> >("Dspin_cmd_signals_channel_1", 2, Y_MAX, X_MAX, 5 ); |
---|
| 76 | soclib::caba::DspinSignals<WIDTH_RSP> **** dspin_signals_rsp_c0 = soclib::common::alloc_elems<soclib::caba::DspinSignals<WIDTH_RSP> >("Dspin_rsp_signals_channel_0", 2, Y_MAX, X_MAX, 5 ); |
---|
| 77 | soclib::caba::DspinSignals<WIDTH_RSP> **** dspin_signals_rsp_c1 = soclib::common::alloc_elems<soclib::caba::DspinSignals<WIDTH_RSP> >("Dspin_rsp_signals_channel_2", 2, Y_MAX, X_MAX, 5 ); |
---|
[97] | 78 | |
---|
| 79 | //soclib::caba::VciSignals<vci_param> * signal_vci_tgt_proc = soclib::common::alloc_elems<soclib::caba::VciSignals<vci_param> >("signal_vci_tgt_proc", N_CLUSTERS); |
---|
| 80 | |
---|
| 81 | // N_CLUSTERS ring. |
---|
[99] | 82 | soclib::caba::VciLocalRingFast<vci_param, WIDTH_CMD, WIDTH_RSP> * local_ring_c0 = (soclib::caba::VciLocalRingFast<vci_param, WIDTH_CMD, WIDTH_RSP> *) malloc(sizeof(soclib::caba::VciLocalRingFast<vci_param, WIDTH_CMD, WIDTH_RSP> ) * N_CLUSTERS) ; |
---|
| 83 | soclib::caba::VciLocalRingFast<vci_param, WIDTH_CMD, WIDTH_RSP> * local_ring_c1 = (soclib::caba::VciLocalRingFast<vci_param, WIDTH_CMD, WIDTH_RSP> *) malloc(sizeof(soclib::caba::VciLocalRingFast<vci_param, WIDTH_CMD, WIDTH_RSP> ) * N_CLUSTERS) ; |
---|
| 84 | for(int i = 0 ; i < N_CLUSTERS ; i++){ // ringid, fifo, fifo, nb_init, nb_tgt |
---|
[103] | 85 | new(&local_ring_c0[i]) soclib::caba::VciLocalRingFast<vci_param, WIDTH_CMD, WIDTH_RSP> ("cluster_c0" + i,maptab0, IntTab(i), 2, 18, 1, 1); |
---|
| 86 | new(&local_ring_c1[i]) soclib::caba::VciLocalRingFast<vci_param, WIDTH_CMD, WIDTH_RSP> ("cluster_c1" + i,maptab1, IntTab(i), 2, 18, 1, 1); |
---|
[99] | 87 | } |
---|
| 88 | |
---|
[97] | 89 | // Virtual dspin routers |
---|
| 90 | soclib::caba::VirtualDspinRouter<WIDTH_CMD> ** routers_cmd = (soclib::caba::VirtualDspinRouter<WIDTH_CMD> **) malloc(sizeof(soclib::caba::VirtualDspinRouter<WIDTH_CMD> *) * Y_MAX); |
---|
| 91 | soclib::caba::VirtualDspinRouter<WIDTH_RSP> ** routers_rsp = (soclib::caba::VirtualDspinRouter<WIDTH_RSP> **) malloc(sizeof(soclib::caba::VirtualDspinRouter<WIDTH_RSP> *) * Y_MAX); |
---|
| 92 | |
---|
| 93 | for(int i = 0; i < Y_MAX; i++ ){ |
---|
| 94 | routers_cmd[i] = (soclib::caba::VirtualDspinRouter<WIDTH_CMD> * ) malloc(sizeof(soclib::caba::VirtualDspinRouter<WIDTH_CMD>) * X_MAX); |
---|
| 95 | routers_rsp[i] = (soclib::caba::VirtualDspinRouter<WIDTH_RSP> * ) malloc(sizeof(soclib::caba::VirtualDspinRouter<WIDTH_RSP>) * X_MAX); |
---|
| 96 | for(int j = 0; j < X_MAX; i++){ |
---|
| 97 | new(&routers_cmd[i][j]) soclib::caba::VirtualDspinRouter<WIDTH_CMD> ("VDspinRouterCMD" + i + j, j, i, soclib::common::uint32_log2(X_MAX), soclib::common::uint32_log2(Y_MAX), 4, 4); |
---|
| 98 | new(&routers_rsp[i][j]) soclib::caba::VirtualDspinRouter<WIDTH_RSP> ("VDspinRouterRSP" + i + j, j, i, soclib::common::uint32_log2(X_MAX), soclib::common::uint32_log2(Y_MAX), 4, 4); |
---|
| 99 | } |
---|
| 100 | } |
---|
| 101 | |
---|
| 102 | |
---|
| 103 | /////////////////////////////////////////////////////////////// |
---|
| 104 | // Components |
---|
| 105 | /////////////////////////////////////////////////////////////// |
---|
| 106 | |
---|
| 107 | // N_CLUSTERS VCI Synthetic Initiator (1 initiator per cluster/network) |
---|
[99] | 108 | soclib::caba::VciSyntheticInitiator<vci_param> * initiator_c0 = (soclib::caba::VciSyntheticInitiator<vci_param> *) malloc(sizeof(soclib::caba::VciSyntheticInitiator<vci_param> )* N_CLUSTERS); |
---|
| 109 | soclib::caba::VciSyntheticInitiator<vci_param> * initiator_c1 = (soclib::caba::VciSyntheticInitiator<vci_param> *) malloc(sizeof(soclib::caba::VciSyntheticInitiator<vci_param> )* N_CLUSTERS); |
---|
| 110 | for(int i = 0 ; i < Y_MAX; i++) |
---|
[103] | 111 | for(int j = 0 ; j < X_MAX ; j++){ |
---|
| 112 | new(&initiator_c0[X_MAX*i+j]) soclib::caba::VciSyntheticInitiator<vci_param> ("Initiator_c0" + (i*X_MAX+j), maptab0, IntTab(i,j), 16, 0.5, 2, X_MAX, Y_MAX ); //, 0, 0, 0, 0, 0); |
---|
| 113 | new(&initiator_c1[X_MAX*i+j]) soclib::caba::VciSyntheticInitiator<vci_param> ("Initiator_c1" + (i*X_MAX+j), maptab0, IntTab(i,j), 16, 0.5, 2, X_MAX, Y_MAX ); //, 0, 0, 0, 0, 0); |
---|
| 114 | } |
---|
[99] | 115 | |
---|
[103] | 116 | soclib::caba::VciSimpleRam<vci_param> * ram_c0 = (soclib::caba::VciSimpleRam<vci_param> *) malloc(sizeof(soclib::caba::VciSimpleRam<vci_param>) * N_CLUSTERS); |
---|
| 117 | soclib::caba::VciSimpleRam<vci_param> * ram_c1 = (soclib::caba::VciSimpleRam<vci_param> *) malloc(sizeof(soclib::caba::VciSimpleRam<vci_param>) * N_CLUSTERS); |
---|
| 118 | for(int i = 0 ; i < Y_MAX ; i++) |
---|
| 119 | for(int j = 0 ; j < X_MAX ; j++){ |
---|
| 120 | new(&ram_c0[X_MAX*i+j]) soclib::caba::VciSimpleRam<vci_param> ("Ram_target_c0" + (i*X_MAX+j), IntTab(i,j), maptab0, loader, 0); |
---|
| 121 | new(&ram_c1[X_MAX*i+j]) soclib::caba::VciSimpleRam<vci_param> ("Ram_target_c1" + (i*X_MAX+j), IntTab(i,j), maptab1, loader, 0); |
---|
| 122 | } |
---|
| 123 | |
---|
[97] | 124 | /////////////////////////////////////////////////////////////// |
---|
| 125 | // Connection of Synthetic Initiator to each local ring per cluster |
---|
| 126 | /////////////////////////////////////////////////////////////// |
---|
| 127 | for(int i = 0 ; i < N_CLUSTERS ; i++){ |
---|
[99] | 128 | local_ring_c0[i].p_clk(signal_clk); |
---|
| 129 | local_ring_c0[i].p_resetn(signal_resetn); |
---|
[103] | 130 | local_ring_c0[i].p_to_initiator[0](signal_vci_ini_synth_c0[0][i]); |
---|
| 131 | local_ring_c0[i].p_to_target[0](signal_vci_ini_synth_c0[1][i]); |
---|
[99] | 132 | initiator_c0[i].p_clk(signal_clk); |
---|
| 133 | initiator_c0[i].p_resetn(signal_resetn); |
---|
[103] | 134 | initiator_c0[i].p_vci(signal_vci_ini_synth_c0[0][i]); |
---|
| 135 | ram_c0[i].p_clk(signal_clk); |
---|
| 136 | ram_c0[i].p_resetn(signal_resetn); |
---|
| 137 | ram_c0[i].p_vci(signal_vci_ini_synth_c0[1][i]); |
---|
[99] | 138 | local_ring_c1[i].p_clk(signal_clk); |
---|
| 139 | local_ring_c1[i].p_resetn(signal_resetn); |
---|
[103] | 140 | local_ring_c1[i].p_to_initiator[0](signal_vci_ini_synth_c1[0][i]); |
---|
| 141 | local_ring_c1[i].p_to_target[0](signal_vci_ini_synth_c1[1][i]); |
---|
[99] | 142 | initiator_c1[i].p_clk(signal_clk); |
---|
| 143 | initiator_c1[i].p_resetn(signal_resetn); |
---|
[103] | 144 | initiator_c1[i].p_vci(signal_vci_ini_synth_c1[0][i]); |
---|
| 145 | ram_c1[i].p_clk(signal_clk); |
---|
| 146 | ram_c1[i].p_resetn(signal_resetn); |
---|
| 147 | ram_c1[i].p_vci(signal_vci_ini_synth_c1[1][i]); |
---|
[97] | 148 | } |
---|
| 149 | |
---|
| 150 | /////////////////////////////////////////////////////////////// |
---|
[99] | 151 | // Connection of each VDspin Router to each local ring and |
---|
| 152 | // neighbors VDspin Router |
---|
[97] | 153 | /////////////////////////////////////////////////////////////// |
---|
| 154 | for(int i = 0; i < Y_MAX ; i++){ |
---|
| 155 | for(int j = 0; j < X_MAX ; j++){ |
---|
| 156 | routers_cmd[i][j].p_clk(signal_clk); |
---|
| 157 | routers_cmd[i][j].p_resetn(signal_resetn); |
---|
[99] | 158 | routers_rsp[i][j].p_clk(signal_clk); |
---|
| 159 | routers_rsp[i][j].p_resetn(signal_resetn); |
---|
| 160 | local_ring_c0[i*X_MAX+j].p_gate_cmd_in( dspin_signals_cmd_c0[0][i][j][LOCAL]); |
---|
| 161 | local_ring_c0[i*X_MAX+j].p_gate_cmd_out(dspin_signals_cmd_c0[1][i][j][LOCAL] ); |
---|
| 162 | local_ring_c0[i*X_MAX+j].p_gate_rsp_in( dspin_signals_rsp_c0[0][i][j][LOCAL]); |
---|
| 163 | local_ring_c0[i*X_MAX+j].p_gate_rsp_out(dspin_signals_rsp_c0[1][i][j][LOCAL] ); |
---|
| 164 | local_ring_c1[i*X_MAX+j].p_gate_cmd_in( dspin_signals_cmd_c1[0][i][j][LOCAL]); |
---|
| 165 | local_ring_c1[i*X_MAX+j].p_gate_cmd_out(dspin_signals_cmd_c1[1][i][j][LOCAL] ); |
---|
| 166 | local_ring_c1[i*X_MAX+j].p_gate_rsp_in( dspin_signals_rsp_c1[0][i][j][LOCAL]); |
---|
| 167 | local_ring_c1[i*X_MAX+j].p_gate_rsp_out(dspin_signals_rsp_c1[1][i][j][LOCAL] ); |
---|
[103] | 168 | for(int k = 0; k < 5; k++){ |
---|
[97] | 169 | if(i == 0){ |
---|
| 170 | if(j == 0){ |
---|
| 171 | routers_cmd[i][j].p_out[0][k](dspin_signals_cmd_c0[0][i][j][k]); |
---|
| 172 | routers_cmd[i][j].p_out[1][k](dspin_signals_cmd_c1[0][i][j][k]); |
---|
| 173 | routers_cmd[i][j].p_in[0][k](dspin_signals_cmd_c0[1][i][j][k]); |
---|
| 174 | routers_cmd[i][j].p_in[1][k](dspin_signals_cmd_c1[1][i][j][k]); |
---|
[99] | 175 | routers_rsp[i][j].p_out[0][k](dspin_signals_rsp_c0[0][i][j][k]); |
---|
| 176 | routers_rsp[i][j].p_out[1][k](dspin_signals_rsp_c1[0][i][j][k]); |
---|
| 177 | routers_rsp[i][j].p_in[0][k](dspin_signals_rsp_c0[1][i][j][k]); |
---|
| 178 | routers_rsp[i][j].p_in[1][k](dspin_signals_rsp_c1[1][i][j][k]); |
---|
[97] | 179 | } else { |
---|
[99] | 180 | if(k == WEST){ |
---|
| 181 | routers_cmd[i][j].p_out[0][k](dspin_signals_cmd_c0[1][i][j-1][EAST]); |
---|
| 182 | routers_cmd[i][j].p_out[1][k](dspin_signals_cmd_c1[1][i][j-1][EAST]); |
---|
| 183 | routers_cmd[i][j].p_in[0][k](dspin_signals_cmd_c0[0][i][j-1][EAST]); |
---|
| 184 | routers_cmd[i][j].p_in[1][k](dspin_signals_cmd_c1[0][i][j-1][EAST]); |
---|
| 185 | routers_rsp[i][j].p_out[0][k](dspin_signals_rsp_c0[1][i][j-1][EAST]); |
---|
| 186 | routers_rsp[i][j].p_out[1][k](dspin_signals_rsp_c1[1][i][j-1][EAST]); |
---|
| 187 | routers_rsp[i][j].p_in[0][k](dspin_signals_rsp_c0[0][i][j-1][EAST]); |
---|
| 188 | routers_rsp[i][j].p_in[1][k](dspin_signals_rsp_c1[0][i][j-1][EAST]); |
---|
| 189 | } else { |
---|
| 190 | routers_cmd[i][j].p_out[0][k](dspin_signals_cmd_c0[0][i][j][k]); |
---|
| 191 | routers_cmd[i][j].p_out[1][k](dspin_signals_cmd_c1[0][i][j][k]); |
---|
| 192 | routers_cmd[i][j].p_in[0][k](dspin_signals_cmd_c0[1][i][j][k]); |
---|
| 193 | routers_cmd[i][j].p_in[1][k](dspin_signals_cmd_c1[1][i][j][k]); |
---|
| 194 | routers_rsp[i][j].p_out[0][k](dspin_signals_rsp_c0[0][i][j][k]); |
---|
| 195 | routers_rsp[i][j].p_out[1][k](dspin_signals_rsp_c1[0][i][j][k]); |
---|
| 196 | routers_rsp[i][j].p_in[0][k](dspin_signals_rsp_c0[1][i][j][k]); |
---|
| 197 | routers_rsp[i][j].p_in[1][k](dspin_signals_rsp_c1[1][i][j][k]); |
---|
| 198 | } |
---|
[97] | 199 | } |
---|
| 200 | } else { |
---|
[99] | 201 | if(k == SOUTH){ |
---|
| 202 | routers_cmd[i][j].p_out[0][k](dspin_signals_cmd_c0[1][i-1][j][NORTH]); |
---|
| 203 | routers_cmd[i][j].p_out[1][k](dspin_signals_cmd_c1[1][i-1][j][NORTH]); |
---|
| 204 | routers_cmd[i][j].p_in[0][k](dspin_signals_cmd_c0[0][i-1][j][NORTH]); |
---|
| 205 | routers_cmd[i][j].p_in[1][k](dspin_signals_cmd_c1[0][i-1][j][NORTH]); |
---|
| 206 | routers_rsp[i][j].p_out[0][k](dspin_signals_rsp_c0[1][i-1][j][NORTH]); |
---|
| 207 | routers_rsp[i][j].p_out[1][k](dspin_signals_rsp_c1[1][i-1][j][NORTH]); |
---|
| 208 | routers_rsp[i][j].p_in[0][k](dspin_signals_rsp_c0[0][i-1][j][NORTH]); |
---|
| 209 | routers_rsp[i][j].p_in[1][k](dspin_signals_rsp_c1[0][i-1][j][NORTH]); |
---|
| 210 | } else if(k == WEST){ |
---|
| 211 | if(j == 0){ |
---|
| 212 | routers_cmd[i][j].p_out[0][k](dspin_signals_cmd_c0[0][i][j][k]); |
---|
| 213 | routers_cmd[i][j].p_out[1][k](dspin_signals_cmd_c1[0][i][j][k]); |
---|
| 214 | routers_cmd[i][j].p_in[0][k](dspin_signals_cmd_c0[1][i][j][k]); |
---|
| 215 | routers_cmd[i][j].p_in[1][k](dspin_signals_cmd_c1[1][i][j][k]); |
---|
| 216 | routers_rsp[i][j].p_out[0][k](dspin_signals_rsp_c0[0][i][j][k]); |
---|
| 217 | routers_rsp[i][j].p_out[1][k](dspin_signals_rsp_c1[0][i][j][k]); |
---|
| 218 | routers_rsp[i][j].p_in[0][k](dspin_signals_rsp_c0[1][i][j][k]); |
---|
| 219 | routers_rsp[i][j].p_in[1][k](dspin_signals_rsp_c1[1][i][j][k]); |
---|
| 220 | } else { |
---|
| 221 | routers_cmd[i][j].p_out[0][k](dspin_signals_cmd_c0[1][i][j-1][EAST]); |
---|
| 222 | routers_cmd[i][j].p_out[1][k](dspin_signals_cmd_c1[1][i][j-1][EAST]); |
---|
| 223 | routers_cmd[i][j].p_in[0][k](dspin_signals_cmd_c0[0][i][j-1][EAST]); |
---|
| 224 | routers_cmd[i][j].p_in[1][k](dspin_signals_cmd_c1[0][i][j-1][EAST]); |
---|
| 225 | routers_rsp[i][j].p_out[0][k](dspin_signals_rsp_c0[1][i][j-1][EAST]); |
---|
| 226 | routers_rsp[i][j].p_out[1][k](dspin_signals_rsp_c1[1][i][j-1][EAST]); |
---|
| 227 | routers_rsp[i][j].p_in[0][k](dspin_signals_rsp_c0[0][i][j-1][EAST]); |
---|
| 228 | routers_rsp[i][j].p_in[1][k](dspin_signals_rsp_c1[0][i][j-1][EAST]); |
---|
| 229 | } |
---|
| 230 | } else { |
---|
| 231 | routers_cmd[i][j].p_out[0][k](dspin_signals_cmd_c0[0][i][j][k]); |
---|
| 232 | routers_cmd[i][j].p_out[1][k](dspin_signals_cmd_c1[0][i][j][k]); |
---|
| 233 | routers_cmd[i][j].p_in[0][k](dspin_signals_cmd_c0[1][i][j][k]); |
---|
| 234 | routers_cmd[i][j].p_in[1][k](dspin_signals_cmd_c1[1][i][j][k]); |
---|
| 235 | routers_rsp[i][j].p_out[0][k](dspin_signals_rsp_c0[0][i][j][k]); |
---|
| 236 | routers_rsp[i][j].p_out[1][k](dspin_signals_rsp_c1[0][i][j][k]); |
---|
| 237 | routers_rsp[i][j].p_in[0][k](dspin_signals_rsp_c0[1][i][j][k]); |
---|
| 238 | routers_rsp[i][j].p_in[1][k](dspin_signals_rsp_c1[1][i][j][k]); |
---|
| 239 | } |
---|
[97] | 240 | } |
---|
| 241 | } |
---|
| 242 | } |
---|
| 243 | } |
---|
| 244 | |
---|
| 245 | //////////////////////////////////////////////////////// |
---|
| 246 | |
---|
| 247 | |
---|
| 248 | |
---|
| 249 | //////////////////////////////////////////////// |
---|
| 250 | // Simulation Loop // |
---|
| 251 | //////////////////////////////////////////////// |
---|
| 252 | int ncycles; |
---|
| 253 | |
---|
| 254 | if (argc == 2) { |
---|
| 255 | ncycles = std::atoi(argv[1]); |
---|
| 256 | } else { |
---|
| 257 | std::cerr |
---|
| 258 | << std::endl |
---|
| 259 | << "The number of simulation cycles must " |
---|
| 260 | "be defined in the command line" |
---|
| 261 | << std::endl; |
---|
| 262 | exit(1); |
---|
| 263 | } |
---|
| 264 | |
---|
| 265 | sc_start(sc_core::sc_time(0, SC_NS)); |
---|
| 266 | signal_resetn = false; |
---|
| 267 | |
---|
| 268 | sc_start(sc_core::sc_time(1, SC_NS)); |
---|
| 269 | signal_resetn = true; |
---|
| 270 | |
---|
| 271 | for (int i = 0; i < ncycles ; i+=100000) { |
---|
| 272 | sc_start(sc_core::sc_time(100000, SC_NS)); |
---|
| 273 | |
---|
| 274 | } |
---|
| 275 | |
---|
| 276 | std::cout << "Hit ENTER to end simulation" << std::endl; |
---|
| 277 | char buf[1]; |
---|
| 278 | |
---|
| 279 | std::cin.getline(buf,1); |
---|
| 280 | return EXIT_SUCCESS; |
---|
| 281 | } |
---|
| 282 | |
---|
| 283 | int sc_main (int argc, char *argv[]) |
---|
| 284 | { |
---|
| 285 | try { |
---|
| 286 | return _main(argc, argv); |
---|
| 287 | } catch (std::exception &e) { |
---|
| 288 | std::cout << e.what() << std::endl; |
---|
| 289 | } catch (...) { |
---|
| 290 | std::cout << "Unknown exception occured" << std::endl; |
---|
| 291 | throw; |
---|
| 292 | } |
---|
| 293 | return 1; |
---|
| 294 | } |
---|