source: sources/test_regression/11062007/system.cpp @ 63

Last change on this file since 63 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
RevLine 
[55]1
[1]2#include <signal.h>
3
[55]4#include "systemc.h"
5
6#include "test.h"
7
[1]8using namespace std;
[55]9
10
[1]11struct A : 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(A) : clk ("clk"), o1("o1") {
20        SC_METHOD(eval);
21        sensitive << clk.neg();
22        dont_initialize();
23    }
[1]24};
25
[55]26
[1]27struct B : sc_module {
[55]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;
[1]33
[55]34    void eval1() {
35        o1 = ~i1;
36    }
[1]37
[55]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();
[1]47#ifdef SYSTEMCASS_SPECIFIC
[55]48        o1(i1);
[1]49#endif
[55]50        SC_METHOD(eval2);
51        sensitive << clk.neg();
52        sensitive << i2;
53        dont_initialize();
[1]54#ifdef SYSTEMCASS_SPECIFIC
[55]55        o2(i2);
[1]56#endif
[55]57    }
[1]58};
59
[55]60
[1]61struct C : sc_module {
[55]62    sc_in_clk    clk;
63    sc_in<bool>  i1;
64    sc_in<bool>  i2;
65    sc_out<bool> o1;
[1]66
[55]67    void eval1() {
68        o1 = i1 ^ i2;
69    }
[1]70
[55]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();
[1]76#ifdef SYSTEMCASS_SPECIFIC
[55]77        o1(i1);
78        o1(i2);
[1]79#endif
[55]80    }
81
[1]82};
83
[55]84
[1]85struct D : sc_module {
[55]86    sc_in_clk    clk;
87    sc_out<bool> o1;
[1]88
[55]89    void eval () {
90        o1 = (rand() % 2) == 0;
91    }
[1]92
[55]93    SC_CTOR(D) : clk ("clk"), o1("o1") {
94        SC_METHOD(eval);
95        sensitive << clk.neg();
96        dont_initialize();
97    }
98
[1]99};
100
101
[55]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");
[1]105
[60]106    // Setup number of threads open-mp to 1 with the macro threads_omp()
107    threads_omp();
108
[55]109    A a("a");
110    B b("b");
111    C c("c");
112    D d("d");
[1]113
[55]114    a.clk(signal_clk);
115    b.clk(signal_clk);
116    c.clk(signal_clk);
117    d.clk(signal_clk);
[1]118
[55]119    a.o1(s1);
120    b.i1(s1);
[1]121
[55]122    d.o1(s2);
123    c.i2(s2);
[1]124
[55]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;
[1]150}
[55]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.