source: sources/test_regression/25032005/system.cpp

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