source: sources/test_regression/19122005/system.cpp @ 65

Last change on this file since 65 was 60, checked in by meunier, 7 years ago
  • Intégration des modifications de Clément, qui a intégré la version parallélisée de systemcass faite par Manuel.
File size: 3.7 KB
RevLine 
[1]1
[55]2#include "systemc.h"
3#include "test.h"
[1]4
[55]5
6
[1]7using namespace std;
8
[55]9
[1]10struct test : sc_module {
[55]11    sc_in_clk    clk;
12    sc_in<bool>  i1;
13    sc_in<int>   i2;
14    sc_in<int>   i3;
15    sc_out<bool> o1;
16    sc_out<int>  o2;
17    sc_out<int>  o3;
18    sc_inout< sc_uint<32> > io4;
19    sc_out<int>  mealy1;
20    sc_out<int>  mealy2;
[1]21
[55]22    sc_signal<bool> reg1;
23    sc_signal<int>  reg2;
24    sc_signal<int>  reg3;
25    sc_signal<sc_uint<32> > reg9;
26    sc_signal<int>  reg10;
[1]27
[55]28    void fmealy1() {
29        mealy1 = i2.read();
30    }
[1]31
[55]32    void fmealy2() {
33        mealy2 = i2.read() + reg2.read();
34    }
[1]35
[55]36    void gen() {
37        o1  = reg1.read() ^ true;
38        o2  = reg2.read() + 1;
39        o3  = reg3.read() + 1;
40        io4 = reg9.read() + 1;
41    }
[1]42
[55]43    void trans() {
44        reg1 = reg1.read() ^ 1;
45        reg2 = reg2.read() + 1;
46        reg3 = reg3.read() + 1;
47        reg9 = reg9.read() + 2;
48        reg10 = reg10.read() + i2.read();
49    }
[1]50
[55]51    SC_HAS_PROCESS(test);
52    test(sc_module_name n) : sc_module(n),
[1]53    clk("clk"),
[55]54    i1("i1"), i2("i2"), i3("i3"),
55    o1("o1"), o2("o2"), o3("o3"),
56    io4("io4"), 
[1]57    mealy1("mealy1_equivalent_to_i2"),
58    mealy2("mealy2_equivalent_to_i2_plus_reg2"),
59    reg1("reg1_cycle_number_not_parity"),
60    reg2("reg2_cycle_number"),
61    reg3("reg3_cycle_number"),
62    reg9("reg9_cycle_number_x2"),
[55]63    reg10("reg10_sum_cycle_number") {
64        SC_METHOD(trans);
65        sensitive << clk.pos();
66        dont_initialize();
67
68        SC_METHOD(gen);
69        sensitive << clk.neg();
70        dont_initialize();
71
72        SC_METHOD(fmealy1);
73        sensitive << i2;
74        dont_initialize();
75
76        SC_METHOD(fmealy2);
77        sensitive << i2 << clk.neg();
78        dont_initialize();
79    }
[1]80};
81
[55]82
83int usage (const char * com) {
84    cout << "Usage :\n" << com << " [#cycles]\n";
85    return EXIT_FAILURE;
[1]86}
87
88
[55]89sc_signal<bool> s01("i1_cycle_number_not_parity"), s02("o2_not_reg1");
90sc_signal<int>  s03("i2_cycle_number_x2"), s04("o2_reg2_plus_one");
91sc_signal<int>  s05("i3_cycle_number_x3"), s06("o3_reg3_plus_one");
92sc_signal< sc_uint<32> > s16("io4_reg9_plus_one");
93sc_signal<int>  s17("mealy1_equivalent_to_i2");
94sc_signal<int>  s18("mealy2_i2_plus_reg2");
95
96
97int s(int i) {
98    int val = 0;
99    while (i) {
100        val += i--;
101    }
102    return val;
[1]103}
104
[55]105
106void * func() {
107    cerr << "func () at #" << sc_time_stamp() << endl;
108    int i = (int) (sc_time_stamp().to_double()) / 1000;
109    s01  = (i & 1) > 0;
110    s03  = i * 2;
111    s05  = i * 3;
112    ++i;
113    return 0;
[1]114}
115
[55]116
117void save() {
[1]118#ifdef SYSTEMCASS_SPECIFIC
[55]119    char name[256];
120    sprintf(name, "test_systemcass_%d.dat", ((int) sc_time_stamp().to_double() / 1000));
121    sc_save_simulation(name);
[1]122#endif
123}
124
125
[55]126int sc_main (int argc, char * argv[]) {
127    sc_clock  signal_clk("my_clock", 1, 0.5);
[1]128
[60]129    // Setup number of threads open-mp to 1 with the macro threads_omp()
130    threads_omp();
131
[55]132    test test1("test1");
133    test1.clk(signal_clk);
134    test1.i1(s01);
135    test1.o1(s02);
136    test1.i2(s03);
137    test1.o2(s04);
138    test1.i3(s05);
139    test1.o3(s06);
140    test1.io4(s16);
141    test1.mealy1(s17);
142    test1.mealy2(s18);
[1]143
[55]144    // Init & run
145    sc_start(sc_time(0, sc_core::SC_NS));
146
[1]147#ifndef SOCVIEW
[55]148    if (argc != 2) {
149        return usage(argv[0]);
150    }
[1]151
[55]152    int nb = atoi(argv[1]);
[1]153
[55]154    if (nb == 0) {
155        return usage(argv[0]);
156    } 
[1]157
[55]158    int i = 0;
159    save();
160    while (i++ < nb) {
161        func();
162        sc_start(sc_time(1, sc_core::SC_NS));
163        save();
164    }
[1]165#else
[55]166    debug(&func);
[1]167#endif
168
[55]169    return EXIT_SUCCESS;
[1]170}
171
172#undef sc_inout
[55]173
174/*
175# Local Variables:
176# tab-width: 4;
177# c-basic-offset: 4;
178# c-file-offsets:((innamespace . 0)(inline-open . 0));
179# indent-tabs-mode: nil;
180# End:
181#
182# vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
183*/
184
Note: See TracBrowser for help on using the repository browser.