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

Last change on this file since 60 was 60, checked in by meunier, 7 years ago
  • Intégration des modifications de Clément, qui a intégré la version parallélisée de systemcass faite par Manuel.
File size: 5.4 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    // Setup number of threads open-mp to 1 with the macro threads_omp()
216    threads_omp();
217
218    M_0i1o a("a");
219    M_4i2o b("b");
220    M_1i1o c("c");
221    M_4i3o d("d");
222    M_1i1o e("e");
223    M_1i1o f("f");
224    M_2i2o g("g");
225    M_1i1o h("h");
226    M_1i0o i("i");
227    M_0i1o j("j");
228    M_0i1o k("k");
229    M_0i1o l("l");
230
231    a.clk(signal_clk);
232    b.clk(signal_clk);
233    c.clk(signal_clk);
234    d.clk(signal_clk);
235    e.clk(signal_clk);
236    f.clk(signal_clk);
237    g.clk(signal_clk);
238    h.clk(signal_clk);
239    i.clk(signal_clk);
240    j.clk(signal_clk);
241    k.clk(signal_clk);
242    l.clk(signal_clk);
243
244    a.o1(s1);
245    b.i1(s1);
246
247    b.o2(s2);
248    c.i1(s2);
249
250    c.o1(s3);
251    d.i1(s3);
252
253    d.o1(s4);
254    b.i3(s4);
255
256    d.o2(s5);
257    b.i4(s5);
258
259    b.o1(s6);
260    e.i1(s6);
261
262    e.o1(s7);
263    f.i1(s7);
264
265    f.o1(s8);
266    b.i2(s8);
267
268    d.o3(s9);
269    g.i1(s9);
270
271    g.o1(s10);
272    h.i1(s10);
273
274    h.o1(s11);
275    d.i4(s11);
276
277    j.o1(s12);
278    g.i2(s12);
279
280    g.o2(s13);
281    i.i1(s13); 
282
283    l.o1(s14);
284    d.i3(s14);
285
286    k.o1(s15);
287    d.i2(s15);
288
289    // Init & run
290    sc_start(sc_time(0, sc_core::SC_NS));
291
292    sc_start(sc_time(3, sc_core::SC_NS));
293
294    return EXIT_SUCCESS;
295}
296
297/*
298# Local Variables:
299# tab-width: 4;
300# c-basic-offset: 4;
301# c-file-offsets:((innamespace . 0)(inline-open . 0));
302# indent-tabs-mode: nil;
303# End:
304#
305# vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
306*/
307
Note: See TracBrowser for help on using the repository browser.