source: sources/test_regression/19042005/system.cpp @ 55

Last change on this file since 55 was 55, checked in by meunier, 11 years ago

Tried to clean the test_regression directory:

  • Code formatting
  • Supressed warnings
  • Made comprehensible outputs
  • Factorized Makefiles

There's still a lot to do (many tests don't pass for either good or bad reasons)

File size: 4.1 KB
Line 
1
2#include <stdint.h>
3
4#include "systemc.h"
5#include "test.h"
6
7using namespace std;
8
9
10struct test : sc_module {
11    sc_in_clk               clk;
12    sc_in<bool>             i1;
13    sc_in<char>             i2;
14    sc_in<int>              i3;
15    sc_in<sc_int<4> >       i4;
16    sc_in<sc_uint<4> >      i5;
17    sc_in<sc_uint<64> >     i6;
18    sc_out<bool>            o1;
19    sc_out<char>            o2;
20    sc_out<int >            o3;
21    sc_out<sc_int<4> >      o4;
22    sc_out<sc_uint<4> >     o5;
23    sc_out<sc_uint<64> >    o6;
24    sc_inout<sc_uint<64> >  io1;
25    sc_inout<sc_uint<32> >  io4;
26
27    sc_signal<bool>         reg1;
28    sc_signal<char>         reg2;
29    sc_signal<int>          reg3;
30    sc_signal<sc_int<4> >   reg4;
31    sc_signal<sc_uint<4> >  reg5;
32    sc_signal<sc_uint<64> > reg6;
33    sc_signal<sc_uint<32> > reg9;
34
35    void gen() {
36        o1  = reg1.read() ^ true;
37        o2  = reg2.read() + 1;
38        o3  = reg3.read() + 1;
39        o4  = reg4.read() + 1;
40        o5  = reg5.read() + 1;
41        o6  = reg6.read() + 1;
42        io1 = reg6.read() * 2 + 1;
43        io4 = reg9.read() + 1;
44    }
45
46    void trans() {
47        reg1 = reg1.read() ^ 1;
48        reg2 = reg2.read() + 1;
49        reg3 = reg3.read() + 1;
50        reg4 = reg4.read() + 1;
51        reg5 = reg5.read() + 1;
52        reg6 = reg6.read() * 2 + 1;
53        reg9 = reg9.read() + 1;
54    }
55
56    SC_CTOR (test) : clk("clk"), i1("i1"), i2("i2"), i3("i3"), o1("o1"),
57    o2("o2"), o3("o3"), io1("io1"), io4("io4"), reg9("reg9") {
58        SC_METHOD(trans);
59        sensitive << clk.pos();
60        dont_initialize();
61
62        SC_METHOD(gen);
63        sensitive << clk.neg();
64        dont_initialize();
65    }
66
67};
68
69
70
71int sc_main (int argc, char * argv[]) {
72    sc_clock signal_clk("my_clock", 1, 0.5);
73    sc_signal<bool> s1 ("s01"), s2 ("s02");
74    sc_signal<char> s3 ("s03"), s4 ("s04");
75    sc_signal<int>  s5 ("s05"), s6 ("s06");
76    sc_signal< sc_int<4> >   s7 ("s07"), s8 ("s08");
77    sc_signal< sc_uint<4> >  s9 ("s09"), s10("s10");
78    sc_signal< sc_uint<64> > s11("s11"), s12("s12"), s13("s13");
79    sc_signal< sc_uint<32> > s16("s16");
80
81    test test1("test1");
82    test1.clk(signal_clk);
83    test1.i1(s1);
84    test1.o1(s2);
85    test1.i2(s3);
86    test1.o2(s4);
87    test1.i3(s5);
88    test1.o3(s6);
89    test1.i4(s7);
90    test1.o4(s8);
91    test1.i5(s9);
92    test1.o5(s10);
93    test1.i6(s11);
94    test1.o6(s12);
95    test1.io1(s13);
96    test1.io4(s16);
97
98    /* Open trace file */
99    sc_trace_file * system_trace_file;
100    system_trace_file = sc_create_vcd_trace_file("trace_file");
101    /* clk waveform is always useful */
102    sc_trace(system_trace_file, signal_clk, "clk");
103
104    bool b1 = 0;
105    uint64_t l1 = 0;
106
107#define TRACE(x) sc_trace (system_trace_file, x, #x);
108    TRACE(b1);
109    TRACE(l1);
110    TRACE(test1.i1);
111    TRACE(test1.i2);
112    TRACE(test1.i3);
113    TRACE(test1.i4);
114    TRACE(test1.i5);
115    TRACE(test1.i6);
116    TRACE(test1.o1);
117    TRACE(test1.o2);
118    TRACE(test1.o3);
119    TRACE(test1.o4);
120    TRACE(test1.o5);
121    TRACE(test1.o6);
122    TRACE(test1.io1);
123    TRACE(test1.io4);
124    TRACE(s1);
125    TRACE(s2);
126    TRACE(s3);
127    TRACE(s4);
128    TRACE(s5);
129    TRACE(s6);
130    TRACE(s7);
131    TRACE(s8);
132    TRACE(s9);
133    TRACE(s10);
134    TRACE(s11);
135    TRACE(s12);
136    TRACE(s13);
137    TRACE(s16);
138#undef TRACE
139
140    // Init & run
141    sc_start(sc_time(0, sc_core::SC_NS));
142
143    ASSERT(test1.i1.read() == false);
144    ASSERT(s4.read() == 0);
145    ASSERT(s10.read() == 0);
146    ASSERT(s16.read() == 0);
147
148    sc_start(sc_time(1, sc_core::SC_NS));
149
150    b1 = 1;
151    l1 = 5;
152
153    int i;
154    for (i = 1; i < 60; ++i) {
155        l1 += i;
156        b1 ^= true;
157        s1  = s1.read() ^ true;
158        s3  = s3.read() + 2;
159        s5  = s5.read() + 3;
160        s7  = s7.read() + 4;
161        s9  = s9.read() + 5;
162        s11 = (s11.read() << 2) + 1;
163        sc_start(sc_time(1, sc_core::SC_NS));
164    }
165
166    sc_close_vcd_trace_file(system_trace_file);
167
168    return EXIT_SUCCESS;
169}
170
171#undef sc_inout
172
173/*
174# Local Variables:
175# tab-width: 4;
176# c-basic-offset: 4;
177# c-file-offsets:((innamespace . 0)(inline-open . 0));
178# indent-tabs-mode: nil;
179# End:
180#
181# vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
182*/
183
Note: See TracBrowser for help on using the repository browser.