2011年5月21日 星期六

一個用SystemC寫的Counter

包含了Waveform Dump, Reset的機制

#include

SC_MODULE (counter) {
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) {
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;

}

沒有留言: