SC_MODULE(mycounter) { sc_in < bool > clk, reset; sc_out < sc_int<10> > myout; void m() { myout = (reset) ? 0: (myout.read()+1); // Use .read() since channel contains a signal. } SC_CTOR(mycounter) { SC_METHOD(m); sensitive << clk.pos(); } }
SystemC enables a user class to be defined using the the SC_MODULE macro.
Modules inherit various attributes appropriate for an hierarchic hardware design including an instance name, a type name and channel binding capability..
The sensitive construct registers a callback with the EDS kernel that says when the code inside the module should be run.
A nasty feature of SystemC is the need to use the .read() method when reading a signal.