source: sources/test_regression/29032005/system.cpp @ 61

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