source: branches/with_autoconf/test_regression/16022007/system.cpp @ 23

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

Initial import from CVS repository

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