source: sources/test_regression/20122006/system.cpp @ 2

Last change on this file since 2 was 1, checked in by buchmann, 17 years ago

Initial import from CVS repository

File size: 6.0 KB
Line 
1#include <systemc.h>
2#include <signal.h>
3#include "chrono.h"
4
5using namespace std;
6       
7struct M_0i1o : sc_module {
8        sc_in_clk                       clk;
9        sc_out<bool>                    o1;
10
11        void eval () {
12    o1 = (rand()%2) == 0;
13        }
14
15        SC_CTOR (M_0i1o) : clk ("clk"), o1("o1") {
16                SC_METHOD(eval);
17                sensitive << clk.neg();
18#ifdef SYSTEMCASS_SPECIFIC
19                //o1(); /* no need */
20#endif
21        };
22};
23
24struct M_1i1o : sc_module {
25        sc_in_clk                       clk;
26        sc_in<bool>                     i1;
27        sc_out<bool>                    o1;
28
29        void eval1 () {
30    o1 = ~i1;
31        }
32
33        SC_CTOR (M_1i1o) : clk ("clk"), i1 ("i1"), o1("o1") {
34                SC_METHOD(eval1);
35                sensitive << clk.neg();
36                sensitive << i1;
37#ifdef SYSTEMCASS_SPECIFIC
38                o1(i1);
39#endif
40        };
41};
42
43
44struct M_2i2o : sc_module {
45        sc_in_clk                       clk;
46        sc_in<bool>                     i1;
47        sc_in<bool>                     i2;
48        sc_out<bool>                    o1;
49        sc_out<bool>                    o2;
50
51        void eval1 () {
52    o1 = ~i1;
53        }
54        void eval2 () {
55    o2 = ~i2;
56        }
57
58        SC_CTOR (M_2i2o) : clk ("clk"), i1 ("i1"), o1("o1"), i2 ("i2"), o2 ("o2") {
59                SC_METHOD(eval1);
60                sensitive << clk.neg();
61                sensitive << i1;
62#ifdef SYSTEMCASS_SPECIFIC
63                o1(i1);
64#endif
65                SC_METHOD(eval2);
66                sensitive << clk.neg();
67                sensitive << i2;
68#ifdef SYSTEMCASS_SPECIFIC
69                o2(i2);
70#endif
71        };
72};
73
74struct M_4i2o : sc_module {
75        sc_in_clk                       clk;
76        sc_in<bool>                     i1;
77        sc_in<bool>                     i2;
78        sc_in<bool>                     i3;
79        sc_in<bool>                     i4;
80        sc_out<bool>                    o1;
81        sc_out<bool>                    o2;
82
83        void eval1 () {
84    o1 = ~i1;
85        }
86        void eval2 () {
87    o2 = ~i2;
88        }
89  void eval3 () {
90    cout << i3 << i4 << "\n";
91  }
92
93        SC_CTOR (M_4i2o) : clk ("clk"), i1 ("i1"), o1("o1"), i2 ("i2"), o2 ("o2"),
94i3 ("i3"), i4 ("i4") {
95                SC_METHOD(eval1);
96                sensitive << clk.neg();
97                sensitive << i1;
98#ifdef SYSTEMCASS_SPECIFIC
99                o1(i1);
100#endif
101                SC_METHOD(eval2);
102                sensitive << clk.neg();
103                sensitive << i2;
104#ifdef SYSTEMCASS_SPECIFIC
105                o2(i2);
106#endif
107                SC_METHOD(eval3);
108                sensitive << clk.pos();
109                // sensitive << i3 << i4;
110#ifdef SYSTEMCASS_SPECIFIC
111                // No port dependency
112#endif
113        };
114};
115
116struct M_4i3o : sc_module {
117        sc_in_clk                       clk;
118        sc_in<bool>                     i1;
119        sc_in<bool>                     i2;
120        sc_in<bool>                     i3;
121        sc_in<bool>                     i4;
122        sc_out<bool>                    o1;
123        sc_out<bool>                    o2;
124        sc_out<bool>                    o3;
125
126        void eval1 () {
127    o1 = ~i1;
128        }
129        void eval2 () {
130    o2 = ~i2;
131        }
132  void eval3 () {
133    o3 = ~i3;
134  }
135  void eval4 () {
136    cout << i4 << "\n";
137  }
138
139        SC_CTOR (M_4i3o) : clk ("clk"), i1 ("i1"), o1("o1"), i2 ("i2"), o2 ("o2"), i3 ("i3"), i4 ("i4"), o3 ("o3") {
140                SC_METHOD(eval1);
141                sensitive << clk.neg();
142                sensitive << i1;
143#ifdef SYSTEMCASS_SPECIFIC
144                o1(i1);
145#endif
146                SC_METHOD(eval4);
147                sensitive << clk.pos();
148                // sensitive << i4;
149#ifdef SYSTEMCASS_SPECIFIC
150                // No port dependency
151#endif
152                SC_METHOD(eval3);
153                sensitive << clk.neg();
154                sensitive << i3;
155#ifdef SYSTEMCASS_SPECIFIC
156                o3(i3);
157#endif
158                SC_METHOD(eval2);
159                sensitive << clk.neg();
160                sensitive << i2;
161#ifdef SYSTEMCASS_SPECIFIC
162                o2(i2);
163#endif
164        };
165};
166
167struct M_1i0o : sc_module {
168        sc_in_clk                       clk;
169        sc_in<bool>                     i1;
170
171        void eval1 () {
172    cout << i1.read() << "\n";
173        }
174
175        SC_CTOR (M_1i0o) : clk ("clk"), i1 ("i1") {
176                SC_METHOD(eval1);
177                sensitive << clk.pos();
178                // sensitive << i1;
179#ifdef SYSTEMCASS_SPECIFIC
180                // No port dependency
181#endif
182        };
183};
184
185int sc_main (int argc, char *argv[])
186{
187        sc_clock                     signal_clk("my_clock",1, 0.5);
188        sc_signal<bool>              s1 ("s01"),
189                               s2 ("s02"),
190                               s3 ("s03"),
191                               s4 ("s04"),
192                               s5 ("s05"),
193                               s6 ("s06"),
194                               s7 ("s07"),
195                               s8 ("s08"),
196                               s9 ("s09"),
197                               s10("s10"),
198                               s11("s11"),
199                               s12("s12"),
200                               s13("s13"),
201                               s14("s14"),
202                               s15("s15");
203                               
204
205        M_0i1o      a("a");
206        M_4i2o      b("b");
207        M_1i1o      c("c");
208        M_4i3o      d("d");
209        M_1i1o      e("e");
210        M_1i1o      f("f");
211        M_2i2o      g("g");
212        M_1i1o      h("h");
213        M_1i0o      i("i");
214        M_0i1o      j("j");
215        M_0i1o      k("k");
216        M_0i1o      l("l");
217       
218        a.clk         (signal_clk);
219        b.clk         (signal_clk);
220        c.clk         (signal_clk);
221        d.clk         (signal_clk);
222        e.clk         (signal_clk);
223        f.clk         (signal_clk);
224        g.clk         (signal_clk);
225        h.clk         (signal_clk);
226        i.clk         (signal_clk);
227        j.clk         (signal_clk);
228        k.clk         (signal_clk);
229        l.clk         (signal_clk);
230       
231        a.o1          (s1);
232        b.i1          (s1);
233               
234        b.o2          (s2);
235        c.i1          (s2);
236
237        c.o1          (s3);
238        d.i1          (s3);
239       
240        d.o1          (s4);
241        b.i3          (s4);
242       
243        d.o2          (s5);
244        b.i4          (s5);
245       
246        b.o1          (s6);
247        e.i1          (s6);
248       
249        e.o1          (s7);
250        f.i1          (s7);
251       
252        f.o1          (s8);
253        b.i2          (s8);
254       
255        d.o3          (s9);
256        g.i1          (s9);
257       
258        g.o1          (s10);
259        h.i1          (s10);
260       
261        h.o1          (s11);
262        d.i4          (s11);
263       
264        j.o1          (s12);
265        g.i2          (s12);
266       
267        g.o2          (s13);
268        i.i1          (s13);   
269       
270        l.o1          (s14);
271        d.i3          (s14);
272       
273        k.o1          (s15);
274        d.i2          (s15);
275
276        // Init & run
277        sc_initialize ();
278
279  if (argc == 1)
280  {
281    cout << "Usage :\n" << argv[0] << " [#cycles]\n";
282    return EXIT_SUCCESS;
283  }
284
285        chrono_t chrono;
286        chrono.start ();
287
288  sc_start (atoi(argv[1]));
289
290        chrono.stop ();
291        unsigned int t = chrono;
292        cout << "Time elapsed (sec) : " << t << endl;
293        cout << "Cycles done        : " << sc_simulation_time () << endl;
294        cout << "Performance        : " << sc_simulation_time () / t << endl;
295        printf("\nPress <RETURN> to exit simulation.");
296        char buf_ret[2];
297        cin.getline(buf_ret,1);
298        return EXIT_SUCCESS;
299}
Note: See TracBrowser for help on using the repository browser.