source: sources/test_regression/16022007/system.cpp @ 55

Last change on this file since 55 was 55, checked in by meunier, 11 years ago

Tried to clean the test_regression directory:

  • Code formatting
  • Supressed warnings
  • Made comprehensible outputs
  • Factorized Makefiles

There's still a lot to do (many tests don't pass for either good or bad reasons)

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