The naive way to add approximate timing annotations is to block the SystemC kernel until the required time has elapsed.
sc_time clock_period = sc_time(5, SC_NS); // 200 MHz clock
int read(A)
{
int r = 0;
if (A < 0 or A >= SIZE) error(....);
else r = MEM[A];
wait(clock_period * 3); // <-- Directly model memory access time: three cycles say.
return r;
}
We can also measure resource utilisation in this way:
write(A, D)
{
if (A > LIM) port1.write(A-LIM, D) else port0.write(A, D)
opcount += 1;
if (opcount == 100)
{
sc_time delta = sc_time_stamp() - last_measure_time;
logging.log(100, delta);
last_measure_time = sc_time_stamp();
opcount = 0;
}
}
In the above, we assume logging.log knows how many bus cycles per unit time can be handled and hence can compute and record the utlisation.