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
RevLine 
[55]1
[1]2#include <signal.h>
[55]3#include <iostream>
[1]4
[55]5#include "systemc.h"
6#include "test.h"
7
[1]8using namespace std;
[55]9
10
[1]11struct M_0i1o : sc_module {
[55]12    sc_in_clk clk;
13    sc_out<bool> o1;
[1]14
[55]15    void eval() {
16        o1 = (rand() % 2) == 0;
17    }
[1]18
[55]19    SC_CTOR (M_0i1o) : clk ("clk"), o1("o1") {
20        SC_METHOD(eval);
21        sensitive << clk.neg();
22        dont_initialize();
23    }
[1]24};
25
[55]26
[1]27struct M_1i1o : sc_module {
[55]28    sc_in_clk   clk;
29    sc_in<bool>  i1;
30    sc_out<bool> o1;
[1]31
[55]32    void eval1() {
33        o1 = ~i1;
34    }
[1]35
[55]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();
[1]41#ifdef SYSTEMCASS_SPECIFIC
[55]42        o1(i1);
[1]43#endif
[55]44    }
45
[1]46};
47
48
[55]49
[1]50struct M_2i2o : sc_module {
[55]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;
[1]56
[55]57    void eval1() {
58        o1 = ~i1;
59    }
60    void eval2() {
61        o2 = ~i2;
62    }
[1]63
[55]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();
[1]69#ifdef SYSTEMCASS_SPECIFIC
[55]70        o1(i1);
[1]71#endif
[55]72
73        SC_METHOD(eval2);
74        sensitive << clk.neg();
75        sensitive << i2;
76        dont_initialize();
[1]77#ifdef SYSTEMCASS_SPECIFIC
[55]78        o2(i2);
[1]79#endif
[55]80    }
[1]81};
82
[55]83
[1]84struct M_4i2o : sc_module {
[55]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;
[1]92
[55]93    void eval1() {
94        o1 = ~i1;
95    }
[1]96
[55]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();
[1]111#ifdef SYSTEMCASS_SPECIFIC
[55]112        o1(i1);
[1]113#endif
[55]114        SC_METHOD(eval2);
115        sensitive << clk.neg();
116        sensitive << i2;
117        dont_initialize();
[1]118#ifdef SYSTEMCASS_SPECIFIC
[55]119        o2(i2);
[1]120#endif
[55]121        SC_METHOD(eval3);
122        sensitive << clk.pos();
123        dont_initialize();
[1]124#ifdef SYSTEMCASS_SPECIFIC
[55]125        // No port dependency
[1]126#endif
[55]127    }
128
[1]129};
130
[55]131
[1]132struct M_4i3o : sc_module {
[55]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;
[1]141
[55]142    void eval1() {
143        o1 = ~i1;
144    }
[1]145
[55]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();
[1]163#ifdef SYSTEMCASS_SPECIFIC
[55]164        o1(i1);
[1]165#endif
[55]166        SC_METHOD(eval4);
167        sensitive << clk.pos();
168        dont_initialize();
[1]169#ifdef SYSTEMCASS_SPECIFIC
[55]170        // No port dependency
[1]171#endif
[55]172        SC_METHOD(eval3);
173        sensitive << clk.neg();
174        sensitive << i3;
175        dont_initialize();
[1]176#ifdef SYSTEMCASS_SPECIFIC
[55]177        o3(i3);
[1]178#endif
[55]179        SC_METHOD(eval2);
180        sensitive << clk.neg();
181        sensitive << i2;
182        dont_initialize();
[1]183#ifdef SYSTEMCASS_SPECIFIC
[55]184        o2(i2);
[1]185#endif
[55]186    }
187
[1]188};
189
[55]190
[1]191struct M_1i0o : sc_module {
[55]192    sc_in_clk   clk;
193    sc_in<bool> i1;
[1]194
[55]195    void eval1() {
196        cout << i1.read() << "\n";
197    }
[1]198
[55]199    SC_CTOR (M_1i0o) : clk("clk"), i1("i1") {
200        SC_METHOD(eval1);
201        sensitive << clk.pos();
202        dont_initialize();
[1]203#ifdef SYSTEMCASS_SPECIFIC
[55]204        // No port dependency
[1]205#endif
[55]206    }
[1]207};
208
209
[55]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");
[1]227
[60]228    // Setup number of threads open-mp to 1 with the macro threads_omp()
229    threads_omp();
[1]230
[55]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");
[1]243
[55]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);
[1]256
[55]257    a.o1(s1);
258    b.i1(s1);
[1]259
[55]260    b.o2(s2);
261    c.i1(s2);
[1]262
[55]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;
[1]306}
[55]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.