source: sources/test_regression/30032005a/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: 3.2 KB
Line 
1#include <signal.h>
2
3#include "systemc.h"
4#include "test.h"
5
6
7using namespace std;
8
9struct M1_3i3o : sc_module {
10    sc_in_clk    clk;
11    sc_in<bool>  i1;
12    sc_in<bool>  i2;
13    sc_in<bool>  i3;
14    sc_out<bool> o1;
15    sc_out<bool> o2;
16    sc_out<bool> o3;
17
18    sc_signal<bool> reg;
19
20    void eval_mealy1() {
21        o1 = ~i1;
22    }
23
24    void eval_mealy2() {
25        o2 = ~i2;
26    }
27
28    void tr_moore() {
29        reg = i3;
30    }
31
32    void gen_moore() {
33        o3 = ~reg;
34    }
35
36    SC_CTOR (M1_3i3o) : clk("clk"), i1("i1"), i2("i2"), i3("i3"), o1("o1"),
37    o2("o2"), o3("o3") {
38        SC_METHOD(eval_mealy1);
39        sensitive << clk.neg();
40        sensitive << i1;
41        dont_initialize();
42#ifdef SYSTEMCASS_SPECIFIC
43        o1(i1);
44#endif
45
46        SC_METHOD(eval_mealy2);
47        sensitive << clk.neg();
48        sensitive << i2;
49        dont_initialize();
50
51#ifdef SYSTEMCASS_SPECIFIC
52        o2(i2);
53#endif
54        SC_METHOD(tr_moore);
55        sensitive << clk.pos();
56        dont_initialize();
57
58        SC_METHOD(gen_moore);
59        sensitive << clk.neg();
60        dont_initialize();
61    }
62
63};
64
65
66struct M2_4i4o : sc_module {
67    sc_in_clk    clk;
68    sc_in<bool>  i1;
69    sc_in<bool>  i2;
70    sc_in<bool>  i3;
71    sc_in<bool>  i4;
72    sc_out<bool> o1;
73    sc_out<bool> o2;
74    sc_out<bool> o3;
75    sc_out<bool> o4;
76    sc_signal<sc_uint<2> > reg;
77
78    void tr_moore() {
79        reg = ((i1.read() & i3.read()) ? 2 : 0) + (i2.read() | i4.read());
80    }
81
82    void gen_moore() {
83        o1 = reg.read() & 1;
84        o2 = reg.read() & 2;
85        o3 = ~(reg.read() & 1);
86        o4 = ~(reg.read() & 2);
87    }
88
89
90    SC_CTOR (M2_4i4o) : clk("clk"), i1("i1"), i2("i2"), i3("i3"), i4("i4"), o1("o1"), o2("o2"), o3("o3"), o4("o4")  {
91        SC_METHOD(tr_moore);
92        sensitive << clk.pos();
93        dont_initialize();
94
95        SC_METHOD(gen_moore);                     
96        sensitive << clk.neg();                   
97        dont_initialize();
98    }                                           
99
100};
101
102
103int sc_main (int argc, char * argv[]) {
104    sc_clock signal_clk("my_clock");
105    sc_signal<bool> s1 ("s01"),
106        s2 ("s02"),
107        s3 ("s03"),
108        s4 ("s04"),
109        s5 ("s05"),
110        s6 ("s06"),
111        s7 ("s07"),
112        s8 ("s08"),
113        s9 ("s09"),
114        s10("s10"),
115        s11("s11"),
116        s12("s12"),
117        s13("s13"),
118        s14("s14"),
119        s15("s15");
120
121    // Setup number of threads open-mp to 1 with the macro threads_omp()
122    threads_omp();
123
124    M1_3i3o a("a");
125    M1_3i3o b("b");
126    M2_4i4o Moore("Moore");
127
128    a.clk(signal_clk);
129    b.clk(signal_clk);
130    Moore.clk(signal_clk);
131
132    Moore.o1(s1);
133    a.i1(s1);
134
135    a.o1(s2);
136    b.i1(s2);
137
138    b.o1(s3);
139    Moore.i1(s3);
140
141    Moore.o2(s4);
142    b.i2(s4);
143
144    b.o2(s5);
145    a.i2(s5);
146
147    a.o2(s6);
148    Moore.i2(s6);
149
150    Moore.o3(s7);
151    b.i3(s7);
152
153    Moore.o4(s8);
154    a.i3(s8);
155
156    b.o3(s9);
157    Moore.i4(s9);
158
159    a.o3(s10);
160    Moore.i3(s10);
161
162    // Init & run
163    sc_start(sc_time(0, sc_core::SC_NS));
164
165    return EXIT_SUCCESS;
166}
167
168/*
169# Local Variables:
170# tab-width: 4;
171# c-basic-offset: 4;
172# c-file-offsets:((innamespace . 0)(inline-open . 0));
173# indent-tabs-mode: nil;
174# End:
175#
176# vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
177*/
178
Note: See TracBrowser for help on using the repository browser.