source: sources/test_regression/11062007/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: 2.7 KB
Line 
1
2#include <signal.h>
3
4#include "systemc.h"
5
6#include "test.h"
7
8using namespace std;
9
10
11struct A : 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(A) : clk ("clk"), o1("o1") {
20        SC_METHOD(eval);
21        sensitive << clk.neg();
22        dont_initialize();
23    }
24};
25
26
27struct B : sc_module {
28    sc_in_clk    clk;
29    sc_in<bool>  i1;
30    sc_in<bool>  i2;
31    sc_out<bool> o1;
32    sc_out<bool> o2;
33
34    void eval1() {
35        o1 = ~i1;
36    }
37
38    void eval2() {
39        o2 = ~i2;
40    }
41
42    SC_CTOR(B) : clk("clk"), i1("i1"), i2("i2"), o1("o1"), o2("o2") {
43        SC_METHOD(eval1);
44        sensitive << clk.neg();
45        sensitive << i1;
46        dont_initialize();
47#ifdef SYSTEMCASS_SPECIFIC
48        o1(i1);
49#endif
50        SC_METHOD(eval2);
51        sensitive << clk.neg();
52        sensitive << i2;
53        dont_initialize();
54#ifdef SYSTEMCASS_SPECIFIC
55        o2(i2);
56#endif
57    }
58};
59
60
61struct C : sc_module {
62    sc_in_clk    clk;
63    sc_in<bool>  i1;
64    sc_in<bool>  i2;
65    sc_out<bool> o1;
66
67    void eval1() {
68        o1 = i1 ^ i2;
69    }
70
71    SC_CTOR(C) : clk ("clk"), i1 ("i1"), i2("i2"), o1("o1") {
72        SC_METHOD(eval1);
73        sensitive << clk.neg();
74        sensitive << i1 << i2;
75        dont_initialize();
76#ifdef SYSTEMCASS_SPECIFIC
77        o1(i1);
78        o1(i2);
79#endif
80    }
81
82};
83
84
85struct D : sc_module {
86    sc_in_clk    clk;
87    sc_out<bool> o1;
88
89    void eval () {
90        o1 = (rand() % 2) == 0;
91    }
92
93    SC_CTOR(D) : clk ("clk"), o1("o1") {
94        SC_METHOD(eval);
95        sensitive << clk.neg();
96        dont_initialize();
97    }
98
99};
100
101
102int sc_main (int argc, char * argv[]) {
103    sc_clock signal_clk("my_clock",1, 0.5);
104    sc_signal<bool> s1("s1"),s2("s2"),s3("s3"),s4("s4"),s5("s5");
105
106    // Setup number of threads open-mp to 1 with the macro threads_omp()
107    threads_omp();
108
109    A a("a");
110    B b("b");
111    C c("c");
112    D d("d");
113
114    a.clk(signal_clk);
115    b.clk(signal_clk);
116    c.clk(signal_clk);
117    d.clk(signal_clk);
118
119    a.o1(s1);
120    b.i1(s1);
121
122    d.o1(s2);
123    c.i2(s2);
124
125    b.o1(s3);
126    c.i1(s3);
127
128    c.o1(s4);
129    b.i2(s4);
130
131    b.o2(s5);
132
133    // Init & run
134    sc_start(sc_time(0, sc_core::SC_NS));
135
136    if (argc == 1) {
137        cout << "Usage :\n" << argv[0] << " [#cycles]\n";
138        return EXIT_SUCCESS;
139    }
140
141    sc_start(sc_time(atoi(argv[1]), sc_core::SC_NS));
142
143    cout << s1.read() << endl;
144    cout << s2.read() << endl;
145    cout << s3.read() << endl;
146    cout << s4.read() << endl;
147    cout << s5.read() << endl;
148
149    return EXIT_SUCCESS;
150}
151
152/*
153# Local Variables:
154# tab-width: 4;
155# c-basic-offset: 4;
156# c-file-offsets:((innamespace . 0)(inline-open . 0));
157# indent-tabs-mode: nil;
158# End:
159#
160# vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
161*/
162
Note: See TracBrowser for help on using the repository browser.