source: sources/test_regression/29032005/system.cpp

Last change on this file 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.2 KB
RevLine 
[55]1
[1]2#include <signal.h>
3
[55]4#include "systemc.h"
5#include "test.h"
6
7
[1]8using namespace std;
[55]9
[1]10struct M_0i1o : sc_module {
[55]11    sc_in_clk clk;
12    sc_out<bool> o1;
[1]13
[55]14    void eval() {
15        o1 = (rand() % 2) == 0;
16    }
[1]17
[55]18    SC_CTOR (M_0i1o) : clk("clk"), o1("o1") {
19        SC_METHOD(eval);
20        sensitive << clk.neg();
21        dont_initialize();
22    }
23
[1]24};
25
26struct M_1i1o : sc_module {
[55]27    sc_in_clk clk;
28    sc_in<bool> i1;
29    sc_out<bool> o1;
[1]30
[55]31    void eval1() {
32        o1 = ~i1;
33    }
[1]34
[55]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();
[1]40#ifdef SYSTEMCASS_SPECIFIC
[55]41        o1(i1);
[1]42#endif
[55]43    }
44
[1]45};
46
47
[55]48
[1]49struct M_2i2o : sc_module {
[55]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;
[1]55
[55]56    void eval1() {
57        o1 = ~i1;
58    }
59    void eval2() {
60        o2 = ~i2;
61    }
[1]62
[55]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();
[1]68#ifdef SYSTEMCASS_SPECIFIC
[55]69        o1(i1);
[1]70#endif
[55]71        SC_METHOD(eval2);
72        sensitive << clk.neg();
73        sensitive << i2;
74        dont_initialize();
[1]75#ifdef SYSTEMCASS_SPECIFIC
[55]76        o2(i2);
[1]77#endif
[55]78    }
79
[1]80};
81
[55]82
[1]83struct M_4i2o : sc_module {
[55]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;
[1]91
[55]92    void eval1() {
93        o1 = ~i1;
94    }
[1]95
[55]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();
[1]110#ifdef SYSTEMCASS_SPECIFIC
[55]111        o1(i1);
[1]112#endif
[55]113        SC_METHOD(eval2);
114        sensitive << clk.neg();
115        sensitive << i2;
116        dont_initialize();
[1]117#ifdef SYSTEMCASS_SPECIFIC
[55]118        o2(i2);
[1]119#endif
[55]120        SC_METHOD(eval3);
121        sensitive << clk.pos();
122        dont_initialize();
123    }
124
[1]125};
126
[55]127
[1]128struct M_4i3o : sc_module {
[55]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;
[1]137
[55]138    void eval1() {
139        o1 = ~i1;
140    }
141   
142    void eval2() {
143        o2 = ~i2;
144    }
[1]145
[55]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();
[1]159#ifdef SYSTEMCASS_SPECIFIC
[55]160        o1(i1);
[1]161#endif
[55]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();
[1]170#ifdef SYSTEMCASS_SPECIFIC
[55]171        o3(i3);
[1]172#endif
[55]173        SC_METHOD(eval2);
174        sensitive << clk.neg();
175        sensitive << i2;
176        dont_initialize();
[1]177#ifdef SYSTEMCASS_SPECIFIC
[55]178        o2(i2);
[1]179#endif
[55]180    }
[1]181};
182
[55]183
[1]184struct M_1i0o : sc_module {
[55]185    sc_in_clk   clk;
186    sc_in<bool> i1;
[1]187
[55]188    void eval1() {
189        cout << i1.read() << "\n";
190    }
[1]191
[55]192    SC_CTOR (M_1i0o) : clk("clk"), i1("i1") {
193        SC_METHOD(eval1);
194        sensitive << clk.pos();
195        dont_initialize();
196    }
[1]197};
198
199
[55]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");
[1]217
[60]218    // Setup number of threads open-mp to 1 with the macro threads_omp()
219    threads_omp();
[1]220
[55]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");
[1]233
[55]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
[1]295    return EXIT_SUCCESS;
[55]296}
[1]297
298
[55]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*/
[1]309
Note: See TracBrowser for help on using the repository browser.