source: branches/with_autoconf/test_regression/11062007/system.cpp @ 41

Last change on this file since 41 was 1, checked in by buchmann, 17 years ago

Initial import from CVS repository

File size: 2.5 KB
Line 
1#include <systemc.h>
2#include <signal.h>
3
4using namespace std;
5       
6struct A : sc_module {
7        sc_in_clk                       clk;
8        sc_out<bool>                    o1;
9
10        void eval () {
11    o1 = (rand()%2) == 0;
12        }
13
14        SC_CTOR (A) : clk ("clk"), o1("o1") {
15                SC_METHOD(eval);
16                sensitive << clk.neg();
17#ifdef SYSTEMCASS_SPECIFIC
18//              s1();
19#endif
20        };
21};
22
23struct B : sc_module {
24        sc_in_clk                       clk;
25        sc_in<bool>                     i1;
26        sc_in<bool>                     i2;
27        sc_out<bool>                    o1;
28        sc_out<bool>                    o2;
29
30        void eval1 () {
31    o1 = ~i1;
32        }
33        void eval2 () {
34    o2 = ~i2;
35        }
36
37        SC_CTOR (B) : clk ("clk"), i1 ("i1"), o1("o1"), i2 ("i2"), o2 ("o2") {
38                SC_METHOD(eval1);
39                sensitive << clk.neg();
40                sensitive << i1;
41#ifdef SYSTEMCASS_SPECIFIC
42                o1(i1);
43#endif
44                SC_METHOD(eval2);
45                sensitive << clk.neg();
46                sensitive << i2;
47#ifdef SYSTEMCASS_SPECIFIC
48                o2(i2);
49#endif
50        };
51};
52
53struct C : sc_module {
54        sc_in_clk                       clk;
55        sc_in<bool>                     i1;
56        sc_in<bool>                     i2;
57        sc_out<bool>                    o1;
58
59        void eval1 () {
60    o1 = i1 ^ i2;
61        }
62
63        SC_CTOR (C) : clk ("clk"), i1 ("i1"), o1("o1"), i2 ("i2") {
64                SC_METHOD(eval1);
65                sensitive << clk.neg();
66                sensitive << i1 << i2;
67#ifdef SYSTEMCASS_SPECIFIC
68                o1(i1);
69                o1(i2);
70#endif
71        };
72};
73
74struct D : sc_module {
75        sc_in_clk                       clk;
76        sc_out<bool>                    o1;
77
78        void eval () {
79    o1 = (rand()%2) == 0;
80        }
81
82        SC_CTOR (D) : clk ("clk"), o1("o1") {
83                SC_METHOD(eval);
84                sensitive << clk.neg();
85#ifdef SYSTEMCASS_SPECIFIC
86//              s1();
87#endif
88        };
89};
90
91int sc_main (int argc, char *argv[])
92{
93        sc_clock                     signal_clk("my_clock",1, 0.5);
94        sc_signal<bool>              s1("s1"),s2("s2"),s3("s3"),s4("s4"),s5("s5");
95
96        A      a("a");
97        B      b("b");
98        C      c("c");
99        D      d("d");
100       
101        a.clk         (signal_clk);
102        b.clk         (signal_clk);
103        c.clk         (signal_clk);
104        d.clk         (signal_clk);
105       
106        a.o1          (s1);
107        b.i1          (s1);
108               
109        d.o1          (s2);
110        c.i2          (s2);
111
112        b.o1          (s3);
113        c.i1          (s3);
114       
115        c.o1          (s4);
116        b.i2          (s4);
117       
118        b.o2          (s5);
119       
120        // Init & run
121        sc_initialize ();
122
123  if (argc == 1)
124  {
125    cout << "Usage :\n" << argv[0] << " [#cycles]\n";
126    return EXIT_SUCCESS;
127  }
128
129  sc_start (atoi(argv[1]));
130
131  cout << s1.read() << endl;
132  cout << s2.read() << endl;
133  cout << s3.read() << endl;
134  cout << s4.read() << endl;
135  cout << s5.read() << endl;
136
137        return EXIT_SUCCESS;
138}
Note: See TracBrowser for help on using the repository browser.