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