In this example a C++ class is defined using the the SC_MODULE macro.
SC_MODULE(mycounter)
{
sc_in < bool > clk, enable, reset;
sc_out < sc_int<10> > sum;
void m() // Behaviour
{
if (reset) sum = 0;
else if (enable) sum = sum.read()+1; // Use .read() since sc_out makes a signal.
}
SC_CTOR(mycounter) // constructor
{ SC_METHOD(m);
sensitive << clk.pos();
}
}
Modules inherit various attributes appropriate for an hierarchic hardware design including an instance name field and a channel binding capability.