source: branches/with_autoconf/test_regression/19122005/system.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: 5.3 KB
Line 
1#include <systemc.h>
2
3#define ASSERT(x) \
4  { errnum++; \
5    if (!(x)) \
6    { \
7    cerr << "ASSERT : " #x "\n"; \
8    exit (errnum); \
9    } \
10  }
11
12using namespace std;
13
14struct test : sc_module {
15        sc_in_clk                       clk;
16        sc_in<bool>                     i1;
17        sc_in<int>                      i2;
18        sc_in<int>                      i3;
19#if 0
20        sc_in<sc_int<4> >               i4;
21        sc_in<sc_uint<4> >              i5;
22#endif
23#if 0
24        sc_in<sc_uint<64> >             i6;
25#endif
26        sc_out<bool>                    o1;
27        sc_out<int>                    o2;
28        sc_out<int >                    o3;
29#if 0
30        sc_out<sc_int<4> >              o4;
31        sc_out<sc_uint<4> >             o5;
32#endif
33#if 0
34        sc_out<sc_uint<64> >            o6;
35        sc_inout<sc_uint<64> >          io1;
36#endif
37//      sc_inout<sc_signed >            io2;
38//      sc_inout<sc_unsigned >          io3;
39        sc_inout<sc_uint<32> >          io4;
40  sc_out<int>                     mealy1;
41  sc_out<int>                     mealy2;
42
43  sc_signal<bool>                 reg1;
44  sc_signal<int>                  reg2;
45  sc_signal<int>                  reg3;
46#if 0
47  sc_signal<sc_int<4> >           reg4;
48  sc_signal<sc_uint<4> >          reg5;
49#endif
50#if 0
51  sc_signal<sc_uint<64> >         reg6;
52#endif
53//  sc_signal<sc_signed   >         reg7;
54//  sc_signal<sc_unsigned >         reg8;
55  sc_signal<sc_uint<32> >         reg9;
56  sc_signal<int>                  reg10;
57
58  void fmealy1 ()
59  {
60    mealy1 = i2.read();
61  }
62
63  void fmealy2 ()
64  {
65    mealy2 = i2.read() + reg2.read();
66  }
67
68        void gen ()
69  {
70    o1  = reg1.read() ^ true;
71    o2  = reg2.read()+ 1;
72    o3  = reg3.read()+ 1;
73//    o4  = reg4.read()+ 1;
74//    o5  = reg5.read()+ 1;
75//    o6  = reg6.read()+ 1;
76//    io1 = reg6.read() * 2 + 1;
77    io4 = reg9.read()+ 1;
78  }
79
80  void trans ()
81  {
82//    io2 = io2.read() + 1;
83//    io3 = io3.read() + 1;
84    reg1 = reg1.read() ^ 1;
85    reg2 = reg2.read() + 1;
86    reg3 = reg3.read() + 1;
87//    reg4 = reg4.read() + 1;
88//    reg5 = reg5.read() + 1;
89//    reg6 = reg6.read() * 2 + 1;
90    reg9 = reg9.read() + 2;
91    reg10 = reg10.read() + i2.read();
92  }
93
94  SC_HAS_PROCESS(test);
95        test (sc_module_name n) : sc_module (n),
96    clk("clk"),
97    i1("i1"), i2("i2"), i3("i3"), /*i4("i4"), i5("i5"), */ /*i6("i6"),*/
98    o1("o1"), o2("o2"), o3("o3"), /*o4("o4"), o5("o5"), */ /*o6("o6"),
99    io1("io1"), */io4("io4"), 
100    mealy1("mealy1_equivalent_to_i2"),
101    mealy2("mealy2_equivalent_to_i2_plus_reg2"),
102    reg1("reg1_cycle_number_not_parity"),
103    reg2("reg2_cycle_number"),
104    reg3("reg3_cycle_number"),
105//    reg4("reg4"),
106//    reg5("reg5"),
107//    reg6("reg6"),
108//    reg7("reg7"),
109//    reg8("reg8"),
110    reg9("reg9_cycle_number_x2"),
111    reg10("reg10_sum_cycle_number")
112  {
113                SC_METHOD(trans);
114                sensitive << clk.pos();
115    dont_initialize();
116                SC_METHOD(gen);
117                sensitive << clk.neg();
118    dont_initialize();
119                SC_METHOD(fmealy1);
120                sensitive << i2;
121    dont_initialize();
122                SC_METHOD(fmealy2);
123                sensitive << i2 << clk.neg();
124    dont_initialize();
125        };
126};
127
128int
129usage (const char *com)
130{
131  cout << "Usage :\n" << com << " [#cycles]\n";
132  return EXIT_FAILURE;
133}
134
135sc_signal<bool>              s01 ("i1_cycle_number_not_parity"),
136                             s02 ("o2_not_reg1");
137sc_signal<int>               s03 ("i2_cycle_number_x2"),
138                             s04 ("o2_reg2_plus_one");
139sc_signal<int>               s05 ("i3_cycle_number_x3"),
140                             s06 ("o3_reg3_plus_one");
141#if 0
142sc_signal<sc_int<4> >        s07 ("s07"),
143                             s08 ("s08");
144sc_signal<sc_uint<4> >       s09 ("s09"),
145                             s10 ("s10");
146#endif
147#if 0
148sc_signal<sc_uint<64> >      s11 ("s11"),
149                             s12 ("s12"),
150                             s13 ("s13");
151#endif
152//sc_signal<sc_signed >        s14("s14");                     
153//sc_signal<sc_unsigned >      s15("s15");
154sc_signal<sc_uint<32> >      s16 ("io4_reg9_plus_one");
155sc_signal<int>               s17 ("mealy1_equivalent_to_i2");
156sc_signal<int>               s18 ("mealy2_i2_plus_reg2");
157
158int
159s (int i)
160{
161  int val = 0;
162  while (i)
163    val += i--;
164  return val;
165}
166
167void*
168func ()
169{
170  cerr << "func () at #" << sc_time_stamp () << endl;
171  int i = (int)(sc_time_stamp ().to_double ()) / 1000;
172  s01  = (i & 1) > 0;
173  s03  = i * 2;
174  s05  = i * 3;
175//  s07  = i * 4;
176//  s09  = i * 5;
177//  s11  = i * 6;
178  ++i;
179  return 0;
180}
181
182void
183save ()
184{
185#ifdef SYSTEMCASS_SPECIFIC
186  char name[256];
187  sprintf (name,"test_systemcass_%d.dat",((int)sc_time_stamp().to_double() / 1000));
188  sc_save_simulation (name);
189#endif
190}
191
192int sc_main (int argc, char *argv[])
193{
194  int errnum = 0;
195        sc_clock  signal_clk("my_clock",1, 0.5);
196
197  test test1("test1");
198  test1.clk (signal_clk);
199  test1.i1 (s01);
200  test1.o1 (s02);
201  test1.i2 (s03);
202  test1.o2 (s04);
203  test1.i3 (s05);
204  test1.o3 (s06);
205//  test1.i4 (s07);
206//  test1.o4 (s08);
207//  test1.i5 (s09);
208//  test1.o5 (s10);
209//  test1.i6 (s11);
210//  test1.o6 (s12);
211//  test1.io1(s13);
212//  test1.io2(s14);
213//  test1.io3(s15);
214  test1.io4(s16);
215  test1.mealy1(s17);
216  test1.mealy2(s18);
217
218        // Init & run
219        sc_start (0);
220
221#ifndef SOCVIEW
222  if (argc != 2)
223  {
224    return usage (argv[0]);
225  }
226
227        int nb = atoi(argv[1]);
228
229  if (nb == 0)
230  {
231    return usage (argv[0]);
232  } 
233
234  int i = 0;
235  save ();
236  while (i++ < nb)
237  {
238    func ();
239    sc_start (1);
240    save ();
241  }
242#else
243  debug(&func);
244#endif
245
246        return EXIT_SUCCESS;
247}
248
249#undef sc_inout
Note: See TracBrowser for help on using the repository browser.