source: branches/with_autoconf/test_regression/05042006/system4.cpp @ 23

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

Initial import from CVS repository

File size: 2.0 KB
Line 
1#include <systemc.h>
2
3#define ASSERT(x) \
4  { \
5    if (!(x)) \
6    { \
7    cerr << "ASSERT : " #x "\n"; \
8    exit (1); \
9    } \
10  }
11
12using namespace std;
13
14struct inner : sc_module {
15        sc_in_clk                       clk;
16  sc_in<int>                      i1;
17  sc_out<int>                     o1;
18  sc_signal<int>                  reg2;
19
20  void trans ()
21  {
22    reg2 = i1;
23  }
24
25  void gen ()
26  {
27    o1 = reg2.read() + 1;
28  }
29
30  SC_HAS_PROCESS(inner);
31        inner (sc_module_name n) : sc_module (n),
32    clk("clk"),
33    i1("i1"), 
34    o1("o1"),
35    reg2("reg2")
36  {
37                SC_METHOD(trans);
38                sensitive << clk.pos();
39    dont_initialize();
40                SC_METHOD(gen);
41                sensitive << clk.neg();
42    dont_initialize();
43        };
44};
45
46struct test : sc_module {
47  inner                           in;
48        sc_in_clk                       clk;
49  sc_in<int>                      i1;
50  sc_out<int>                     o1;
51  sc_out<bool>                    o2;
52
53  sc_signal<bool>                 reg1;
54
55  void trans ()
56  {
57    reg1 = i1 & 1;
58  }
59
60  void gen ()
61  {
62    o2 = reg1.read();
63  }
64
65  SC_HAS_PROCESS(test);
66        test (sc_module_name n) : sc_module (n), 
67    in ("inner"),
68    clk("clk"),
69    i1("i1"), 
70    o1("o1"),
71    o2("o2"),
72    reg1("reg1")
73  {
74    in.clk (clk);
75    in.o1 (o1);
76    in.i1 (i1);
77                SC_METHOD(trans);
78                sensitive << clk.pos();
79    dont_initialize();
80                SC_METHOD(gen);
81                sensitive << clk.neg();
82    dont_initialize();
83        };
84};
85
86int sc_main (int argc, char *argv[])
87{
88        sc_clock           signal_clk("my_clock",1, 0.5);
89  sc_signal<int>     s01("s01");
90  sc_signal<int>     s02("s02");
91  sc_signal<bool>    s03("s03");
92
93  test test1("test1");
94  test1.clk (signal_clk);
95  test1.i1 (s01);
96  test1.o1 (s02);
97  test1.o2 (s03);
98
99        // Init & run
100        sc_start (0);
101
102  int i;
103  for (i = 0; i < 10; ++i)
104  {
105    sc_start (1);
106    s01 = i % 2;
107#if 0
108    cerr << "cycle #" << i << " : "
109         << test1.o1.read() << " ; "
110         <<test1.in.reg2.read () + 1 << endl;
111#endif
112    ASSERT(test1.o1.read() == test1.in.reg2.read () + 1);
113    ASSERT(test1.o1.read() == test1.in.o1.read ());
114  }
115
116        return EXIT_SUCCESS;
117}
118
Note: See TracBrowser for help on using the repository browser.