2011年7月1日 星期五

另一個用SystemC寫的Counter

與前一個相同,指是改用class方式來寫

#include

//SC_MODULE (counter) {
class counter : public sc_module {

public:
sc_in reset;
sc_in clock;
sc_out out_value;
sc_unit<4> cout;

void counter_in(){
if (reset)
cout = 0;
else
cout ++;

out_value.write(cout);
}

SC_CTOR(counter) {
SC_MODULE(counter_in);
sensitive << clock.pos();
sensitive << reset;
}
};

//SC_MODULE (power_on) {
class power_on : public sc_module {

public:

sc_signal reset;

void por() {
wait (3, SC_NS);
reset = sc_bit('1');
wait (5, SC_NS);
reset = sc_bit('0');
}

SC_CTOR(power_on) {
SC_THREAD(por);
}
};

int sc_main (int argc, char* argv[]) {

sc_signal cout_value;
sc_signal reset;

sc_clock clock ("my_clock", 3, 0.5, SC_NS);

counter my_cnt("My_COUNTER");

power_on my_power_on("My_POWER_ON");

my_power_on.reset(reset);

my_cnt.clock (clock);
my_cnt.reset (reset);
my_cnt.out_value(cout_value);


sc_trace_file *wf = sc_create_vcd_trace_file ("sc_test");
sc_trace(wf, clock, "clock");
sc_trace(wf, reset, "reset");

sc_trace(wf, my_cnt.cout, "my_cnt_value");
sc_trace(wf, cout_value, "count_value");

sc_start(150, SC_NS);

sc_close_vcd_trace_file(wf);

return 0;

}

沒有留言: