Changeset 55 for sources/test_regression/19122005/system.cpp
- Timestamp:
- May 28, 2013, 11:17:14 AM (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
sources/test_regression/19122005/system.cpp
r1 r55 1 #include <systemc.h>2 1 3 #define ASSERT(x) \ 4 { errnum++; \ 5 if (!(x)) \ 6 { \ 7 cerr << "ASSERT : " #x "\n"; \ 8 exit (errnum); \ 9 } \ 10 } 2 #include "systemc.h" 3 #include "test.h" 4 5 11 6 12 7 using namespace std; 13 8 9 14 10 struct test : sc_module { 15 sc_in_clk clk; 16 sc_in<bool> i1; 17 sc_in<int> i2; 18 sc_in<int> i3; 19 #if 0 20 sc_in<sc_int<4> > i4; 21 sc_in<sc_uint<4> > i5; 22 #endif 23 #if 0 24 sc_in<sc_uint<64> > i6; 25 #endif 26 sc_out<bool> o1; 27 sc_out<int> o2; 28 sc_out<int > o3; 29 #if 0 30 sc_out<sc_int<4> > o4; 31 sc_out<sc_uint<4> > o5; 32 #endif 33 #if 0 34 sc_out<sc_uint<64> > o6; 35 sc_inout<sc_uint<64> > io1; 36 #endif 37 // sc_inout<sc_signed > io2; 38 // sc_inout<sc_unsigned > io3; 39 sc_inout<sc_uint<32> > io4; 40 sc_out<int> mealy1; 41 sc_out<int> mealy2; 11 sc_in_clk clk; 12 sc_in<bool> i1; 13 sc_in<int> i2; 14 sc_in<int> i3; 15 sc_out<bool> o1; 16 sc_out<int> o2; 17 sc_out<int> o3; 18 sc_inout< sc_uint<32> > io4; 19 sc_out<int> mealy1; 20 sc_out<int> mealy2; 42 21 43 sc_signal<bool> reg1; 44 sc_signal<int> reg2; 45 sc_signal<int> reg3; 46 #if 0 47 sc_signal<sc_int<4> > reg4; 48 sc_signal<sc_uint<4> > reg5; 49 #endif 50 #if 0 51 sc_signal<sc_uint<64> > reg6; 52 #endif 53 // sc_signal<sc_signed > reg7; 54 // sc_signal<sc_unsigned > reg8; 55 sc_signal<sc_uint<32> > reg9; 56 sc_signal<int> reg10; 22 sc_signal<bool> reg1; 23 sc_signal<int> reg2; 24 sc_signal<int> reg3; 25 sc_signal<sc_uint<32> > reg9; 26 sc_signal<int> reg10; 57 27 58 void fmealy1 () 59 { 60 mealy1 = i2.read(); 61 } 28 void fmealy1() { 29 mealy1 = i2.read(); 30 } 62 31 63 void fmealy2 () 64 { 65 mealy2 = i2.read() + reg2.read(); 66 } 32 void fmealy2() { 33 mealy2 = i2.read() + reg2.read(); 34 } 67 35 68 void gen () 69 { 70 o1 = reg1.read() ^ true; 71 o2 = reg2.read()+ 1; 72 o3 = reg3.read()+ 1; 73 // o4 = reg4.read()+ 1; 74 // o5 = reg5.read()+ 1; 75 // o6 = reg6.read()+ 1; 76 // io1 = reg6.read() * 2 + 1; 77 io4 = reg9.read()+ 1; 78 } 36 void gen() { 37 o1 = reg1.read() ^ true; 38 o2 = reg2.read() + 1; 39 o3 = reg3.read() + 1; 40 io4 = reg9.read() + 1; 41 } 79 42 80 void trans () 81 { 82 // io2 = io2.read() + 1; 83 // io3 = io3.read() + 1; 84 reg1 = reg1.read() ^ 1; 85 reg2 = reg2.read() + 1; 86 reg3 = reg3.read() + 1; 87 // reg4 = reg4.read() + 1; 88 // reg5 = reg5.read() + 1; 89 // reg6 = reg6.read() * 2 + 1; 90 reg9 = reg9.read() + 2; 91 reg10 = reg10.read() + i2.read(); 92 } 43 void trans() { 44 reg1 = reg1.read() ^ 1; 45 reg2 = reg2.read() + 1; 46 reg3 = reg3.read() + 1; 47 reg9 = reg9.read() + 2; 48 reg10 = reg10.read() + i2.read(); 49 } 93 50 94 SC_HAS_PROCESS(test);95 test (sc_module_name n) : sc_module(n),51 SC_HAS_PROCESS(test); 52 test(sc_module_name n) : sc_module(n), 96 53 clk("clk"), 97 i1("i1"), i2("i2"), i3("i3"), /*i4("i4"), i5("i5"), */ /*i6("i6"),*/98 o1("o1"), o2("o2"), o3("o3"), /*o4("o4"), o5("o5"), */ /*o6("o6"),99 io 1("io1"), */io4("io4"),54 i1("i1"), i2("i2"), i3("i3"), 55 o1("o1"), o2("o2"), o3("o3"), 56 io4("io4"), 100 57 mealy1("mealy1_equivalent_to_i2"), 101 58 mealy2("mealy2_equivalent_to_i2_plus_reg2"), … … 103 60 reg2("reg2_cycle_number"), 104 61 reg3("reg3_cycle_number"), 105 // reg4("reg4"),106 // reg5("reg5"),107 // reg6("reg6"),108 // reg7("reg7"),109 // reg8("reg8"),110 62 reg9("reg9_cycle_number_x2"), 111 reg10("reg10_sum_cycle_number") 112 { 113 SC_METHOD(trans); 114 sensitive << clk.pos(); 115 dont_initialize(); 116 SC_METHOD(gen); 117 sensitive << clk.neg(); 118 dont_initialize(); 119 SC_METHOD(fmealy1); 120 sensitive << i2; 121 dont_initialize(); 122 SC_METHOD(fmealy2); 123 sensitive << i2 << clk.neg(); 124 dont_initialize(); 125 }; 63 reg10("reg10_sum_cycle_number") { 64 SC_METHOD(trans); 65 sensitive << clk.pos(); 66 dont_initialize(); 67 68 SC_METHOD(gen); 69 sensitive << clk.neg(); 70 dont_initialize(); 71 72 SC_METHOD(fmealy1); 73 sensitive << i2; 74 dont_initialize(); 75 76 SC_METHOD(fmealy2); 77 sensitive << i2 << clk.neg(); 78 dont_initialize(); 79 } 126 80 }; 127 81 128 int 129 usage (const char *com) 130 { 131 cout << "Usage :\n" << com << " [#cycles]\n"; 132 return EXIT_FAILURE; 82 83 int usage (const char * com) { 84 cout << "Usage :\n" << com << " [#cycles]\n"; 85 return EXIT_FAILURE; 133 86 } 134 87 135 sc_signal<bool> s01 ("i1_cycle_number_not_parity"),136 s02 ("o2_not_reg1");137 sc_signal<int> s03 ("i2_cycle_number_x2"),138 s04 ("o2_reg2_plus_one");139 sc_signal<int> s05 ("i3_cycle_number_x3"),140 s06 ("o3_reg3_plus_one");141 #if 0142 sc_signal<sc_int<4> > s07 ("s07"),143 s08 ("s08");144 sc_signal<sc_uint<4> > s09 ("s09"),145 s10 ("s10");146 #endif147 #if 0148 sc_signal<sc_uint<64> > s11 ("s11"),149 s12 ("s12"),150 s13 ("s13");151 #endif152 //sc_signal<sc_signed > s14("s14");153 //sc_signal<sc_unsigned > s15("s15");154 sc_signal<sc_uint<32> > s16 ("io4_reg9_plus_one");155 sc_signal<int> s17 ("mealy1_equivalent_to_i2");156 sc_signal<int> s18 ("mealy2_i2_plus_reg2");157 88 158 int 159 s (int i) 160 { 161 int val = 0; 162 while (i) 163 val += i--; 164 return val; 89 sc_signal<bool> s01("i1_cycle_number_not_parity"), s02("o2_not_reg1"); 90 sc_signal<int> s03("i2_cycle_number_x2"), s04("o2_reg2_plus_one"); 91 sc_signal<int> s05("i3_cycle_number_x3"), s06("o3_reg3_plus_one"); 92 sc_signal< sc_uint<32> > s16("io4_reg9_plus_one"); 93 sc_signal<int> s17("mealy1_equivalent_to_i2"); 94 sc_signal<int> s18("mealy2_i2_plus_reg2"); 95 96 97 int s(int i) { 98 int val = 0; 99 while (i) { 100 val += i--; 101 } 102 return val; 165 103 } 166 104 167 void* 168 func () 169 { 170 cerr << "func () at #" << sc_time_stamp () << endl; 171 int i = (int)(sc_time_stamp ().to_double ()) / 1000; 172 s01 = (i & 1) > 0; 173 s03 = i * 2; 174 s05 = i * 3; 175 // s07 = i * 4; 176 // s09 = i * 5; 177 // s11 = i * 6; 178 ++i; 179 return 0; 105 106 void * func() { 107 cerr << "func () at #" << sc_time_stamp() << endl; 108 int i = (int) (sc_time_stamp().to_double()) / 1000; 109 s01 = (i & 1) > 0; 110 s03 = i * 2; 111 s05 = i * 3; 112 ++i; 113 return 0; 180 114 } 181 115 182 void 183 save () 184 { 116 117 void save() { 185 118 #ifdef SYSTEMCASS_SPECIFIC 186 char name[256];187 sprintf (name,"test_systemcass_%d.dat",((int)sc_time_stamp().to_double() / 1000));188 sc_save_simulation(name);119 char name[256]; 120 sprintf(name, "test_systemcass_%d.dat", ((int) sc_time_stamp().to_double() / 1000)); 121 sc_save_simulation(name); 189 122 #endif 190 123 } 191 124 192 int sc_main (int argc, char *argv[])193 {194 int errnum = 0;195 sc_clock signal_clk("my_clock",1, 0.5);196 125 197 test test1("test1"); 198 test1.clk (signal_clk); 199 test1.i1 (s01); 200 test1.o1 (s02); 201 test1.i2 (s03); 202 test1.o2 (s04); 203 test1.i3 (s05); 204 test1.o3 (s06); 205 // test1.i4 (s07); 206 // test1.o4 (s08); 207 // test1.i5 (s09); 208 // test1.o5 (s10); 209 // test1.i6 (s11); 210 // test1.o6 (s12); 211 // test1.io1(s13); 212 // test1.io2(s14); 213 // test1.io3(s15); 214 test1.io4(s16); 215 test1.mealy1(s17); 216 test1.mealy2(s18); 126 int sc_main (int argc, char * argv[]) { 127 sc_clock signal_clk("my_clock", 1, 0.5); 217 128 218 // Init & run 219 sc_start (0); 129 test test1("test1"); 130 test1.clk(signal_clk); 131 test1.i1(s01); 132 test1.o1(s02); 133 test1.i2(s03); 134 test1.o2(s04); 135 test1.i3(s05); 136 test1.o3(s06); 137 test1.io4(s16); 138 test1.mealy1(s17); 139 test1.mealy2(s18); 140 141 // Init & run 142 sc_start(sc_time(0, sc_core::SC_NS)); 220 143 221 144 #ifndef SOCVIEW 222 if (argc != 2) 223 { 224 return usage (argv[0]); 225 } 145 if (argc != 2) { 146 return usage(argv[0]); 147 } 226 148 227 149 int nb = atoi(argv[1]); 228 150 229 if (nb == 0) 230 { 231 return usage (argv[0]); 232 } 151 if (nb == 0) { 152 return usage(argv[0]); 153 } 233 154 234 int i = 0; 235 save (); 236 while (i++ < nb) 237 { 238 func (); 239 sc_start (1); 240 save (); 241 } 155 int i = 0; 156 save(); 157 while (i++ < nb) { 158 func(); 159 sc_start(sc_time(1, sc_core::SC_NS)); 160 save(); 161 } 242 162 #else 243 debug(&func);163 debug(&func); 244 164 #endif 245 165 246 166 return EXIT_SUCCESS; 247 167 } 248 168 249 169 #undef sc_inout 170 171 /* 172 # Local Variables: 173 # tab-width: 4; 174 # c-basic-offset: 4; 175 # c-file-offsets:((innamespace . 0)(inline-open . 0)); 176 # indent-tabs-mode: nil; 177 # End: 178 # 179 # vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4 180 */ 181
Note: See TracChangeset
for help on using the changeset viewer.