source: sources/test_regression/19122005/system2.cpp @ 60

Last change on this file since 60 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: 3.6 KB
Line 
1
2#include "systemc.h"
3#include "test.h"
4
5
6using namespace std;
7
8
9struct inner : sc_module {
10    sc_in_clk clk;
11    sc_in<int> i1;
12    int reg;
13
14    void save(ostream & o) {
15        o << reg << endl;
16    }
17
18    void save_state(FILE * fic) {
19        cerr << "saving " << name() << "\n";
20        fprintf (fic, "%d\n", reg);
21    }
22
23    void restore_state(FILE * fic) {
24        cerr << "restoring " << name () << "\n";
25        int i;
26        fscanf (fic, "%d\n", &i);
27        reg = i;
28    }
29
30    void trans() {
31        reg = i1.read();
32    }
33
34    SC_HAS_PROCESS(inner);
35    inner(sc_module_name n) : sc_module(n),
36    clk("clk"),
37    i1("i1") {
38        SC_METHOD(trans);
39        sensitive << clk.pos();
40        dont_initialize();
41#ifdef SYSTEMCASS_SPECIFIC
42        SAVE_HANDLER(save_state);
43#endif
44    }
45
46};
47
48
49struct test : sc_module {
50    sc_in_clk clk;
51    sc_in<bool> i1;
52    sc_in<int> i2;
53    sc_in<int> i3;
54    inner inner1;
55
56    int  tab[16];
57    bool b;
58
59    void trans() {
60        b = i1.read() ^ b;
61        tab[i3.read() % 16] = i2;
62    }
63
64
65    void save(ostream & o) {
66        o << ((b) ? 1 : 0) << endl;
67        int i;
68        for (i = 0; i < 16; ++i) {
69            o << tab[i] << endl;
70        }
71    }
72
73    void save_state(FILE * fic) {
74        cerr << "saving " << name() << "\n";
75        fprintf (fic, "%c\n", ((b) ? '1' : '0'));
76        int i;
77        for (i = 0; i < 16; ++i) {
78            fprintf(fic, "%d\n", tab[i]);
79        }
80    }
81
82    void restore_state(FILE * fic) {
83        cerr << "restoring " << name() << "\n";
84        int j;
85        fscanf (fic, "%d\n", &j);
86        b = (j > 0);
87        int i;
88        for (i = 0; i < 16; ++i) {
89            fscanf(fic, "%d\n", &j);
90            tab[i] = j;
91        }
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"),
98    inner1 ("inner1") {
99        SC_METHOD(trans);
100        sensitive << clk.pos();
101        dont_initialize();
102#ifdef SYSTEMCASS_SPECIFIC
103        SAVE_HANDLER(save_state);
104#endif
105    }
106
107};
108
109
110int usage (const char * com) {
111    cout << "Usage :\n" << com << " [#cycles]\n";
112    return EXIT_FAILURE;
113}
114
115
116sc_signal<bool> s01("bool");
117sc_signal<int> s02("tab_index"),
118s03 ("value_to_write_in_tab");
119
120
121void * func() {
122    cerr << "func () at #" << sc_time_stamp() << endl;
123    int i = (int) (sc_time_stamp().to_double()) / 1000;
124    s01  = (i & 1) > 0;
125    s02  = (i + (i << 1)) << 6;
126    s03  = i;
127    ++i;
128    return 0;
129}
130
131
132void save() {
133#ifdef SYSTEMCASS_SPECIFIC
134    int current_cycle = ((int) sc_time_stamp().to_double() / 1000);
135    if (current_cycle != 20) {
136        return;
137    }
138    char name[256];
139    sprintf(name, "test2_systemcass_%d.dat", current_cycle);
140    sc_save_simulation(name);
141#endif
142}
143
144
145int sc_main (int argc, char * argv[]) {
146    sc_clock signal_clk("my_clock",1, 0.5);
147
148    test test1("test1");
149    test1.clk(signal_clk);
150    test1.i1(s01);
151    test1.i2(s02);
152    test1.i3(s03);
153    test1.inner1.clk(signal_clk);
154    test1.inner1.i1(s02);
155
156    // Init & run
157    sc_start(sc_time(0, sc_core::SC_NS));
158
159#ifndef SOCVIEW
160    if (argc != 2) {
161        return usage(argv[0]);
162    }
163
164    int nb = atoi(argv[1]);
165
166    if (nb == 0) {
167        return usage(argv[0]);
168    } 
169
170    int i = 0;
171    while (i++ < nb) {
172        func();
173        sc_start(sc_time(1, sc_core::SC_NS));
174        save();
175    }
176#else
177    debug(&func); 
178#endif
179
180    return EXIT_SUCCESS;
181}
182
183
184/*
185# Local Variables:
186# tab-width: 4;
187# c-basic-offset: 4;
188# c-file-offsets:((innamespace . 0)(inline-open . 0));
189# indent-tabs-mode: nil;
190# End:
191#
192# vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
193*/
194
Note: See TracBrowser for help on using the repository browser.